打印
[STM32H7]

HRTIM的移相配置

[复制链接]
690|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cashrwood|  楼主 | 2025-1-27 21:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于缺少独立的倍频器,H7最高仅支持主频频率的HRTIM,对于H750而言是480M
一、时钟配置
首先在RCC中将HSE选好,并调整H7的版本,Y版最高400M,V版最高480M
Y版可以将Power Regulator Voltage Scale调整至0,V版只能调整至1
接下来进时钟树,将PLL达到HSE上(CSI RC也行,不过正常做东西都有外部时钟吧),System Clock Mux打到PLL上,系统时钟打个480让cube自己搜索,搜索完后拉到下面调整一下HRTIM Clock Mux


Timer A~E的配置都类似,这里以A为例:
  • 时钟和周期与Master一致,其实周期随便配置,配成0xFFFF都没问题
  • 这里要改成单次触发模式,否则在调整移相角时占空比会出问题
  • Preload和Repetition Update和Master一样
  • 这里一定要打开,将寄存器更新延后到了reset时刻
  • Reset Trigger要改成Master Timer Compare event,这个和前面配置的Master Cpmpare Unit是对应的
  • Compare Unit用于控制波形,我这里是占空比50%的半桥,所以前面Dead Time Insertion Mode改成了Deadtime is inserted,这里只需要使用一个Compare Unit
  • 死区按照自己想法设置
  • 输出配置,我这里配置的是Timer A被Master的trigger reset的同时输出拉高,并在Compare Unit 1处置低,这样占空比刚好是50%(0->480)


最后把Master的全局中断打开
   HAL_HRTIM_WaveformOutputStart(&hhrtim, HRTIM_OUTPUT_TA1);    HAL_HRTIM_WaveformOutputStart(&hhrtim, HRTIM_OUTPUT_TA2);    HAL_HRTIM_WaveformOutputStart(&hhrtim, HRTIM_OUTPUT_TB1);    HAL_HRTIM_WaveformOutputStart(&hhrtim, HRTIM_OUTPUT_TB2);    HAL_HRTIM_WaveformOutputStart(&hhrtim, HRTIM_OUTPUT_TC1);    HAL_HRTIM_WaveformOutputStart(&hhrtim, HRTIM_OUTPUT_TC2);    HAL_HRTIM_WaveformOutputStart(&hhrtim, HRTIM_OUTPUT_TD1);    HAL_HRTIM_WaveformOutputStart(&hhrtim, HRTIM_OUTPUT_TD2);    HAL_HRTIM_WaveformCountStart_IT(&hhrtim, HRTIM_TIMERID_MASTER | HRTIM_TIMERID_TIMER_A | HRTIM_TIMERID_TIMER_B |                                             HRTIM_TIMERID_TIMER_C | HRTIM_TIMERID_TIMER_D);
中断回调函数是占空比与周期的调节可以通过直接写寄存器来完成,也可以通过HAL库提供的宏来实现
   //调整周期    __HAL_HRTIM_SETPERIOD(&hhrtim, HRTIM_TIMERINDEX_MASTER, SPS_BASE_PERIOD + delta_tick / 2);    //调整相位    __HAL_HRTIM_SETCOMPARE(&hhrtim, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_1, phaseAB);    __HAL_HRTIM_SETCOMPARE(&hhrtim, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_2, phaseAB);    __HAL_HRTIM_SETCOMPARE(&hhrtim, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_3, phaseCD);    __HAL_HRTIM_SETCOMPARE(&hhrtim, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_4, phaseCD);    //调整占空比    __HAL_HRTIM_SETCOMPARE(&hhrtim, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_1, phi_tick);    __HAL_HRTIM_SETCOMPARE(&hhrtim, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_1, phi_tick);    __HAL_HRTIM_SETCOMPARE(&hhrtim, HRTIM_TIMERINDEX_TIMER_C, HRTIM_COMPAREUNIT_1, SPS_BASE_PERIOD / 2);    __HAL_HRTIM_SETCOMPARE(&hhrtim, HRTIM_TIMERINDEX_TIMER_D, HRTIM_COMPAREUNIT_1, SPS_BASE_PERIOD / 2);
这套配置默认使用了缓冲寄存器(影子寄存器),Master寄存器的更新时刻是repetition事件,slave寄存器的更新时刻是reset时刻

使用特权

评论回复
沙发
星辰大海不退缩| | 2025-1-30 10:40 | 只看该作者
这个程序能规整一点就更好的

使用特权

评论回复
板凳
tpgf| | 2025-3-4 09:38 | 只看该作者
HRTIM拥有10个外部事件输入,可用于任何定时器单元,且这些事件的可编程极性和边沿有效性,其中5个事件用于快速异步模式,5个事件用于可编程数字滤波器,利用消隐和窗口模式实现伪事件过滤

使用特权

评论回复
地板
磨砂| | 2025-3-4 19:11 | 只看该作者
HRTIM是一种高精度定时器,能够生成复杂的波形,如PWM、相移PWM等

使用特权

评论回复
5
晓伍| | 2025-3-4 21:00 | 只看该作者
HRTIM由六个16位的上计数器和一个具有非常精细时间分辨率的控制器定时器组成,在STM32G4系列上可实现184皮秒的时间分辨率

使用特权

评论回复
6
八层楼| | 2025-3-4 22:49 | 只看该作者
运行模式有三种。连续模式,当计数值超过周期寄存器中设置的值时,会回滚到零;单次可重触发模式,在重置事件发生时开始计数,并在达到周期值时停止,在此模式下用户可以随时重置;单次不可重触发模式,与单次可重触发模式原理相同,但如果在计数阶段结束之前发生重置事件,则会忽略这些事件

使用特权

评论回复
7
观海| | 2025-3-5 18:38 | 只看该作者
HRTIM具有模块化设计,包含定时单元、Set/Reset Crossbar(用于输出控制逻辑)、输出阶段(管理输出信号及逻辑)、输入块(处理外部事件和故障信号)以及接口部分(与其他定时器、DMA、ADC和DAC连接)。

使用特权

评论回复
8
guanjiaer| | 2025-3-5 20:27 | 只看该作者
它可提供高分辨率的定时控制能力,满足对时间精度要求苛刻的场景

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

1349

帖子

0

粉丝