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

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

  • 我想控制电子电路的电流,假设我总是希望它消耗 0.75A 的电流。
  • 当然,电流会随着时间的推移而变化,具体取决于电路的其他部分正在做什么。但我有一些硬件会根据传递到 DAC 的电压电平控制吸收更多或更少的电流。
  • 我还有一个 ADC,它提供的电压与系统消耗的电流成正比。

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

谢谢理查德

有帮助吗?

解决方案

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

因此,您的系统有一个命令输入,该命令输入是以安培为单位的电流水平(由软件中的双精度浮点数指定),控制器的输出是控制汲取电流的硬件的电压,您的设备是电路和反馈可能是一个 8、10 或 16 位数字 - 有符号或无符号取决于您的 A/D。

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

替代文本http://steves-wiki.wikispaces.com/file/view/control_diagram.jpg/64043668

您最快且最肮脏的方法可能是 PID 控制。您可以通过以下方式温习基础知识 这篇维基百科文章 并且有一些关于实施的提示 embedded.com 文章.

简而言之,您想要计算系统的误差,在您的示例中是当前命令 - 电流反馈。确保所有内容都使用相同的单位,最好是安培。然后,在计算出错误后,您必须使用命令来纠正它。在您的系统中,这是对压控电流源的电压命令。对于PID,命令是通过将误差、误差积分和误差导数乘以增益并对结果求和来计算的。收益是棘手的部分。其他棘手的部分是:确保您的单位一致,确保时间正确,以及正确的积分/导数计算。

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

控制算法是硬实时的,并且必须以专用速率运行。我建议至少 100Hz(每 10 毫秒计算一次)。电子电路的移动速度很快——与机电系统不同。您可能需要更高的利率才能掌控一切。但它必须是硬实时的——这意味着一致。您甚至可能无法摆脱软件定时器。

积分和导数计算很棘手,但实现它们的方法只有这么多。最基本的算法是矩形规则 - 它很愚蠢,但可能会起作用。如果需要更精确,请使用梯形规则。检查算法 这里. 。您很可能不会使用微分控制 - 它往往会使事情变得不稳定,并且在大多数系统中都不需要。积分+比例控制应该没问题。

虽然有很多陷阱,但这应该可以帮助您入门。如果您有控制理论的背景,那么您应该会明白的。一旦框架就位,您将花费大量时间调整比例和积分增益 - 这是工作的重点。如果这对您来说仍然显得太多数学,那么,抱歉 - 这对于控件来说是最简单的。

其他提示

用软件控制系统来获取恒定电流是很困难的。最好使用专用硬件来完成此操作,该硬件可以立即响应当前的变化并实际实现您无法理解的反馈循环。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top