打印
[STM32H7]

HRTIM的移相配置

[复制链接]
104|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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时刻

使用特权

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

本版积分规则

17

主题

1320

帖子

0

粉丝