STM32H7的高分辨率定时器HRTIM基础知识


◆ 高分辨率定时器可以产生多达 10 路高分辨率信号。它主要用数字电源、照明,电源耗材,太阳能逆变器和无线充电等应用场合,当然,也可以作为通用目的。
◆ HRTIM 模块化的架构允许产生独立或者叠加波形。通过带的时序控制单元和各种外部事件的配合,可以产生各种信号 PWM,相移等。
◆ HRTIM 定时器还具有定时测量功能和链接到内置 ADC 和 DAC 转换器。并且它还具有轻载管理模式和能够处理各种故障的方案以实现安全关闭。
◆ HRTIM 有多个中断入口函数,使用的时候别搞错了:

HRTIM1_Master_IRQHandler 
HRTIM1_TIMA_IRQHandler 
HRTIM1_TIMB_IRQHandler 
HRTIM1_TIMC_IRQHandler 
HRTIM1_TIMD_IRQHandler 
HRTIM1_TIME_IRQHandler 
HRTIM1_FLT_IRQHandler

HRTIM基础知识

HRTIM 由 6 个定时器组成,分别是 1 个主定时器(Master Timer)和 5 个独立的定时器单元,从
Timer A 到 Timer E。
这 6 个都是 16bit 定时器,每个定时器都包含 1 个独立计数器和 4 个比较单元。
主定时器(Master Timer):
基于 16 位递增计数器。它可通过 4 个比较单元置位/ 复位 10 路输出中的任何一路,并向 5
个定时器单元提供同步信号。其主要用途是使定时器单元受唯一的时钟源控制。交错降压转换器
是一个典型的应用示例,主定时器在其中管理多个单元之间的相移。
5 个定时器 Timer A 到 Timer E:
既可以独立工作,也可以与其它定时器(包括主定时器)配合工作。每个定时器都可控制两路输
出。输出置位/复位事件可以由定时单元比较寄存器触发,或者由主定时器事件、其他定时器的
事件或外部事件触发。
每个定时器的两路输出:
支持 PWM 互补输出,支持添加死区时间。
将载波频率添加到调制信号上。
通过将异步输出置为预定义的安全电平来管理故障事件。
10 个外部事件,可用于任何定时器单元。
可编程极性和边沿有效性。
5 个事件用于快速异步模式。
5 个事件用于可编程数字滤波器。
利用消隐和窗口模式实现伪事件过滤。
多条通道可连接到内置模拟外设。
4 个用于 ADC 转换器的触发信号。
3 个用于 DAC 转换器的触发信号。
3 个

### STM32H7 高精度定时器 (HRTIM) 使用教程 #### 1. 定时器简介 STM32H7系列微控制器中的高分辨率定时器(HRTIM)提供了非常高的计数频率和丰富的特性,适用于各种精确控制需求的应用场景。该定时器能够实现多通道同步操作、复杂事件触发机制以及多种故障保护措施[^2]。 #### 2. 初始化设置 为了使用HRTIM,在程序启动阶段需要完成基本初始化工作。这通常涉及到使能相应外设时钟、配置全局参数(如主周期发生器MCG)、定义各个子模块的工作模式等。具体可以通过CubeMX工具自动生成初始化代码框架,再根据实际项目调整细节部分。 ```c // 启动并配置 HRTIM 外设 void MX_HRTIM_Init(void){ /* USER CODE BEGIN HRTIM_MspInit 0 */ __HAL_RCC_HRTIM_CLK_ENABLE(); hrtim.Instance = HRTIM; hrtim.Init.HRTIM_ClockMode = HRTIM_CLOCKMODE_INTERNAL; ... } ``` #### 3. 波形生成与输出 利用HRTIM可以很方便地创建具有特定频率和占空比的PWM信号,并且支持多达五组独立但可协调工作的输出通道。通过编程设定不同的比较寄存器值即可改变所产生波形的具体形态;而借助于ADCTrig功能还能实现在指定时刻自动发起ADC采样请求的操作。 ```c /* 设置 PWM 输出 */ static void Set_PWM_Output(uint8_t channel, uint16_t duty_cycle_percent){ TIM_OC_InitTypeDef sConfigOC; if(channel >= 1 && channel <= 5){ // 计算对应硬件资源编号 int timer_id = ((channel-1)/3)+1; int ch_num = ((channel-1)%3)+1; // 获取当前使用的定时器句柄 HRTIM_HandleTypeDef *htim_ptr = &hhr_tim[timer_id]; // 基础配置 sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = (__HAL_TIM_GET_AUTORELOAD(htim_ptr)) * duty_cycle_percent / 100 ; ... HAL_HRTIM_Channel_ConfigOutput(htim_ptr ,ch_num,&sConfigOC); } } ``` #### 4. 死区时间管理 当涉及电机驱动或其他电力电子变换电路时,为了避免上下桥臂直通造成短路损坏功率器件的情况,往往会在互补型PWM之间加入一定宽度的安全间隔——即所谓的“死区”。对于STM32H7来说,可以在HRTIM内部灵活调节这个时间段长度及其极性方向,从而满足不同应用场景下的特殊要求[^3]。 ```c /* 配置死区 */ void Configure_Deadtime(int dead_time_ns,int polarity){ HRTIM_TimerDeadTimeConfigTypeDef sConfigDT; sConfigDT.DeadTimeRisingEdge = dead_time_ns/((SystemCoreClock/(double)__LL_HRTIM_GetPrescalerValue(&hhr_tim[1]))*NanosecondsPerTick()); sConfigDT.DeadTimeFallingEdge=dead_time_ns/((SystemCoreClock/(double)__LL_HRTIM_GetPrescalerValue(&hhr_tim[1]))*NanosecondsPerTick()); if(polarity>0)sConfigDT.Polarity=HRTIM_DT_POLARITY_RISING; else sConfigDT.Polarity=HRTIM_DT_POLARITY_FALLING; HAL_HRTIM_TimeBase_SetDeadTime(&hhr_tim[1],&sConfigDT); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值