CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!
无匹配项 共计114个匹配页面

示例代码

PWM Flicker

示例工程实现PWM的固定占空比模式,并改变PWM的频率、占空比等参数,可以通过逻辑分析仪进行波形观察,工程路径:SDK_Folder\projects\peripheral\pwm\app_pwm

初始化参数

app_pwm_params_t pwm_params = {
    .id = APP_PWM0_MODULE,
    .pin_cfg = {
        .channel_a = {
            .type   = APP_PWM0_GPIO_TYPE,
            .mux    = APP_PWM0_GPIO_MUX,
            .pin    = APP_PWM0_CHANNEL_A,
            .pull   = APP_IO_NOPULL,
            .enable = APP_PWM_PIN_ENABLE,
        },
        .channel_b = {
            .type   = APP_PWM0_GPIO_TYPE,
            .mux    = APP_PWM0_GPIO_MUX,
            .pin    = APP_PWM0_CHANNEL_B,
            .pull   = APP_IO_NOPULL,
            .enable = APP_PWM_PIN_ENABLE,
        },
        .channel_c = {
            .type   = APP_PWM0_GPIO_TYPE,
            .mux    = APP_PWM0_GPIO_MUX,
            .pin    = APP_PWM0_CHANNEL_C,
            .pull   = APP_IO_NOPULL,
            .enable = APP_PWM_PIN_ENABLE,
        },
    },
    .active_channel = APP_PWM_ACTIVE_CHANNEL_ALL,
    .init = {
        .mode     = PWM_MODE_FLICKER,
        .align    = PWM_ALIGNED_EDGE,
        .freq     = 100,
        .bperiod  = 500,
        .hperiod  = 200,
#if (APP_DRIVER_CHIP_TYPE != APP_DRIVER_GR551X)
        .bstoplvl = PWM_STOP_LVL_LOW,
#endif
        .channel_a = {
            .duty = 30,
            .drive_polarity = PWM_DRIVEPOLARITY_POSITIVE,
#if (APP_DRIVER_CHIP_TYPE != APP_DRIVER_GR551X)
            .fstoplvl = PWM_STOP_LVL_LOW,
#endif
        },
        .channel_b = {
            .duty = 50,
            .drive_polarity = PWM_DRIVEPOLARITY_NEGATIVE,
#if (APP_DRIVER_CHIP_TYPE != APP_DRIVER_GR551X)
            .fstoplvl = PWM_STOP_LVL_HIGH,
#endif
        },
        .channel_c = {
            .duty = 80,
            .drive_polarity = PWM_DRIVEPOLARITY_POSITIVE,
#if (APP_DRIVER_CHIP_TYPE != APP_DRIVER_GR551X)
            .fstoplvl = PWM_STOP_LVL_LOW,
#endif
        },
    },
};
  • id:定义PWM ID

    选择APP_PWM0_MODULE,即PWM0

  • pin_cfg:配置通道A/B/C引脚
    • pin_cfg.channel_a:PWM通道A引脚配置
    • pin_cfg.channel_b:PWM通道B引脚配置
    • pin_cfg.channel_c:PWM通道C引脚配置
  • active_channel:选择激活的通道

    选择APP_PWM_ACTIVE_CHANNEL_ALL,激活所有通道

  • init:PWM参数配置
    • init.mode:采用PWM_MODE_FLICKER,即选择Flicker模式
    • init.align:PWM脉冲对齐方式PWM_ALIGNED_EDGE
    • init.freq:PWM频率10 MHz
    • init.bperiod:PWM在呼吸模式下的呼吸周期为500 ms(Flicker模式下,该参数无效)
    • init.hperiod:PWM在呼吸模式下的保持时间为200 ms(Flicker模式下,该参数无效)
    • init.bstoplvl:呼吸模式下停止电平:PWM_STOP_LVL_LOW表示停止电平为低电平,PWM_STOP_LVL_HIGH表示停止电平为高电平
    • init.channel_a.duty:PWM通道A占空比
    • init.channel_a.drive_polarity:PWM输出模式下的驱动极性,PWM_DRIVEPOLARITY_POSITIVE表示正极性,起始电平为低电平;PWM_DRIVEPOLARITY_NEGATIVE表示负极性,起始电平为高电平
    • init.channel_a.fstoplvl:Flicker模式下停止电平:PWM_STOP_LVL_LOW表示停止电平为低电平,PWM_STOP_LVL_HIGH表示停止电平为高电平

重要函数

  • 初始化函数
    ret = app_pwm_init(&pwm_params)
  • 开始PWM输出
    app_pwm_start(APP_PWM0_MODULE)
  • 更新PWM频率
    app_pwm_update_freq(APP_PWM0_MODULE, 1000)
  • 修改通道参数
    app_pwm_config_channel(APP_PWM0_MODULE, APP_PWM_ACTIVE_CHANNEL_B, &channel_cfg)
  • 停止指定的通道输出
    app_pwm_inactive_channel(APP_PWM0_MODULE, APP_PWM_ACTIVE_CHANNEL_A)
  • 停止PWM输出
    app_pwm_stop(APP_PWM0_MODULE)

测试验证

用逻辑分析仪观察MSIO0、MSIO1和MSIO2的波形变化,以GR5526为例,下面是观察的波形。

  • MSIO0:开始输出波形占空比为30%,频率为100 Hz,然后停止输出,最后设置成频率为1000 Hz,占空比为60%的波形。
  • MSIO1:开始输出波形占空比为50%,频率为100 Hz,然后进行了一次极性反转,接着输出为1000 Hz,占空比为20%的波形,最后设置成频率为1000 Hz,占空比为60%的波形。
  • MSIO2:开始输出波形占空比为80%,频率为100 Hz,接着改变频率为1000 Hz,最后设置成频率为1000 Hz,占空比为60%的波形。
图 28 PWM Flicker示例工程输出波形图

扫描关注

打开微信,使用“扫一扫”即可关注。