ZHDA102 March   2026 MSPM0G3519

 

  1.   1
  2.   摘要
  3.   商标
  4. 简介
  5. 空闲低电平状态:PWM 输出通道低电平状态配置
  6. 非对称 PWM:具有相移控制功能的双路同步 PWM 生成
    1. 3.1 使用相位加载功能
      1. 3.1.1 主要计时器(主计时器)的配置
      2. 3.1.2 辅助计时器的配置
      3. 3.1.3 交叉触发功能的实现
    2. 3.2 使用辅助捕获/比较通道
  7. 位操作 (Bit-Banging) 仿真:基于软件的通信协议实现
    1. 4.1 使用 TIMA 仿真 UART Rx
    2. 4.2 使用 TIMA 仿真 UART Tx
  8. 基于反馈的 PWM 生成
    1. 5.1 基于反馈的 PWM 信号复制
    2. 5.2 使用输入基准生成延迟的 PWM 信号
  9. 延迟计时器启动:具有可配置延迟的同步计时器实例启动
  10. 基于硬件事件停止正在运行的计时器
  11. 动态 PWM 更新:占空比和时间周期调整
    1. 8.1 影子加载和影子比较功能
    2. 8.2 使用 DMA 生成任意信号
  12. 总结
  13. 10参考资料

基于反馈的 PWM 信号复制

生成输入 PWM 信号精确副本的功能在现代电子系统中发挥着重要作用,尤其是在需要安全冗余验证的应用中。该方法在双通道电机控制系统中广泛实现;在此类系统中,信号验证和故障检测对于运行安全至关重要。

在工业和安全关键型应用中,PWM 信号复制可实现强大的冗余控制路径和持续的系统监控。该技术涉及捕获输入 PWM 信号的特性并生成完全相同的输出信号,从而保持精确的时序关系。

此功能在电力电子应用中尤为重要,因为在这些应用中,同步开关控制和多个相位对齐输出至关重要。该实现允许信号缓冲、再生和扇出到多个子系统,同时保持信号完整性和抗噪性。

在电机控制应用中,这种方法可实现冗余的栅极驱动信号和双通道安全系统,对于容错运行至关重要。该系统会持续监控和验证信号,从而提供实时验证和性能监控功能。这在安全性和可靠性至关重要的工业设备中尤其重要。

该实现简单但功能强大,利用计时器捕获功能读取输入 PWM 参数并生成完全相同的输出信号。这可确保精确复制周期值和占空比值,从而在整个系统中保持信号完整性。由此产生的解决方案具有全面的优势,包括信号验证、安全冗余、分布式控制功能和稳健的系统监控功能。

执行以下步骤,可将计时器实例配置为生成基于反馈的 PWM:

  • 在递增计数模式下配置计时器。
  • 配置 CC0 通道以进行上升沿和下降沿的边沿捕获。
  • 在 CC0 通道上输入基准 PWM 信号。
  • 在输出模式下配置 CC1,以生成基于反馈的 PWM。
  • 将 CC1 通道的 CCCTL.CC2SELU 配置为 CC0,并将 CCACT.CC2UACT 字段配置为 CCP 输出切换。这将根据 CC0 捕获事件切换 CC1 输出。
  • CC0 通道上的捕获事件将由输入基准信号生成。
/* Configuration Sequence to Generate Feedback-based PWM */
static const DL_TimerA_ClockConfig gCAPTURE_0ClockConfig = {
    .clockSel    = DL_TIMER_CLOCK_BUSCLK,
    .divideRatio = DL_TIMER_CLOCK_DIVIDE_1,
    .prescale = 0U
};

static const DL_TimerA_CaptureConfig gCAPTURE_0CaptureConfig = {
    .captureMode    = DL_TIMER_CAPTURE_MODE_EDGE_TIME_UP,
    .period         = CAPTURE_0_INST_LOAD_VALUE,
    .startTimer     = DL_TIMER_STOP,
    .edgeCaptMode   = DL_TIMER_CAPTURE_EDGE_DETECTION_MODE_EDGE,//Enable Edge Capture on both rising and falling edges for CC0
    .inputChan      = DL_TIMER_INPUT_CHAN_0,
    .inputInvMode   = DL_TIMER_CC_INPUT_INV_NOINVERT,
};

SYSCONFIG_WEAK void SYSCFG_DL_CAPTURE_0_init(void) {

    DL_TimerA_setClockConfig(CAPTURE_0_INST,
        (DL_TimerA_ClockConfig *) &gCAPTURE_0ClockConfig);

    DL_TimerA_initCaptureMode(CAPTURE_0_INST,
        (DL_TimerA_CaptureConfig *) &gCAPTURE_0CaptureConfig);
    DL_TimerA_setCounterControl(CAPTURE_0_INST,DL_TIMER_CZC_CCCTL0_ZCOND,DL_TIMER_CAC_CCCTL0_ACOND,DL_TIMER_CLC_CCCTL0_LCOND);

    DL_TimerA_enableInterrupt(CAPTURE_0_INST , DL_TIMERA_INTERRUPT_CC0_UP_EVENT);

    CAPTURE_0_INST->COUNTERREGS.CCACT_01[1]=0x00018000;//Enable CC output Toggle for Secondary CC event. Secondary Event for CC1 will be generated when CC0 captures an edge
    DL_TimerA_setCaptureCompareValue(CAPTURE_0_INST, 0, DL_TIMER_CC_1_INDEX);
    DL_TimerA_enableClock(CAPTURE_0_INST);
    DL_TimerA_setCCPDirection(CAPTURE_0_INST , DL_TIMER_CC1_OUTPUT);
}

上述配置适用于基准 PWM 的周期和占空比不断发生变化的情况。

 仅基准 PWM 的占空比发生变化图 5-1 仅基准 PWM 的占空比发生变化
 基准 PWM 的占空比和时间周期均发生变化图 5-2 基准 PWM 的占空比和时间周期均发生变化