基于STM32和PID算法的小车车速控制 / ?# Y, n& E# \2 ^% r; V% a 四轴飞行器飞行原理与双闭环PID控制9 |) A2 `/ a ^ PID程序实例4 A* I% ~( k+ d* `: a! S" H7 j% R 该文档总结于以下两个博文:# a! _' E; P- h+ N x# R http://www.moz8.com/thread-36004-1-1.html 和http://www.eeboard.com/bbs/thread-32321-1-3.html7 T9 V/ m8 P* Q, P- E! k( l6 S 为了更好的理解这个视频和PID参数的作用,特意根据多轴飞行器的原理和PID理论,编写了一个EXCEL图表,直观的来理解PID参数的作用。 在这个模型中:% }0 m2 }2 v: y3 M 1、假设输出是力,作用在一个质块上,使用加速度、速度、位移积分计算,评估输出对测量值产生的影响,跟多轴飞行器的运动模式比较接近。 2、让速度响应慢一个拍子,模拟电调和电机的响应滞后。 3、加入阻尼,模拟空气的衰减作用7 D4 _3 c' D' p0 {7 @; n 4、引入偏差,用于体现I的作用,从中间加入,代表一个系统误差或外作用力 ! X% A) U: [: G5 Y, H- A! _) n" D6 L PID的作用概述: 1、P产生响应速度和力度,过小响应慢,过大会产生振荡,是I和D的基础。' E' K$ I4 R1 P L9 w5 `0 I, z 2、I在有系统误差和外力作用时消除偏差、提高精度,同时也会增加响应速度,产生过冲,过大会产生振荡。 3、D抑制过冲和振荡,过小系统会过冲,过大会减慢响应速度。D的另外一个作用是抵抗外界的突发干扰,阻止系统的突变。8 i Y1 \" Y% t. U8 x 通过这个模型和图表,一步步演示PID参数的作用和调试方法: 1 r1 v# i: Q( ?: B& ~0 G( B/ w 1、逐步增大P,看P对响应速度和力度的影响,调到系统发生振荡,再减少一点P 0 ?5 o8 m( V. {/ K3 g/ S 当P=0.1时,响应很慢,但不会振荡- `+ l* \; E+ y0 ]6 I; i ! w$ c' L7 ?# P, V ~" c' Q) H9 v: d 粗黑线是系统响应,洋红线是目标值。5 x! i8 d/ W4 S# B% g1 x, R 逐步增大P,P=1,有振荡,但慢慢在衰减- _% _# k& Y( l1 ? & G3 X5 d! b' e, C7 e% q: U$ c 继续增大P,P=3,振荡会逐步加大 H# E3 x6 ?- D5 {% N {2 X- c5 A* \/ ~9 t0 [ 取振荡但会衰减的P=1继续调整1 G6 H& c6 P: j n 在多轴调试时,当振荡发生时,再稍微减小一点P。 2、加入D,看D对振荡的控制能力,D过小会发生过冲,D过大会迟滞,以稍微有点过冲为最佳 D=0.5,有较大的过冲和少量振荡,衰减很快2 B) [% k; x+ M , }, Z+ F) e3 p4 I: a4 _ D=1.3,基本没过冲 D=2,响应迟滞,减慢了响应速度 ) A! K/ u8 p/ B4 I4 j 取以稍微有点过冲的D=1.3为最佳' W" t m/ j& B( D 在多轴调试时,用手拍一下机臂或倾斜启动,机臂在复位时有少量过冲为宜。(不过我喜欢基本没过冲时的参数,这样在悬停时更稳) 9 g+ x3 U3 y7 f0 g- r 3、可以继续增大P和D,让响应更快但过冲也不大。 P=2 D=1.8 9 C/ Z7 s( q% W0 \. x) [$ a8 j9 @, U 4 S4 P8 L# O9 I6 Q' P/ m. ? 在理论上可以这样演示,但在实际多轴的调试时,这一步一般不做,这是为了更安全和稳定。 4、加入0.2的偏差,看偏差对位移的影响 从中间加入,代表一个外作用力。7 F" B( D* W O- L5 s$ p * n) O- a& ?2 z 可以看到,如果没有I的作用,偏差将一直存在,尽管P产生了一个抵抗力,但只是阻止了系统继续运动,但偏差一直在。$ ?* X/ t7 k$ H2 ^3 c% L; Q% N 在多轴调试时,如果持续的抬起一个机臂,机臂会持续的转动,抵抗力很小,放手后也不会回复。+ Z) y! W7 c5 r3 C ! J; M) h4 T* R% N 5、加I,看I对偏差的修正能力,I加快了响应速度,但也会导致过冲或振荡 I=0.3 基本可以消除偏差产生的影响,产生了少量过冲,但提高了在有偏差时系统的精度) f- Z# v" J9 Q3 A' y 9 q' \6 T: H4 q" i) T- s$ X W. v8 A. z& q" _0 K |3 J I=3 进一步加快响应速度,但产生了振荡; x! e+ S P3 B8 c# S8 }, z ~! x 7 [6 h; e! R! w" _$ O% S- v 取基本能纠正偏差的I=0.3! }/ g( R: K$ L! H7 q5 o& @1 B" w 在多轴调试时,油门开至悬停油门,用手持续的抬起一个机臂,可以感到随着I的增加,抵抗力会逐步增大,持续时间加长。" W0 H: j8 }, M( n 因为多轴的长期稳定由姿态模式的LEVEL参数来解决,所以I不用太大,取缺省参数就可以了,大概可以抵抗1-2秒左右。 ! i* n) ^( P3 \% d1 y. s7 S 6、增大一点D,减小一点I产生的过冲 取消偏差,因为I的加入,有一点过冲1 ^- ^9 I z8 _; C# T; z " D2 I# ]/ l! H! Z8 R6 N . R2 ?1 K- K3 d" } c( I 增大D,D=2.2,减小过冲 ' w! b6 B; \5 X$ r7 m, _ , g1 D! }4 _; L( p. ~ 在实际多轴调试时,这一步一般不用,但是如果有必要,可以试一下。 好了,曲线演示完了,这同时也是多轴PID参数的调试过程,结合视频一起看,能更好的理解这一过程,希望对大家理解PID有所帮助。' D5 R6 l. K8 b6 H: G, p: X- B u1 Q( ^. M* Z4 i' n$ R 附:多轴飞行器PID调试演示器.xls ! t) l9 g# z; q; J" ~ 另外,试了一下,下载的文件名可能有问题,自己把文件名改为"多轴飞行器PID调试演示器.xls"就可以用了 PID的代码其实也很简单,主要是要了解其中的原理,才能更好地调整参数。为了方便新手们理解,楼主建立了一个数学模型来让大家了解。(只针对新手,老手就算了)( z8 I: {( r3 h/ Y9 u) f ========圆点博士小四轴之PID控制模式分析======= PID控制的P是Proportional的缩写, 是比例的意思,I是Integral的缩写,是积分的意思,D是Derivative的缩写,是微分的意思。所以,PID就是我们常说的比例,积分,微分控制。$ I ?2 p$ U. t: c9 M 我们首先来看一个PID控制模型曲线图: 该图包含了比例控制,比例+积分控制,比较+积分+微分控制的电机响应图的对比。" t; i) h4 ^/ J/ D# s& W " Q( c5 s' i6 {5 b- ?& v/ Y 2014-5-29 13:22 上传+ \* k A4 i/ x+ G 下载附件 (37.76 KB) PID模型 7 @0 B* t! w3 U+ [ * V- d6 a9 u7 |! n$ g" ^: a . x3 F/ F" M( m, | " A3 g. }. j9 d2 U9 t/ x 下面我们对曲线进行具体分析:' G; ?( m; e" X9 [1 I. T$ V PID中的比例控制是最容易理解的,比例控制就是把角度的误差乘以一个常数作为输出驱动。假定我们有一个理想模型的电机,1V电压的变化会带来小四轴1度的角度改变。假定现在电机控制电压是5V,小四轴在某一轴上的偏角是5度,目标角度是100度。我们把当前的电压量定义为Vin,把输出控制量定义为Vout。假定P等于0.2,那么比例控制的结果就是: 第一次:Vout=Vin+(100-5)*P=5V+19V=24V,得到电机电压是24V,对应的小四轴角度是24度,距离目标角度的误差是100-24=76度。 第二次:Vout=Vin+(100-24)*P=24V+15V=39V, 从而引起的角度是39度。3 x( y3 Q" P# \ 我们看到,在这么的一个比例控制系统下,小四轴角度在慢慢地向目标角度靠近。 . G1 t4 G3 h8 J( P2 w7 ^- e PID中的积分控制就是把把所有角度误差相加起来,然后乘上一个常数作为输出驱动。在上述例子中,假定I=0.2, 我们来看看比例和积分控制同时起作用下的系统反应。 第一次:Vout=Vin+(100-5)*P+(100-5)*I=5V+19V+19V=43V,这时候小四轴角度为43度。$ Q8 Q1 k4 X. @& l: r5 H" ~ 由于第一次控制前的误差是100-5=95,第二次控制前的误差是100-43=57,所以积分结果是152。 z0 q) Q$ m/ B% o/ k1 S& G 第二次:Vout=Vin+(100-43)*P+((100-5)+(100-43))*I=43V+11V+30V=84V, 这时候小四轴角度变为84度。 第三次:Vout=Vin+(100-84)*P+((100-5)+(100-43)+(100-84))*I=84+3V+33V=120V。这时小四轴角度变为120度。0 f; C6 k6 `$ U% X5 |5 c 我们看到,在增加了积分控制后,小四轴角度在快速向目标角度靠近。2 [' [# S9 Z A, _" b: G6 Y PID中的微分控制就是把角度的变化乘上一个常数来作为电机驱动输出。在上述例子中,假定D=0.2, 我们来看看比例,积分和微分共同控制下的系统反应。假定第一次前,电机转速保持5转,那么第一次前的角度变化为0。 第一次:Vout=Vin+(100-5)*P+(100-5)*I-(5-5)*D=5V+19V+19V-0V=43V,这时候小四轴角度为43度。5 G$ L$ o8 r, r! M 和上一次相比,角度从5度变化到了43度,所以小四周角度变化是43-5=38度。5 \! ?/ f% s% _ 第二次:Vout=Vin+(100-43)*P+((100-5)+(100-43))*I-(43-5)*D=43V+11V+30V-7V=77V, 这时候小四周角度77度。$ j x/ C K% r3 B 9 [( K1 D9 c- g' y/ }+ \8 [& g6 e8 ] 把上述的计算结果列出来,我们看到: 2014-5-29 13:23 上传 下载附件 (39.13 KB) . E# I( N |% { O% M, F" C5 p6 s PID计算 z: K) x% ^) z O! D/ z) z8 n # `7 h. i+ }, I2 C 从上面的数据,我们可以看到:5 G, g- U- _ w1 e2 |& D6 H! T9 f8 K 1,单独比例控制的时候,数据慢慢接近目标 (图表中的红色线) 2,加入积分控制之后,数据快速接近目标 (图表中的蓝色线) 3,微分控制起到抑制变化的作用。(图表中的绿色线)( Q( N. j( k0 J, K+ Z6 g 1 i* O9 d( N j1 a8 ?5 K# O) I6 ? 有了这些理论基础,就可以写PID控制代码拉。 |
PID.zip
下载23.06 KB, 下载次数: 1560
中级的pid调节,需要根据控制模型建模,然后零极点对消,等效1型或2型系统,根据最佳整定法计算pi参数,这是掌握一些自控原理的基础了。5 y. K3 O8 b* F
高级一些的应该都是用自抗扰控制器,抗饱和积分(anti-windup)等,尤其是飞行器。