
一.PID控制算法 1.什么是PID PID:Proportion-Integral-Differential% G3 S8 _* q' |' e' ^' j 在过程控制中,我们经常使用的一种算法就是PID算法了,所谓PID控制算法就是对偏差进行比例、积分、微分控制,来使偏差趋于某一固定的值,PID核心由三个单元组成:比例单元(P)、积分单元(I)、微分单元(D),PID实际上就是误差控制。 PID控制系统(模拟)的框图如下: ![]() % I2 n" V) j* P: A" | ? ; i# X* Z% p2 l2 b) W' T* L1 \ 2.PID系数的理解 理解PID的三个系数,可以结合PID调节时候的响应曲线,要使实际中的响应曲线趋近于理想状态下的响应曲线,无非就是三点灵魂:快速(P)、准确(I)、稳定(D),要想控制的变量保持在完美的状态,这三个灵魂就必须调整好。 1 O5 s2 V9 w: H9 H+ R' c# P& { 以下分析中的:P、I、D都指的是PID的三个系数+ F( t8 j3 X7 e% ` 下面从三个系数对整体控制的影响做出分析 ! J- O; v" Z5 e5 w Ⅰ.比例(P)部分, U6 I( A% N2 C4 c( E" T' I 输入值一旦与目标值产生偏差e,就需要缩小偏差,P就是用来缩小偏差的,使控制量向减少偏差的方向改变,而且P越大,偏差缩小的速度就越快,所以P的作用就是使控制量更快地接近目标值。/ u7 ~) E7 G" G! t; a# i. v 9 U, i! I2 X( L7 F# H( a 但是!十肇九快!!!P过大的时候,就容易刹不住,很容易超出目标值,当超出目标值时,又会反向朝目标值飞奔,然后又太快了,再次偏离目标值,然后又朝目标值…这样反反复复的在目标值附近震荡,这就是P太大的弊端:不够稳定。 所以,P大了虽然可以快速响应,但也容易产生震荡,破坏系统的稳定性,可以适当增大D来提高稳定性。( r8 b; d0 \5 F- X% c X3 k& I 1 N- E8 [- S% N; c# |( c7 ] 1 J* x5 d4 q4 ]3 G9 L7 s Ⅱ.积分(I)部分0 ~; l6 f0 s* q- ^! E 积分的表达式如下: ![]() ! F9 k' a7 o7 j 从其表达式中可以看出,只要存在偏差,积分结果就会不断增加,也就是控制作用会不断增加;当偏差为0时,积分结果是一个常数,此时控制作用才可能是一个稳定的值。+ ^+ \7 v2 n+ l( G 所以直观的来看,积分可以消除系统的静态偏差,因为一旦有误差,积分就会增加,系统就会做出反应,直到偏差为0,也就是积分保证了控制的准确性。! D2 R0 Z, U4 @- P . W. H4 ^! H6 B- G, U. {7 o 积分的作用虽然会消除静态偏差,但是也会拉低系统的响应速度,就是说I对P有抑制作用。: q5 E4 D' b& U+ a- X ! B/ {, D' ^1 {7 i8 c: d9 R 5 X" x( m3 a% | f! U Ⅲ.微分(D)部分( p) l+ G1 w1 _# @3 _9 p6 A 上面说了,P过大会引起震荡,降低系统稳定性,可以通过提高D来减小震荡。- a" a: L6 ]& E* f. A 3 I M% S5 W9 }% n6 @ 微分的作用就是根据偏差的变化趋势预先给出纠正!怎么个预先法呢?因为微分可以看作是求导,上过高中同鞋都知道:求导可以反映函数的变化趋势。所以,通过微分,可以对偏差的变化进行预判地抑制,防止 矫枉过。! S4 I. H9 u8 S l8 S4 n : ^) a$ S/ O3 J 微分的引入,有助于减小震荡,使系统趋于稳定,D越大,抑制P的效果就越强。 " S8 y R2 t8 ?- d7 ]8 t 3.PID的数字化处理 由于计算机控制是一种采样控制,只能根据采样时刻的偏差值计算控制量,所以我们是通过软件实现控制算法的,要对PID进行离散化处理(也就是数字化处理),就是根据离散采样点的偏差值进行控制,在离散化处理后,相比于模拟控制由如下改变: 由差分代替微分, J% D% x" B) _! ` 由累加代替积分5 O% y( p* B; G 数字化处理后的PID系统如下:. ~" a0 |* m7 v0 i9 o4 I6 t' \ * C8 ?3 ~/ Z2 p+ s. H) l ![]() / T( }* i1 u% Z h 采样的周期越小,就越接近模拟控制,控制的效果也就越好。; v, D& a% Q) `$ Y5 b7 W- T3 C 二.位置闭环控制' L5 X7 P/ D2 Z$ a: w+ Y, B 位置闭环控制,也叫位置式PID控制,就是传统的PID控制,控制的偏差逐渐接近0,从而使控制量趋于目标值。 " l, ?! X! w' M 对电机使用位置闭环控制的时候,就是控制电机的转动位置,通过编码器的脉冲累加测量电机的位置信息,与目标位置进行比较,得到偏差值,通过比例、积分、微分的PID算法进行控制,使偏差趋于0。 电机控制中,输出量就是电机控制模块输出的占空比,作用于电机转速,此时离散PID的公式如下:0 Q+ C. {# N7 _ ![]() 其控制框图如下: ' o5 V: Q; Y" e% E/ e9 h' V+ L ![]() 控制实现代码如下:4 U8 v% g, s) W. a* B+ d1 Z1 B
在定时中断里实现PID控制,定时中断相当于离散的采样点,中断服务函数中可调用控制函数:' T* v9 B0 U; e5 {, z8 m0 A
最终的控制要落回到电机的控制上,也就是电机的转速控制——PWM控制。* K% V" r/ o C# f 位置控制的调节经验:先只使用P控制,逐渐增大P,系统震荡后加入微分控制D来抑制震荡,调整KD直至消除震荡,之后再根据系统对响应和静差的要求,调节P、I参数。 ! k& H( W `; O' G! j, w# f: n. i 三.速度闭环控制 速度闭环控制也可叫增量式PID控制,与位置式PID控制不同,位置式PID输出的是控制量新的状态,而增量式PID输出的是控制量的增值,增量式PID的离散公式如下: , A6 p1 a7 u: R# l2 L& w' Y ![]() ) B. s. C9 d' K7 A' i# ^* [ 位置闭环控制是使电机准确转到某一位置,速度闭环控制是使电机以某一速度转动,在速度闭环控制里,我们只需要使用PI控制即可,所以简化后的公式如下:# w! i. I8 F; `+ E$ ^ * h0 p/ K& s `6 _$ u$ d/ d$ J ![]() 注意:公式直接将控制量的增量加在上一次控制量的状态上了!!! / R: ~; u: H' ^- M6 J- X1 K 控制框图如下: & V0 K. N0 U0 H: n: w- o ![]() 8 X3 g0 U' j. C% T# x- E# U4 v4 L 控制代码如下:2 A; i( s* [/ V+ D" z
在定时中断里实现PID控制,定时中断相当于离散的采样点,中断服务函数中可调用控制函数:; c) [8 T6 M! G9 A, h
要注意速度闭环控制采用PI控制,公式与PID有所不同,输出的也是控制量的增量,这里将增量直接加在了上一次的状态量上,所以输出的还是控制量的新状态。0 W" {/ a% U( _ c6 [: T & E$ Q+ |8 G% D2 R% {0 a+ o5 {( U 最后附上我找到的PID参数调整口诀:+ l1 S' L" b, c, U & E4 ]3 s, Q m% d8 m5 J. b" J9 h& G 常用口诀:$ y( F- {8 T1 ]0 e) _. \ 参数整定找最佳,从小到大顺序查 先是比例后积分,最后再把微分加 曲线振荡很频繁,比例度盘要放大! z' B# V# [* C! E# ]" { 曲线漂浮绕大湾,比例度盘往小扳 曲线偏离回复慢,积分时间往下降" `) I4 |( P8 `0 ] 曲线波动周期长,积分时间再加长# b, }$ T: e0 X- T$ H# \& b 曲线振荡频率快,先把微分降下来' e0 }$ m9 C8 q9 s, n7 }+ A# f 动差大来波动慢。微分时间应加长 理想曲线两个波,前高后低4比13 C% n! g# {& N 一看二调多分析,调节质量不会低! S* Z- l' N0 b ————————————————0 q J' Z0 v+ J; D- a+ \5 u 版权声明:Aspirant-GQ8 k0 W* ?& v% t) d 如有侵权请联系删除) V' K% A2 S/ j+ ^. ]$ K & g c% X, ]9 `; B, s 0 T4 t. ?6 @/ n' s |
实战经验 | 在STM32中实现电机测速的方法介绍
基于STM32WBA55CG的直流电机驱动
自制STEVAL-IPM05F 3Sh板:FOC电机控制400V/8A 无感/有感霍尔/有...
意法半导体与伍尔特电子合作开发高性能电动工具
ST应对电机控制方案设计挑战(2)
ST应对电机控制方案设计挑战(1)
开发电机控制方案面临四大挑战
【数据摘要】1500 W电机控制电源板,基于STGIB15CH60TS-L SLLIMM™第2系列IPM
如何将电机控制应用程序软件从 SDK v4.3 迁移至 SDK v5.x
今天14:00 | 基于STM32的MATLAB电机控制方案直播
"PID control is implemented in the timing interrupt"
How often ?
Is it related with motor speed ?
Thanks