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