通过单片机定时器中断实现软件模拟而非硬件模块实现的pwm。 具体的流程如下: 1.根据产品功能分析需要的pwm功能的频率,以及占空比可以调节的档位数。 比如对led进行调光,为了让人眼不感觉到闪烁,我们选择100Hz的频率,根据功能我们要提供10档的亮度调节。 2.根据公式pwm/档位数得到定时器的中断频率,以1中提到的例子,定时器中断周期=1/100/10s=1ms。 3.将定时器的中断周期设置为2所计算出的周期,定义两个全局变量,一个对中断次数进行计数。 在定时器中断中,计算变量a++,当变量大于等于档位数时,变量a清零,同时io口置高,当变量a大于变量b时,io口置低。 需要注意的是,输出的占空比会抖动,原因是程序中断保护现场花费的时间每次进出中断都有偏差,主程序为了做变量访问互斥可能会关闭中断,这里也会导致偏差,另外当有多个中断时,特别是同级以及更高优先级的中断不能打断,当定时器中断到来时,必须要等待其他同优先级正在执行的中断执行完成,也会导致偏差。 所以必须计算所有这些导致的偏差,特别要注意要把所有同优先级以及更高优先级的中断的执行时间,评估总的偏差是否会影响功能,比如led会不会闪烁。 (责任编辑:admin) |