找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1341|回复: 0
收起左侧

零基础制作平衡小车【连载】11---位置式PID调参(附源码)

[复制链接]
ID:223481 发表于 2020-12-17 22:06 | 显示全部楼层 |阅读模式
之前章节已经把PID从理论到时间基本上讲完了,剩下一个位置式PID就能收尾了。赶紧更完,就开始平衡小车下一步制作了。最近也是比较忙,更贴慢了很多。不过,这个零基础教程我还是要坚持写完的。

位置式PID部分主要代码
/********************位置式 PID 控制设计************************************/unsigned int LocPIDCalc(int NextPoint){  int iError,dError;  iError = SetPoint - NextPoint; //求出当前偏差  SumError += iError; //对偏差进行积分  dError = iError - LastError; //对偏差求微分  LastError = iError;                //转换赋值    //返回位置式PID计算结果  return(Proportion * iError //比例项  + Integral * SumError //积分项  + Derivative * dError); //微分项}

注释已经很详细了,看了之前我的帖子应该能看的懂代码的。推导过程不明白的在往前看看吧。

之后在中断中直接调用公式即可,计算出来的结果直接赋值给PWM(计算结果既是PWM,计算出来是0,PWM就是0)

count=(short)(TIM2 -> CNT/4);   TIM2 -> CNT=0;/* 计数得到增量式PID的增量数值 */PWM_Duty=LocPIDCalc(count); //将计算的PWM送入寄存器TIM_SetCompare1(TIM3,PWM_Duty);

完事了,是不是很简单。

位置式PID调参

位置式PID和增量式PID调参还是有点区别的。下面说下具体调参过程和思路。

思路还是将ID系数设为0,先调节单独的P。

    当P = 2时,如下图:



是不是有点懵逼,怎么趋近一条直线了?不应该是越来越靠近目标值吗?如果你这样想的,那真是还没理解公式呀。仔细看看公式,当ID为0,只有一个P时,是不是应该就是一条直线?下面说下为啥是直线。第一次采样:假设初始化目标值为100个脉冲,第一次采样测得脉冲为0个,此时误差为100,在乘上系数2,最终占空比为200。第二次采样:假设采样50个脉冲,误差为50,乘上系数,2,最终得占空比为100.第三次采样:假设采样脉冲为25,误差为75,乘上系数2,最终占空比为150

以此循环得出结果:误差越大,占空比越大,误差越小,占空比越小,也就是说误差越大输出越大,误差越小,输出越小。在经过N次采样后,会得到一个平衡值、平衡的条件是计算出来的占空比1所对应的编码器输出值被目标值减去之后再乘上P,得出来的占空比2和占空比相同。本例程实际测得当占空比为146,使得编码器输出28个脉冲, 目标值100-28=72,72乘上P系数2=144,144和146非常接近,也就相当于平衡了。因此只有P项时,会输出一条直线。

    当P = 5时,如下图:

    此时抖动比较大,不过最终还会趋近直线。这里抖动大,也说明响应速度快,对比增量式PID调节方法,增量式PID调节P时,是将系统在目标值附近抖动两三下之后迅速稳定下来为最佳,我们这里也可以这样来调节,只不过增量式是趋近于目标值,而位置式是趋近于一条直线。


这里我们选择P=3,如下图:


我们看上图抖动两三下就可以趋近于一条直线,说明这个P差不多可以了。

    当P = 3时,调节I,当P = 3 ,I = 1时如下图:



你会发现曲线会越过目标值,因为加入了历史误差,在第一次未达到目标值期间,累积误差都是为正的,再加上P,使得系统超过目标值。当采样值超过目标之后,累积误差就会出现负值,将会抵消一部分前面的正值误差,因此会出现不对称的情况。之前只有P时,直线上下震动的赋值是对称的,加入累积误差之后,图中横线是目标值,在目标值上方的误差值都为正(因为都是小于目标值,误差=目标值-当前值>0),说明大多数情况都是未能达到目标值。因此系统会慢慢将这些正的误差值加起来代入到系统,会使得系统慢慢趋近于目标值,而不是像上面一样形成一条直线。

    当P = 3 ,I = 2时如下图:



你会发现,斜线更抖了,因为I的作用增强了,响应更快了。

    加入D,当P = 3 ,I = 2,D = -0.1时如下图:曲线变得很平顺了,没有上一张图中的抖动了,这个效果还是不错的。

    加入D,当P = 3 ,I = 2,D = -2时如下图:D大了会出现回弹,说明D抑制的太过了。


因此当P = 3 ,I = 2,D = -0.1使得整体效果最佳。至此,PID完结。

基本定时器: PWM输出编码器输入捕获检测电机转速 -位置式PID.7z

196.31 KB, 下载次数: 14, 下载积分: 黑币 -5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表