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

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

[复制链接]
mtg 发布时间:2015-4-27 15:50
. X2 a; [$ ^+ W, x% i% {2 m
基于STM32和PID算法的小车车速控制) T: D+ S9 ]& ?$ J: L' \) m. B

' P; p& r9 x" N3 S四轴飞行器飞行原理与双闭环PID控制7 T. d, u; c, o: ~
1 Z/ B' _3 T0 f& N$ F
PID程序实例
  i; V% e+ N( P* D/ a. g+ {% B$ |/ g# U* s" g7 ^* ~) Y
7 z+ Q0 c2 x+ \7 e
该文档总结于以下两个博文:
+ v1 f* }/ e* \8 hhttp://www.moz8.com/thread-36004-1-1.htmlhttp://www.eeboard.com/bbs/thread-32321-1-3.html# }7 w) {; h& x/ {, i3 s
. D, J7 }# R6 `: B! G9 \
为了更好的理解这个视频和PID参数的作用,特意根据多轴飞行器的原理和PID理论,编写了一个EXCEL图表,直观的来理解PID参数的作用。
' Q; J9 R- t  Q6 E) e8 S在这个模型中:
5 P8 l3 `! _# B' ?/ F: v! z1、假设输出是力,作用在一个质块上,使用加速度、速度、位移积分计算,评估输出对测量值产生的影响,跟多轴飞行器的运动模式比较接近。
' E# F( y/ T3 [2、让速度响应慢一个拍子,模拟电调和电机的响应滞后。
  ?2 {" _# R% Z3、加入阻尼,模拟空气的衰减作用
) b8 m3 W7 a4 \. o4、引入偏差,用于体现I的作用,从中间加入,代表一个系统误差或外作用力
( O, p) u, ?4 r* l! `+ w
$ o: }& ^7 A8 G6 k! G* WPID的作用概述:
4 Q& @4 [! w9 w6 {- B' V1、P产生响应速度和力度,过小响应慢,过大会产生振荡,是I和D的基础。- @* L+ d4 ]7 S& e( M' v: i
2、I在有系统误差和外力作用时消除偏差、提高精度,同时也会增加响应速度,产生过冲,过大会产生振荡。% a, n' U* ]1 }
3、D抑制过冲和振荡,过小系统会过冲,过大会减慢响应速度。D的另外一个作用是抵抗外界的突发干扰,阻止系统的突变。( W2 ?! N" C& V" k
$ n; h4 ?( U/ T8 @: o
通过这个模型和图表,一步步演示PID参数的作用和调试方法:9 N8 ]5 B9 P$ g% A: U% P" \( M
, w, E/ |( Z: F' {6 D5 w# T: Z
1、逐步增大P,看P对响应速度和力度的影响,调到系统发生振荡,再减少一点P$ M7 p- I% e. K3 ?2 g6 l7 U% ]

- u0 l2 R" ?4 j9 c9 E当P=0.1时,响应很慢,但不会振荡
/ T2 Y( _, Y$ e0 p+ k$ e2 e
6 L9 W4 @& _. J3 Z: d粗黑线是系统响应,洋红线是目标值。: g5 W0 V( ~. I! L6 M+ ~3 s" |
5 n5 L! V0 X- A+ U
逐步增大P,P=1,有振荡,但慢慢在衰减- W$ A! E( `. d% w5 L2 }/ ]
1 H5 R7 o" ?; e: y9 m! Z# k
. \! A! Q7 X) ?( A  s8 Y( P
继续增大P,P=3,振荡会逐步加大
8 i$ A6 ?9 }: c: B9 \- a, u
& X3 U& ~6 x! ]% h: T8 Q
! V8 q8 |; E$ l0 B4 n6 ^取振荡但会衰减的P=1继续调整
% X. V' b3 _9 a7 |! T" Q+ c8 y6 ~在多轴调试时,当振荡发生时,再稍微减小一点P。  Y8 \5 k7 n3 O( H* Q: ~( \; b

% v6 t6 X( P: U0 z+ d7 \9 s2、加入D,看D对振荡的控制能力,D过小会发生过冲,D过大会迟滞,以稍微有点过冲为最佳
6 M: A# E2 Z" m( Q. x# P
" J" T" ~2 F  y+ G& d; |* b% _D=0.5,有较大的过冲和少量振荡,衰减很快# q2 v0 _; O0 ?9 l, x. y
9 O% o' s9 I& h5 B! W7 C' U

5 O# m+ ~- X7 \1 b2 Y# @2 ]5 QD=1.3,基本没过冲
" P- Z$ f0 ~) e0 R' s + ~9 A! a* r! {! H

/ l: I& q# P: w/ e3 _D=2,响应迟滞,减慢了响应速度
# J; R$ R+ @% I3 f2 d
6 ?% B! P8 {+ q' e. T6 L1 }3 q+ x( q" h) |
取以稍微有点过冲的D=1.3为最佳& J# B. O5 }& E6 h
在多轴调试时,用手拍一下机臂或倾斜启动,机臂在复位时有少量过冲为宜。(不过我喜欢基本没过冲时的参数,这样在悬停时更稳)
! n" l; K9 h: y- q. g+ i
0 z( x* O$ `2 z# P" `* \9 o( _2 W& N! n. ~3、可以继续增大P和D,让响应更快但过冲也不大。4 a0 i; P# F3 |
P=2 D=1.8
. k6 J$ ]+ [0 ~, y7 {
* A3 J* f7 L( R  G6 @1 \0 _2 b
4 Z) c$ }( f# D9 ?+ U- t: {$ Z在理论上可以这样演示,但在实际多轴的调试时,这一步一般不做,这是为了更安全和稳定。% r' y3 v4 [6 U* f' W
* L$ m6 l; w# {# w; b, b
4、加入0.2的偏差,看偏差对位移的影响
2 X( b" n3 p4 H从中间加入,代表一个外作用力。
$ y/ u8 x5 Z, x0 t( n* c . z+ I1 H5 C& z1 ?" U0 K) d
可以看到,如果没有I的作用,偏差将一直存在,尽管P产生了一个抵抗力,但只是阻止了系统继续运动,但偏差一直在。. ~3 g) J; k+ s
在多轴调试时,如果持续的抬起一个机臂,机臂会持续的转动,抵抗力很小,放手后也不会回复。
2 }! ]5 O% t7 y* S: X! Y
# |" J( t: a* R5、加I,看I对偏差的修正能力,I加快了响应速度,但也会导致过冲或振荡
+ P( i! v" j8 B: S7 }/ \5 J& [I=0.3 基本可以消除偏差产生的影响,产生了少量过冲,但提高了在有偏差时系统的精度3 V. x6 Z/ c& k' f1 l4 q1 f

) }9 i* y9 b7 K4 G) S! T) m7 S7 v7 Q
I=3 进一步加快响应速度,但产生了振荡
+ V* {% W& V+ H1 @ - \6 K0 n) k) H7 b3 J
+ r( u* P) ~* l. u
取基本能纠正偏差的I=0.3
$ @/ a( j& D5 U) B在多轴调试时,油门开至悬停油门,用手持续的抬起一个机臂,可以感到随着I的增加,抵抗力会逐步增大,持续时间加长。. [, b& N- w$ _9 G
因为多轴的长期稳定由姿态模式的LEVEL参数来解决,所以I不用太大,取缺省参数就可以了,大概可以抵抗1-2秒左右。
1 K( M5 |6 x% E- z" A) C# r: |! [7 |, R
# V8 h, f6 x# Z8 ~' p- {6、增大一点D,减小一点I产生的过冲" [$ ], |* q3 B8 B  G
取消偏差,因为I的加入,有一点过冲
" S1 m, h* o2 q7 K6 B5 e 6 t! m' s2 z' i9 E# D
0 x; O% [( F+ M/ u9 W
增大D,D=2.2,减小过冲
/ n% X( t0 M* N9 q/ I& X6 }4 B# ^+ F 0 q7 I: T- j* h! ?4 X5 @, q, \

; ]3 z3 n6 }8 F, L/ R+ G在实际多轴调试时,这一步一般不用,但是如果有必要,可以试一下。' D& Z9 m9 [2 \

+ @7 b" [& `3 ^! ~好了,曲线演示完了,这同时也是多轴PID参数的调试过程,结合视频一起看,能更好的理解这一过程,希望对大家理解PID有所帮助。
5 y2 K% O/ q8 c7 Q6 C1 ^# Y) ?1 g1 m
附:多轴飞行器PID调试演示器.xls$ o2 B* |% V% x' D4 F+ c
! W2 T6 z1 U7 i" k1 T
另外,试了一下,下载的文件名可能有问题,自己把文件名改为"多轴飞行器PID调试演示器.xls"就可以用了: i8 E' ?; }" Y7 f. q

% B/ z8 w9 {: T/ c7 r. X" `6 D. G! q0 o. E+ @& ~; l" x: \  l
PID的代码其实也很简单,主要是要了解其中的原理,才能更好地调整参数。为了方便新手们理解,楼主建立了一个数学模型来让大家了解。(只针对新手,老手就算了)2 {" r" I6 b! A8 r
; k0 \2 m  ~2 e: M. q
========圆点博士小四轴之PID控制模式分析=======3 G. s! F. ^) W; j. C& n. x
PID控制的P是Proportional的缩写, 是比例的意思,I是Integral的缩写,是积分的意思,D是Derivative的缩写,是微分的意思。所以,PID就是我们常说的比例,积分,微分控制。
, w& c! J4 n/ b我们首先来看一个PID控制模型曲线图:% }: o. Q! a+ e8 N$ }
该图包含了比例控制,比例+积分控制,比较+积分+微分控制的电机响应图的对比。
, p  u' U8 f2 ?8 a9 s8 y6 j+ o$ {! u; j& C  F, X+ }/ ^( q
2014-5-29 13:22 上传
: G" O, }  f$ {& ~" r2 z下载附件 (37.76 KB)
7 Z1 W3 M( h$ S. h7 t- RPID模型 9 e3 Y( f0 e- E1 d+ W3 G( C/ X
- E- x  \9 ^( _% m* T9 c+ \
+ i2 m- i- l! S9 o, a4 K( w

5 }& q9 P) p% g! o* S4 C下面我们对曲线进行具体分析:5 U6 J# O3 o- m* V2 ^5 z
PID中的比例控制是最容易理解的,比例控制就是把角度的误差乘以一个常数作为输出驱动。假定我们有一个理想模型的电机,1V电压的变化会带来小四轴1度的角度改变。假定现在电机控制电压是5V,小四轴在某一轴上的偏角是5度,目标角度是100度。我们把当前的电压量定义为Vin,把输出控制量定义为Vout。假定P等于0.2,那么比例控制的结果就是:
. ~7 y- X1 |9 z  {第一次:Vout=Vin+(100-5)*P=5V+19V=24V,得到电机电压是24V,对应的小四轴角度是24度,距离目标角度的误差是100-24=76度。0 M: o. E3 H3 t
第二次:Vout=Vin+(100-24)*P=24V+15V=39V, 从而引起的角度是39度。
0 ?8 C" E* y& m& W5 C+ `) [* @我们看到,在这么的一个比例控制系统下,小四轴角度在慢慢地向目标角度靠近。
: w2 e6 {2 o* I
9 I; }) _  J4 p9 d6 cPID中的积分控制就是把把所有角度误差相加起来,然后乘上一个常数作为输出驱动。在上述例子中,假定I=0.2, 我们来看看比例和积分控制同时起作用下的系统反应。
' d) y' \5 v5 ?. ^: q5 R2 W) F第一次:Vout=Vin+(100-5)*P+(100-5)*I=5V+19V+19V=43V,这时候小四轴角度为43度。
+ T+ n- f) g) V8 _" a由于第一次控制前的误差是100-5=95,第二次控制前的误差是100-43=57,所以积分结果是152。
5 V0 e% H% _& G第二次:Vout=Vin+(100-43)*P+((100-5)+(100-43))*I=43V+11V+30V=84V, 这时候小四轴角度变为84度。6 ^; K, j4 ]( v8 z! C
第三次:Vout=Vin+(100-84)*P+((100-5)+(100-43)+(100-84))*I=84+3V+33V=120V。这时小四轴角度变为120度。& b; v9 z4 Z! ?0 d: ]$ [1 i* s! c4 ^
我们看到,在增加了积分控制后,小四轴角度在快速向目标角度靠近。/ E1 h; j* Z# O1 _

$ X, E( i9 a7 g% U* `PID中的微分控制就是把角度的变化乘上一个常数来作为电机驱动输出。在上述例子中,假定D=0.2, 我们来看看比例,积分和微分共同控制下的系统反应。假定第一次前,电机转速保持5转,那么第一次前的角度变化为0。
* }$ P0 C% i, Z* D: T0 i第一次:Vout=Vin+(100-5)*P+(100-5)*I-(5-5)*D=5V+19V+19V-0V=43V,这时候小四轴角度为43度。
5 H  B6 l0 t) z$ v( E' {和上一次相比,角度从5度变化到了43度,所以小四周角度变化是43-5=38度。  V, H( D0 ^+ y  M+ J9 ~
第二次:Vout=Vin+(100-43)*P+((100-5)+(100-43))*I-(43-5)*D=43V+11V+30V-7V=77V, 这时候小四周角度77度。
5 l% [3 H! q, q1 `2 V) B# }/ f/ \8 m7 p
把上述的计算结果列出来,我们看到:
+ T5 B, K2 I2 o# l1 B# E 2014-5-29 13:23 上传0 m+ s' P( H, x- ?2 p+ g- a
下载附件 (39.13 KB)
8 E  K3 k# j1 u1 O( p( f2 ?" j2 @PID计算
( T/ y; q- [6 J& [  E- i1 ^# h  Q% Z4 K4 T

* X" w$ m, g( h9 K. m& Y) A$ O; _2 h; \6 u% L# I
" V- m) K& a% E/ u+ }- P, j& k
从上面的数据,我们可以看到:
5 }. l. n% m4 l; Q" O( A1,单独比例控制的时候,数据慢慢接近目标 (图表中的红色线)* C: N; l' B7 X
2,加入积分控制之后,数据快速接近目标 (图表中的蓝色线)7 ]8 w  z8 \2 g
3,微分控制起到抑制变化的作用。(图表中的绿色线)6 o( u6 V5 W; I0 T0 @
/ D% [  ~( ^: F( z5 H
有了这些理论基础,就可以写PID控制代码拉。
4 X( g" T% U! n9 s4 ~' H
6 f& M" y: c/ j5 {' 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
初级的都是理解物理含义去调参数。
- S; E# u3 _- a( K. v$ q( f' e中级的pid调节,需要根据控制模型建模,然后零极点对消,等效1型或2型系统,根据最佳整定法计算pi参数,这是掌握一些自控原理的基础了。
- i4 V9 h2 \+ z+ Z" w" P高级一些的应该都是用自抗扰控制器,抗饱和积分(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 手机版