位置式PID——小车类学习心得

2023-10-29

位置式PID——小车类学习心得

位置式PID:公式为:val=kp * err+ki * err_sum+kd*(err-err_last)

err变量=期望值-实际值,也就是我们常说的误差
err_last变量=上一次的误差
err_sum变量=误差的累加

现在总结一下位置式PID算法中 P,I,D三个参数的作用以及含义

(## 在小车车轮编码器下分析)

P变量:中文名字是比例调节,个人浅显理解是加入这个变量可以使实际值更快的到达你设定的期望值,P的比例越大达到期望值的时间就越短,但是P不是越大越好,如果P过大,确实会让实际值更快的达到期望值,但是伴随而来的问题也很大,首先:1.会让系统更加不稳定,会出现大幅度振荡,会让你的实际值在期望值这个范围内振荡,你们想想,达到速度越快出现误差的可能性就越大,换句话说就是刹不住车,会一下子出现超出期望值太多,然后下一次自控又会低于期望值。如此反复
如果P比例项过小会让实际值在低于期望值的位置反复振荡

这是P很大的曲线效果图

![这是图](https://img-blog.csdnimg.cn/35d276df2请添加图片描述

这是P过小的曲线图

在这里插入图片描述
在做小车时,需要根据编码值来确定PWM的输出,那么想要解决这P过大情况,这时就要加入我们的**“I”**变量

I变量: I变量的作用是消除静态误差,I起作用的变量是err_sum,误差的积分,当仅在P的作用下发现系统的实际值不能到达期望值,那么就需要引入I变量来消除静态误差,怎么解释呢,我来举个例子,拿小车转速来举个例子吧,比如我小车的编码器期望值是:50,轮子不动的状态下实际值是:0,kp设置为30.ki设置为:2;
期望值:50,实际值:0,kp=30,ki=2;
在不引入i的作用下计算 PWM=kp * err+ki * err_sum+kd*(err-err_last)
第一次运算
err=50-0=50, PWM=5030=1500
那么PWM1500,我们假设这时编码器开始转动,获取到的值是20;
第二次运算
期望值:50 ,实际值:20,kp=30,ki=2
err=50-20=30,PWM=30
30=900
那么PWM=900,这时编码器开始改变速,获取到的值是15;
第三次运算
期望值:50 ,实际值:15,kp=30,ki=2
err=50-15=45,PWM=30*45=1350
那么PWM=1350,这时编码器开始改变转速,获取到的值是18;

你会发现这时候怎么样转速会一直在期望值下跳动,就是不会等于期望值30,速度过快了PWM输出就会降低。

这时候就是会到达了一定的稳态,那么这时候就需要加入I的作用了,消除静态误差。
第一次运算
err=50-0=50,err_sum+=err=50 PWM=5030+250=1600
那么PWM1600,我们假设这时编码器开始转动,获取到的值是23;
第二次运算
err=50-23=27,err_sum+=err=77,PWM=2730+772=964
那么PWM964,获取到的值是17;这时你可能会发现,这不也一样会跳动严重吗?哪里会消除静态误差啊,不知道你发现没有这两次运算都比单纯的P比例作用时的PWM大,而且你要知道i变量的一个积分的作用,运行的次数越多作用就会越大,单片机的速度多快不用我多说吧?

这里需要注意的点是I变量是积分,一定要积分限幅,要不然会导致PID的计算出现问题


剩下的D和其他小车的问题下次在写吧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

位置式PID——小车类学习心得 的相关文章

随机推荐