对pid调参的一点心得

本文详细探讨了PID控制器在速度环和位置环中的应用,分析了比例系数Kp对系统稳定性、静差和振荡的影响。在速度环中,Kp决定响应速度和静差,过大可能导致振荡;而在位置环中,Kp影响稳定时间,过大同样会引起振荡。建议先通过合适Kp提供瞬时响应,再用Ki消除小静差,或者仅用Ki避免振荡但响应变慢。对于位置环,可能需要结合Kd抑制超调和振荡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先定义个pid公式:
输入量为in(k),输出量为out(k),目标为target(k),偏差为err(k)=target(k)-in(k)。
out(k)=pid(target(k),in(k))=Kp∗err(k)+Ki∑j=0kerr(j)+Kd∗(err(k)−err(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(目标速度,输入速度),输入与输出单位不同。

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

时间KpK_pKpVtargetV_{target}VtargetVoutV_{out}Vout
110100
21010100
31010-900
410109100
51010-90900

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

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

时间KpK_pKpStargetS_{target}StargetSinS_{in}SinVoutV_{out}VoutSoutS_{out}Sout
110100100100
21010100-900-800
31010-80081007300
410107300-72900-65600
51010-65600656100590500

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值