今天我们来聊一聊pid如果控制轮子转动位置
- 前期准备
- 调试过程
前期准备
需要准备的几个条件:
1.获取实时编码器的计数值
2.写好pid控制算法的函数
3.设定好时间多久执行一次pid计算,并设置限幅输出。
4.多久执行一次pid输出
接下来我们看看这几个部分的代码:
第1部分:通过在定时器中断里来定时去计算编码器的累计值。
第2部分:写好pid算法
第三部分:我这里是50ms进行一次PID计算(放在中断时间为1ms的定时器,且累积中断50次,才进行PID计算),并设置输出限幅。
第4部分:多久执行一次PID输出,我这里是150ms执行一次
调试过程
首先确保数据能发送给PID调试助手,我这里是50ms就上传一次波形。
通过按键来设置我们想要达到的位置(相让车轮再正转几圈,或反转几圈),
因为4分频,所以一圈编码器计数44次,又因为减速比为30(电机转1次,编码转30次。),所以一圈编码累计的变化次数绝对值为:44*30 = 1320.
接下来实际调参,用的是增量式PID(位置式效果也差不多),因为编码器有自带积分效果,所以我们积分项就设置为0,只使用PD,接下来我们看看曲线。
可以看到轮子回先正转超过一圈,再反转一点,再维持再一圈的效果上,单单用位置环来控制位置,超调量明显,
效果不理想,下章节我们来用双环pid(速度位置环)调调看。