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

之前章节已经把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。

  1. 当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项时,会输出一条直线。

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

  2. 加入D,当P = 3 ,I = 2,D = -2时如下图:
    在这里插入图片描述
    D大了会出现回弹,说明D抑制的太过了。

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

关注公众号回复
“位置式PID”
获取源码。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值