请添加图片描述
位置环做为外环,速度环作为内环。
可以看到外环的输出值作为内环的目标值,外环计算一次pid,我们根据pid公式可以知道,当离位置目标越来越近时,第一个误差(外环误差)就越来越小,以至于输出的内环目标值就越来越小,所以最终达到的效果就是,离目标值越近,速度越小。(理想情况下,要调节好pid参数,不然系统也会崩溃)
注意:双环控制的时候,外环PID参数调节幅度不要太大,这对于整个曲线的影响很大

PID双环控制的前期准备

代码实现步骤

请添加图片描述
PID初始化,因为用到两个环,所以要两个环的PID参数都初始化
请添加图片描述
设定目标值,我直接在pid初始化里设置了,只要设置外环的,内环的不用设置,因为内环的目标值,就是外环的输出值。

也通过按键设置
请添加图片描述

PID双环控制
在定时器中断(1ms)里,每50ms计算一次当前编码器的总计数值,并通过这个值进行外环PID(位置环)计算,得到目标速度,要经过速度限幅(防止速度过快),然后存放到g_motor_data.motor_pwm变量(临时存放而已),根据目标速度,再进行速度环PID计算,最终得出要输出的pwm比较值,存放g_motor_data.motor_pwm变量(最终存放),然后再限制pwm比较值输出
请添加图片描述

效果图

请添加图片描述
可以发现超调明显消失,效果比位置单环pid好。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐