018、PID控制器的离散化实现
018 PID控制器的离散化实现
从一次电机抖动的深夜调试说起
凌晨两点,示波器上那根曲线像发疯的心电图。我盯着STM32输出的PWM波形,电机在低速运行时发出“嗡嗡”的异响,转速波动超过±15%。明明连续域仿真里PID参数调得漂漂亮亮,怎么一上嵌入式就翻车了?
问题出在离散化上。连续域的PID公式在数字控制器里直接套用,就像把F1赛车的引擎装进拖拉机——理论完美,现实打脸。那次调试让我花了整整三天才意识到:离散化不是简单的公式替换,而是对控制律的重新理解。
连续PID的“数字陷阱”
教科书上的标准PID公式长这样:
u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt嵌入式工程师的第一反应:把积分换成累加,微分换成差分。于是写出这样的代码:
// 别这样写!这是坑floatintegral+=error*dt;// 积