7.8.1. 模块介绍

7.8.1.1. 术语定义

术语/缩略语

定义及说明

PWM

Pulse-Width Modulation,脉冲宽度控制,简称脉宽调制

TBC

Time Base Counter,时基计数器,用于产生锯齿波

占空比

PWM信号中,高电平保持的时间 与 该PWM时钟周期的时间之比

分辨率

占空比最小能达到多少,如8位的PWM理论分辨率是1:255

Up Count

增模式, 计数方式是递增计数,如从0计数到80、之后又从0到80(波形是锯齿波)

Down Count

减模式, 计数方式是递减计数,如从80计数到0、之后又从80到0(波形是锯齿波)

单斜率

单个方向的计数,增模式、减模式都属于单斜率

Up&Down Count

增减模式,计数方向有两个,如从0计数到80、然后从80到0(波形是三角波),
增、减两个过程合起来算一个周期

双斜率

两个方向的计数,增减模式属于双斜率

7.8.1.2. PWM 工作原理

7.8.1.2.1. PWM 信号

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

../../../_images/pwm_wave.png

图 7.30 典型的 PWM 信号波形

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

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

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

7.8.1.2.2. 增模式

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

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

../../../_images/generate_pwm_up.png

图 7.31 由增模式锯齿波产生 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 自定义参数

7.8.1.2.3. 减模式

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

../../../_images/generate_pwm_down.png

图 7.32 由减模式锯齿波产生 PWM 信号的过程示意图

7.8.1.2.4. 增减模式

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

../../../_images/generate_pwm_updown.png

图 7.33 由增减模式锯齿波产生 PWM 信号的过程示意图

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

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

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

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

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

小技巧

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

7.8.1.3. PWM 功能简介

PWM的硬件设计,使用时基计数器产生上述的锯齿波信号,使用一个比较器可同时产生两路PWM信号。 PWM模块的硬件原理图可简化如下:

../../../_images/hw_system1.png

图 7.34 简化的 PWM 硬件框图

PWM模块共支持4个PWM通道,上图只画出了其中一个PWM通道,每个通道的输出信号有两个:PWMx0和PWMx1,对应DTS参数中的 action0和action1 配置。 PWM 自定义参数

PWM 模块支持的功能特性有:

  • 每个PWM通道可以产生两个PWM输出信号: PWMx0 和 PWMx1,可遵循如下配置
    • 两个独立的单边输出

    • 两个独立的双边对称输出

    • 一个独立的双边非对称输出

  • 专用的16位可配置周期和频率的时基计数器(Time Base Counter)

  • 系统时钟100MHz

  • 多种事件可配置产生对应的中断

备注

PWM硬件Spec文档中,将两个PWM输出信号称作 PWMxA 和 PWMxB,为了避免和阈值 CMPA、CMPB 混淆,软件设计中将两个输出信号称作 PWMx0 和 PWMx1。

在CMPA、CMPB同时使用的情况下,锯齿波就会有两次和阈值的比较,共产生4个关键时点:

锯齿波信号波段

CMPA

CMPB

增斜率段

CAU (Compare A Up)

CBU (Compare B Up)

减斜率段

CAD (Compare A Down)

CBD (Compare B Down)

以增减模式的锯齿波为例,共6个关键时点:

../../../_images/cmpa_cmpb.png

图 7.35 增减模式的6个关键时点

上图中的,6个关机时点的触发行为配置是:(行为类型定义见 PWM 自定义参数

关键时点

Action类型

CBD

none

CBU

none

CAD

high

CAU

none

PRD

low

ZRO

low