如何在 C/C++ 中实现过程调节器?

tzo*_*zik 1 c microcontroller transfer-function

问题很简单,我不知道在哪里以及如何实现传递函数。

假设我有一个经典系统

在此处输入图片说明

其中 P 具有二阶传递函数,zita=0.7,F=1,C 是过程调节器。

我想在 C 或 C++ 中的像 ATMega128P 这样的控制器上实现这个调节器。

过程的传递函数是通过实验方法确定的,调节器可能会根据过程传递函数而变化。

我应该从哪里开始?

IsK*_*nel 5

如果您有连续时间(拉普拉斯)的传递函数,则需要使用离散化方法之一(前向差分、后向差分、梯形)在离散时间(Z 变换)中对其进行变换。

一旦有了离散传递函数,就需要应用逆 Z 变换来获得时域中的系统方程。接下来,您需要确定离散化步骤。

如果你有这些数据,你可以很容易地在微控制器上实现这个系统,因为实际上你只会实现一个简单的方程,它可能会通过 ADC 输入定期读取传感器,并根据该输入和先前的输入 (y[k] , y[k-1], ...) 值将根据其参考值 (r[k]) 生成控制值 (u[k])。

ADC (y[k]) 可以在定时器中断中读取,根据您的离散化步骤设置为触发。读取值后,您可以计算 u[k] 并相应地设置执行元素。

对于实现,我会推荐 C,因为在这种情况下 C++ 可能有点矫枉过正(大多数实现此类系统的嵌入式系统都是使用 ANSI C 或 MISRA C 编程的——尤其是在汽车中)。

在跳到 C 之前,我会首先尝试查看计算是否正确,然后在 Simulink (MATLAB) 或 Scilab 中模拟系统。

为了调整真正的嵌入式系统,我建议阅读 Ziegler-Nichols 方法。

http://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method

离散化的相关资料:

http://www-verimag.imag.fr/~tdang/DocumentsCours/Discretization.pdf