最近在做毕业论文,课题是关于“高性能永磁同步电机(PMSM)的非线性控制”。为了提高系统的抗扰能力,我弃用了传统的 PID,改用自抗扰控制(ADRC)。但在控制器部署到 DSP(TI F28335)的过程中遇到了两个非常头疼的问题:一个是线性扩张状态观测器(LESO)的抖振:为了实时观测负载扰动,我调大了观测器增益 β01 和 β02,但在电机空载运行时,电流环出现了非常明显的高频抖振噪声,甚至能听到电机的滋滋声。还有计算延迟导致的不稳定:ADRC 的算法复杂度比 PI 高不少,在 10kHz 的控制频率下,算力占用接近 85%。我怀疑是控制延迟导致了相位滞后,系统在动态响应时超调量反而比 PID 还大。
目前的参数:采样频率 fs=10kHz,观测器带宽 ωo=600。
求教各位,在工业级 DSP 上部署 ADRC 时,大家是如何平衡“观测精度”和“噪声抑制”的?有没有针对 F28335 的算法代码优化建议?
抖振问题大概率是离散化导致的。 你用的是 Eular 离散还是 Tustin 离散?ADRC 这种对导数敏感的算法,如果离散化处理不好,高频增益会爆表。 至于计算延迟,你可以尝试控制律(Control Law)前置计算的方法,或者在下一次中断开始时直接更新占空比,减少处理延迟。
ADRC 对噪声非常敏感。你的 ωo 给到 600 有点太激进了。 建议:
-
在 LESO 的输入端加一个简单的一阶低通滤波器,或者把传统的线性观测器换成改进型的非线性扩张状态观测器(NESO),利用
fal函数的“大误差小增益、小误差大增益”特性来抑制抖振。 -
另外,F28335 有浮点运算单元,但你一定要检查是否开启了硬件加速,不然算力确实吃紧。