青苹果 发表于 2017-7-21 08:37 但占空比是一直变化的,除去6路外其他的都是间断工作的,出来的效果感觉就像是处理不及时,很差 |
用定时器 1路PWM和16路一个意思 |
yzwzfyz 发表于 2017-7-20 23:05 能具体点吗?现在是用的定时器中断来达到PWM的效果,但模拟出来的PWM周期不对,而且因为占空比比较多将各通道占空比弄成数组的形式来去填充,结果单片机的速度貌似不够,出来的效果不对 |
做16对(16个计时器R_x、16个起动标记位B_x,16个计时常量寄存器C_x,x=1-16)+1个计时器,16对是为16路置1服务的,1个是周期计时器。 当T0中断时,做如下工作: 周期计时器:计满后(例如50ms),将16路输出清0,并复位16个计时器R_x=0,并起动这16个计时器B_X=1,同时将自已复位再计。 16路置1计时器:当B_X=1时,R_x+1计数;当B_X=0时,R_x不计数;当R_x=C_x时,将第X路输出置1,并清B_X=0。 如此只要在主程序中,将16个C_x付值(例0-50ms),16路PWM就OK了。 |
对了,PWM波形一共有100格,每格50us |
用一个时间中断即可,如T0: |