简单的反馈控制资源/示例

时间:2009-03-23 13:07:04

标签: embedded electronics

我想实现想要我认为这是一个相当标准的反馈循环,但是自从我查看控制理论并且我无法理解概念和查找实现示例以来已经很多年了。我希望有人可以用简单的术语解释发生了什么,并且可能指出我可以用来实现解决方案的一些资源。我在这个主题上看到的所有信息通常都淹没在数学中。

所以这就是我想要实现的目标:

  • 我想控制一个电子电路的电流,比如我总是希望它能画出0.75A。
  • 当然,电流会随着时间的推移而变化,这取决于电路的其他部分。但是我有一些硬件可以通过传递给DAC的电压电平来控制或多或少的电流。
  • 我还有一个ADC,它给出的电压与系统消耗的电流成正比。

我需要将斜坡和振荡处理到某个阈值内。我也在C工作。

感谢, 理查德

2 个答案:

答案 0 :(得分:6)

好的,如果我了解你,所有的硬件都已经完成了吗?

因此,您的系统的命令输入是以安培为单位的当前级别(由软件中的双精度浮点数指定),控制器的输出是控制抽取电流的硬件的电压,您的工厂是电路和反馈可能是8位,10位或16位数 - 根据您的A / D,有符号或无符号。

所以你的系统看起来像这样:

alt text http://steves-wiki.wikispaces.com/file/view/control_diagram.jpg/64043668

您最快最肮脏的方法可能是PID控制。您可以使用this Wikipedia article了解基础知识,并在此embedded.com article中提供有关实施的一些提示。

简而言之,您想要计算系统的错误,在您的示例中,该错误是当前命令 - 当前反馈。确保一切都在相同的单位,希望安培。然后,在计算出错误之后,您必须使用命令对其进行更正。在您的系统中,这是对压控电流源的电压指令。对于PID,通过将误差,误差的积分和误差的导数乘以增益并将结果相加来计算命令。收益是棘手的部分。其他棘手的部分是:确保您的单位一致,确保时机正确,并进行正确的积分/导数计算。

在你的系统中你有很多单位:错误是安培,命令是伏特,它变成安培,然后当前使用是安培,报告为伏特,它变成有符号或无符号整数,必须是缩小到安培,以使错误正确。您将拥有许多变量,请确保您可以跟踪每个变量适用的物理单位。

控制算法是硬实时的,必须以专用速率运行。我建议至少100Hz(每10ms计算一次)。电子电路快速移动 - 与机电系统不同。您可能需要更高的费率才能掌握最新信息。但它必须是实时的 - 这意味着一致。你可能甚至无法摆脱软件定时器。

集成和衍生计算很棘手,但只有很多方法可以做到。最基本的算法是矩形规则 - 它是愚蠢但它可能会工作。如果需要更精确地使用梯形法则。检查算法here。很可能你不会使用衍生控制 - 它往往会使事情变得不稳定,在大多数系统中都不需要。积分+比例控制你应该没问题。

有很多陷阱,但这应该让你开始。如果你有控制理论的背景,那么它应该都会回到你身边。一旦框架到位,你将花费大量时间来调整比例和积分收益 - 这是工作的重点。如果对你来说这仍然是一个太多的数学,那么,对不起 - 这就像控件一样简单。

答案 1 :(得分:0)

软件控制系统很难获得恒定电流。使用专用硬件可以做得更好,这些硬件可以立即响应当前的变化并实际实现您在理解时遇到问题的反馈循环。

如果你想用软件做,那么你可能必须实现某种形式的“fuzzy-logic”控制器。您的问题类似于用于控制温度的风扇。您有一个输入变量(与电流成比例的电压)和一个输出变量(传递给DAC的电压电平)。