Edit online

PWM 工作原理

PWM 信号

PWM 信号通常由一列占空比不同的矩形脉冲构成,其占空比可以调节。用数字输出来控制 PWM 占空比,占空比提高意味着高电平脉宽增大,输出的能量就会增加,PWM 就相当于一个 功率版的 DA 转换模块。下图是一个典型的 PWM 信号波形:

../../images/pwm_wave1.png
1. 典型的 PWM 信号波形

占空比的计算方法: 占空比 = (脉宽时间 / 周期) * 100%

结合上图,我们可以说: 脉宽时间 1 相比 脉宽时间 2 提供较小的占空比。

PWM 通常用于背光亮度调节、电机控制、舵机控制等。本文仅限于 PWM 调节背光的功能,通过调节 PWM 中的占空比,达到控制 LED 背光电流的通和断,进而可调整背光亮度。

增模式

为了灵活调节 PWM 信号的占空比,要先想办法产生一个递增、或者递减的锯齿波信号,另外再结合一个比较器来跟一个阈值进行比较,当满足条件时进行电平反转,这样达到的效果就是通过调节“阈值”来调节了占空比。

下图是由一个 递增变化 的锯齿波产生 PWM 信号的过程:

../../images/generate_pwm_up1.png
2. 由增模式锯齿波产生 PWM 信号的过程示意

图中 Tpwm 表示 PWM 信号的周期值,另外有 三个关键的时间点(下文简称关键时点) (标注橙色圆圈,为了简洁只标注了最后一个周期)在下文中会频繁使用:

  • ZRO

    Zero Point 的缩写,锯齿波的起始点

  • PRD

    Preiod Point 的缩写,锯齿波到达一个满周期的时间点

  • CMP

    Compare Point 的缩写,锯齿波到达了阈值的时间点,如上图中的 CMP 值为 7。

提示:

实际上,PWM 模块支持设置两个 CMP 值:CMPA 和 CMPB。受限于 Linux 中 PWM 子系统架构的接口设计,根据 duty 参数计算只能得到一个 CMP 值,所以 CMPB 和 CMPA 实际上数值保持一致

这些关键时点的触发行为 Action 有四种类型,详见 )驱动配置

减模式

下图是由一个 递减变化 的锯齿波产生 PWM 信号的过程:

../../images/generate_pwm_down1.png
3. 由减模式锯齿波产生 PWM 信号的过程示意

增减模式

下图是由一个 同时有递减、递减变化 的锯齿波产生 PWM 信号的过程:

../../images/generate_pwm_updown1.png
4. 由增减模式锯齿波产生 PWM 信号的过程示意

比较以上三种模式的 PWM 产生过程,可以看到:

  • 三种模式可以产生同样效果的 PWM 信号

  • 配置 ZRO、CMP(增减模式中有两处 CMP)、PRD 的触发行为(Action),可产生不同的 PWM 信号

  • CMP 的取值,直接决定了占空比,所以用户看到的 调节占空比就是通过调节 CMP 值来实现

  • PRD 的值,决定了 PWM 信号的周期值 Tpwm

提示:

具体选择哪一种模式,要依据用户场景的需求特点,建议按 从简原则:首选相对简单的单斜率模式