Edit online

测试指南

18 Dec 2024
Read time: 4 minute(s)

测试环境

  • 硬件
    • 开发板

    • 示波器,用于观察输出 PWM 信号的波形

  • 软件
    • PC 端的串口终端软件,用于 PC 和开发板进行串口通信

    • RT-Thread 系统自带的 pwm 命令行工具

  • 软件配置

    打开 RT-Thread 系统的 PWM 设备驱动框架,会在启动时注册生成 pwm 命令。

动态配置 PWM

使用 pwm 命令来配置某一通道的步骤如下所示,以通道 3 为例:

  1. 列示所有 pwm 相关命:
    pwm
    Usage:
    pwm probe   <device name>                                             - probe pwm by name
    pwm enable  <channel>                                                 - enable pwm channel
    pwm disable <channel>                                                 - disable pwm channel
    pwm get     <channel>                                                 - get pwm channel info
    pwm set_pul <channel> <irq_mode> <period> <pulse> <pulse cnt>         - set pwm pulse
    pwm set     <channel> <period> <pulse>                                - set pwm channel info
    
  2. 使用 probe 参数,选择一个 PWM 设备(PWM/EPWM)。

    pwm 命令只支持 probe 一个设备,假设设备名称为 pwm
    pwm probe pwm
    系统输出示例如下:
    probe pwm success
  3. 使用 set 参数,分别设置通道 3 的周期和占空比。

    例如,将周期设置为 1,000,000 微秒,占空比设置为 60%:
    pwm set 3 1000000 600000
    系统输出示例如下:
    pwm info set on pwm at channel 3

    在修改通道 3 的参数时,需要借助示波器来观察确认输出的方波信号是否符合预期。

    运行期间也可以动态 set 通道 3 的周期和占空比。例如
    1. 将周期设置为 1,000,000 微秒,占空比设置为 10%:

      pwm set 3 1000000 100000
      系统输出示例如下:
      pwm info set on pwm at channel 3
    2. 再将占空比设置为 90%:
      pwm set 3 1000000 900000
      系统输出示例如下:
      pwm info set on pwm at channel 3
  4. enable 通道 3

    pwm enable 3
    系统输出示例如下:
    pwm channel 3 is enabled success
  5. 使用 set_pul 参数指定数目脉冲输出。

    例如,设置中断模式为 0,周期为 1,000,000 微秒,脉冲宽度为 500,000 微秒,脉冲数为 5:
    pwm set_pul 3 0 1000000 500000 5
    pwm pul set on pwm at channel 3
    [I] aic_pwm_irq()198
    isr cnt:5,disabled the pwm3 interrupt now.
    
    重复上述命令,可以再次触发脉冲输出:
    pwm set_pul 3 0 1000000 500000 5
    pwm pul set on pwm at channel 3
    [I] aic_pwm_irq()198
    isr cnt:5,disabled the pwm3 interrupt now.
    
  6. 使用 pwm_status 查看通道的动作配置。
    pwm_status
    In PWM V1.00:
    Module Enable: 1, IRQ Enable: 0x8
    Ch En Mode Tb-clk-rate Def CBD CBU CAD CAU PRD ZRO
     00   Up    240000000   -   -   -   -   -   -
                                 -   -   -   -   -   -
     10   Up    240000000   -   -   -   -   -   -
                                 -   -   -   -   -   -
     20   Up    240000000   -   -   -   -   -   -
                                 -   -   -   -   -   -
     31   Up    240000000   -   -   - Low Hgh   -
                                 -   -   - Low Hgh   -
    

    通道 3 默认配置为 CAU 动作,所以此处 irq_mode 配置为 0。同时由于 CAU 为 Low,所以输出的脉冲方向为下降沿。

    脉冲输出的方向与 action 配置有关,同时指定脉冲数目输出依赖中断,中断模式需要与 action 配置相对应。

    其中 irq_mode 范围为 0-3,依次为:
    • 0: TBCTR=CMPA 且计数器正在递增时触发事件

    • 1: TBCTR=CMPA 且计数器正在递减时触发事件

    • 2: TBCTR=CMPB 且计数器正在递增时触发事件

    • 3: TBCTR=CMPB 且计数器正在递减时触发事件

简要编程指南

struct rt_device_pwm *pwm_dev = RT_NULL;
pwm_dev = (struct rt_device_pwm *)rt_device_find("pwm");
if (pwm_dev == NULL) {
    rt_kprintf("can't find pwm device!\n");
    return -RT_ERROR;
}

rt_pwm_set(pwm_dev, 3, 10000, 5000);
rt_pwm_enable(pwm_dev, 3);

rt_pwm_set_output(pwm_dev, 2, 10000, 5000, 0);
rt_pwm_set_output(pwm_dev, 2, 10000, 2000, 1);
rt_pwm_enable(pwm_dev, 2);
提示:
  1. RT-Thread PWM 子系统中的 open/read/write/control 接口设计不太友好,建议按照使用上述接口。

  2. 使用 rt_pwm_set_output 可实现同一 PWM 通道,同一周期下的两种不同占空比输出。