自抗扰控制,幅频特性曲线,传函推导,pid等效,跟踪曲线,抗扰曲线。
s = tf('s'); G = 1/(s^2 + 2*0.6*5*s + 5^2); % 二阶振荡环节 bode(G), grid on这代码画出来的幅频特性曲线能直观展示系统谐振峰的位置。注意看相位曲线在谐振频率处的跳水,这个特性直接影响控制器的参数整定。
ADRC的核心在于扰动观测器,咱们来看个简化版的传递函数推导。设被控对象为G(s)=b/(s²+a1s+a0),扩张状态观测器(ESO)的传递函数可以写成:
LESO = (β1s + β0)/(s² + β1s + β0)
这结构是不是很眼熟?没错,就是个典型二阶滤波器。当β1=2ω0,β0=ω0²时,就构成了带宽ω0的观测器。实际操作时建议把观测器带宽设为控制器带宽的3-5倍。
接下来搞点刺激的——把ADRC等效成PID形式。拿二阶系统举例,经过等效变换后可以得到:
Kp = (ωc² + 2ξωcωo)/b
Ki = ωc³/b
Kd = (2ξωc + ωo)/b
这里ωc是控制器带宽,ωo是观测器带宽。实战中参数整定可以先用这个公式算个初值,再微调。注意b是被控对象增益,辨识不准的话后面会翻车。
看段跟踪效果验证的Python代码:
from scipy import signal import matplotlib.pyplot as plt sys = signal.TransferFunction([1], [1, 2, 3]) t = np.linspace(0, 5, 500) t_out, y = signal.step_response(sys, t) plt.plot(t, y, label='实际输出') plt.plot(t, t*0 + 1, '--', label='目标值') plt.legend()典型的跟踪曲线会出现超调和振荡,这时候就得调ESO的带宽。当观测器足够快时,你会发现曲线像被磁铁吸住目标值一样,这就是ADRC的跟踪微分器在发力。
抗扰性能是重头戏,看这个Simulink模型截图(假装有图):在3秒时突加阶跃扰动,传统PID的输出会像过山车一样波动,而ADRC的输出只是微微颤抖就恢复稳定。秘密在于ESO实时估计并补偿了扰动,相当于给系统装了减震器。
最后说个坑:调试时别盲目追求带宽,曾经有个项目把观测器带宽调到10kHz,结果传感器噪声被放大得连亲妈都不认识。记住,带宽和噪声永远是死对头,找到平衡点才是真功夫。