|
以茶水桶放水为例,水桶下方有孔可供人接水用;水桶上方有水龙头,可以注水补充水。
" D2 V6 Z2 r% F5 B- w+ {你:控制水龙头的放水量,目标是将水桶里的水位保持在某一位置上。下方放水你控制不了。' y0 e& E1 p% N% u6 i
于是你在水桶上画一条线A!A就是在控制的目标。" b1 Z1 E) t: B' k1 N
1、如果水太少了,你会将龙头开到最大。: B9 i. Y9 }4 S' M! y+ }( q
2、如果水太多了,你会将龙头关闭。
8 V0 Z3 Q; d7 [; s; i3、如果水位接近A:
# v% L: a3 o& C, r0 f' D: C% j3.1、稍低一点:你会将水龙头再拧大一点点;& F6 u7 Y/ Q Q0 E
3.2、稍过一点:你会将水龙头再拧小一点;7 q* \, L8 f; D
3.3、刚好在A线:说明进水与出水一样,你会保持水龙不动;
) k6 j* X+ @2 f' e这就是控制原理。如何用PID来做这件事呢?
0 [9 l: ~% Y6 `! V" a$ ^% MPID的计算结果,就是你的手所拧的水龙开度。就叫它 U 吧。 v; `3 u( W9 R/ @' }5 c
当前的水位,就你眼睛看到的水位,就叫 B 吧。
0 Z0 d7 {/ u/ w0 {你会时刻关注比较水位B,看它们差多少,当然就是:B-A。令Δ=B-A。
8 Q W# w( z4 I2 v- o5 ?开度U有两个要点,其一是大小就是拧多少;其二是方向,就是拧紧还是拧松。! O n# N: s T9 y8 H+ z3 U
U的大小当然是根据Δ来定才合理,方向当然是反向才对。 所以:让U=-Kp*Δ,-Kp就是比例(对应PID中的P),相当于把误差放大后,再决定U的开度。6 d" o: O* Y* [$ |) g3 o( F
但是,这个算法有个缺点,就是当B接近目标A的时候。比如A=B了,这时Δ=0,U=-Kp*Δ=0,即水龙开度=0,关掉了。7 f& B; }1 t8 y" l# K9 U s
你想啊,下面在放水,水位现在正好B=A,但水龙头一关,下一刻,水一定就少了,明显是不合理的。* v" Y S: W% S
只有K的控制系统叫比例控制系统,比例控制系统是有差控制系统,当系统A=B时控制就失灵了。它的最佳控制效果只能达到目标值的1/Kp,永远做不到A=B。
4 U2 Z8 \1 U/ A8 Z; y
, l* c! \* d8 ?9 W2 Y' N* d于是做了一个改进:
/ a* Y& i e. H' S$ i将每次水位差Δ,做一个积累,并将积累的值也用来控制水龙头,当然也是要反向的,于是:4 Y' s0 D) [9 ^0 H( `. R& `" W
U = -Kp*Δ -Ki*(Δ+Δ1+Δ2+Δ3+……Δn)这里Δ是本次差,Δ1是上次差,Δ2是上上次差,……,Δn是很久以前的差,Ki是将积累乘个比例。
& k$ l* v$ x9 k4 V/ T F) ~7 z: H这样做有个好处,就是当A=B是,U不是0,而是以前的差值积累Ki*(Δ+Δ1+Δ2+Δ3+……Δn),而且本次Δ=0,说明,本次计算结果与上次一样,就是说当A=B时水龙头保持当前开度不变。$ }. v! N) R# K0 Y6 }. e
这个Δ的积累就是PID中的I。PD(比例+积分)的控制系统是可以做到B=的,即控制到无差输出。; b1 t+ o; D2 S7 R" B
6 g0 A# B# ?/ H& [4 Y9 v到此:说了PID中的PI,D又是什么呢?还要从U = -kΔ -(Δ+Δ1+Δ2+Δ3+……Δn)的缺点说起。就是达成控制目标的速度。" t }% `; c$ X6 L# N
最佳最快的控制过程一定是:
% }$ l3 D* ?( a7 N7 K+ `! f1、开始水龙头开到最大。; @/ w V: p: C/ P& l
2、当B=A是立即拧到某一个开度,这个开度能保证注水和放水速度一样。 S+ v5 |; z: [1 G
不过,即使人来控制,第2、也做不到。
0 ^1 q7 p0 K1 U) e% v; O首先:注水和放水速度一样时的开度是多少?你不知道,要试。
9 K1 ~6 Y3 l+ x! w" H$ h其次:从开度最大,到正好,需要时间,不可能立即。也就是说要提前开始拧紧水龙头,当A=B时拧到正好的位置上。% Y# y/ ~2 c6 n9 b5 I! P4 E: L
其实最佳的控制不一定是PID,而是能做到第2、的方法。
; C$ x) \+ N0 D0 c但PID中的I,就是根据达成目标的变化趋势,将U作个调整,使达成目标的速度加快。, o8 A6 P& V( ~, w4 A
U = -kΔ -(Δ+Δ1+Δ2+Δ3+……Δn)- (Δ-Δ1)*Ki
6 n4 @; S* Y+ y' P& v% _9 S' n这里:(Δ-Δ1)是本次变化量 - 上次变化量,这就相当于“加速度”是个变化均势,以变化量的变化趋势为基础*Ki,再修正U。
' j, C. X" C( G: e9 q5 W8 j(Δ-Δ1)*Ki就是PID中的D,这个值可以这样理解,如果Δ越来越稳定时,修正量就越来越少。
. x5 F% q) L4 l' Z什么是稳定呢,比如放水量与注水量始终不变,其差不变,就是稳定了,可以不补了。
* s4 Z+ m0 J, i: c- C6 m- f4 _I是最不易理解的,知道它可以提升控制速度也就可以了。; j( ]( P# w! M( Z* B7 |) T I
$ f- k- r( _; b B: h$ j5 `
PID中的三个控制量,必须精细分配各个分量的大小。否则会控制失败。- s* a/ S4 w9 K+ c o6 T9 V& V
例如:水位快到了,龙头开大了,过了!过了关小,关多了,水位又低了,低了又开大小,又过了,来回折腾,就是做不到A=B。
) `1 c! N! H: [; Z7 j1 `1 P$ \ b5 w& G. W
P大速度快,稳定性差,超调大(调过头了)。
+ o M3 G# J0 P3 W0 Z. II大速度快,稳定性差。
8 q8 D0 a/ {' r! yD大速度慢,稳定性好。- D w8 X1 D. d7 v: a
PID控制是一门不太好掌握技术。 |
|