ZHCACB7 March   2023 MSPM0G1105 , MSPM0G1106 , MSPM0G1107 , MSPM0G1505 , MSPM0G1506 , MSPM0G1507 , MSPM0G3105 , MSPM0G3106 , MSPM0G3107 , MSPM0G3505 , MSPM0G3506 , MSPM0G3507 , MSPM0L1105 , MSPM0L1106 , MSPM0L1303 , MSPM0L1304 , MSPM0L1305 , MSPM0L1306 , MSPM0L1343 , MSPM0L1344 , MSPM0L1345 , MSPM0L1346

 

  1.   1

说明

PWM 占空比与 LED 的亮度直接相关。在应用中使用 LED 作为指示灯或光源时,可以使用 PWM 信号来驱动 LED 亮度和功耗。MPSM0 中的计时器模块可用于生成具有不同频率和占空比的 PWM 信号。该示例代码以心跳方式调暗和调亮 LED,以显示可用于驱动 LED 的整个 PWM 占空比范围。

图 1 显示了该示例中使用的外设的功能方框图。

GUID-20230223-SS0I-0BRX-SGNR-9KT4SJ141RDN-low.svg图 1 子系统功能方框图

所需外设

该应用需要一个计时器、一个器件引脚和一个板载 LED。

表 1
子块功能 外设使用 说明

PWM 生成

(1 个)计时器 G

在代码中称为 PWM_0_INST

IOMUX 子块

1 引脚

(1 个)PWM 输出

兼容器件

根据表 1 中的要求,该示例与表 2 中的器件兼容。相应的 EVM 可用于原型设计。

表 2
兼容器件 EVM

MSPM0Lxxx

LP-MSPM0L1306

MSPM0Gxxx

LP-MSPM0G3507

设计步骤

  1. 确定所需的 PWM 输出频率和分辨率。这两个参数将是计算其他设计参数的起点;频率应由需要更新外部元件状态的速度决定。在该示例中,我们选择了 62Hz 的 PWM 输出频率和 2000 位的 PWM 分辨率。
  2. 计算计时器时钟频率。以下公式可用于计算计时器时钟频率: Fclock = Fpwm × resolution
  3. SysConfig 中配置外设。选择要使用的计时器实例以及要用于 PWM 输出的器件引脚。该示例将 PA13 用于 PWM 输出(连接到 TIMG0)。
  4. 编写应用程序代码。该应用的剩余部分是更改 PWM 占空比,这是在软件中完成的。请参阅图 2 以了解应用程序概况或直接浏览代码。

设计注意事项

  1. 最大输出频率:从根本上而言,最大 PWM 输出频率受 IO 速度和所选时钟源频率的限制。不过,占空比分辨率也会影响最大输出频率。更高的分辨率需要更多的计时器计数,从而增加输出周期。
  2. 流水线:该应用中选择的 PWM 计时器支持计时器比较值流水线。流水线使应用能够计划计时器比较值更新,而不会对输出产生干扰。

软件流程图

图 2 显示了应用程序为更改 PWM 输出的占空比而执行的操作。

GUID-20230223-SS0I-TNBL-0RFF-FVKTD0VFP0JP-low.svg图 2 应用软件流程图

应用代码

在应用程序代码中,PWM 占空比在计时器每次触发中断时增加 1%,直到达到 90%,然后降低 1%,直到占空比达到 10%,从而产生心跳效果。该应用 PWM 输出分辨率为 2000 位;因此,将 pwm_count 变量增加或减少 20 会使占空比改变 1%。根据应用要求,可能需要不同的调节。

void PWM_0_INST_IRQHandler(void){
    switch (DL_TimerG_getPendingInterrupt(PWM_0_INST)){
        case DL_TIMER_IIDX_LOAD: 
            if (dc <= 10){mode = 1;} // if reached lowest dc (10%), increase dc
            else if (dc >= 90){mode = 0;} // if reached highest dc (90%), decrease dc
            if (mode){pwm_count -= 20; dc += 1;} // up
            if (!mode){pwm_count += 20; dc -= 1;} // down
            DL_TimerG_setCaptureCompareValue(PWM_0_INST, pwm_count, DL_TIMER_CC_1_INDEX); // update ccr1 value
            break;
        default: 
            break;
    }
}

结果

附加资源