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

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

[复制链接]
mtg 发布时间:2015-4-27 15:50
# {, P4 P% d8 w! b, \
基于STM32和PID算法的小车车速控制
( y# D9 I9 f/ d" w, ^
! X( P: N$ ^( Q- ?8 @四轴飞行器飞行原理与双闭环PID控制0 `5 f7 Y0 k7 _) k3 J# E/ k

, P  v9 P& V7 o; YPID程序实例+ P7 J/ a, N0 [# E. r9 t
% |% J" f- R6 p1 `

' K0 x  z( ^5 w* S1 b4 Z; t+ A该文档总结于以下两个博文:
( v" B/ O+ b4 [. d: qhttp://www.moz8.com/thread-36004-1-1.htmlhttp://www.eeboard.com/bbs/thread-32321-1-3.html0 k. I* [0 E  E: T

  h. H8 X( D* `6 I, ~. R% d/ d为了更好的理解这个视频和PID参数的作用,特意根据多轴飞行器的原理和PID理论,编写了一个EXCEL图表,直观的来理解PID参数的作用。3 l; p" W. s: S: Z% q3 W7 u% L
在这个模型中:0 ~* H/ v/ l  m9 P
1、假设输出是力,作用在一个质块上,使用加速度、速度、位移积分计算,评估输出对测量值产生的影响,跟多轴飞行器的运动模式比较接近。- O0 x1 u. `1 T
2、让速度响应慢一个拍子,模拟电调和电机的响应滞后。
. n) g# k1 }2 t, C3、加入阻尼,模拟空气的衰减作用& z# g. G1 H5 N/ f
4、引入偏差,用于体现I的作用,从中间加入,代表一个系统误差或外作用力/ K# b+ O8 A% l4 g6 }0 g
0 v9 v. Z* r$ Z; d8 u; o; Q
PID的作用概述:2 [$ |2 F- b5 Z
1、P产生响应速度和力度,过小响应慢,过大会产生振荡,是I和D的基础。# o% V! A' M  S% {4 E
2、I在有系统误差和外力作用时消除偏差、提高精度,同时也会增加响应速度,产生过冲,过大会产生振荡。6 X% ], U2 q/ C& N, B; N
3、D抑制过冲和振荡,过小系统会过冲,过大会减慢响应速度。D的另外一个作用是抵抗外界的突发干扰,阻止系统的突变。
7 Y& b+ R) d; H! l5 L+ B& ~" B# Z6 B% T1 L/ Q# @
通过这个模型和图表,一步步演示PID参数的作用和调试方法:
/ O1 w4 A: ?3 }: Q* r
  }9 o7 Y' r9 U% j7 h' ~1、逐步增大P,看P对响应速度和力度的影响,调到系统发生振荡,再减少一点P
3 a/ V& q# y% c4 k; J: ?& T4 R/ P, g; t8 ^7 e3 X
当P=0.1时,响应很慢,但不会振荡
5 l! G6 V9 Y' e1 m$ ], I & \( \0 E  {$ g$ v* c+ O5 v
粗黑线是系统响应,洋红线是目标值。$ B$ A  v2 D4 k- v; {. N) ~0 D' F
  r8 J  D' F+ W; u% C. [! F0 I7 T
逐步增大P,P=1,有振荡,但慢慢在衰减1 |# i% K3 b+ F% e+ i; g# r, F

5 L6 `+ p7 j; e, T6 ~! A1 g' _& T1 o+ P3 l2 |
继续增大P,P=3,振荡会逐步加大
. Y9 _+ G0 e6 f% H
. k6 W% Z9 o+ j7 r
* R# o4 O6 I" B+ G5 f& B+ q取振荡但会衰减的P=1继续调整$ a# E9 f; ~6 u2 @, U4 e
在多轴调试时,当振荡发生时,再稍微减小一点P。  c2 j* y; w5 ~( @6 {; N
. ]* d" f8 ]1 G, ^
2、加入D,看D对振荡的控制能力,D过小会发生过冲,D过大会迟滞,以稍微有点过冲为最佳
) K- U- g' y: o! s9 i  i
4 o6 c& G4 g. N1 L: E1 SD=0.5,有较大的过冲和少量振荡,衰减很快& g1 p7 ?+ A* W& P; c/ d

0 y* |* x( n+ r2 {5 H6 w  U2 c3 y8 J
D=1.3,基本没过冲. O  {; [( Z# F9 Z# q1 b) i

2 m9 z) p8 @9 B2 `
) W: @! a( N+ [5 }4 e: HD=2,响应迟滞,减慢了响应速度$ u6 r! l. Y& @+ e& c
  J5 N% Q0 h! n) p1 Z

1 k: _$ c$ }5 L% v% b取以稍微有点过冲的D=1.3为最佳
( W: B, p1 I* M$ d* @在多轴调试时,用手拍一下机臂或倾斜启动,机臂在复位时有少量过冲为宜。(不过我喜欢基本没过冲时的参数,这样在悬停时更稳)
' [% h: r3 `! D( p& N
6 D# W  b* l: p, h5 l% C3、可以继续增大P和D,让响应更快但过冲也不大。+ H3 v4 l, y1 B8 x+ l0 M' N
P=2 D=1.82 w- _/ a6 ]* U( e4 j5 t3 z

" R0 S4 D; |+ F7 i$ |# @- b. |( ~8 Q+ \1 ^# L4 W
在理论上可以这样演示,但在实际多轴的调试时,这一步一般不做,这是为了更安全和稳定。
5 h' W- S6 @1 b/ H; \5 j% ^: R) B8 c5 t, t2 L
4、加入0.2的偏差,看偏差对位移的影响1 f" W, t* n$ h
从中间加入,代表一个外作用力。) w2 U* \1 ^' l; L, t. w0 s3 |+ V
& }, x3 i; R7 N7 w* m6 x8 P* V( o
可以看到,如果没有I的作用,偏差将一直存在,尽管P产生了一个抵抗力,但只是阻止了系统继续运动,但偏差一直在。3 ~) ]$ x5 s; N& Y7 O  u; N
在多轴调试时,如果持续的抬起一个机臂,机臂会持续的转动,抵抗力很小,放手后也不会回复。
$ n# i# B6 w" X3 U$ _- }6 b7 {& g7 S' Z" x4 i3 f
5、加I,看I对偏差的修正能力,I加快了响应速度,但也会导致过冲或振荡& E8 }. i* D; b
I=0.3 基本可以消除偏差产生的影响,产生了少量过冲,但提高了在有偏差时系统的精度, v6 h9 |) [, b0 O
2 ?! m3 c1 j: t/ P' R! J/ a

) }3 ^7 Y1 r0 {. K" q8 U" iI=3 进一步加快响应速度,但产生了振荡
5 W+ x$ Z' x: g9 z, o* ]: n, t: b
# i/ u1 {* K% D8 n/ o% x
, q& `+ g& U: o9 F/ l, R取基本能纠正偏差的I=0.3' a$ O4 }5 a( n# l4 [$ F
在多轴调试时,油门开至悬停油门,用手持续的抬起一个机臂,可以感到随着I的增加,抵抗力会逐步增大,持续时间加长。
) G( y5 t9 N& {, N因为多轴的长期稳定由姿态模式的LEVEL参数来解决,所以I不用太大,取缺省参数就可以了,大概可以抵抗1-2秒左右。
. a( d9 r" ?4 v+ t& s" X% L" f2 P
6、增大一点D,减小一点I产生的过冲
& g7 A9 q$ K: d+ e8 Z取消偏差,因为I的加入,有一点过冲0 v" @8 @) f; _
; E8 O$ A$ I0 k( ^- P$ t  A
3 r6 `# k: d. V2 L1 l
增大D,D=2.2,减小过冲. o% H  O: _* }2 y+ g+ t- E& F

/ t* R$ A; A" k0 ~- h0 w. e/ W1 c* z9 \% L, S
在实际多轴调试时,这一步一般不用,但是如果有必要,可以试一下。
: ^6 ?8 n( N4 ^0 t9 |4 j9 @, M
. x- i# f% q6 ~& c1 C好了,曲线演示完了,这同时也是多轴PID参数的调试过程,结合视频一起看,能更好的理解这一过程,希望对大家理解PID有所帮助。
7 `( u3 {7 T: e4 `
2 ~3 B* R* O! ?- n! L( K9 L附:多轴飞行器PID调试演示器.xls
8 R, \( Y2 c$ C6 e- C1 n+ b4 W# n7 r& V* Q, E8 Z* ~" F0 P0 e3 F
另外,试了一下,下载的文件名可能有问题,自己把文件名改为"多轴飞行器PID调试演示器.xls"就可以用了
. b* b5 j5 \9 |# V% O& K( Y/ r
6 t% z  t0 y" l/ `  h2 i. f$ N# W, H, t
PID的代码其实也很简单,主要是要了解其中的原理,才能更好地调整参数。为了方便新手们理解,楼主建立了一个数学模型来让大家了解。(只针对新手,老手就算了)
, C. H( O# A- A; K: V
# r8 r$ ^; `0 p- q. v! D% \+ A1 r$ Y========圆点博士小四轴之PID控制模式分析=======
; W, C; e0 N* U: ~1 ?PID控制的P是Proportional的缩写, 是比例的意思,I是Integral的缩写,是积分的意思,D是Derivative的缩写,是微分的意思。所以,PID就是我们常说的比例,积分,微分控制。5 ?, ]/ U" }% S, K! D- ]
我们首先来看一个PID控制模型曲线图:1 R1 i1 [' Z8 Q! y* U4 Z) L
该图包含了比例控制,比例+积分控制,比较+积分+微分控制的电机响应图的对比。& e& x% `! G3 x! R$ m  w* J- O+ D
/ m! }9 R7 Z  u
2014-5-29 13:22 上传  {! [, F4 V5 Q) j4 M0 W
下载附件 (37.76 KB) 3 \: `. W, m/ ]1 U6 M; ^5 x* `) m
PID模型 % r8 I. L: P/ E7 ]- K

# n3 E9 L$ }* p+ F
) w, D+ R' ]: j* \* |' x& c1 y: I. T  c: _& q" H1 @7 V
下面我们对曲线进行具体分析:
+ g7 T; p/ L. kPID中的比例控制是最容易理解的,比例控制就是把角度的误差乘以一个常数作为输出驱动。假定我们有一个理想模型的电机,1V电压的变化会带来小四轴1度的角度改变。假定现在电机控制电压是5V,小四轴在某一轴上的偏角是5度,目标角度是100度。我们把当前的电压量定义为Vin,把输出控制量定义为Vout。假定P等于0.2,那么比例控制的结果就是:2 k; L. _9 W2 Q" Z. K
第一次:Vout=Vin+(100-5)*P=5V+19V=24V,得到电机电压是24V,对应的小四轴角度是24度,距离目标角度的误差是100-24=76度。
7 Y! X% k9 I1 O0 J4 L# R* d0 E第二次:Vout=Vin+(100-24)*P=24V+15V=39V, 从而引起的角度是39度。
% g% }0 \$ `0 p0 p2 p' f3 P! Y7 M% V3 D我们看到,在这么的一个比例控制系统下,小四轴角度在慢慢地向目标角度靠近。) [  S7 D  R! P: h" Y. _3 U" y  @

6 H  ?! Y  M3 N" h- o; SPID中的积分控制就是把把所有角度误差相加起来,然后乘上一个常数作为输出驱动。在上述例子中,假定I=0.2, 我们来看看比例和积分控制同时起作用下的系统反应。! @. U' v; S2 Y7 b( P& H
第一次:Vout=Vin+(100-5)*P+(100-5)*I=5V+19V+19V=43V,这时候小四轴角度为43度。
- b. p5 O3 {4 q6 P) \由于第一次控制前的误差是100-5=95,第二次控制前的误差是100-43=57,所以积分结果是152。
$ g* P) O9 c( W' x: o) C, F* d' I第二次:Vout=Vin+(100-43)*P+((100-5)+(100-43))*I=43V+11V+30V=84V, 这时候小四轴角度变为84度。/ G! H3 p$ k* ]5 y
第三次:Vout=Vin+(100-84)*P+((100-5)+(100-43)+(100-84))*I=84+3V+33V=120V。这时小四轴角度变为120度。: R; \. o% o! a% j/ I1 n
我们看到,在增加了积分控制后,小四轴角度在快速向目标角度靠近。
9 d" M- C$ q: t! Z7 F+ B7 Y8 B; R& b' s2 y
PID中的微分控制就是把角度的变化乘上一个常数来作为电机驱动输出。在上述例子中,假定D=0.2, 我们来看看比例,积分和微分共同控制下的系统反应。假定第一次前,电机转速保持5转,那么第一次前的角度变化为0。
+ b6 J; r- {/ [- r第一次:Vout=Vin+(100-5)*P+(100-5)*I-(5-5)*D=5V+19V+19V-0V=43V,这时候小四轴角度为43度。
* o/ Q4 }4 f3 o和上一次相比,角度从5度变化到了43度,所以小四周角度变化是43-5=38度。9 H. L; U+ N7 n8 C  X) |) c
第二次:Vout=Vin+(100-43)*P+((100-5)+(100-43))*I-(43-5)*D=43V+11V+30V-7V=77V, 这时候小四周角度77度。* p6 i0 @3 B7 _& [, Y) t0 K% u
/ r% ]$ g6 h% N4 @7 y
把上述的计算结果列出来,我们看到:
7 m! D' H" w- s% s- b, p 2014-5-29 13:23 上传/ t. M, [0 N- v$ T# s1 w
下载附件 (39.13 KB)
/ T/ f, X- L. Y, E9 g2 _PID计算
" E1 s" I2 x& g0 z3 m2 F0 {
# c! h% U. A. R- J; v
2 D3 T4 F, h6 G4 X5 i  ?' x, H% |- |7 o) y8 K0 F

! V6 @: }1 o6 Q# P7 L从上面的数据,我们可以看到:
; ?' D+ K' @9 ~/ ?6 |1,单独比例控制的时候,数据慢慢接近目标 (图表中的红色线); H( ~" o8 ^# }
2,加入积分控制之后,数据快速接近目标 (图表中的蓝色线)4 @! C$ \: e/ v6 ~% A. V
3,微分控制起到抑制变化的作用。(图表中的绿色线)
" S% T: p; v* j( V
' I6 T# \+ K9 u5 \2 S1 L有了这些理论基础,就可以写PID控制代码拉。
& S) Z0 O0 E9 d- y" M0 \6 l1 R' t2 l- e

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
初级的都是理解物理含义去调参数。2 ^3 m1 h8 j8 e% ]# H7 N
中级的pid调节,需要根据控制模型建模,然后零极点对消,等效1型或2型系统,根据最佳整定法计算pi参数,这是掌握一些自控原理的基础了。
+ f+ ^( z* n, p6 v+ s高级一些的应该都是用自抗扰控制器,抗饱和积分(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 手机版