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