AVR多路PWM问题
我想让AVR单片机输出多路PWM,如何通过一个定时器输出两路频率一样,占空比不一样的PWM信号?用ATtiny系列单片机...
我想让AVR单片机输出多路PWM,如何通过一个定时器输出两路频率一样,占空比不一样的PWM信号?
用ATtiny 系列单片机 展开
用ATtiny 系列单片机 展开
1个回答
展开全部
如果你用单片机本身的PWM功能,应该没有办法实现你的要求。
但如果你想用定时器来产生两种频率一样,占空比不一样的PWM信号还是可以的。
首先你定义两个全局变量,如PwmCnt1和PwmCnt2。
比如定时器溢出时间是1ms,你在中断中把这两个变量都自加1。
然后在主程序主循环中做如下判断:
if(PwmCnt1 < 100)
PWM输出1
else if(PwmCnt1 < 200)
PWM输出0
else
PwmCnt1 = 0;
这样你就可以得到一个占空比为1的方波。
通过修改这两个值,你可以得到你想要的波形。当然最小时间是你定时器的溢出时间
不过这样做也会有问题,就是一旦在主程序中进入了其它的中断,就会影响PWM的精度。
对于AVR来说,还是使用单片机本身的PWM功能。我用过mega64的单片机,驱动四个步进电机。可以同时产生4路PWM信号。
但如果你想用定时器来产生两种频率一样,占空比不一样的PWM信号还是可以的。
首先你定义两个全局变量,如PwmCnt1和PwmCnt2。
比如定时器溢出时间是1ms,你在中断中把这两个变量都自加1。
然后在主程序主循环中做如下判断:
if(PwmCnt1 < 100)
PWM输出1
else if(PwmCnt1 < 200)
PWM输出0
else
PwmCnt1 = 0;
这样你就可以得到一个占空比为1的方波。
通过修改这两个值,你可以得到你想要的波形。当然最小时间是你定时器的溢出时间
不过这样做也会有问题,就是一旦在主程序中进入了其它的中断,就会影响PWM的精度。
对于AVR来说,还是使用单片机本身的PWM功能。我用过mega64的单片机,驱动四个步进电机。可以同时产生4路PWM信号。
更多追问追答
追问
这种方法精度不够,你说的用过mega64的单片机驱动四个步进电机。可以同时产生4路PWM信号,那东西本来就有4个定时器,输出4路PWM没问题。
我看到AVR的单片机资料,一般有两路定时器的,相对来说就有4路PWM输出功能,所以我才问怎么样才能实现而已,而且我要输出的PWM频率是一样的,你该不会像让单片机一直扫描比较寄存器吧,那样还是会有点小问题的。
追答
能说说你想做什么吗?驱动什么东西,看看有没有别的办法解决。可以Q我
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询