注意哦,本文章关于cubemx配置的部分都在上一篇的速度环中实现了,速度环和位置环的本质都是对定时器设置为编码器模式,通过对获得的脉冲数值进行操作。
举个栗子:速度环--在20ms的定时器中断回调函数中读取一次定时器的脉冲数值,我们设定的速度本质上就是我们想要在20ms内获得我们所需要的脉冲数值,当然轮子转速越快,单位时间内所获得的脉冲数值就会更多。所以速度环PID的作用,主要是针对于单位时间内获得的脉冲数值和我们的希望单位时间内获得的目标脉冲数值进行控制和调整。
而位置环--也是在20ms的定时器中断回调函数中读取一次定时器的脉冲数值,但是我们需要将我们每次读出来的脉冲数值进行累加,车轮正转,那么脉冲累计数值增加,车轮反转,脉冲累计数值减少。我们设定车轮行进固定的距离也就是让编码器获得额定的脉冲累计数值,PID的作用就是我们设定的目标脉冲累计数值和当前脉冲累计数值进行控制和调整。
所以二者对初始化配置都是一致的,只是代码实现的方式略有不同。
位置环代码实现
大家对位置环PID的实现和速度环PID的实现产生混淆的话,可以对二者的代码实现进行对比,其实说白了,位置环和速度环的最大区别就是,位置环是对编码器获得的脉冲累计数值作为反馈值,速度环是对编码器单位时间内获得的脉冲数值作为反馈值。
大家在对上一篇的速度环的文章如果可以较好的实现的话,这篇位置环对大家来说,实现起来还是较为简单的。
说明:从开源中来到开源中去,感谢其他数不清的开源博主的奉献精神,本文章借鉴了很多开源文章,本人只是为了大家更加快速的可以在代码中实现速度环PID,如有侵权,麻烦告知,本人一定积极配合原作者的意愿进行修改。