16.4 HRTIM项目:高精度PWM波

# 16.4 HRTIM项目:高精度PWM波

本实验通过STM32F334的高精度定时器(HRTIM)生成100kHz/50%占空比的PWM波,对比STM32F103通用定时器的性能差异,验证HRTIM的超高分辨率特性。

# 下载源码 点击查看PDF文档

# 16.4.1 STM32CubeMX配置

下面介绍STM32F334的HRTIM在STM32CubeMX中的配置过程。

# 1. 建立新工程

① 建立一个新的STM32工程;
② 选择芯片“STM32F334C8T6”;
③ 设置工程的名称为“16 HRTIM”;
④ 选择SWD调试方式;

# 2.系统时钟配置

设置高速外部时钟HSE作为时钟源。

  • 点击“Pinout & Configuration”进入到引脚配置标签页
  • 在左侧的导航栏中点击选择“System Core”
  • 双击“RCC”进入到RCC复位和时钟控制器的配置界面
  • 将High-Speed Clock (HSE)设置下拉选择“Crystal/Ceramic Resonator”,将外部快速时钟使能。

设置时钟频率

① 点击“Clock Configuration”进入到时钟配置标签页;
② 在HCLK(MHz)输入栏中输入72从而将系统主频设置为72 MHz;
③ 将HRTIM时钟设置为144 MHz。为HRTIM提供较高的时钟频率从而实现较高的分辨率。

设置时钟频率

# 3. HRTIM配置

① 点击进入“Pinout & Configuration”标签页;
② 在左侧导航栏中点击“Timers”;
③ 双击“HRTIM1”高精度定时器
④ 将定时器A设置为“TA1 output active”,从而启用定时器A。

启用高精度定时器

将高精度定时器A的通用配置和时基配置的参数配置如下:

  • 基本/高级配置:高级
  • 预分频系数(Prescaler Ratio):32倍频
  • 周期寄存器值(Period):46080,从而将TA1的波形设置为100KHz
配置定时器参数

配置比较寄存器1,将比较寄存器1启用然后将数值设为周期寄存器的一半:23040,从而产生50%的占空比。

配置定时器参数

配置TA1的输出级:

  • 配置动作状态极性(Polarity):高电平
  • 置位源数量:1
  • 置位源:比较寄存器1事件
  • 复位源数量:1
  • 复位源:计数器翻转事件
配置定时器参数

# 4. 生成代码

# 勾选生成单独外设文件,保存生成工程代码。

# 16.4.2 HRTIM项目软件设计

# 1. 启动HRTIM输出

在STM32CubeMX生成的main.c中插入代码HAL_HRTIM_WaveformOutputStart(&hhrtim, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA1)使能TA1引脚PWM输出,调用HAL_HRTIM_WaveformCountStart(&hhrtim, HRTIM_TIMERINDEX_TIMER_A)启动定时器A计数,配合CubeMX预设的ARR/Compare参数即可在TA1引脚输出100kHz/50%占空比PWM波形。

main.c中添加以下代码,启动PWM输出:

/* USER CODE BEGIN 2 */
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1);
HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_A);
/* USER CODE END 2 */
1
2
3
4

# 2. 动态调整占空比

在STM32F334的main.c主循环中动态修改HRTIM比较寄存器CMP1xR(如HRTIM_TIMx->CMP1xR = 23040与23041交替写入),通过±1步进触发PWM边沿以217ps精度偏移,配合HRTIM高分辨率时钟源验证波形跳变时刻的微调能力,实时观测示波器确认最小时间分辨率特性,直接体现寄存器级操作对PWM输出的精准控制。

while(1) {
  hhrtim1.Instance->sTimerxRegs[0].CMP1xR = 23040; // 占空比50%
  hhrtim1.Instance->sTimerxRegs[0].CMP1xR = 23041; // 最小步长+1
}
1
2
3
4

# 3. 生成代码

勾选生成单独外设文件,保存生成工程代码。


# 16.4.3 HRTIM项目下载验证

# 1. 静态精度测试

将动态调整占空比的代码进行屏蔽,确保PWM输出为静态50%占空比。

STM32F103的输出波形如下图所示,实测频率值为99.86kHz(误差-0.14%),实测占空比为49.92%(误差-0.08%)。

F103输出波形

STM32F334的输出波形如下图所示,实测频率值精确为100.0kHz,实测占空比精确为50.00%,波形特征边沿陡峭。

F334输出波形

# 2. 动态分辨率测试

取消占空比调整代码的屏蔽,以最小步长(±1)快速交替修改比较寄存器值。

STM32F103的最小分辨率波形如下图所示,设置示波器的水平时基为10ns/div,示波器观测到下降沿位置出现明显双线残影,残影宽度为2.2ns,与理论最小步长一致。

F103最小分辨率

通过动态调整占空比并观测示波器残影,STM32F334的HRTIM展现了217ps级超高分辨率,其残影宽度仅为STM32F103的1/10。实验结果直观证明了HRTIM在精密数字电源等场景中的优越性。通过这一实验对比深化了对定时器分辨率的理解。

F334最小分辨率