PID参数解析+调参经验笔记(经验法)

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

只要Err不为0就会存在静差,只要存在静差那么积分就会对系统产生影响,
直到系统的Err值为0 。
那么这样我们的PID控制在理论上就可以达到一个非常精确的控制效果。

![在这里插入图片描述](https://img-blog.csdnimg.cn/2020080120090066.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l1bmRkdW4=,size_16,color_FFFFFF,t_70)


### 3.微分kd对控制性能的影响


**作用机理:**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200801200417295.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l1bmRkdW4=,size_16,color_FFFFFF,t_70)微分代表error变化斜率,下降时候其为负数;  
 Err随时间是一条斜率小于0的曲线,那么在周期时间内,Err越大,微分的绝对值越大,那么也就对Err的减小速度是起到抑制的作用的,直到最后斜率为0微分才会停止作用。


### PID作用


**比例控制:能迅速反映误差,从而减小误差,但比例控制不能消除稳态误  
 差,KP的加大会引起系统的不稳定;**


**积分控制的作用是:只要系统存在误差,积分控制作用就不断地积累,  
 输出控制量以消除误差。因此只要有足够的时间,积分控制将能完全消  
 除误差,但是积分作用太强会使系统超调加大,甚至使系统出现振荡;**


**微分控制:可以减小超调量,克服振荡,使系统的稳定性提高,同时加快  
 系统的动态响应速度,减小调整时间,从而改善系统的动态性能。**


### 位置型控制算法


位置闭环控制就是根据编码器的脉冲累加测量电机的位置信息,并与目标值进行比较,得到控制偏差,然后通过对偏差的比例、积分、微分进行控制,使偏差趋向于零的过程。


代码:



int Position_PID (int Encoder,int Target)
{
static float Bias,Pwm,Integral_bias,Last_Bias;
Bias=Encoder-Target; //计算偏差
Integral_bias+=Bias; //求出偏差的积分
Pwm=Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias);
Last_Bias=Bias; //保存上一次偏差
return Pwm; //输出
}


### 增量型控制算法


速度闭环控制就是根据单位时间获取的脉冲数(这里使用了M法测速)测量电机的速度信息,并与目标值进行比较,得到控制偏差,然后通过对偏差的比例、积分、微分进行控制,使偏差趋向于零的过程。


Pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]  
 e(k):本次偏差  
 e(k-1):上一次的偏差  
 e(k-2):上上次的偏差  
 Pwm代表增量输出  
 在我们的速度控制闭环系统里面只使用PI控制,因此对PID控制器可简化为以下公式:  
 Pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)


代码实现



int Incremental_PI (int Encoder,int Target)
{
static float Bias,Pwm,Last_bias;
Bias=Encoder-Target; //计算偏差
Pwm+=Velocity_KP*(Bias-Last_bias)+Velocity_KI*Bias; //增量式PI控制器
Last_bias=Bias; //保存上一次偏差
return Pwm; //增量输出
}


增量式控制算法的优点



(1) 增量算法不需要做累加,控制量增量的确定仅与最近几次误差采

样值有关,计算误差或计算精度问题,对控制量的计算影响较小。而位  
 置算法要用到过去的误差的累加值,容易产生大的累加误差。  
 (2)增量式算法得出的是控制量的增量,例如阀门控制中、只输出阀  
 门开度的变化部分,误动作影响小,必要时通过逻辑判断限制或禁止本  
 次输出,不会严重影响系统的工作。而位置算法的输出是控制量的全量  
 输出,误动作影响大。  
 (3) 采用增量算法,易于实现手动到自动的无冲击切换。  
 (4) 利用增量算法,也很容易得出位置算法u(k)= u(k-1)+△u(k)


## 如何调节pid三个参数(重点)


PID算法具有三大特性:  
 ① 稳定性  
 ② 快速性  
 ③ 准确性  
 其实有时候并不一定都得用上  
 比如自动停车系统或者自动蓄水系统只需要用到1和3  
 刹车时用到123等等  
 接下来会举例说明


概念须知:  
 **最大超调量**:是响应曲线的最大峰值与稳态值的差,是评估系统稳定性的一个重要指标;


**调节时间ts**:是指响应曲线从原始工作状态出发,第一次到达输出稳态值所需的时间,是评估系统快速性的一个重要指标;


**稳态误差ess**:是被控量的稳定值与给定值之差,一般用于衡量系统的准确性,


![在这里插入图片描述](https://img-blog.csdnimg.cn/2020080211452643.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l1bmRkdW4=,size_16,color_FFFFFF,t_70)接下来我们需要调整KP,KI,KD的数值以达到最高效率


### KP=500,KI=0,KD=0.响应曲线如图


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200802114653879.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l1bmRkdW4=,size_16,color_FFFFFF,t_70)特点:  
 比例控制较大,出现了震荡


需要加入微分d控制抑制


积分控制为零,但是没有静差,因为比例控制较强  
 (注意:经测试比例系数过大之后可减少静差出现)


### KP=50,KI=0,KD=0.响应曲线如图


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200802114834985.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l1bmRkdW4=,size_16,color_FFFFFF,t_70)特点:  
 比例控制kp减小,无震荡,响应变慢了


无积分控制且比例控制较弱时,会出现静差(积分减少静差)


### KP=500,KI=0,KD=400.响应曲线如图


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200802114938995.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l1bmRkdW4=,size_16,color_FFFFFF,t_70)  
 **特点:  
 1.在比例控制较强的情况下,加入比较大的微分控制,震动次数较小。  
 2.微分控制较大,响应变慢**


### KP=120,KI=0.1,KD=500.响应曲线如图


![在这里插入图片描述](https://img-blog.csdnimg.cn/2020080211503993.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l1bmRkdW4=,size_16,color_FFFFFF,t_70)  
 特点:


目标:控制电机转90°,需要严格控制超调量、和静差。但是对响应速度无要求。


**1.因为响应速度无要求,一般比例控制应该给小一点。  
 2.加大系统的阻尼防止超调,也就是微分参数尽量大。  
 3.另外因为比例参数较小,应该加入积分控制减小静差。**


### 经验pid调参步骤如下(没有理论依据,不一定对,只是经验):


1.将p和i和d设置为**全局变量**,然后调试时候用**debug**会事半功倍


2.一般先把i和d设为0


3.慢慢调p,如果发现怎么调都调不好可以尝试p给个负值试试


4.首先,**先给个很小的p值**,然后给个**稍微大一点的**p值,例如1和200(根据情况而定),看看控制的对象有没有明显的效果,表现为p小的时候,力气很小可以用手轻易掰动他,p大的时候能感受到明显的阻力


5.如果第四部能感受到,那么第五步就是从小到大给p,你会发现控制对象力气越来越大,当到达一定的值时,会发现控制对象开始抖动,这个很正常,因为p太大,pid震荡幅度越来越大,超调了


6,记录产生震荡的p的值为p1,然后往回调,直到停止震荡,记录此时震荡的p值位p2


7.最后根据实际情况,p的值应该在80%p2到90%p2之间


8.p调稳定之后,开始加d,一般情况下在第7步时,i和d为0,假如控制对象是电机,空载情况下只要一个p就足够了,如果这个电机需要带动一定重量的物体旋转,会发现只有p会发生如下情况:用力拨动整个结构,会感受到电机给的力越来越大,继续拨动,直到电机旋转90度,这个时候力已经很大了,此时放开,让他从90度归位到原来位置,会发现他并不会马上停在0度,而是会跑到-10度左右然后弹回来,一直震荡,慢慢靠近0


9.如果出现8的情况,这时候慢慢加d,先检验d有没有作用,和4的p一样,先给个小的d再给个稍微大的d,d太大会震荡,一般1和20差不多,如果发现用8的方法拨动机械,发现机械不会到-10,到-5就往回弹了(大概一个数字,可能直接就到0度也可能),说明d有效果


10.发现9有效果的话,和p一样,慢慢调大,重复8的步骤一直去拨动电机,看他反弹的情况,如果发现d太大已经导致电机抖动了了,就不要再加大了,看看这个效果你满不满意,用在这个项目够不够用,一般到这里是够了


11.如果10的效果还不满意,用户需要的是迅速从90度反应到0度,那么可以考虑适当减少p,p减少了,d可以稍微往上抬,就不会像10那样电机抖动了


### ps:2023/3/27更新:


做了如下优化:  
 优化前:



out_put=sjx_p/1000*err+sjx_d/1000*(err - last_err); //Pd控制器

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

.(img-KxmtBDkL-1715893614132)]

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值