闭环后电机疯转问题

前言:本章接上回PID闭环,之后我开始了调试小车让他上坡的经历,以及之后的寻迹,本次主要讲一下在这个过程中我出现的问题以及解决方案。

一.闭环电机疯转

闭环之后我开始写控制电机方向的代码,

开始,我把所有的pwm值都赋值为正,但是麦轮由于镜像对称有一对反转,我需要给这对电机赋负值他才会正传(按照我的预想正转),由于这样写代码会非常不好看对我来说也十分不友善,所以我打算全部给正值让他们都正转,当时在我看来,只要更改代码中set_pwm这个的AIN1和AIN2的高低电平就可以实现,但结果是两个电机疯转,电机值一路满偏。

 

后来想我只更改了AIN1和AIN2的高低电平,但是编码器的AB相却没有改变。但是这与编码器又有什么关系呢?下面我将会将两者之间的关系展开进行讨论

 首先,由于我更改了AIN1和AIN2,所以电机如果给了pwm就会反向转,并且编码器的值为负值(这一点很重要)

之后我在仿真里给了一个正值(目标值)-->目标电机开始疯转,我们从一般的逻辑开始分析,给了目标值,由于编码器值目前为0,所以经过增量式PID函数之后pwm(电机值)值会被输出赋给set_pwm()这个函数,又因为pwm肯定为正值所以开始转向我改变后的方向,但是由于编码器的AB相没有调换,导致编码器的数值由0变为一个负值,在PID函数里是目标值减去一个目前值(编码器的值(目前为负数)),所以PWM会继续变大,继续赋给set_pwm()这个函数,pwm>0,继续按我设定的方向进行转动,编码器数值的绝对值增大,但是实际值为负值,所以再次进入PID函数PWM会继续变大,所以电机会疯转!!!

解决方法:很简单,将编码器的AB相换一下,这样捕获到编码器的值就是正值了,所以编码器,AIN1/AIN2,PWM输出引脚是对应的!

        闭环之后还有一些电机疯转的其他情况但是基本上都可以围绕上面的进行推测。遇到上述情况,首先,进入debug看看编码器是否有数值,有数值但为负,CCR(即pwm值)持续增加即为AB项反接,调换即可;如果编码器数值异常(与你的目标值差距过大或者一会正一会负)可以换一根电机线给这个电机排查是否电机G掉了,如果依然数值异常可以判断电机编码器异常;若编码器数值几乎为0,没有变化可以检查编码器电源等是否连接,有松动。具体问题具体分析,控制变量依次排查!!!

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值