对pid调参的一点心得

先定义个pid公式:
输入量为in(k),输出量为out(k),目标为target(k),偏差为err(k)=target(k)-in(k)。
o u t ( k ) = p i d ( t a r g e t ( k ) , i n ( k ) ) = K p ∗ e r r ( k ) + K i ∑ j = 0 k e r r ( j ) + K d ∗ ( e r r ( k ) − e r r ( k − 1 ) ) \begin{aligned} out(k) &= pid(target(k),in(k))\\ &=K_p*err(k)+K_i\sum_{j=0}^{k} err(j)+K_d*\big (err(k)-err(k-1)\big ) \end{aligned} out(k)=pid(target(k)in(k))=Kperr(k)+Kij=0kerr(j)+Kd(err(k)err(k1))
在调试pid时,会因为输入输出物理意义不同,而使pid三个参数有不同的意义,如调试位置环时,式子为:输出速度=pid(目标位置,输入位置),调试速度环时,式子为:输出电流=pid(目标速度,输入速度),输入与输出单位不同。

先说速度环,输出电流与这个输出电流得到的速度(下一次的输入速度)可以近似看成线性关系,即 I o u t = α ∗ V o u t I_{out}=\alpha * V_{out} Iout=αVout
这时如果只设置参数p的话,可以得到
α ∗ V o u t = I o u t = K p ∗ ( V t a r g e t − V i n ) \alpha * V_{out}=I_{out}=K_p*(V_{target}-V_{in}) αVout=Iout=Kp(VtargetVin)
可以解得 V o u t = K p α + K p V t a r g e t V_{out}=\frac {K_p}{\alpha +K_p}V_{target} Vout=α+KpKpVtarget
这个公式大概的意义就是:
当设置好目标速度和参数p时,会存在一个速度让整个系统稳定下来,这个速度就是 V o u t V_{out} Vout,而这个速度又会作为输入重新输入系统,即 V o u t = V i n V_{out}=V_{in} Vout=Vin
V o u t = K p α + K p V t a r g e t V_{out}=\frac {K_p}{\alpha +K_p}V_{target} Vout=α+KpKpVtarget可知, K p K_p Kp越大时, V i n V_{in} Vin越接近 V t a r g e t V_{target} Vtarget,静差减小。
当然 K p K_p Kp不是越大越好,当 K p K_p Kp较大时,系统会出现很大的振荡(甚至发散),以以下表格数据(假设 α \alpha α为1,即 V o u t = I o u t V_{out}=I_{out} Vout=Iout)为例:

时间 K p K_p Kp V t a r g e t V_{target} Vtarget V o u t V_{out} Vout
110100
21010100
31010-900
410109100
51010-90900

可见,在速度环中,当 K p K_p Kp较小时,静差较大,当 K p K_p Kp较大时,会出现大振荡。在调试电机速度环时,我本人的做法是,调出一个静差较小但不能有振荡的 K p K_p Kp,如果静差还是有点大就加一个 K i K_i Ki来消除静差。当然,也可以只加 K i K_i Ki,这样就不会有静差和振荡,但会出现响应较慢的情况,因为 K i K_i Ki需要时间去积分。所以我认为比较好的做法是先调一个 K p K_p Kp来提供一个瞬时的反应,再加一个 K i K_i Ki来消除小静差。

接着是位置环,位置环如果只设置 K p K_p Kp就不会导致静差,我们可以会公式上分析:
S o u t = ∫ V o u t = ∫ K p ∗ ( S t a r g e t − S i n ) S_{out}=\int V_{out}=\int K_p*(S_{target}-S_{in}) Sout=Vout=Kp(StargetSin)
而每次输出位置又会作为输入重新进入系统,即:
S o u t = S i n S_{out}=S_{in} Sout=Sin
可以得知,只有当输入位置与目标位置相等时,输出速度为零,这时整个系统才稳定。
然后让我们来分析 K p K_p Kp大小对这个过程的影响,首先可以知道的是 K p K_p Kp决定了整个系统稳定下来的时间, K p K_p Kp越大, S i n S_{in} Sin接近 S t a r g e t S_{target} Starget的速度越快,系统更快稳定。而当 K p K_p Kp较大时,系统会出现振荡(甚至发散)。继续以表格为例:

时间 K p K_p Kp S t a r g e t S_{target} Starget S i n S_{in} Sin V o u t V_{out} Vout S o u t S_{out} Sout
110100100100
21010100-900-800
31010-80081007300
410107300-72900-65600
51010-65600656100590500

对于位置环的调参,我有两种做法:一种是先调出一个较大但不会引起振荡的 K p K_p Kp,这种的好处是不会超调不会振荡,但对于电机来说稳定性会相对减小,不够硬。另一种是调一个大的 K p K_p Kp再加一个小的 K d K_d Kd来抑制它的超调或振荡,稳定性会足够好,但不好调, K d K_d Kd较小时会超调,较大时会出现频率很高的微小振荡,有时几乎找不到稳定的 K d K_d Kd,只能减小 K p K_p Kp引起的超调量再重新调 K d K_d Kd

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值