[PWMv2] 斩波方法

摘要

PWM-Chopper(脉宽调制斩波器)功能是先楫半导体MCU中的PWMV2提供的众多功能中的一部分。该子模块用于生成高频的斩波信号,以确保在低占空比条件下也能维持有效的开关频率,这对于控制功率转换器中的开关器件至关重要。本文将详细介绍PWMV2实现相关的功能需要的配置选项。

功能概述

PWM-Chopper功能的核心功能是在PWMV2产生的基本PWM信号基础上叠加一个高频率的斩波信号。这种机制对于需要通过脉冲变压器驱动门极的功率开关元件尤其有用,因为它们要求较高的开关频率来保证足够的磁芯复位时间,从而避免饱和问题。

支持多种斩波模式

PWMV2支持多种不同的斩波模式,包括但不限于

  • 固定频率斩波:用户可以选择固定的斩波频率,这有助于简化系统设计,并确保一致的开关行为。
  • 可变频率斩波:允许根据系统状态动态调整斩波频率,适应更复杂的应用需求。
  • 单次斩波:仅对首次PWM脉冲进行斩波处理,适用于特定启动条件下的优化控制。
  • 连续斩波:持续地对每个PWM周期进行斩波,提供稳定且可靠的输出。

初始脉冲宽度控制

为了确保快速且可靠的功率开关启动,PWM-Chopper功能提供了初始脉冲宽度控制功能。这意味着第一次启动时的脉冲宽度可以通过编程进行控制,相比于其他MCU可选的宽度控制,PWMV2可以提供任意时钟长度的第一次启动脉冲宽度值。这种灵活性使得开发者可以根据实际应用需求精确设置启动特性,确保系统能够在最短时间内达到预期工作状态。

维持脉冲宽度调节

除了第一个脉冲外,后续的所有脉冲宽度由比较单元控制,允许用户调整这些脉冲的占空比。这一特性对于保持稳定的输出状态至关重要,特别是在负载变化频繁或需要精细调节的情况下。

与其他功能的协同工作

可以结合互补和死区功能同时使用。也可以配合相位和同步功能一同使用。

使用方法

设计思路

  • 使用一个通道用来正常输出PWM作为斩波信号A
  • 使用一个比较单元来产生需要的PWM信号,这个信号用来强制输出信号A为低电平
  • 使用一个比较单元来产生需要的PWM信号,这个信号用来使信号A进入失效模式,用来产生一个脉宽可调的第一个脉冲的时间长度

效果图

红色是参考波形,黄色波形表示可单独调节的第一个脉冲或者最后一个脉冲宽度。

资源消耗

每实现一个计数单元的斩波功能,需要另一个计数单元作为辅助。

软件代码分析

  • 如下这段代码配置了PWM模块强制输出功能,并启用了硬件触发的强制输出功能
void pwm_force_cfg(void)
{
    pwmv2_enable_shadow_lock_feature(PWM);
    pwmv2_set_force_update_time(PWM, BOARD_APP_PWM_OUT1, pwm_force_at_reload);

    pwmv2_force_update_time_by_shadow(PWM, BOARD_APP_PWM_OUT1, pwm_force_update_shadow_at_reload);
    pwmv2_enable_force_by_hardware(PWM, BOARD_APP_PWM_OUT1);

    pwmv2_select_force_trigmux_index(PWM, BOARD_APP_PWM_OUT1, 1);
    pwmv2_shadow_register_unlock(PWM);
    pwmv2_force_output(PWM, BOARD_APP_PWM_OUT1, pwm_force_output_0, false);
    pwmv2_issue_shadow_register_lock_event(PWM);
}
  • 如下这段代码配置了PWM故障同步功能,具体包括:

设置PWM输出1和输出2的故障输出为高电平。
设置PWM输出1和输出2的故障恢复时间为reload点。
启用PWM输出1和输出2从触发矩阵(trigmux)接收故障信号。

void pwm_fault_sync_cfg(void)
{
    pwmv2_set_fault_mode(PWM, BOARD_APP_PWM_OUT1, pwm_fault_output_1);
    pwmv2_set_fault_mode(PWM, BOARD_APP_PWM_OUT2, pwm_fault_output_1);
    pwmv2_set_fault_recovery_time(PWM, BOARD_APP_PWM_OUT1, pwm_fault_recovery_on_reload);
    pwmv2_set_fault_recovery_time(PWM, BOARD_APP_PWM_OUT2, pwm_fault_recovery_on_reload);
    pwmv2_enable_fault_from_trigmux(PWM, BOARD_APP_PWM_OUT1);
    pwmv2_enable_fault_from_trigmux(PWM, BOARD_APP_PWM_OUT2);
}
  • 配置PWM输出

    • 初始化PWM模块:包括PWM去初始化、强制配置、故障同步配置等。
    • 设置阴影寄存器值:为不同索引的阴影寄存器设置初始值。
    • 选择比较源:为不同的比较器选择来自阴影寄存器的比较值。
    • 启动PWM输出:使能PWM输出并同步多个计数器。
  • 配置trgmux

配置PWM的触发输出0到强制输出信号
配置PWM的触发输出1到失效模式信号

信号的是否反向决定了可配脉宽的信号是第一个脉冲还是最后一个脉冲。

    trgm_output_cfg.invert = false;
    trgm_output_cfg.type   = trgm_output_same_as_input;
    trgm_output_cfg.input  = BOARD_PWM_TRG_INPUT;
    trgm_output_config(ptr, TRGM_TRGOCFG_PWM1_TRIG_IN1, &trgm_output_cfg);

    trgm_output_cfg.invert = true;
    trgm_output_cfg.type   = trgm_output_same_as_input;
    trgm_output_cfg.input  = HPM_TRGM0_INPUT_SRC_PWM1_TRGO_1;
    trgm_output_config(ptr, TRGM_TRGOCFG_PWM1_TRIG_IN0, &trgm_output_cfg);
0
0
发表回复 0

Your email address will not be published. Required fields are marked *