|
以茶水桶放水为例,水桶下方有孔可供人接水用;水桶上方有水龙头,可以注水补充水。
* z& ]. q2 s) O) _你:控制水龙头的放水量,目标是将水桶里的水位保持在某一位置上。下方放水你控制不了。
$ D' Y l/ M+ g3 h8 h5 e, x; m于是你在水桶上画一条线A!A就是在控制的目标。
7 j! p5 I1 P3 T' \+ _/ B e1、如果水太少了,你会将龙头开到最大。" j. d" b4 E' l. k5 B* K! d! ]9 H
2、如果水太多了,你会将龙头关闭。8 b& f: I& U1 J9 o ` a0 v7 Z
3、如果水位接近A:- \/ V4 b: O4 ^8 s4 {# q
3.1、稍低一点:你会将水龙头再拧大一点点;
: F0 Z$ s. b! w2 c: {* E3.2、稍过一点:你会将水龙头再拧小一点;
7 o9 K8 L& L5 E, `0 D3.3、刚好在A线:说明进水与出水一样,你会保持水龙不动;* W% F5 U2 p- b8 ~7 l+ B
这就是控制原理。如何用PID来做这件事呢?
, v, ]2 T" g' q6 ^. r( f% X* RPID的计算结果,就是你的手所拧的水龙开度。就叫它 U 吧。
W0 J* s! O* Q, H. G) k当前的水位,就你眼睛看到的水位,就叫 B 吧。% t( n/ ` d& R3 ~! Z0 ] A8 ]) F% z
你会时刻关注比较水位B,看它们差多少,当然就是:B-A。令Δ=B-A。
# f; B# E3 s! @8 J) L+ M5 ^5 a开度U有两个要点,其一是大小就是拧多少;其二是方向,就是拧紧还是拧松。
/ _9 n( h" t/ i; m6 S* b. j4 j( R# VU的大小当然是根据Δ来定才合理,方向当然是反向才对。 所以:让U=-Kp*Δ,-Kp就是比例(对应PID中的P),相当于把误差放大后,再决定U的开度。
- k$ X* {0 t. M$ \但是,这个算法有个缺点,就是当B接近目标A的时候。比如A=B了,这时Δ=0,U=-Kp*Δ=0,即水龙开度=0,关掉了。! e3 D L* t. O2 _
你想啊,下面在放水,水位现在正好B=A,但水龙头一关,下一刻,水一定就少了,明显是不合理的。9 }, k' |0 U) b7 U/ x
只有K的控制系统叫比例控制系统,比例控制系统是有差控制系统,当系统A=B时控制就失灵了。它的最佳控制效果只能达到目标值的1/Kp,永远做不到A=B。
. x1 B- [/ H4 S9 ^1 r$ V7 D3 O* @' E/ ?
于是做了一个改进:6 Y8 ~6 X! ]0 n" \
将每次水位差Δ,做一个积累,并将积累的值也用来控制水龙头,当然也是要反向的,于是:
8 d" L) @" p: i5 `) AU = -Kp*Δ -Ki*(Δ+Δ1+Δ2+Δ3+……Δn)这里Δ是本次差,Δ1是上次差,Δ2是上上次差,……,Δn是很久以前的差,Ki是将积累乘个比例。
* H2 m8 P4 S: D这样做有个好处,就是当A=B是,U不是0,而是以前的差值积累Ki*(Δ+Δ1+Δ2+Δ3+……Δn),而且本次Δ=0,说明,本次计算结果与上次一样,就是说当A=B时水龙头保持当前开度不变。9 @8 f4 T6 W: ]; }$ g
这个Δ的积累就是PID中的I。PD(比例+积分)的控制系统是可以做到B=的,即控制到无差输出。
! l4 L0 A/ ^. T
6 Y, Y! N! Z r; K* J* `到此:说了PID中的PI,D又是什么呢?还要从U = -kΔ -(Δ+Δ1+Δ2+Δ3+……Δn)的缺点说起。就是达成控制目标的速度。8 |" C9 t. ]/ O* K1 l: w6 O/ j
最佳最快的控制过程一定是:/ ?6 G3 Y; }- ~* w8 \$ m1 }
1、开始水龙头开到最大。( F; }1 X4 C# E3 D( L) ]& n
2、当B=A是立即拧到某一个开度,这个开度能保证注水和放水速度一样。
G7 {. @7 Q9 H3 M* x& f2 d不过,即使人来控制,第2、也做不到。
) P6 i9 P) u3 {5 Z( p首先:注水和放水速度一样时的开度是多少?你不知道,要试。
( P, o7 z8 ?& M其次:从开度最大,到正好,需要时间,不可能立即。也就是说要提前开始拧紧水龙头,当A=B时拧到正好的位置上。
- \. a; i6 z% V# j& b2 Z' s: j+ K其实最佳的控制不一定是PID,而是能做到第2、的方法。* K. e6 R3 Z# J1 o5 W7 h
但PID中的I,就是根据达成目标的变化趋势,将U作个调整,使达成目标的速度加快。% K" _% ]: b4 H3 Q/ g0 S' u
U = -kΔ -(Δ+Δ1+Δ2+Δ3+……Δn)- (Δ-Δ1)*Ki
0 X" e; s- P, Y8 B2 g. }$ z这里:(Δ-Δ1)是本次变化量 - 上次变化量,这就相当于“加速度”是个变化均势,以变化量的变化趋势为基础*Ki,再修正U。
$ \9 n- v/ [ s(Δ-Δ1)*Ki就是PID中的D,这个值可以这样理解,如果Δ越来越稳定时,修正量就越来越少。
8 ]. D3 i! @. t& V5 y, @9 F什么是稳定呢,比如放水量与注水量始终不变,其差不变,就是稳定了,可以不补了。
1 B) c( ^( a' I8 ^ j+ ]I是最不易理解的,知道它可以提升控制速度也就可以了。3 I7 A/ s/ b; |8 W2 j
5 S% y7 t X7 I' K+ U p* \
PID中的三个控制量,必须精细分配各个分量的大小。否则会控制失败。
& i1 d( _* a4 X/ I$ b例如:水位快到了,龙头开大了,过了!过了关小,关多了,水位又低了,低了又开大小,又过了,来回折腾,就是做不到A=B。
& Y1 s8 t* _1 J/ [* h# M3 D' j. R9 K( K# _
P大速度快,稳定性差,超调大(调过头了)。
" w1 K8 w; B" ? B9 zI大速度快,稳定性差。4 q6 l8 C$ U: o5 a- \
D大速度慢,稳定性好。
- M; o# ]* Q; ^. F$ U& G0 r1 DPID控制是一门不太好掌握技术。 |
|