自抗扰控制(ADRC)这玩意儿玩起来挺有意思的。今天咱们就拆开它的内核看看,特别是怎么从传递函数推导到PID等效。先来段MATLAB代码热热身
2026/6/3 12:10:06 网站建设 项目流程

自抗扰控制,幅频特性曲线,传函推导,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,结果传感器噪声被放大得连亲妈都不认识。记住,带宽和噪声永远是死对头,找到平衡点才是真功夫。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询