[51单片机] 电机控制,串口通信冲突

[复制链接]
2641|16
 楼主| 心印菩提 发表于 2015-8-22 10:50 | 显示全部楼层 |阅读模式
电机驱动写好了
但是发现这样一个问题
如果我用串口收上位机的指令,控制电机,没有问题
但是一但我使用串口发数据,比如我要发转速数据给上位机,发一次电机就噔的卡一下,高转速的时候卡一下直接就停转了
开始我发数据是使用的串口中断,收到上位机发的指令了,就发出去一个转速数据,发现这样卡电机
然后我把发数据放到定时器中断里面,定时发,还是卡
请问谁知道这是怎么回事呢
非常感谢
我用的C8051F040
 楼主| 心印菩提 发表于 2015-8-22 13:14 来自手机 | 显示全部楼层
我发现卡顿是由于printf函数引起的,puts也一样
 楼主| 心印菩提 发表于 2015-8-22 13:15 来自手机 | 显示全部楼层
不知是不是因为这函数占的时间太长了引起的,请问有没有解决的办法呢
JY-DX-JY 发表于 2015-8-22 15:32 | 显示全部楼层
不要用printf函数,自己写一个串口发送子程序。
joyme 发表于 2015-8-22 15:36 | 显示全部楼层
中断发送,不要用有延时的函数
ningling_21 发表于 2015-8-22 15:39 | 显示全部楼层
自己写串口收发函数
mmuuss586 发表于 2015-8-22 19:05 | 显示全部楼层

中断程序写的太长了
libangyi 发表于 2015-8-22 20:53 | 显示全部楼层
用示波器看看你的控制电机的引脚,或者你系统电源纹波
songchenping 发表于 2015-8-22 21:17 | 显示全部楼层
你控制电机的方式是个什么样子啊。
 楼主| 心印菩提 发表于 2015-8-22 21:55 | 显示全部楼层
mmuuss586 发表于 2015-8-22 19:05
中断程序写的太长了

请问串口中断长了会有什么影响吗?
定时器中断太长怕他一个中断没执行完下一个中断就到达,这比较容易理解
但是串口中断,收发都是我自己控制的,他即使被其他中断打断了,也是可以恢复的撒
 楼主| 心印菩提 发表于 2015-8-22 21:58 | 显示全部楼层
songchenping 发表于 2015-8-22 21:17
你控制电机的方式是个什么样子啊。

IR2233
上管自举驱动
全用NMOS
控制方式用H_PWM--L_ON
nixianmin 发表于 2015-8-22 22:37 | 显示全部楼层
肯定时间没控制好,如果在中断发送数据的时候,数据长了你是不是要死等,这样造成驱动换相不及时或者其他问题
试试把串口发送,放到主循环里
mmuuss586 发表于 2015-8-23 11:37 | 显示全部楼层
心印菩提 发表于 2015-8-22 21:55
请问串口中断长了会有什么影响吗?
定时器中断太长怕他一个中断没执行完下一个中断就到达,这比较容易理 ...

另外啥电机呢?
 楼主| 心印菩提 发表于 2015-8-23 13:14 | 显示全部楼层

24V 250W无刷直流电机
huang1007 发表于 2015-8-24 10:07 | 显示全部楼层
肯定是printf方法用时太长产生的问题,你这个方法用时过长,控制电机的主方法就被阻塞了.自己写一个缓冲区,发数据的时候把数据写入到缓冲区,然后利用定时器中断或者串口发送中断从缓冲区取出一个字节,然后发送
 楼主| 心印菩提 发表于 2015-8-24 11:43 来自手机 | 显示全部楼层
huang1007 发表于 2015-8-24 10:07
肯定是printf方法用时太长产生的问题,你这个方法用时过长,控制电机的主方法就被阻塞了.自己写一个缓冲区,发 ...

看了很多回复我基本理解了
你说的方法我觉得很有道理
不过对我这种边学边搞的人感觉略难啊………
mmuuss586 发表于 2015-8-24 12:17 | 显示全部楼层
心印菩提 发表于 2015-8-23 13:14
24V 250W无刷直流电机

那就只能好好查下程序了,设置串口中断优先级看看;

不过我用的是M4,控制2个无刷,和你有所区别;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

39

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部