STM32
直播中

郭大

11年用户 1059经验值
擅长:嵌入式技术
私信 关注
[问答]

请问怎么用HRTIM输出可变占空比的PWM?

现在可以输出单路PWM,但可变占空比的PWM不知道怎么配置。请大佬帮助!

回帖(1)

杨平

2025-7-30 18:02:10

要使用 HRTIM(高分辨率定时器)输出可变占空比的 PWM,需通过修改比较寄存器(如 CMP1x)实时更新占空比。以下是配置步骤和代码示例(以 STM32 为例):




核心步骤




  1. 初始化 HRTIM 基础配置



    • 设置计数模式(连续模式)。

    • 配置定时器周期(PERx 寄存器)。

    • 使能定时器计数。




  2. 配置 PWM 通道



    • 设置输出模式为 PWM 模式(OMM = 0,单输出)。

    • 配置极性(POL 位)和空闲状态。

    • 启用输出(DTENOUTEN)。




  3. 设定占空比



    • 占空比由比较寄存器 CMP1x 控制(如 CMP1A 对应通道 A)。

    • 计算:CMP1x = (占空比 × PERx) / 100(占空比百分比)。




  4. 实时更新占空比



    • 修改 CMP1x 寄存器的值即可改变占空比。

    • 使用 影子寄存器 确保同步更新(设置 CMP1xUEN 位)。






代码示例(STM32CubeIDE)


// 1. 初始化 HRTIM 定时器(以 TIMER A 为例)
void MX_HRTIM_Init(void) {
  hhrtim.Instance = HRTIM1;
  hhrtim.Init.HRTIMInterruptResquests = HRTIM_IT_NONE;
  HAL_HRTIM_Init(&hhrtim);

  // 配置 Timer A
  HAL_HRTIM_WaveformOutputConfig(&hhrtim, HRTIM_TIMERINDEX_TIMER_A,
                                HRTIM_OUTPUT_ACTIVE_HIGH | HRTIM_OUTPUT_POLARITY_HIGH);

  // 设置周期 = 1000 (占空比分辨率)
  HAL_HRTIM_TimeBaseConfig(&hhrtim, HRTIM_TIMERINDEX_TIMER_A,
                          HRTIM_TIMEBASE_PERIOD(1000) |
                          HRTIM_TIMEBASE_CONTINUOUS);

  // 初始占空比 50% -> CMP1A = 500
  HAL_HRTIM_WaveformCounterConfig(&hhrtim, HRTIM_TIMERINDEX_TIMER_A,
                                 HRTIM_WAVEFORM_CMP1(500));

  // 启动 Timer A
  HAL_HRTIM_WaveformOutputStart(&hhrtim, HRTIM_OUTPUT_TA1);
  HAL_HRTIM_TimerStart(&hhrtim, HRTIM_TIMERINDEX_TIMER_A);
}

// 2. 实时修改占空比(如设置为 30%)
void Update_PWM_DutyCycle(uint32_t duty_cycle_percent) {
  // 计算 CMP1A 值(周期=1000)
  uint32_t cmp_value = (duty_cycle_percent * 1000) / 100;

  // 更新比较寄存器(同步模式)
  HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].CMP1xR = cmp_value;
  // 使能影子寄存器更新
  HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].UPDxR = HRTIM_UPD_CMP1;
}



关键寄存器说明



  • PERxR:周期寄存器(PWM 频率)。

  • CMP1xR:比较寄存器 1(控制占空比)。

  • UPDxR:更新寄存器(设置 HRTIM_UPD_CMP1 启用同步更新)。

  • OUTxR:输出控制(使能输出 OUTEN=1)。




动态调整技巧



  • 降低抖动:在计数为 0 时更新(UPDGATE 设置同步门控)。

  • 高分辨率:使用 HRTIM 的 184ps 高分辨率特性(需校准)。

  • 多通道同步:通过主定时器同步更新多个从定时器。



? 提示:通过示波器验证 PWM 输出,逐步调试占空比变化是否符合预期。确保计算占空比时无整数溢出。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分