|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
原来PID算法都用在这些方面,不看不知道啊
. _: E1 o0 y; Y2 v) F i) ~* f
% y- J' U: I9 ^3 O* N0 m; ~0 }这里的 PID 是指控制类的比例 -积分 -微分算法,而不是进程 ID 号。
7 o w; x' N2 U! CPID 算法,不管是原理上,还是代码上都比较简单。主要运用在电机控制、开关电源、电源管理芯片等领域。
7 f; O$ f3 e; S2 f+ Z" j6 o4 p一般《自动控制原理》上给的是位置式算法,如下图所示。但是工程上,用增量式算法比较多,这样可以避免积分环节饱和溢出的问题,具体公式和整定参数的口诀就不贴出来了,网上资料多如牛毛。
. I! I/ m2 Y! o+ ]下面看这样的一个电机控制的例子,如下图所示。这就是一个闭环控制系统, 非常简单。 不管是用 C 还是 verilog ,你都能一下子把代码写好,但是在你整定参数的时候,却发现,怎么调都没用。; L3 P- \1 |0 b- ^% h6 I3 g
原因在于你对这个系统的反馈机构理解得不够。比如, 716空心杯电机,设定在 100 转/秒,但是你却用了 50M 时钟让PID 算法工作,假设 PID 是全并行的(数据吞吐量也达到5 b$ u+ W: G: s
50M )。
7 g! F; f$ ^$ g/ r2 A2 t, c% H这时,不管你怎样调参数,电机都不受控制,一下子很快,一下子很慢。1 s3 }9 c4 H! M) t7 h
静下来想想,不难发现问题。
; K; E9 z- p" l9 K* ]* Q @假设电机瞬时转速是 101 转/秒,光电开关大概每隔 4.95 毫秒才反馈一个速度量过来,在这期间是没有反馈的。3 v) `! @4 Y; ]6 _6 [* j1 V# X
设定的转速是 100 转/秒,用工作在 50M 全并行的增量式 PID算法,在 4.95 毫秒内,不断地累积 1 转/秒的误差,期间被PID 算法作用了 247.5 次!
7 e8 a+ O- y; s' Y也就是说,因为 PID 的工作频率太高,积累误差的速率太快(从另一个角度来看就是反馈机构太慢) ,所以电机不受控制,这时,你把 PID 的工作频率降下来,就会发现,电机渐渐地受控制了。
- p. o, _, p5 Q: U下面给一个在 FPGA 中使用 PID 算法做电机控制的完整框图。& o+ H5 d, [; |$ W( c" Z5 ~
综上所述,控制类算法,除了要关注算法本身的特点以外,还要深刻理解反馈机构和执行机构。
' f8 O |4 h; l2 \. @/ L4 `BTW ,一般来说,电机控制用 PI 或者 PD 控制就可以了,如果用 PID 三个环节的话,一来参数不容易调节,二来容易自激,当然也不排除某些特殊场合需要用 PID 三个环节,甚至还会用到三环控制(速度环、相位环、电流环) 。
" O/ \3 E5 } C) ^, o% f" ~此外,除了 PID 以外,常用的控制类算法还有模糊控制、MPC (模型预测控制)算法。% w6 [$ R5 O" T2 V7 n3 e& j; x3 v
0 O0 q! ^2 U. Z4 p8 A
% E1 B8 i8 n7 O
. |) y3 D3 q% U+ F9 D9 A |
|