前段時間在學習STM32G4系列的MCU的過程中,想找個實際的項目來練練手,所以就用筆者上一篇文章中提到的2KW交錯并聯(lián)+同步整流DC-DC的主板,加上STM32G474VE的MCU做主控芯片操練了一下,也有了一些心得,想與大家分享一下。
筆者初次使用ST平臺的產(chǎn)品,如有理解不對的地方,還請讀者賜教!
STM32G4系列的產(chǎn)品是ST公司最近推出主流的面向數(shù)字電源、電機控制應用的MCU。最高支持170MHz的主頻,PWM最高分辨率184ps,12路PWM輸出。DAC帶斜率補償輸出,5個ADC,可以成對采樣,帶有豐富的ADC觸發(fā)模式,ADC最高采樣速度4MSPS。7個比較器,最低19ns的輸出延時,為功率電路提供更快的保護。具體參數(shù)就不再詳述了,可以去自行搜索。
先介紹STM32平臺的搭建:
下載STM32CubeIDE和STM32CubeMX,安裝好。其中STM32CubeIDE是集成開發(fā)環(huán)境,STM32CubeMX是芯片的圖形配置開發(fā)包和代碼生成器。筆者用的集成開發(fā)環(huán)境是ST官方的,當然也可以選擇第三方的產(chǎn)品。還要說一句,安裝好STM32CubeMX后,最好也裝上MX中的數(shù)字電源插件(X-CUBE-DPower)。這個插件中有許多值得仔細閱讀的例程代碼,而且配合ST官方的開發(fā)板B-G474-DPOW1,能進行數(shù)字電源的開發(fā)工作。筆者本項目中的許多代碼就從這些例程代碼中移植而來。
如果環(huán)境搭建和IDE使用過程中有什么問題,請自行搜索。
筆者用的仿真器是ST-LINK/V2,在網(wǎng)上可以很方便的買到,但最好買隔離版本的。
筆者用的是STM32G474VE這枚芯片,現(xiàn)將該練手的數(shù)字電源主要輸入輸出參數(shù)列出來:
輸入電壓:38VDC——58VDC
輸出電壓:26VDC±0.5VDC
輸出電流:77A
功率電路拓普:兩相交錯并聯(lián)+同步整流BUCK電路。
控制環(huán)路模式:峰值電流型全數(shù)字控制環(huán)路,恒壓恒流輸出。
功率電路的框圖如下:
下面介紹STM32G474VE外設資源的分配:
PWM輸出: TA1——PWM1A
TA2——PWM1B
TB1——PWM2A
TB2——PWM2B
ADC采樣: 輸出電壓采樣Vout_FB——ADC3的IN11通道
輸出電流采樣Iout_FB——ADC1的IN3通道
比較器: 輸入電流互感器信號CS1+——COMP1+
輸入電流互感器信號CS2+——COMP3+
DMA: 連接ADC3的IN11通道,傳送輸出電壓采樣值。
串口: USART2
FMAC(濾波計算加速器):用硬件來做環(huán)路算法,只提供了一個。分配給穩(wěn)壓環(huán)路計算,穩(wěn)流環(huán)路就只能用軟件計算了。
外設中斷: FMAC中斷(計算電壓環(huán)路)、ADC1采樣中斷(計算電流環(huán)路)、串口中斷。
系統(tǒng)中斷: 系統(tǒng)tick定時器中斷,用來產(chǎn)生1ms的系統(tǒng)定時心跳。默認優(yōu)先級最低,為了不被其它的中斷干擾,將其改為0(最高)優(yōu)先級。
DAC: DAC1——COMP1-(帶斜率補償)
DAC3——COMP3-(帶斜率補償)
下圖就是芯片外設的配置及互連框圖:
接下來,在MX中先配置系統(tǒng)時鐘。
本例中,用的是外接12MHz的晶振,所以這樣配置:
再選擇編程接口,筆者用的是Serial Wire接口。
選擇系統(tǒng)外接晶振選項:
接下來,詳細說明外設的配置過程。
1)PWM輸出
在STM32G474VE中PWM輸出是由HRTIM(高精度定時器)來完成的。HRTIM又包含多個定時器子模塊:MasterTimer、TimerA至TimerF,總共7個獨立定時器,其中MasterTimer不能輸出PWM,其它的TimerA至TimerF每個定時器都能輸出一組(兩路)PWM。筆者用到的是TimerA(TA1和TA2)、TimerB(TB1和TB2)共四路PWM輸出。TA1和TA2互補,TB1和TB2互補。因為TA和TB交錯180°,所以要用MasterTimer同步TA和TB的相位。下圖是PWM產(chǎn)生的原理。
本例中每路PWM的工作頻率為150KHz。先配置MasterTimer
周期寄存器的計算公式:
MasterTimer中的Compare1寄存器的值為周期寄存器的1/2,設為18133。
然后開始配置TA和TB。
TA
然后是TA1輸出高電平或低電平的條件:
設置TA1和TA2之間的死區(qū)時間:
死區(qū)時間的計算公式(設死區(qū)時間為200ns):
TB
TB1輸出的高低電平的配置與TA1相似,主要區(qū)別是TB1高電平是由MasterTimer的Compare1事件觸發(fā)的,以實現(xiàn)與TA1交錯180°相位差。
TB1和TB2的死區(qū):
說明一下:在前面的配置中周期寄存器和Compare1寄存器本應設定一個具體的數(shù)值,但為了以后修改方便,筆者將這些寄存器的內(nèi)容在程序文件中用#define XXX XXX的形式表示出來,這樣就可以通過修改預定義的值來達到修改寄存器內(nèi)容的目地,會方便很多。
且該寄存器內(nèi)容的選項中要勾選“No check”,否則MX會認為該寄存器內(nèi)容格式錯誤。
然后就可以生成代碼了。
生成的代碼是基于ST官方的HAL庫。因為G474VE芯片不再支持以前的標準庫函數(shù)了,只支持ST的HAL庫和LL庫。至于HAL庫函數(shù)的優(yōu)缺點網(wǎng)上有詳細的說明,這里不再展開。
生成的代碼目錄結構如下:
*.ioc文件就是MX的圖形配置文件,直接雙擊就可以進入MX,進行配置的修改。
Drivers目錄中是HAL庫相關的驅動文件,包含了大量的功能函數(shù),并進行了多次的封裝。這些文件不需要修改,也不能修改,否則系統(tǒng)將無法正常工作。
Core目錄就是用戶添加功能代碼的地方。
生成的PWM配置,還需要用戶添加相應的啟動代碼后,才能開始工作。
完成上述代碼后,PWM就可以輸出波形了。
下圖是控制板,原理圖在附件可以下載。