最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

STM32H7高精度定時器(HRTIM)的移相配置

2023-07-26 12:50 作者:油炸糖糕  | 我要投稿

參考自AN4539的多相buck,可以在F3的固件包中找到例程代碼

由于缺少獨立的倍頻器,H7最高僅支持主頻頻率的HRTIM,對于H750而言是480M

一、時鐘配置

首先在RCC中將HSE選好,并調(diào)整H7的版本,Y版最高400M,V版最高480M

Y版可以將Power Regulator Voltage Scale調(diào)整至0,V版只能調(diào)整至1



接下來先把HRTIM勾選上,我這里需要4路PWM,主時鐘用來移相,其他四個時鐘用來輸出


接下來進時鐘樹,將PLL達到HSE上(CSI RC也行,不過正常做東西都有外部時鐘吧),System Clock Mux打到PLL上,系統(tǒng)時鐘打個480讓cube自己搜索,搜索完后拉到下面調(diào)整一下HRTIM Clock Mux


二、HRTIM配置

stm32的HRTIM模塊下面有6個獨立的時鐘,分別是Master和A、B、C、D、E五個slave時鐘,每個時鐘下面有4個比較器。其中,Master可以用來產(chǎn)生trigger啟動其他的時鐘

配置移相的基本思路就是Master用來控制移相角度,在合適的時間通過比較器產(chǎn)生trigger啟動對應的slave時鐘,slave通過自己的比較器產(chǎn)生脈寬可調(diào)的PWM

簡單來說就是Master的比較器控制移相角,其他時鐘的比較器控制波形形狀,頻率由Master確定,移相角可以做到±180°


首先調(diào)整Master:

  1. HRTIM的頻率,F(xiàn)334和G474都能在主時鐘的基礎上倍頻,H7不行,只能調(diào)整到480M上

  2. Master時鐘的周期,決定了開關頻率,我這里配置的500kHz,在這個頻率下PWM分辨率約10bits

  3. Repetition Counter用來控制中斷頻率,0x00意味著每個周期進一次中斷

  4. Preload Enable需要enable

  5. Repetition Update也要enable

  6. Interrupt Requests Sources數(shù)量調(diào)整到1,并且調(diào)整中斷源

  7. 需要幾路移相就開幾個Compare Unit


Timer A~E的配置都類似,這里以A為例:

  1. 時鐘和周期與Master一致,其實周期隨便配置,配成0xFFFF都沒問題

  2. 這里要改成單次觸發(fā)模式,否則在調(diào)整移相角時占空比會出問題

  3. Preload和Repetition Update和Master一樣

  4. 這里一定要打開,將寄存器更新延后到了reset時刻

  5. Reset Trigger要改成Master Timer Compare event,這個和前面配置的Master Cpmpare Unit是對應的

  6. Compare Unit用于控制波形,我這里是占空比50%的半橋,所以前面Dead Time Insertion Mode改成了Deadtime is inserted,這里只需要使用一個Compare Unit

  7. 死區(qū)按照自己想法設置

  8. 輸出配置,我這里配置的是Timer A被Master的trigger reset的同時輸出拉高,并在Compare Unit 1處置低,這樣占空比剛好是50%(0->480)


最后把Master的全局中斷打開


三、初始化代碼

HRTIM初始化完成后需要手動打開輸出和Counter

? ?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);

中斷回調(diào)函數(shù)是void HAL_HRTIM_RepetitionEventCallback(HRTIM_HandleTypeDef *hhrtim,uint32_t TimerIdx)

占空比與周期的調(diào)節(jié)可以通過直接寫寄存器來完成,也可以通過HAL庫提供的宏來實現(xiàn)

? ?//調(diào)整周期
? ?__HAL_HRTIM_SETPERIOD(&hhrtim, HRTIM_TIMERINDEX_MASTER, SPS_BASE_PERIOD + delta_tick / 2);
? ?//調(diào)整相位
? ?__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);
? ?//調(diào)整占空比
? ?__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時刻

密麻麻的b站什么爛編輯器,連個代碼格式化都沒有

STM32H7高精度定時器(HRTIM)的移相配置的評論 (共 條)

分享到微博請遵守國家法律
都匀市| 富平县| 浠水县| 务川| 怀集县| 青铜峡市| 治县。| 珠海市| 东乌珠穆沁旗| 和田县| 崇明县| 巴彦淖尔市| 湘阴县| 鄂温| 余姚市| 丹寨县| 安泽县| 邯郸市| 介休市| 蒙自县| 岢岚县| 怀安县| 台东县| 阳东县| 桃园县| 望奎县| 德阳市| 吐鲁番市| 五常市| 南召县| 凌云县| 台湾省| 万盛区| 喀喇| 永德县| 洛浦县| 顺平县| 周口市| 东兰县| 富平县| 莲花县|