當(dāng)今時代,電力電子數(shù)字化的浪潮正在以不可阻擋的趨勢席卷以前的傳統(tǒng)的模擬電源行業(yè),因此,如何從模擬電源向數(shù)字電源轉(zhuǎn)換,是每個模擬工程師需要認(rèn)真考慮的問題。
數(shù)字電源有配置靈活,可以實(shí)現(xiàn)多種算法的集成,反饋不易受干擾,好加密等優(yōu)點(diǎn),但也正是這些數(shù)字電源的特點(diǎn),成為橫亙在模擬工程師前面的巨大障礙,導(dǎo)致許多工程師還沒開始就已放棄。數(shù)字電源與模擬電源最主要的區(qū)別在于控制環(huán)路和采樣環(huán)節(jié)是數(shù)字化的。因此對于數(shù)字電源的設(shè)計,我們就主要關(guān)注反饋控制環(huán)路如何設(shè)計,被控量采樣ADC是如何處理數(shù)據(jù)的。本文不會堆砌數(shù)字電源的概念和公式,而是嘗試用一種看得見摸得著的方法來展示數(shù)字電源倒底是如何工作的。使模擬工程師建立起對數(shù)字電源的感性認(rèn)識,而不是因?yàn)槊媲袄щy被勸退。
雖然本文說是初學(xué)者入門,但是初學(xué)者是指數(shù)字電源的初學(xué)者,而不是電源的初學(xué)者,在此,筆者需要強(qiáng)調(diào)一下讀者要具備的一些基礎(chǔ)知識:
1)要了解buck電路原理。下面的例子中會用到這個電路,相信讀者都已經(jīng)具備了這樣的知識。
2)明白反饋的類型,如電壓型、峰值電流型、平均電流型。不明白可以網(wǎng)上查查相關(guān)的概念,很容易明白。例子中用到的是峰值電流型反饋。
3)知道如何判斷模擬電源反饋控制環(huán)路穩(wěn)定性,了解諸如“穿越頻率”“幅值裕度”“相位裕度”的概念。
4)要會C語言。這是數(shù)字電源,要寫程序的,不會C語言就別往下進(jìn)行了。這里的“會”,其實(shí)并不要求多“深”,但最少要會“條件語句”、“循環(huán)語句”,知道數(shù)據(jù)類型”char“、“int”“數(shù)組”應(yīng)該就夠了。本例中,自己親自動手寫的代碼不會超過30行,所以這個門檻還是很低的。至于“指針”等更深的內(nèi)容,會更好,不會也無所謂,本文中還用不到這些。
下面就以dspic33系列dsp單片機(jī)為例開始講解。對于數(shù)字電源的學(xué)習(xí)來說,需要準(zhǔn)備一個開發(fā)板,“Digital Power Starter KIT”的開發(fā)板,就是面向初學(xué)者的。如圖所示:
正面
背面
該開發(fā)板從硬件到軟件設(shè)計的很不錯,但是對于初學(xué)者來說還是有幾方面問題:
1)數(shù)字電源的初學(xué)者應(yīng)當(dāng)將所有注意力聚焦在,反饋控制系統(tǒng)和采樣環(huán)節(jié)如何實(shí)現(xiàn)數(shù)字化這些方面上,而不是被LCD顯示和通訊等非數(shù)字電源必要功能所分散注意力。
2)該開發(fā)板軟件內(nèi)嵌匯編語言,需要對CPU內(nèi)核指令有較深了解,對初學(xué)者尤其是對沒有任何編程基礎(chǔ)的模擬工程師并不友好。
3)該開發(fā)板軟件并不是通過代碼生成器自動生成的,要手動編寫外設(shè)的配置文件,這對初學(xué)者來說,編程工作量較大,容易出錯,而且比較分散精力,不容易抓住問題的重點(diǎn)。
4)比較貴。老外做的東西嘛,成本高,個人感覺不值那個價。對于一個硬件工程師來說,讓別人從硬件上賺我們的錢始終是令人不舒服的一件事。最大程度上降低我們的學(xué)習(xí)成本,應(yīng)該把錢花到刀刃上。
5)全英文,筆者完整看了一遍官方自帶的幫助文件,挺長時間的,雖然是原汁原味,但對英文不太好的讀者來說,看起來有些費(fèi)勁。英文好的讀者就當(dāng)沒看見好了。
基于上面幾點(diǎn)的原因,筆者在這個開發(fā)板的基礎(chǔ)上,根據(jù)手中現(xiàn)有的元器件,按照自己的想法重畫了一個開發(fā)板。下圖所示:
官方的開發(fā)板和后面筆者畫的開發(fā)板原理圖在本文的附件中提供。
筆者設(shè)計的開發(fā)板主要由以下幾部分組成:
1)Buck電路:輸入電壓12V-20V,輸出4V / 1A。
2)Boost電路:輸入電壓12V-20V,輸出20V / 0.5A。
3)CAN通訊和串口通訊。
4)2路溫度測量和開關(guān)。
對于初學(xué)者來說,電源的數(shù)字化最主要的是:1.被控量采樣的數(shù)字化。2.反饋補(bǔ)償器的數(shù)字化。3.PWM發(fā)生器的數(shù)字化。4.峰值電流比較器的數(shù)字化。而主功率變換電路和傳統(tǒng)的模擬電源沒有區(qū)別。如下圖所示,就是數(shù)字控制環(huán)路的簡圖,采用的是峰值電流型控制方式。我們的主要工作就是設(shè)計數(shù)字補(bǔ)償器的算法、設(shè)置正確觸發(fā)ADC采樣的時間、數(shù)字PWM工作方式、dsp內(nèi)部比較器的配置等。
現(xiàn)在先以BUCK電路為例,介紹如何一步一步搭建數(shù)字電源的控制系統(tǒng)。
本文中用到的dsp單片機(jī)的型號是dspic33ep128gs806。用到的開發(fā)環(huán)境是MPLAB X IDE v5.35,其中包含mcc插件是MCC v4.0.2,這里的mcc插件是用來自動生成外設(shè)配置代碼的,能大幅減少了程序員的工作量,另外需準(zhǔn)備一個PIC燒錄器,筆者用的是PICkit3。
1)打開MPLAB X IDE軟件,先新建一個工程文件,然后一步一步配置
按“Finish”后,在主界面中,打開MCC插件,單擊紅圈位置。
2)配置系統(tǒng)時鐘
MCC啟動后的界面如下:
在“1”中,將dsp中可以用到的外設(shè)通過綠色的“+”號添加到“2”中,可以看到已經(jīng)添加了一些外設(shè)了。在“2”中的System下,點(diǎn)擊“System Module"會出現(xiàn)"3"窗口。
首先配置dsp的系統(tǒng)時鐘
我們用的外部振蕩器是12MHz的晶振,將dsp的系統(tǒng)時鐘配置為60MHz,PWM和ADC需要用“Auxiliary Clock",配置為240MHz的時鐘頻率。
3)配置數(shù)字PWM
首先要將”Enable PWM"勾選上。因?yàn)樵谟布?,我們是用PWM1來控制BUCK電路的mos管的,所以有關(guān)buck電路的PWM參數(shù)要在這里配置。選擇了“獨(dú)立時基模式,獨(dú)立占空比,邊沿對齊”PWM時基工作模式,至于這是什么意思,那就需要讀者自己查看器件手冊了。通過配置相關(guān)的寄存器,就把PWM的周期設(shè)置為10us(即100KHz工作頻率),最大占空比設(shè)為45%。
接下來繼續(xù)配置PWM1中剩下的功能。
“1”PWM的I/O輸入輸出腳要配置成“互補(bǔ)模式”。“2”配置PWM的限流源為CMP2,即dsp內(nèi)部比較器2。因?yàn)樵贐UCK電路中用CMP2做為限流比較器。“3”需要配置當(dāng)比較器2產(chǎn)生限流狀況時,同步降壓電路中兩個MOS管的工作狀態(tài)。從配置位中可以看出,當(dāng)電流互感器的電流超過設(shè)定后,buck電路主MOS管處于低,續(xù)流管處于高。“4”最后設(shè)置互補(bǔ)驅(qū)動前后沿的死區(qū)時間,前后沿都設(shè)為530ns。因?yàn)楸纠杏玫降尿?qū)動芯片IR2181延時較大,為了避免主開關(guān)管與同步續(xù)流管直通,所以死區(qū)設(shè)置較大。
令外還有一項(xiàng)非常重要的配置需要講一下,就是主MOS管電流采樣時的“前沿消隱”。因?yàn)樵谥鱉OS管開通的瞬間,主MOS管電流會出現(xiàn)較大的尖峰,如果不進(jìn)行“消隱”會干擾電路的正常工作。如下圖,點(diǎn)擊“Registers”,相應(yīng)的“CLLENEN”和“PHR”設(shè)置成“enabled”。這兩項(xiàng)是告訴PWM發(fā)生器,在限流輸入情況下且PWM輸出高電平的上升沿時,PWM要進(jìn)行“消隱”
至于要消隱多長時間,要由下面的寄存器來設(shè)置,先設(shè)一個較大的值,實(shí)際工作中再進(jìn)行調(diào)整。
至此數(shù)字PWM的所有相關(guān)的設(shè)置工作全部完成。
4)配置ADC
ADC采樣比較簡單,如圖:
“1”使能ADC,“2”選擇ADC采樣時間,越短越好。這個值極大影響數(shù)字控制環(huán)路的穩(wěn)定性,這里選20ns。“3”輸出電壓采樣是連接到DSP的AN5通道,所以選“AN5”。“4”要設(shè)定ADC的“觸發(fā)源”。這里用“PWM1 Primary Trigger"
"5"告訴dsp在ADC采樣完成后,要進(jìn)入中斷處理。
5)限流比較器
“1”使能比較器,“2”選擇采樣電流是通過比較器哪個引腳進(jìn)入比較器的,在硬件中是通過CMP2A進(jìn)入比較器的,所以選CMP2A。“3”使能比較器的數(shù)字濾波功能,抗干擾。
6)代碼的自動生成
所有用到的外設(shè)都設(shè)置完成后,沒有提到的部分就都用默認(rèn)值。然后自動生成代碼。
如圖,單擊“Generate”,生成的代碼的結(jié)構(gòu)如下:
我們就不必關(guān)心其它的問題了,專注于控制環(huán)路算法的編寫。
7)控制環(huán)路算法
其實(shí)數(shù)字電源的控制環(huán)路的算法有很多,在本例中,就以最經(jīng)典的PID算法來講講。本例中只是用到了PI補(bǔ)償器,就能使電路穩(wěn)定,并沒有加入微分的部分。數(shù)字電源的環(huán)路算法都是在ADC中斷中進(jìn)行計算的,所以雙擊“adc1.c”文件。如圖
在“ADC1_channel_AN5_CallBack”函數(shù)中寫PI算法。該函數(shù)是一個回調(diào)函數(shù),即ADC完成采樣后,會自動執(zhí)行該函數(shù)里的指令。在寫算法前,需要定義幾個用到的變量。
u_N為補(bǔ)償器輸出的當(dāng)前值,u_P為上一次補(bǔ)償器輸出值,e_N為誤差的當(dāng)前值,e_P為上一次的誤差值,setpoint_buckV為輸出電壓的設(shè)定值。ADCBUF5就是ADC采樣的輸出電壓的值,是數(shù)字量。所以:
根據(jù)AN5通道的ADC采樣是12位的采樣率,且ADC的參考電壓為3.3V。所以根據(jù)setpoint_buckV的值可以算出buck電路的輸出電壓為:
PI算法的公式如下:
按照上面的公式,寫程序。
有一點(diǎn)要說明的是,Kp和Ki一般為小數(shù),而我們的dsp程序?yàn)榭焖偻瓿伤惴ǖ挠嬎悖兞慷级x的是整型數(shù),而不是用浮點(diǎn)型數(shù)據(jù)類型。所以為了能用整數(shù)來計算小數(shù),我們就先將Kp、Ki和u_P都左移13位,計算完成后再右移13位,這樣就能即保持一定的精度,又能以較短的時間完成環(huán)路的計算。
通過反復(fù)調(diào)整Kp和Ki的參數(shù)(具體方法后續(xù)文章中再闡述),就能使環(huán)路達(dá)到穩(wěn)定,最終Kp=3.72 Ki=0.0977。
當(dāng)算出了當(dāng)前的u_N,并做最大最小值限定后,直接更新CMP2DAC這個寄存器即可,這樣就能將u_N這個數(shù)字量通過數(shù)-模(DAC)轉(zhuǎn)換變成模擬量,這樣才能與MOS管電流的采樣模擬值做比較,完成控制環(huán)路的閉環(huán)。
至此,數(shù)字電源控制環(huán)路設(shè)計工作全部完成??梢钥吹轿覀兪謩訉懙拇a只是在ADC中斷中寫的PID算法的公式,就完成了整體的數(shù)字控制環(huán)路。非常簡捷直觀的展示了數(shù)字控制環(huán)路的工作流程。
用網(wǎng)絡(luò)分析儀測量該電源的控制穩(wěn)定性。額定輸入電壓15V,輸出電壓4.1V
輸出電流1A(穿越頻率1.2KHz,相位裕度83.5°。)
輸出電流0.5A(穿越頻率3.1KHz,相位裕度81°。)
輸出0.1A(穿越頻率3.1KHz,相位裕度73°。)
輸出0A(穿越頻率2.3KHz,相位裕度82°。)
同步降壓電路的驅(qū)動波形(因?yàn)樗x驅(qū)動芯片的原因,驅(qū)動速度較慢,不得不將死區(qū)設(shè)得的比較大。)
1A負(fù)載條件下輸出紋波(峰峰值215mv)
負(fù)載階躍響應(yīng)
輸出電流1A減到0A(向上過沖90mv,恢復(fù)時間945us)
輸出電流從0A加到1A,幾乎測不出變化。
總結(jié):
通過上面講述的過程,向讀者大致展示了數(shù)字電源控制環(huán)路的設(shè)計方法,使讀者對數(shù)字電源有了一個具體的認(rèn)識,激發(fā)初學(xué)者的興趣。當(dāng)然,其中的一些具體的技術(shù)細(xì)節(jié)并沒有詳細(xì)說明,有時間會在后續(xù)文章中闡述。