- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
问题很简单,我不知道在哪里以及如何实现传递函数。
假设我有一个经典系统
其中 P 具有二阶传递函数,zita=0.7,F=1,C 是过程调节器。
我想用 C 或 C++ 在 ATMega128P 这样的 Controller 上实现这个调节器。
过程的传递函数通过实验方法确定,调节器可能因过程传递函数而异。
我应该从哪里开始?
最佳答案
如果您在连续时间 (Laplace) 中有传递函数,则需要使用其中一种离散化方法(前向差分、后向差分、梯形)将其转换为离散时间(Z 变换)。
获得离散传递函数后,您将需要应用 Z 反变换以获得时域中的系统方程。接下来,您需要确定离散化步骤。
如果你有这些数据,你可以很容易地在微 Controller 上实现这个系统,因为实际上你只会实现一个简单的等式,它可能会通过 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
关于c - 如何在 C/C++ 中实现进程调节器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23849669/
我是一名优秀的程序员,十分优秀!