PWM有两大属性:
频率:用PWM信号快速开关LED,由于开关频率会产生LED闪烁,因此PWM频率应大于100 Hz,确保人眼不会感觉到闪烁。
占空比:PWM通过改变占空比、保持负载电流恒定以控制LED的亮度。LED的平均电流取决于占空比。平均电流会随占空比的提升而升高,进而提高亮度。占空比在0%和100%之间的步长数量应满足应用中需要调节的不同亮度级数量要求。举例来说,如果应用在完全关闭(0%)到完全开启(100%)之间需要20个亮度级,那么就应支持5%的步长(除完全关闭之外包含20个步长)。
用微控制器实现PWM有两种方法。我们可用简单的定时器/计数器在固件中实现整个PWM逻辑,也可以选择集成硬件PWM功能的高级控制器来实现。
基于固件的PWM实现方案
简单的固件实现方案需要定时器和中断服务子程序(ISR)。定时器在与占空比每个步长大小的相同时间内创造中断。举例来说,如果PWM周期为10ms(100Hz)而步长大小为1ms(10%的占空比),那么定时器就要每1ms对CPU发出中断,即:定时器周期 = 脉冲宽度/步长大小。
图1给出了ISR中的逻辑。PULSE_WIDTH和ON_TIME代表PWM步长数量的脉冲宽度和开启时间。举例来说,PULSE_WIDTH = 5即满足5个亮度级的要求,而ON_TIME = 2则满足40%的占空比要求。ISR变量isrVar控制输出何时切换开/关。该逻辑可方便地进行扩展,从而支持多个LED引脚,而每个LED都有不同的占空比。
图1:固件PWM ISR逻辑
基于硬件的PWM实现方案
高级控制器有驱动PWM的专用硬件块。举例来说,赛普拉斯的PSoC4有一个TCPWM硬件块,能实现基于硬件的PWM驱动。通常说来,我们用带有比较功能的定时器来实现它,逻辑类似于上面讨论的固件逻辑。定时器将采用比较寄存器和周期寄存器。周期寄存器载入的值等于脉冲宽度,而比较寄存器载入的值等于开启时间。只要比较值大于tick值,定时器输出就会走高,反之就会走低。此外,tick值达到最大(16位定时器为65535)时,会自动回滚为零。当输出布线到端口引脚,从而能用硬件块直接驱动LED。
表1总结了基于固件和基于硬件的PWM实现方案之间的差别。
表1:基于固件和基于硬件的PWM实现方案
我们在本部分分析了实现PWM的不同方法。在第三部分中,我们将探讨设计具有电容式感应和LED照明的系统时所遇到的常见挑战,以及应对方法。