串口中断太频繁会影响到pwm控制电机吗
我以前用pwm控制步进电机,一开始好好的,当串口开始接受数据时步进电机就不正常了,一会正转一会反转,速度也有异常,我的串口数据比较频繁,是不是串口中断影响到了pwm呢?改怎么解决呢 中断服务函数不要放太多东西,建议只放一个标志位,然后在主函数查询 tony90 发表于 2013-3-8 16:19 static/image/common/back.gif中断服务函数不要放太多东西,建议只放一个标志位,然后在主函数查询
pwm是独立工作的吗还是需要cpu参与?如果是独立工作的,那中断服务怎么会影响到pwm呢? 如果是计数器自动产生PWM,并且是自动刷新,是不需要CPU干预的。设置好计数器值启动即可。如果开了中断,会消耗CPU资源。 PWM控制步进电机?这个没看明白。
控制步进电机是按照一定时序变化四个IO口电平来控制的吧。 zhujinliang2124 发表于 2013-3-8 17:28 static/image/common/back.gif
PWM控制步进电机?这个没看明白。
控制步进电机是按照一定时序变化四个IO口电平来控制的吧。 ...
用io口是模拟的时序,当然是pwm好一些 pwm的优先级设置高一些,如果你的mcu支持中断嵌套,应该没问题 串口做轮询,用pwm中断轮询串口,pwm的周期ocr比较输出在接近top和bottom是会产生问题的,比如pwm频率较高。 肯定影响到了,我也试过,就是因为串口接收太频繁的原因 PWM也是靠中断来处理的,你的串口优先级如果没有PWM高,那么电机是不会被影响的。
同样在串口中断处理中,尽量不要采用运算,,让主程序区处理才是是真理。
祝你早日解决问题 中断里面的东西工作时间太长的话,会影响主程序运行的了, 建议中断里面少处理点事,多放在主函数里处理,这个影响就不会太大 你的PWM是用定时计数器来做的还是写在主函数里了 你串口中断里面不要做过多的数据处理,最好只是接受数据。
具体处理可以在主程序中。
另外,你需要检查一下电机的控制过程有没有受串口中断或者程序处理干扰,或者是变量有所改变等等 可能进入中断时间过长 如果你的pwm波是靠TIM定时器自己产生的,那应该不会出现问题的,你肯定是用定时器产生中断来改变电平的吧?回复我看看你是怎么产生pwm波的我再进一步帮你分析分析 电机不工作时串口开着,电机工作时关闭串口,改串口接收标志位查询。 总之一点,电机工作时,会对串口的实时性和便利性产生影响,用起串口来没那么爽了! maochonghao 发表于 2013-4-12 00:26 static/image/common/back.gif
如果你的pwm波是靠TIM定时器自己产生的,那应该不会出现问题的,你肯定是用定时器产生中断来改变电平的吧? ...
pwm是用定时器自己产生的,不是自己模拟的 那你再查查中断优先级,可能是串口的中断优先级优于TIM,导致TIM进入中断时若串口也发生中断事件的时候会让TIM的中断服务程序延迟,进而导致PWM波变形的问题。 maochonghao 发表于 2013-4-12 16:42 static/image/common/back.gif
那你再查查中断优先级,可能是串口的中断优先级优于TIM,导致TIM进入中断时若串口也发生中断事件的时候会让 ...
这个我没考虑到,如果我把串口中断优先级调低的话,会不会影响到串口收数据呢?比如定时器进入中断时串口有数据来了,这时串口数据会不会造成丢失呢? 这样的话STM32的中断会在TIM中断服务处理完的第一时间处理串口的事件。TIM产生PWM的中断服务也就是改一下值然后重新写一个Cmd,花不了几个机器周期,串口说不定这个时候还没完成前一个字节的数据传输呢。你可以先调试一下看看效果,有很多中断的时候确实容易乱。 maochonghao 发表于 2013-4-12 16:54 static/image/common/back.gif
这样的话STM32的中断会在TIM中断服务处理完的第一时间处理串口的事件。TIM产生PWM的中断服务也就是改一下值 ...
我用的avr,感觉中断优先级影响的可能性大一点,有时间试一下 看你的频繁程度了 还是少用为好,多少会有影响的
页:
[1]