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

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

[复制链接]
mtg 发布时间:2015-4-27 15:50
  F. e1 z# L! w  g# @: b4 N, n
基于STM32和PID算法的小车车速控制
; i6 P& O; }' I, [2 B* \( L6 g8 r' c4 s0 f' G$ U6 k1 G
四轴飞行器飞行原理与双闭环PID控制1 [, b" G6 g3 _4 ]) j! G& i- ]& c

4 S" E+ P% B5 l$ ?/ f2 ~& H8 x1 ]PID程序实例
0 R# W, ]( P# o6 ]/ @2 q/ g3 {
1 c5 I1 v% K' J6 p. z; x2 I7 S
& g- n' K4 T& A该文档总结于以下两个博文:
& l1 }# ]) @# Whttp://www.moz8.com/thread-36004-1-1.htmlhttp://www.eeboard.com/bbs/thread-32321-1-3.html" @$ d; `; h6 N9 [

, M1 V# n7 ~+ J2 Z为了更好的理解这个视频和PID参数的作用,特意根据多轴飞行器的原理和PID理论,编写了一个EXCEL图表,直观的来理解PID参数的作用。
: `. C, F- E. T* \, Q) i& A: q1 \! g( S在这个模型中:# c; |0 c& J) t/ c8 ^* ]7 Z
1、假设输出是力,作用在一个质块上,使用加速度、速度、位移积分计算,评估输出对测量值产生的影响,跟多轴飞行器的运动模式比较接近。! u% [3 @  H" X6 ?' ]/ |5 u
2、让速度响应慢一个拍子,模拟电调和电机的响应滞后。
$ H, g; o# ~5 F3 T3、加入阻尼,模拟空气的衰减作用
' j3 |4 |# o* r: n7 e, {4、引入偏差,用于体现I的作用,从中间加入,代表一个系统误差或外作用力6 w: F! B  U+ b
" i* \( @+ N: q' r" n* H& s
PID的作用概述:
% m2 [. u. f8 z* E+ K1、P产生响应速度和力度,过小响应慢,过大会产生振荡,是I和D的基础。
+ I- T' \* |! w; d% `( t2、I在有系统误差和外力作用时消除偏差、提高精度,同时也会增加响应速度,产生过冲,过大会产生振荡。
0 |5 a( w* A2 q, B1 S' `% q) u3、D抑制过冲和振荡,过小系统会过冲,过大会减慢响应速度。D的另外一个作用是抵抗外界的突发干扰,阻止系统的突变。
7 C; s3 ~) I/ B$ b' _
9 F1 }, Y1 v7 ~4 N通过这个模型和图表,一步步演示PID参数的作用和调试方法:
2 `  q# m, I0 Z% y* Y+ W0 W7 z5 }6 C# ~) q& L
1、逐步增大P,看P对响应速度和力度的影响,调到系统发生振荡,再减少一点P2 o% p  ?# H- m8 i% U) L- y

1 k1 G% \) M5 _- Q当P=0.1时,响应很慢,但不会振荡
* H: p) ?- q7 x3 Z- Z) s" \
: @2 q/ x! M( s粗黑线是系统响应,洋红线是目标值。
+ z) n& j( c, n! a9 |* s
9 o, Y. r, ~% N逐步增大P,P=1,有振荡,但慢慢在衰减
) L3 S0 H& @5 P1 `7 K6 n) K
! c; g  O5 ~: G5 I- A
0 Y4 S0 ]* Q2 i2 z1 ]3 x继续增大P,P=3,振荡会逐步加大' ?* w( Q3 x  C$ K, i" V

0 E* }7 X9 v$ [8 f
- E/ ~2 k. O) E! U$ d取振荡但会衰减的P=1继续调整, n9 h. u0 f# s5 K4 ^7 }7 a
在多轴调试时,当振荡发生时,再稍微减小一点P。, s2 O2 E0 V, V. c# @2 x
0 B1 U  X* Q4 O- S) G) J4 |
2、加入D,看D对振荡的控制能力,D过小会发生过冲,D过大会迟滞,以稍微有点过冲为最佳
7 p  V6 D9 D( _' t* U) k6 G& A6 z8 M! v9 R. @% ^- u9 P$ r
D=0.5,有较大的过冲和少量振荡,衰减很快
* V" n) N  d' h! n$ n' } - o% H* t( g3 {0 Y

( o$ c. o5 l# p( ?D=1.3,基本没过冲3 a5 y" W: {9 A; w, \+ |& h' P

+ L' I) t. x* J" ~$ k% v+ x# n
1 f- F( |  m3 @D=2,响应迟滞,减慢了响应速度: B4 _& L5 R7 E% [  I5 W/ Z. O
6 g; Q0 B( y1 @& l' s9 V
  n& a8 X0 D. L
取以稍微有点过冲的D=1.3为最佳7 h7 z. s" J; V
在多轴调试时,用手拍一下机臂或倾斜启动,机臂在复位时有少量过冲为宜。(不过我喜欢基本没过冲时的参数,这样在悬停时更稳)
4 X  u7 C( M7 _( {7 Q$ Q. O! x. e  v1 |, G: P& `* o# C
3、可以继续增大P和D,让响应更快但过冲也不大。
8 n$ T! ^. X* w4 j% C9 L1 CP=2 D=1.8
$ u6 M  {; p5 X6 G! u% x9 e4 e $ n7 V1 M* |: d

9 @2 U& H' @% h. h- s' j在理论上可以这样演示,但在实际多轴的调试时,这一步一般不做,这是为了更安全和稳定。$ i. @$ W" E/ L/ \" @. v" n

& ^2 i: F' `8 G( N8 u4、加入0.2的偏差,看偏差对位移的影响7 S' W" w3 O8 \8 h/ @9 V: a  E
从中间加入,代表一个外作用力。5 g6 _" A8 r; U- h9 f( @
8 x! h2 r" }. o/ G2 E0 E( o
可以看到,如果没有I的作用,偏差将一直存在,尽管P产生了一个抵抗力,但只是阻止了系统继续运动,但偏差一直在。" m' A1 {. ?) f1 i. h; Y4 u% R
在多轴调试时,如果持续的抬起一个机臂,机臂会持续的转动,抵抗力很小,放手后也不会回复。
! R7 L* U8 D6 Y6 ^
# k* b3 E. s' j9 ^' L3 M" W- b5、加I,看I对偏差的修正能力,I加快了响应速度,但也会导致过冲或振荡
+ ]8 k8 c3 n6 A- uI=0.3 基本可以消除偏差产生的影响,产生了少量过冲,但提高了在有偏差时系统的精度' Z6 A/ Z2 C* z8 _* }
- ^6 i2 L9 B$ ], w- C
) x) l3 W/ v  m7 S- {1 f( v
I=3 进一步加快响应速度,但产生了振荡1 m% s: y/ W- X  K& W9 l

+ s( U7 O6 j1 k% z7 ^! c8 ^" V* e( g6 S- L* c8 o3 j0 Z, h/ k* w
取基本能纠正偏差的I=0.37 U* G* Y( E& t9 V- \
在多轴调试时,油门开至悬停油门,用手持续的抬起一个机臂,可以感到随着I的增加,抵抗力会逐步增大,持续时间加长。
+ r, j. x. _7 A" [, f/ S" x因为多轴的长期稳定由姿态模式的LEVEL参数来解决,所以I不用太大,取缺省参数就可以了,大概可以抵抗1-2秒左右。
  C" P% k0 a( |5 \. [
/ z1 |' X; C6 V3 d$ s5 P8 g6、增大一点D,减小一点I产生的过冲: E7 Z( ^( E, a1 Q4 o# X: N! Z
取消偏差,因为I的加入,有一点过冲' y, U! X  s& `3 i2 b$ s: N
6 Z% `/ Y3 i1 E; ~( N

3 @8 w1 K' Z, _增大D,D=2.2,减小过冲- [. |8 y# W2 _2 H  U; Q1 O
( N- K) s  F- E/ R" d0 t' V8 J
; v7 f9 I0 a# R9 p9 g2 N
在实际多轴调试时,这一步一般不用,但是如果有必要,可以试一下。+ ]! G2 v) y( [8 L) ?* R, V
# I! M- f, K$ t/ f2 o: E4 X9 r
好了,曲线演示完了,这同时也是多轴PID参数的调试过程,结合视频一起看,能更好的理解这一过程,希望对大家理解PID有所帮助。
7 |/ j% k9 Y- V. k) [% c: j! `; G9 {+ {3 `% O0 E3 l7 H
附:多轴飞行器PID调试演示器.xls
8 e2 B6 a+ o$ Q0 K: q* @; Z3 p+ S( p9 e% k: H" J* w! c2 y" {9 e
另外,试了一下,下载的文件名可能有问题,自己把文件名改为"多轴飞行器PID调试演示器.xls"就可以用了
% f/ B. ?2 |' ^3 Z( J
8 i( V) j- \" A/ o% \+ E1 r4 T' y. P. x" C5 z; E) g3 D$ @
PID的代码其实也很简单,主要是要了解其中的原理,才能更好地调整参数。为了方便新手们理解,楼主建立了一个数学模型来让大家了解。(只针对新手,老手就算了)
# p1 |& h# i7 m, i& K, C: V! r& f: ^& M1 D# ?$ M
========圆点博士小四轴之PID控制模式分析=======
8 I: Q- e. y3 m0 nPID控制的P是Proportional的缩写, 是比例的意思,I是Integral的缩写,是积分的意思,D是Derivative的缩写,是微分的意思。所以,PID就是我们常说的比例,积分,微分控制。0 \3 Q% H9 u$ h3 Q4 d" h
我们首先来看一个PID控制模型曲线图:
* C8 g0 b$ T1 T5 U# J% l" \该图包含了比例控制,比例+积分控制,比较+积分+微分控制的电机响应图的对比。+ x. y; q3 x2 n, g
6 \- e5 d" h9 |' q1 {
2014-5-29 13:22 上传
/ a" w% r; O9 v) L) Q6 N5 e. N# V. z下载附件 (37.76 KB) * U# R1 b* [1 q3 `
PID模型 ! X1 y6 n! Z9 r8 N& b, C

. X9 C0 t1 q; X& x8 |, V+ a7 o0 y3 i9 V/ h: \, q' `, H
6 x* {/ i& l! ^8 \, b, I
下面我们对曲线进行具体分析:
0 w# r7 Z8 m& v  T  X( GPID中的比例控制是最容易理解的,比例控制就是把角度的误差乘以一个常数作为输出驱动。假定我们有一个理想模型的电机,1V电压的变化会带来小四轴1度的角度改变。假定现在电机控制电压是5V,小四轴在某一轴上的偏角是5度,目标角度是100度。我们把当前的电压量定义为Vin,把输出控制量定义为Vout。假定P等于0.2,那么比例控制的结果就是:
( _/ A& D$ \' G2 H: l第一次:Vout=Vin+(100-5)*P=5V+19V=24V,得到电机电压是24V,对应的小四轴角度是24度,距离目标角度的误差是100-24=76度。
0 d6 @! ?5 d3 A4 Z第二次:Vout=Vin+(100-24)*P=24V+15V=39V, 从而引起的角度是39度。6 K6 p1 }1 b  d6 ?) r& n/ n
我们看到,在这么的一个比例控制系统下,小四轴角度在慢慢地向目标角度靠近。( y; |8 x# U4 K7 X6 w/ S/ H
7 ~5 ^3 [4 d" W& U* e/ i* l
PID中的积分控制就是把把所有角度误差相加起来,然后乘上一个常数作为输出驱动。在上述例子中,假定I=0.2, 我们来看看比例和积分控制同时起作用下的系统反应。
6 W6 }  S+ r# U& Z$ p) P" j$ p第一次:Vout=Vin+(100-5)*P+(100-5)*I=5V+19V+19V=43V,这时候小四轴角度为43度。- E: Z* M/ H% i" c
由于第一次控制前的误差是100-5=95,第二次控制前的误差是100-43=57,所以积分结果是152。. U  ?& S8 y( a: G/ c2 ~$ |2 w
第二次:Vout=Vin+(100-43)*P+((100-5)+(100-43))*I=43V+11V+30V=84V, 这时候小四轴角度变为84度。
4 D. t3 P) B/ x4 q9 K第三次:Vout=Vin+(100-84)*P+((100-5)+(100-43)+(100-84))*I=84+3V+33V=120V。这时小四轴角度变为120度。
. h5 Q; K0 D+ {$ l7 u8 y1 K我们看到,在增加了积分控制后,小四轴角度在快速向目标角度靠近。% S6 K/ d# G' q
" ?, u3 K$ Y) P$ h( a
PID中的微分控制就是把角度的变化乘上一个常数来作为电机驱动输出。在上述例子中,假定D=0.2, 我们来看看比例,积分和微分共同控制下的系统反应。假定第一次前,电机转速保持5转,那么第一次前的角度变化为0。8 e9 x9 ^4 J9 r6 V+ [7 L6 _3 f
第一次:Vout=Vin+(100-5)*P+(100-5)*I-(5-5)*D=5V+19V+19V-0V=43V,这时候小四轴角度为43度。5 ^4 r+ u3 Z  y- v7 Q
和上一次相比,角度从5度变化到了43度,所以小四周角度变化是43-5=38度。
/ q  J/ B) F6 N  `3 r8 a1 i. a; C第二次:Vout=Vin+(100-43)*P+((100-5)+(100-43))*I-(43-5)*D=43V+11V+30V-7V=77V, 这时候小四周角度77度。' I/ g) C0 C9 j( _$ }/ b* F# ^

. \& E" l9 \5 K把上述的计算结果列出来,我们看到:
5 M" C  G( P* r0 V2 Z 2014-5-29 13:23 上传, j( Z+ o( c/ c
下载附件 (39.13 KB) 1 k: g$ `, l, o2 ]
PID计算
1 O( ]& I1 R  w# s4 o9 i9 `# x' K. C* Q" }% L

2 i0 ]/ T% C. D; \# G% Y& X! H' r* w$ P

( d6 M  }7 m1 Y  G. A. E, C从上面的数据,我们可以看到:
% O+ d. ?. D; f8 ]9 Y' [/ @" H1,单独比例控制的时候,数据慢慢接近目标 (图表中的红色线)
  z$ ^! t% q% v1 r5 G2,加入积分控制之后,数据快速接近目标 (图表中的蓝色线)4 T" j3 p4 g8 i7 B7 ^
3,微分控制起到抑制变化的作用。(图表中的绿色线), g. p& d$ L7 ?, i

9 A. a! O: A- a4 I) y有了这些理论基础,就可以写PID控制代码拉。
. _. f# l  c- z: o, u- T& n5 N( l% z4 r

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
初级的都是理解物理含义去调参数。
! @9 l% D7 `! k0 O# g: C, s6 U中级的pid调节,需要根据控制模型建模,然后零极点对消,等效1型或2型系统,根据最佳整定法计算pi参数,这是掌握一些自控原理的基础了。1 R: u( v' O3 k0 `  N6 b* O
高级一些的应该都是用自抗扰控制器,抗饱和积分(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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版