前言
相较于普通TIM,HRTIM最显著的特点就是可以倍频到最大的32倍,这就可以使得定时器即使工作在较高频率下,仍有较高的分辨率。 因此它主要用于数字电源、照明,电源耗材,太阳能逆变器和无线充电等应用场合,当然,也可以作为通用目的。
所用工具:
- 开发板:STM32G474RE
- STM32CubeMX
- IDE: Keil-MDK
基础知识
主定时器(Master Timer):
基于 16 位递增计数器。它可通过 4 个比较单元置位/ 复位 定时器的输出,并向其他独立定时器单元(Timer A~Timer F)提供同步信号。其主要用途是使定时器单元受唯一的时钟源控制。全桥Buck-Boost数字电源是一个典型的应用示例,主定时器在其中管理多个单元之间的相移。
独立定时器(Timer A~Timer F):
既可以独立工作,也可以与其它定时器(包括主定时器)配合工作。每个定时器都可控制两路输出。输出置位/复位事件可以由定时单元比较寄存器触发,或者由主定时器事件、其他定时器的事件或外部事件触发。
每个定时器的两路输出:
支持PWM互补输出,支持添加死区时间。
将载波频率添加到调制信号上。
通过将异步输出置为预定义的安全电平来管理故障事件。
外部事件(可用于任何定时器单元)
可编程极性和边沿有效性。
5个事件用于快速异步模式。
5个事件用于可编程数字滤波器。
利用消隐和窗口模式实现伪事件过滤。
通道(连接到内置模拟外设)
4个用于 ADC 转换器的触发信号。
3个用于 DAC 转换器的触发信号。
3个用于比较器。
保护机制
5 路故障输入可组合使用,而且可以关联到任何定时单元。
可编程极性和边沿有效性。
对谐振变换器配有专门的延时保护。
不同HRTIM之间可以做同步输入/输出
STM32CubeMX HRTIM配置
- 时钟配置 (如不了解点击下面链接)
【STM32】CubeMX+HAL库之时钟. - HRTIM配置
开启主定时器(Master Timer)
选择其他合适的独立定时器
设置主定时器
选择合适的倍频数或分频数
设置周期计数器长度得以得出控制频率
使能预加载
使能更新重复
开启中断
开启独立定时器(Timer A~Timer F)
相同方式 选择合适的倍频数或分频数
设置周期计数器长度得以得出控制频率
使能预加载
开启重复更新
设置死区(只要输出两个互补的信号就得选择设置死区,如不需要死区时间将参数设置为零,另一个选项为两个独立的输出)
设置比较器
开启DMA请求,将比较器的值装入DMA,
设置死区时间
死区在上升沿还是下降沿
设置有效输出电频
设置源:复位源、启动源
开启DMA
相同的方式设置其他的独立定时器
这样的方式就可以开启互补的信号,但未同步
如需开启同步的,可以选择使用主定时器作为同步源,让时钟复位其他独立定时器既可。
生成代码
代码部分
初始化
HAL_HRTIM_WaveformCounterStart_IT(&hhrtim1, HRTIM_TIMERID_MASTER);
__HAL_HRTIM_SETCOMPARE(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_1, (uint32_t)HRTIM_DMA_Buffer[0]);
__HAL_HRTIM_SETCOMPARE(&hhrtim1, HRTIM_TIMERINDEX_TIMER_E, HRTIM_COMPAREUNIT_2, (uint32_t)HRTIM_DMA_Buffer[1]);
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TB1 + HRTIM_OUTPUT_TB2);
HAL_HRTIM_WaveformCounterStart_DMA(&hhrtim1, HRTIM_TIMERID_TIMER_B);
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TE1 + HRTIM_OUTPUT_TE2);
HAL_HRTIM_WaveformCounterStart_DMA(&hhrtim1, HRTIM_TIMERID_TIMER_E);
更新DMA装值写在主定时器中断函数(HAL_HRTIM_RepetitionEventCallback)中
void HAL_HRTIM_RepetitionEventCallback(HRTIM_HandleTypeDef * hhrtim, uint32_t TimerIdx)
{
//计算函数
HRTIM_DMA_Buffer[0] = 13600; //计算结果
HRTIM_DMA_Buffer[1] = 13600;
}