感想
经过前两遍的学习,大概知道了ADRC的原理和基本形式,但是最重要的一步还是“根据具体问题,调节控制参数”,进行这一步的工作时,心情就像下面这张图一样【2】。
需要解决的问题
1:实现控制功能
①fal函数:
整个算法的框架中,唯一复杂一点的操作就是要进行根号运算。网上搜到了大神分享的成果【3】,完全看不懂,无法理解其中的思想和逻辑,只能直接拿来用…其它算法部分,参考书上P264的内容,就很好实现了.。
②运行时间:
在总线为80MHz的情况下,通过IO翻转,测试整个ADRC算法需要的运行时间,大概为250uS左右,还是可接受的。
③确定“过渡过程”的参数:
v0是控制目标,确定了就不用调整了;
h是采样时间,越小越精确,那当然取最小;
剩下的就是r0了,因为过渡过程与控制是无关的,只是“理想的被控对象的变化轨迹”。通过增大r0,可以减小过渡时间,具体增大到多少,如果没有硬性指标,就看自己的感觉了
④确定“估计状态和扰动”的参数
β01,β02,β03的取值就不是很明白了。目前只知道β01不能太大,不然会溢出;β02,β03的取值范围似乎很广
当然,这两张图对应的其他控制参数也不一样,所以实际的控制效果也不一样,但不管控制效果如何,z1都能比较准确地跟踪被控目标的实际值。另外,也能发现这组参数并不是越大越好。
PS:书上有很多地方都给出了推荐的公式,有很多是针对线性扩展状态观测器的,如P209,但我的这个被控对象很明显是非线性的,因此就没有去尝试,下次有机会还是应该试试
针对标准扩展状态观测器的情况,P228给出了具体例子的推荐公式,但又说δ取大时,参数β02,β03应该增大很多,这就又让我不知道如何是好了,所以最后只能大概确定β01,β02,β03的量级,然后根据实际效果,凭感觉调了
⑤确定“误差反馈”的参数
参数r代表了反馈系统的最大加速度(P117),只要参数r足够大,都能彻底抑制扰动(P141),调试下来也是这样,就像④里的两张图,只有r足够大时,v1-实际,才能与v1(过渡过程)比较接近。
到这里可以算是“大概”实现了控制功能,毕竟v1-实际已经能被控制到目标值了,但并不能跟上一开始的过渡过程,而且这个时候施加扰动,v1-实际的波动会很大,所以还是得继续调整。
⑥缩小v1与z1的差距
由于输出量u=u0-z3,u0在稳态时应该为0,所以实际上都得靠z3,而z3=z3 +h(-β03.fe1),所以就想到应该增大β03看看,效果显著
但增大β03也会带来副作用,那就是输出量u的波动会变得很大,v1-实际的波动也就不会小了;用PID控制时,稳态情况下,v1-实际和u几乎都是一条直线(但是一开始存在很严重的超调)
上面的应该就是高频颠振了吧,为了避免这种情况的发生,才将非光滑反馈给为fal函数的,所以应该修改这里的参数了,书上标准形式下δ = h,但这里视乎需要增大几千倍
2:增强抗干扰的能力
上面都是静态情况下的表现,下面就要看看动态情况下的效果了,也就是看看抗干扰能力到底怎么样?
还得继续调啊…
经过几十次的调试后,摸索出了一些规律
增强抗干扰能力:
①增大β03,但没必要同时增大β02
②减小δ
③增大r
④减小滤波因子h1
减轻高频颠振:
①增大δ
②增大滤波因子h1
③增大阻尼因子c
这就是一个碰运气的环节了,多次尝试后,得到了较理想的控制效果(动态工况下,比原来的PID控制效果好)
3:提高软件的适用范围
把调好的程序,下载到随机挑选的5个产品中,结果心又凉了一大截,3/5的控制效果都不好…
没办法,只能换表现最差的那个,重新开始调参数…主要是减小β03和β02,增大c
终于这5个产品的控制效果基本一致了!
就在我满心欢喜以为搞定了的时候,又换了5个新的产品,结果只有1/5的产品能够达到上面的控制效果,其它的都一塌糊涂…
小结
总的来说,adrc算法实现了控制功能,控制效果可以比PID好,但控制精度没有预期的那么好,通用性也不算太好(可能是我的期望太高了,但更可能是因为参数还没有调到位!)
还有很多问题没有搞清楚,比如b0的取值;静态工况不同初始条件下的控制效果也不一样;哪些参数决定了被控对象的控制范围…
希望碰巧看到这篇博客的朋友们,能够给点灵感!调试过ADRC算法的大哥们,能给点指导!
参考资料
【1】韩京清 . 自抗扰控制技术 : 估计补偿不确定因素的控制技术 [M]. 国防工业出版社 , 2008.
【2】程序员真是太太太太太有趣了!!!
【3】快速开平方根算法:https://blog.csdn.net/xtlisk/article/details/51249371