初级会员
- 积分
- 81
- 金钱
- 81
- 注册时间
- 2015-2-28
- 在线时间
- 8 小时
|
发表于 2014-6-27 23:31:41
|
显示全部楼层
一言难尽, 简而言之, 控制转向一般用位置式PD(也有用PID的), 控制速度一般用增量式PI(也可以加D). 注意别忘了限制最大最小输出!!!
参数设置要根据具体对象而定. 一般原则如下:
这里先假设系统参数如下:
输入数据(如温度值,代表被控对象的指标)范围[InMin,InMax] = [0,1]
输出数据范围[OutMin,OutMin] = [-1,1]
控制周期dt=1ms
系统时间常数为T=3s
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
对于位置式PD, OutVal = P*(InNew-InSet) + D*(InNew-InOld);
参数调节:
1. 一般先调P, 初次设参数时, 估计单独的"P*(InNew-InSet)"能使输出达到最大. 此处建议初始值P = (OutMax-OutMin)/(InMax-InMin). 然后修改参数P已达到一个较好效果, 很可能达不到要求, 调到效果无法明显改善为止.
2. 接着调D, 先注意InOld很可能不是上一次采集的值, 可能是10次甚至20次前的值(视情况而定), 以削弱随机误差的影响. 若采用上面的计算式, D一般设置成P的好几倍, 初始设定, 可设置成3P.
最后, 修改轮流修改PD参数,已达到最优.
 S:一般经过几次修改后, 再改参数效果就不明显, 这种情况,可能的原因有两种: 1. 参数改的幅度太小. 2. 确实到极限了.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
对于增量式PI, 这种方式一般用于控制大滞后的系统, OutVal += P*(InNew-InOld) + I*(InNew-InSet) ;
注意:
1. 后面乘的是偏差的微分(差分), I后面乘的使偏差, 这是因为这个方程本质上是实现的积分(累加), 偏差的微分(差分)经过积分(累加)后就是偏差对应P, 而偏差经过积分(累加)后就对应I.
2. 后续代码记得限制OutVal∈[OutMin,OutMax]
3. 此处的InOld一般是上一次采集的数据,不必是多次前的, 用多次之前的数据反而会降低系统的实时性, 因为理论上积分可以削弱随机误差的影响. 然而控制系统实际情况难以完全用理论概括, 具体实现视情况而定!!!
参数调节:
1. 先调I参数, 关于初始值的设置, 一般I*(InNew-InSet)能使OutVal在T内达到最大值(T为被控对象的时间常数). , 则初始值可设置为I=(OutMax-OutMin)/(InMax-InMin)*dt/T=[1-(-1)]/(1-0) * 0.001/3=0.00066666666666667!
2. 接着P参数, 类似位置式P, 初始值P=(OutMax-OutMin)/(InMax-InMin).
最后就是以PI参数为基础, 进行调节, 而调节的各种技巧, 实在是太多, 总之一句话 "好看的就是好的". 另外调参数还得看具体指标.
X, 不小心写了这么多, 以上仅为个人经验&观点, 如有雷同纯属巧合!!!
|
|