你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

PID参数的调节方法和图示 精华  

[复制链接]
mtg 发布时间:2015-4-27 15:50
* k# ^# i9 H7 g' V$ n4 o+ f
基于STM32和PID算法的小车车速控制# l$ j( R5 u' g/ n- ?
! U5 j+ d* |+ O- }$ n# j
四轴飞行器飞行原理与双闭环PID控制
- X, E% [7 p" o- w8 X0 n; I9 |0 F, Z# w- [5 i0 @
PID程序实例9 v& Z; ?2 k% ~) v: b

5 F" S! Q, F  j; S
' @, k- t! n) \! o3 F% G# _. X该文档总结于以下两个博文:2 k8 V$ s9 V8 {$ z& G' D6 b
http://www.moz8.com/thread-36004-1-1.htmlhttp://www.eeboard.com/bbs/thread-32321-1-3.html2 E. Y. N& Z3 U8 L' Q  Z5 |" Y1 ]
/ g: N7 G8 L! w1 i% O; X! ~
为了更好的理解这个视频和PID参数的作用,特意根据多轴飞行器的原理和PID理论,编写了一个EXCEL图表,直观的来理解PID参数的作用。0 w2 `( y, s4 k; p: l
在这个模型中:
  u: S  u# g" i' j2 Q$ U! c, ~" A1、假设输出是力,作用在一个质块上,使用加速度、速度、位移积分计算,评估输出对测量值产生的影响,跟多轴飞行器的运动模式比较接近。! D6 A7 Z0 W3 ~  V
2、让速度响应慢一个拍子,模拟电调和电机的响应滞后。
! v; F" g) t% u* h' x+ \9 U  p! R3、加入阻尼,模拟空气的衰减作用) ?9 h, R$ K# ?* w6 h' z. y6 l5 ?
4、引入偏差,用于体现I的作用,从中间加入,代表一个系统误差或外作用力4 J& U3 D7 b4 `8 J
8 C4 _' ]- m$ P9 R& x
PID的作用概述:
" e9 ~* M' t! G' W) Z$ m1、P产生响应速度和力度,过小响应慢,过大会产生振荡,是I和D的基础。
5 u  R$ v0 z1 J2、I在有系统误差和外力作用时消除偏差、提高精度,同时也会增加响应速度,产生过冲,过大会产生振荡。" }9 d0 ]% z1 t5 v, s
3、D抑制过冲和振荡,过小系统会过冲,过大会减慢响应速度。D的另外一个作用是抵抗外界的突发干扰,阻止系统的突变。* z: k: t, u& a- K. J- Q
8 [/ C% M: e+ a; N) p& n2 j$ R! r
通过这个模型和图表,一步步演示PID参数的作用和调试方法:
8 s+ |/ @0 n3 [6 H4 S* E' K% B2 Y1 E+ T$ ?6 E! {/ b
1、逐步增大P,看P对响应速度和力度的影响,调到系统发生振荡,再减少一点P: j+ z' V+ K0 j: [
: l! [3 G2 \  q/ C; [/ v" `3 b3 t
当P=0.1时,响应很慢,但不会振荡
! e5 {1 z8 E- ^0 Y' p
9 p) G7 r: j# P5 g粗黑线是系统响应,洋红线是目标值。8 A5 t$ }1 Q5 N; d3 Z' R
( `5 }3 [5 }5 R9 U& d5 c: R
逐步增大P,P=1,有振荡,但慢慢在衰减, Z, X  ^9 _$ Z5 L- c2 j. p) l
+ R$ C; i  J' ?) K# \. C- D3 |
5 p$ M' b7 X- R4 ~0 [8 v; J2 z' z5 w
继续增大P,P=3,振荡会逐步加大
' ]" N* s2 z: n( K
" g+ n5 y  O6 F. C. p
; N* S$ q% b; h; x& M" R0 ^1 v: O取振荡但会衰减的P=1继续调整
+ X! [! v4 N  C3 m在多轴调试时,当振荡发生时,再稍微减小一点P。, A# a4 U" W: L% I7 x6 j6 u

! C" o! E7 w, K2、加入D,看D对振荡的控制能力,D过小会发生过冲,D过大会迟滞,以稍微有点过冲为最佳- l: v9 X( w) n; \; O4 O* N4 N

8 Q9 t5 y( f7 `5 z8 M3 h' fD=0.5,有较大的过冲和少量振荡,衰减很快
) S- y* g$ a: W4 X" ]4 J/ \# E - N" ?  {" l5 O; W. y9 v2 A4 b
5 p1 t/ k& e  O& `
D=1.3,基本没过冲
8 ^  M9 g2 }' J! ]4 j 8 B: T6 k9 W% k: `; B- {1 F

8 z0 H8 g3 B& ~D=2,响应迟滞,减慢了响应速度
  r) [: A( |1 x% c& Y
# G4 o) M2 E' @- }% I; D- L0 L* J7 b% U- y
取以稍微有点过冲的D=1.3为最佳
) ~/ \  g/ J3 `在多轴调试时,用手拍一下机臂或倾斜启动,机臂在复位时有少量过冲为宜。(不过我喜欢基本没过冲时的参数,这样在悬停时更稳)3 X# T' P9 k6 R, {' e8 E0 S* ^$ H  |3 m

+ _" T' `; d" ~& t3 P3、可以继续增大P和D,让响应更快但过冲也不大。
( I% x) t9 F0 J4 |1 P; |P=2 D=1.89 ^+ x$ b/ l2 Q8 I" v

0 m7 Y2 V& ]: R/ D& a9 U$ A6 u& N; a' B! u2 H5 U
在理论上可以这样演示,但在实际多轴的调试时,这一步一般不做,这是为了更安全和稳定。1 Y- P8 n/ U: d2 C+ p; N

* y8 D; e* r% |7 D3 F- Q" _8 t4、加入0.2的偏差,看偏差对位移的影响! g. V6 e) E; G, O* h' k5 e! Z; k: X
从中间加入,代表一个外作用力。
6 j  R, i1 F7 O& o9 W2 @$ B/ D
# y$ d: ?6 C3 f# n5 E4 g/ M可以看到,如果没有I的作用,偏差将一直存在,尽管P产生了一个抵抗力,但只是阻止了系统继续运动,但偏差一直在。+ I6 z; G6 w! v
在多轴调试时,如果持续的抬起一个机臂,机臂会持续的转动,抵抗力很小,放手后也不会回复。
* d2 _% Y  S% W3 Y4 F3 [8 E/ `- z7 L# W
5、加I,看I对偏差的修正能力,I加快了响应速度,但也会导致过冲或振荡4 O; g! ?8 v# ~( n7 T' U5 e
I=0.3 基本可以消除偏差产生的影响,产生了少量过冲,但提高了在有偏差时系统的精度% c2 G5 |$ o8 h2 w

$ z) R. H+ m: i& Q# u
/ F9 O: A/ g3 w4 ]/ oI=3 进一步加快响应速度,但产生了振荡: ?- h; r% M% f, |$ p  d

5 K. v7 y5 l$ G2 @& k, k. p% `- h7 ]: p) L
取基本能纠正偏差的I=0.3& u# w+ H$ ^, \/ g% i+ v: Z
在多轴调试时,油门开至悬停油门,用手持续的抬起一个机臂,可以感到随着I的增加,抵抗力会逐步增大,持续时间加长。+ P/ ^9 F: H8 [' w1 w" m, `
因为多轴的长期稳定由姿态模式的LEVEL参数来解决,所以I不用太大,取缺省参数就可以了,大概可以抵抗1-2秒左右。
. }' O& O5 F0 e7 Z0 Y  y; O! X# |, z- w
6、增大一点D,减小一点I产生的过冲
# l1 O& `8 s; }取消偏差,因为I的加入,有一点过冲  X; o2 {- o+ T3 Q

( |+ O% q4 ^2 g# E; p. d" f% R4 T# Y9 N) y+ U! z
增大D,D=2.2,减小过冲4 @9 c1 r$ s% o. C% ~. m

2 G+ @0 L; R4 C
6 y" D6 q; L% g& H. q7 |% E/ b在实际多轴调试时,这一步一般不用,但是如果有必要,可以试一下。7 o4 _5 l' r; }

' W; g. K( w; R) K7 x好了,曲线演示完了,这同时也是多轴PID参数的调试过程,结合视频一起看,能更好的理解这一过程,希望对大家理解PID有所帮助。
- ?* T# m/ l( I; H) F$ n
! F& s# j: e8 l: T$ T附:多轴飞行器PID调试演示器.xls
) o4 w' D' V1 J" T6 a  {: S. K2 k) ^1 h! s
另外,试了一下,下载的文件名可能有问题,自己把文件名改为"多轴飞行器PID调试演示器.xls"就可以用了
+ L4 @; G4 a* A
+ N6 _; o6 t/ c# l  n: W+ o# I; a: l8 w, k$ R
PID的代码其实也很简单,主要是要了解其中的原理,才能更好地调整参数。为了方便新手们理解,楼主建立了一个数学模型来让大家了解。(只针对新手,老手就算了)
& a6 S0 @$ t1 R6 d- L
" P; I" _; n; l7 b9 R$ P  G( ~. R; f========圆点博士小四轴之PID控制模式分析=======6 p0 w- q* W. Z) b
PID控制的P是Proportional的缩写, 是比例的意思,I是Integral的缩写,是积分的意思,D是Derivative的缩写,是微分的意思。所以,PID就是我们常说的比例,积分,微分控制。
5 n' x3 T: J5 ~我们首先来看一个PID控制模型曲线图:
# ^: s+ @9 m" s' w3 N该图包含了比例控制,比例+积分控制,比较+积分+微分控制的电机响应图的对比。$ @2 [9 c; S8 @$ d

, Z1 n$ z! u8 [; U) n 2014-5-29 13:22 上传
/ z) c) _" k' R. ^/ B# z, T下载附件 (37.76 KB)   ~& ?0 W# q- O" s
PID模型
: D- f, E$ v' U  @% E" D( w* E5 i4 o' w6 B- M0 j

5 F/ Z( `1 P. z* c- D& j" `+ i" C$ p! B, m3 E8 d& f- C
下面我们对曲线进行具体分析:
* P9 X. s/ S5 i( ZPID中的比例控制是最容易理解的,比例控制就是把角度的误差乘以一个常数作为输出驱动。假定我们有一个理想模型的电机,1V电压的变化会带来小四轴1度的角度改变。假定现在电机控制电压是5V,小四轴在某一轴上的偏角是5度,目标角度是100度。我们把当前的电压量定义为Vin,把输出控制量定义为Vout。假定P等于0.2,那么比例控制的结果就是:
; h0 N. @" N1 c. M6 N. G第一次:Vout=Vin+(100-5)*P=5V+19V=24V,得到电机电压是24V,对应的小四轴角度是24度,距离目标角度的误差是100-24=76度。! F: ^. n* B5 ]) N
第二次:Vout=Vin+(100-24)*P=24V+15V=39V, 从而引起的角度是39度。& v6 _8 m. I7 c) E5 u
我们看到,在这么的一个比例控制系统下,小四轴角度在慢慢地向目标角度靠近。# V! x5 ]! P+ y( j% e) K# R; L8 I
4 ^# P8 x# J5 R# P
PID中的积分控制就是把把所有角度误差相加起来,然后乘上一个常数作为输出驱动。在上述例子中,假定I=0.2, 我们来看看比例和积分控制同时起作用下的系统反应。
/ O  N6 S& e, U: _第一次:Vout=Vin+(100-5)*P+(100-5)*I=5V+19V+19V=43V,这时候小四轴角度为43度。/ ~" o! N  s, [" S, Y7 J  N
由于第一次控制前的误差是100-5=95,第二次控制前的误差是100-43=57,所以积分结果是152。
; S. w5 e' k! n6 N( u# {第二次:Vout=Vin+(100-43)*P+((100-5)+(100-43))*I=43V+11V+30V=84V, 这时候小四轴角度变为84度。* Y: J6 z' m- H' r) V$ b+ c4 Y
第三次:Vout=Vin+(100-84)*P+((100-5)+(100-43)+(100-84))*I=84+3V+33V=120V。这时小四轴角度变为120度。% e1 ^  W: n% b. p( X, W: ^
我们看到,在增加了积分控制后,小四轴角度在快速向目标角度靠近。
# ?* `  v9 O$ B0 T1 a* A3 a/ O" q5 e
PID中的微分控制就是把角度的变化乘上一个常数来作为电机驱动输出。在上述例子中,假定D=0.2, 我们来看看比例,积分和微分共同控制下的系统反应。假定第一次前,电机转速保持5转,那么第一次前的角度变化为0。
  J+ o" V. z' Z. k0 z# f第一次:Vout=Vin+(100-5)*P+(100-5)*I-(5-5)*D=5V+19V+19V-0V=43V,这时候小四轴角度为43度。+ ], ]/ G. U+ w: x2 A
和上一次相比,角度从5度变化到了43度,所以小四周角度变化是43-5=38度。
1 G5 Q' ^6 H; j; e7 b第二次:Vout=Vin+(100-43)*P+((100-5)+(100-43))*I-(43-5)*D=43V+11V+30V-7V=77V, 这时候小四周角度77度。: q5 L; [9 ~8 o
# M  `; H( n" M5 r" g
把上述的计算结果列出来,我们看到:
1 v3 T* |2 ?6 u9 { 2014-5-29 13:23 上传
  j5 v7 o$ w, U9 E下载附件 (39.13 KB) + d$ G9 p; u! _% g% Z$ X3 B
PID计算 + w* O9 ]8 I; F9 c
# S/ ^$ Z' E: T8 D, W' {

+ g9 v& S2 U$ N6 `) H  B5 S" q

" u) M/ p3 t) J7 Z3 J% H; L5 @从上面的数据,我们可以看到:9 @% k, _! o7 t6 P: q' `5 x
1,单独比例控制的时候,数据慢慢接近目标 (图表中的红色线)
1 d4 J& P2 ]% ]1 y8 b$ U! r+ z2,加入积分控制之后,数据快速接近目标 (图表中的蓝色线)& i  i' \! V$ f3 x9 C8 F" S3 ]' w
3,微分控制起到抑制变化的作用。(图表中的绿色线)$ N. T" j6 F: e4 E, I% O
# i' m6 n4 p3 \% P
有了这些理论基础,就可以写PID控制代码拉。4 H; T* J4 {- u) `

4 U, C% ?7 q9 O8 a

PID.zip

下载

23.06 KB, 下载次数: 1561

评分

参与人数 1 ST金币 +2 收起 理由
电子星辰 + 2 直观详细

查看全部评分

3 收藏 64 评论162 发布时间:2015-4-27 15:50

举报

162个回答
magickk5520 回答时间:2015-9-5 20:52:26
初级的都是理解物理含义去调参数。
' l; x$ S; s' M: f% L+ |中级的pid调节,需要根据控制模型建模,然后零极点对消,等效1型或2型系统,根据最佳整定法计算pi参数,这是掌握一些自控原理的基础了。
$ J2 s& ]' M# l; u/ A' n$ r高级一些的应该都是用自抗扰控制器,抗饱和积分(anti-windup)等,尤其是飞行器。
阿本 回答时间:2015-5-12 08:08:07
mark                                         
海阔天空-399263 回答时间:2015-5-13 08:56:08
很实用                        
perpetuiy 回答时间:2015-4-27 16:25:47
点个赞!
拼命三郎 回答时间:2015-4-27 17:12:02
xxxx.png
拼命三郎 回答时间:2015-4-27 17:12:15
ddddd.png
stary666 回答时间:2015-4-27 17:47:41
学习一下。。。。。
wyxy163@126.com 回答时间:2015-4-27 19:49:59
提示: 作者被禁止或删除 内容自动屏蔽
wyxy163@126.com 回答时间:2015-4-27 19:50:32
提示: 作者被禁止或删除 内容自动屏蔽
wamcncn 回答时间:2015-4-27 21:51:46
学习下,小车必备
回答时间:2015-4-27 21:57:48
多谢,学习了~~~~~~~~
wwwhlw 回答时间:2015-4-27 22:13:31
非常给力,顶一顶。。。
eurphan 回答时间:2015-4-27 22:30:39
楼主太吊了   
intech2008 回答时间:2015-4-27 22:31:41
楼主不容易啊。
nocoyou 回答时间:2015-4-28 00:37:30
好文,给力
lzp20 回答时间:2015-4-28 10:03:39
很好的文档,说得很详细,谢谢!
那就地方 回答时间:2015-4-28 11:10:00
谢谢,楼主分享,学习!

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版