电机驱动开发历程(六)

单片机这种东西,因为资源有限,有一些再PC上很好的机制运行在单片机上,就会有一些匪夷所思的现象出来。
这些天一直在做PID速度调节,需要上位机下位机连携运作,可是我发现,每次上位机发送串口数据的时候,电机总是突然停止运转,并且电机发出卡一下的声音,经过调查取证,发现是串口数据接收完毕后,处理数据的时候,就这个发生问题。
细细研究我的数据处理函数,就是根据接收到的数据来判断是什么命令,难道是一些特定的函数处理比较费时间?比较可疑的是这三个函数strcmp(),atoi(),atof()这三个函数,观察力下,atoi(),atof()这两个函数耗时确实会长一些。
但是这个处理时必须的。我现在的做法时接收到串口数据,处理完毕之后,调用更换参数流程,这个流程是“停电机命令”–“等待1秒钟”–“重置各流程状态至初始状态,整个流程从上电找零点开始运行”。这个过程不适合单片机的处理,因为会出现上述问题。现在要做的修改为:接收到串口数据,先不处理数据,而是“停电机命令”–“等待1秒钟”–“处理串口数据”–“重置各流程状态至初始状态,整个流程从上电找零点开始运行”,来看一看实际效果。。。
实际效果莫,应该来说,比改进钱稍微有些改善,但是还有些问题,感觉是一下子速度起来不受控制一样。。。
这个问题还没解决,又冒出一个新问题,昨天还是前天在编码器采集这边加了消除抖动的处理,刚刚电机出现堵转,编码器看数据缩水了奖金80个编码,然后防堵转保护程序看着日志是起作用了,但是电流仍然比较大。。。
还有一个问题,第一次示教的数据我会保存下来,然后出现编码器数据缩水的情况下,每次上电找零点后,点位跑不到位。----这个问题可能是机构上门轴螺丝没有锁紧,现在螺丝已经锁紧,待会儿再试一把。


以上分割线,今天实在是太乱了,我整理了一下代码,目前代码里可以启动电机转动的地方太多了,太乱了。要将启动电机,停止电机做成一个功能,归类我目前需要启动电机的地方,优化一些重复的赋值,目的是,我能清除的看到,我到底是在哪里启动了电机,停止了电机。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值