这个问题很简单,我不知道在哪里以及如何实现传输功能。
假设我有一个经典系统
其中 P 具有二阶传递函数,zita=0.7,F=1,C 是过程调节器。
我想在 C 或 C++ 中的 ATMega128P 等控制器上实现这个调节器。
过程的传递函数通过实验方法确定,调节器可能因过程传递函数而异。
我应该从哪里开始?
这个问题很简单,我不知道在哪里以及如何实现传输功能。
假设我有一个经典系统
其中 P 具有二阶传递函数,zita=0.7,F=1,C 是过程调节器。
我想在 C 或 C++ 中的 ATMega128P 等控制器上实现这个调节器。
过程的传递函数通过实验方法确定,调节器可能因过程传递函数而异。
我应该从哪里开始?
如果您有连续时间的传递函数(拉普拉斯),则需要使用其中一种离散化方法(前向差分、后向差分、梯形)在离散时间(Z-Transform)中对其进行变换。
获得离散传递函数后,您将需要应用 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