大家好,我是電源漫談,很高興和各位一起分享我的第24篇原創(chuàng)文章,喜歡和支持我的工程師,一定記得給我點(diǎn)贊、收藏、分享。
加微信[13764329639]與作者微信及進(jìn)群溝通交流。
Power Smart™ Digital Control Library Designer是一個(gè)新的用于設(shè)計(jì)數(shù)字補(bǔ)償器的工具,相比于之前的DCDT工具更靈活簡(jiǎn)單,通過本文,我們以電壓模式BUCK電路的補(bǔ)償器設(shè)計(jì)及創(chuàng)建demo程序?yàn)槔?,探討一下如何建立一個(gè)完整的工程,并且基于DCLD設(shè)計(jì)數(shù)字補(bǔ)償器,且包含一定的保護(hù)功能,并且驗(yàn)證數(shù)字補(bǔ)償器的閉環(huán)性能。
一.數(shù)字電源開發(fā)板及基本代碼框架介紹
我們建立工程基于dsPIC33CK的數(shù)字電源開發(fā)套件,上面的控制芯片為dsPIC33CK256MP505,上面包含一個(gè)同步buck和一個(gè)boost電路,這里我們使用其同步buck電路。
圖1 DPSK3開發(fā)板
圖2 同步BUCK的電路結(jié)構(gòu)
此同步BUCK的電路中,包含一個(gè)對(duì)負(fù)載控制的按鍵,通過此按鍵可以控制加載到BUCK電路的負(fù)載,當(dāng)然板上也安裝了最大1A的BUCK電路負(fù)載。
圖3 同步BUCK的軟件框架結(jié)構(gòu)
在這個(gè)電路中,我們將通過dsPIC33C內(nèi)部DSP運(yùn)行一個(gè)數(shù)字補(bǔ)償器,通過分壓電阻采樣輸出電壓和數(shù)字基準(zhǔn)比較產(chǎn)生誤差,最終計(jì)算的結(jié)果經(jīng)過anti-windup限制范圍后,輸出給片上的PWM模塊去控制BUCK電路的占空比。為了避免給輸出電容充電產(chǎn)生的過充電流,我們添加軟起動(dòng)代碼,通過一個(gè)定時(shí)器實(shí)現(xiàn),同時(shí),我們也會(huì)添加一些保護(hù)代碼,如輸入欠壓UVLO和輸出過壓OVLO,及輸出電壓范圍誤差代碼。按照慣例,我們也通過一個(gè)用定時(shí)器控制的LED來指示軟件的運(yùn)行狀態(tài)。
圖4 用MCC產(chǎn)生配置的部分模塊
圖5 通過DCLD產(chǎn)生數(shù)字控制器代碼
二.基本模塊的MCC代碼構(gòu)建
新建一個(gè)工程,就開始分別進(jìn)行模塊設(shè)置,關(guān)于新建工程的步驟,我們不在此詳述。具體而言,我們通過MCC來建立各個(gè)模塊的代碼,MCC的安裝及使用我們?cè)诖瞬辉斒?。我?/span>首先需要做的是設(shè)置一個(gè)滿足各個(gè)外設(shè)及CPU運(yùn)行的時(shí)鐘。
圖6 系統(tǒng)主時(shí)鐘的配置
通過圖6所示的配置參數(shù),將主時(shí)鐘配置為最高主頻100M,對(duì)應(yīng)FOSC為200M,注意此處,我們使用片上內(nèi)部8M的振蕩器FRC為源振蕩器,且不進(jìn)行FRC分頻。
圖7 系統(tǒng)輔助時(shí)鐘的配置
輔助時(shí)鐘按照?qǐng)D7所示,配置為500M,供PWM模塊使用,規(guī)格書規(guī)定,如在高精度模式下運(yùn)行PWM,則必須使用500M的時(shí)鐘輸入。
在系統(tǒng)設(shè)置部分,其非關(guān)鍵部分,這里我們不做特別說明。
圖8 定時(shí)器T1的配置
通過如圖8所示的配置,選擇指令時(shí)鐘FOSC/2 100M,我們將定時(shí)器Timer1進(jìn)行適當(dāng)分頻設(shè)為2ms的周期,用于做一些指示燈功能,及啟動(dòng)電路狀態(tài)機(jī),且使能其中斷,在中斷中處理任務(wù)。
圖9 PWM模塊配置1
圖10 PWM模塊配置2
圖11 PWM模塊配置3
圖12 PWM模塊配置4
通過圖9到圖12進(jìn)行PWM模塊的配置,在本示例中使用PWM1模塊,使能高精度模式,采用500M時(shí)鐘驅(qū)動(dòng)。設(shè)置為互補(bǔ)模式輸出,設(shè)置一定死區(qū),開關(guān)頻率為500k,通過閉環(huán)控制占空比。PWM的觸發(fā)為自觸發(fā),由于需要它觸發(fā)ADC的轉(zhuǎn)換,所以使用了ADCtrigger A和ADC triggerB這兩個(gè)觸發(fā)信號(hào),信號(hào)A用于觸發(fā)輸入電壓采樣,信號(hào)B用于觸發(fā)輸出電壓采樣。
PWM更新模式設(shè)為改寫占空比后觸發(fā)更新,更新模式為立即更新。
圖13 ADC模塊的配置
我們采用ADC的時(shí)鐘為100M,則按照默認(rèn)設(shè)置ADC的core的轉(zhuǎn)換時(shí)鐘為50M,保持默認(rèn)的采樣時(shí)間設(shè)置。由于需要采樣輸入電壓和輸出電壓,我們根據(jù)硬件連接選擇AN12為輸入電壓采樣,AN13為輸出電壓采樣,且使能AN13中斷,由于優(yōu)先級(jí)問題,當(dāng)AN13中斷服務(wù)程序中AN13的轉(zhuǎn)換結(jié)果得到時(shí),AN12的轉(zhuǎn)換結(jié)果也是完成的。由于AN13的結(jié)果需要參與環(huán)路運(yùn)算,所以我們使能AN13的中斷,當(dāng)AN13的轉(zhuǎn)換結(jié)果完成后觸發(fā)進(jìn)入ADC中斷,去進(jìn)行反饋環(huán)的調(diào)用。
圖14 LED指示設(shè)置
圖15 RB6設(shè)為指示燈輸出
如圖14所示,在pin manager中設(shè)置RB6為輸出功能,我們?cè)O(shè)置它為用戶指示燈的功能,重新在圖15中的pin Module給它命名。
圖16 設(shè)置中斷的優(yōu)先級(jí)
定時(shí)器的中斷優(yōu)先級(jí)可以設(shè)的不用太高,此處我們?cè)O(shè)置為1,高于CPU的優(yōu)先級(jí),而AN13中斷需要參與反饋環(huán)調(diào)整,所以將它的優(yōu)先級(jí)設(shè)為較高,此處設(shè)為6,確保AN13結(jié)果出來后能及時(shí)進(jìn)入AN13中斷中執(zhí)行反饋換運(yùn)算。
三.DCLD的功能簡(jiǎn)介
圖17 通過PowerSmart DCLD實(shí)現(xiàn)環(huán)路補(bǔ)償器設(shè)計(jì)
此時(shí)我們已經(jīng)完成了PWM和ADC的設(shè)置,接下來通過PowerSmart DCLD來設(shè)計(jì)數(shù)字補(bǔ)償器,這是一個(gè)連接通用仿真計(jì)算工具如Matlab或者Simplis等和數(shù)字環(huán)路補(bǔ)償設(shè)計(jì)的工具。
圖18 DCLD的結(jié)構(gòu)框圖
DCLD的結(jié)構(gòu)框圖,由基本補(bǔ)償器部分,擴(kuò)展功能部分,及API函數(shù)組成,可以實(shí)現(xiàn)dsPIC33F,dsPIC33E, dsPIC33C系列的環(huán)路補(bǔ)償設(shè)計(jì)。
圖19 DCLD實(shí)現(xiàn)平均電流模式的示例
通過DCLD可以實(shí)現(xiàn)較為復(fù)雜的控制模式,如平均電流模式控制,可以建立兩個(gè)獨(dú)立的控制環(huán)路,電壓環(huán)和電流環(huán),電壓環(huán)輸出作為電流環(huán)的輸入?yún)⒖?,兩個(gè)環(huán)路之間的互聯(lián)由用戶代碼結(jié)合API完成,后續(xù)我們會(huì)介紹。
關(guān)于DCLD的詳細(xì)功能介紹,我們放在后面。
三.DCLD參數(shù)配置及補(bǔ)償器設(shè)計(jì)
圖20 DCLD配置位置路徑及連接MPLAB XIDE
由于DCLD是一個(gè)獨(dú)立的設(shè)計(jì)工具,因此在圖20中,我們給出了DCLD配置位置的設(shè)置,通過這個(gè)窗口將DCLD的配置和MPLAB XIDE的工程連接起來,此處給配置命名為Voltage_loop,這個(gè)名稱將自動(dòng)放到代碼中作為變量定義的名稱。
圖21 DCLD和MPLAB XIDE工程的連接設(shè)置
通過設(shè)置如圖21的項(xiàng)目工程路徑,我們就將MPLAB XIDE當(dāng)前工程和DCLD的設(shè)置連接了起來,窗口會(huì)顯示如圖20中的綠色打勾。
圖22 DCLD的配置窗口
圖23 對(duì)DCLD代碼的裁剪
此處我們對(duì)DCLD產(chǎn)生的代碼進(jìn)行一定裁剪,由于我們采用MCC產(chǎn)生的中斷服務(wù)程序去調(diào)用控制環(huán)路,控制環(huán)路本身不需要關(guān)注CPU的背景信息,因此在默認(rèn)設(shè)置上我們將Context Management去掉。
圖24 Context Management優(yōu)化中斷延時(shí)
關(guān)于通過管理不同器件的背景信息,以便優(yōu)化中斷延時(shí)的說明如圖24所示,當(dāng)有存儲(chǔ)背景和恢復(fù)背景需要時(shí),可以通過這個(gè)選項(xiàng)處理。
圖25 Add Enable/Disable Switch功能
對(duì)使能和去使能的選項(xiàng),當(dāng)增加這個(gè)選項(xiàng)時(shí),會(huì)在NPNZ16b_t中增加一個(gè)控制位status.enable,當(dāng)需要更新控制庫(kù)時(shí),需要將這一位置位。當(dāng)清零時(shí),控制代碼就會(huì)被忽略。
我們需要連續(xù)運(yùn)行控制環(huán)路,因此Add Enable/Disable Configuration選項(xiàng)也會(huì)去掉。
圖26 ADC觸發(fā)位置的精確設(shè)置
當(dāng)需要精確設(shè)置ADC的觸發(fā)位置時(shí),我們可以通過選擇Add ADC Trigger Placement來自動(dòng)設(shè)置在最新的控制輸出位置的50%,同時(shí)通過ADCTriggerAOffset和ADCTriggerBOffset去增加偏置量。
由于我們這里采取周期內(nèi)固定的采樣點(diǎn)設(shè)計(jì),所以去掉Add Automatic Placement of Primary ADC Trigger A, Add Automatic Placement of Primary ADC Trigger B這兩個(gè)選項(xiàng)。
這里我們需要用到Anti-windup和Clamp Control Output Maximum和Clamp Control Output Minimum對(duì)計(jì)算最大值和最小值進(jìn)行Clamp。
圖27 Anti-Windup設(shè)置
我們需要用Anti-Windup來控制環(huán)路計(jì)算結(jié)果在一個(gè)定義的范圍內(nèi),一旦超出這個(gè)范圍,控制計(jì)算結(jié)果就會(huì)被Clamp,這就不會(huì)造成在模擬控制中的飽和問題,如圖27描述所示。
圖28 Andi-Windup對(duì)低頻率范圍的支持
當(dāng)沒有使能Limit Control Loop Output to Positive Numbers時(shí),控制庫(kù)是支持-32768到32767之間的Q15有符號(hào)數(shù)據(jù)的,而此時(shí)在dsPIC33C高精度模式下,最低能達(dá)到的控制開關(guān)頻率為144k,為了支持更低頻率,我們可以使能這個(gè)選項(xiàng),使得控制庫(kù)支持無(wú)符號(hào)16位計(jì)算結(jié)果,將計(jì)算結(jié)果擴(kuò)大到0-65535,使得高精度PWM模式下最低的開關(guān)頻率達(dá)到61k。我們現(xiàn)在這個(gè)實(shí)驗(yàn)案例開關(guān)頻率較高,不需要使能這一選項(xiàng)。
此時(shí),我們就可以進(jìn)行濾波器的設(shè)計(jì)了。
四.DCLD設(shè)計(jì)數(shù)字補(bǔ)償器
在設(shè)計(jì)控制器零極點(diǎn)之前,我們通過P控制器測(cè)試出功率級(jí)電路的Bode圖。
圖29 P控制器代碼生成選項(xiàng)
圖30 反饋增益的設(shè)置
通過對(duì)反饋增益的設(shè)置,我們得到正常的反饋ADC采樣數(shù)字量為2048,對(duì)應(yīng)輸出電壓為Vout 3.3V時(shí)的ADC采樣值2048。
圖31 典型控制量計(jì)算
設(shè)置PWM模塊的工作頻率為4G(500MHz*8),在500k電源開關(guān)頻率下,自動(dòng)得到周期為8000個(gè)tick,通過系統(tǒng)自帶的計(jì)算器去對(duì)效率進(jìn)行估算,以得到合理的占空比計(jì)算值,如圖32.最終得到計(jì)算的典型控制輸出為3188,如圖29所示。
圖32 合理占空比計(jì)算
圖33 產(chǎn)生P控制器代碼
通過菜單中的Export Files可以產(chǎn)生P控制器代碼,用以測(cè)量功率級(jí)Bode圖,如圖34所示。
圖34 P控制器匯編代碼
圖35 在DCLD目錄中添加代碼
圖36 DCLD添加代碼
如圖35,36所示,將DCLD的產(chǎn)生的相應(yīng)控制環(huán)代碼添加到當(dāng)前工程目錄中,包括2個(gè)頭文件,1個(gè)C文件,1個(gè)匯編文件。
圖37 添加頭文件和定義輸入輸出及參考變量
圖38 添加ADC中斷調(diào)用代碼及控制器初始化代碼
圖39 添加控制器初始化調(diào)用及中斷服務(wù)程序Handler
控制器的初始化,主要是對(duì)控制器初始化函數(shù)進(jìn)行初始化,并且指定控制器的輸入變量adc_vbuck,輸出目標(biāo)變量PG1DC,及控制參考ref_vbuck。
圖40 自行Debug驗(yàn)證ADC中斷
經(jīng)測(cè)試,可以看到ADCAN13中斷可以正常進(jìn)入,調(diào)試窗口可以看到輸入電壓的測(cè)量值為0x598。
圖41 輸入電壓采樣電路
根據(jù)輸入電壓硬件采樣電路,當(dāng)輸入電壓為9.2V時(shí),可以測(cè)試出TP47電壓為1.152V,對(duì)應(yīng)調(diào)試窗口測(cè)試出的數(shù)值0x598,根據(jù)ADC的模擬數(shù)字量基本關(guān)系,不難確定這一點(diǎn)是正確的。
在主程序中添加對(duì)控制器的初始化代碼調(diào)用,并且將相應(yīng)的ADC的中斷服務(wù)程序和TMR1的中斷服務(wù)程序指定給相應(yīng)的中斷Handler。
TMR1的中斷服務(wù)程序如下所示,主要用于處理狀態(tài)指示,欠壓鎖定及軟起動(dòng)功能,此處代碼中VBUCK_REF代表正常輸出電壓。
voidTMR1_Int(void)
{
static int led_tmr =0;
static int fsm_state = 0;
static int start_tmr = 0;
static int err_tmr = 0;
// blink LED 1Hz
if(++led_tmr>=500)
{
led_tmr = 0;
USER_LED_Toggle();
}
switch(fsm_state)
{
case 0: // State 0: wait for Vin>threshold(delay time)
ref_vbuck = 0;
err_tmr = 0;
if (adc_vin<VIN_TH_ON)
{
start_tmr = 0;
}
else if (++start_tmr>2000)
{
fsm_state = 1;
}
break;
case 1: // State 1: ramp up buck reference value(soft-start)
if (ref_vbuck < VBUCK_REF)
{
ref_vbuck += VBUCK_RAMP;
}
if ((adc_vin<VIN_TH_OFF) ||(err_tmr>200))
{ // low input voltage OR error for>200ms
start_tmr = 0;
fsm_state = 0;
}
break;
}
}
接下來我們測(cè)試開發(fā)板的P控制器對(duì)應(yīng)的環(huán)路,即功率級(jí)傳遞函數(shù)曲線。
圖42 滿載時(shí)P控制器測(cè)試功率級(jí)Bode圖
從測(cè)試出的功率級(jí)Bode圖來看,功率級(jí)LC轉(zhuǎn)折頻率約為5k,ESR零點(diǎn)約為60k,這些信息為設(shè)計(jì)數(shù)字補(bǔ)償器零極點(diǎn)提供參考。
圖43 空載時(shí)P控制器測(cè)試功率級(jí)Bode圖
在圖43中,我們同時(shí)給出了空載時(shí)的功率級(jí)Bode圖,可知二階LC極點(diǎn)轉(zhuǎn)折頻率變?yōu)?/span>1k附近,由于負(fù)載阻抗較大,因此Q值很小,可以看到增益曲線沒有出現(xiàn)像滿載一樣的峰值,高頻ESR零點(diǎn)位置還是60k附近。
圖44 設(shè)計(jì)補(bǔ)償器零極點(diǎn)
根據(jù)P控制器測(cè)試出的功率級(jí)Bode圖,我們找到了相應(yīng)的功率級(jí)零極點(diǎn)大致位置,且根據(jù)前述文章的討論,可以使用3P3Z的數(shù)字補(bǔ)償器,且使用歸一化輸入增益,以便在AB系數(shù)中考慮輸出分壓反饋電阻。參考BUCK電路模擬補(bǔ)償器的數(shù)字化過程,中對(duì)輸入增益歸一化的說明。
此時(shí),我們可以指定相應(yīng)的零極點(diǎn)去得到期望的環(huán)路曲線,這里開關(guān)頻率設(shè)為500k,零頻率極點(diǎn)設(shè)為600Hz,兩個(gè)零點(diǎn)用于抵消LC二階極點(diǎn),分別設(shè)在2k和4k,一個(gè)極點(diǎn)用于抵消ESR零點(diǎn)設(shè)在75k,另一個(gè)極點(diǎn)用于衰減高頻分量,設(shè)在低于奈奎斯特頻率的頻率200k,使得奈奎斯特頻率處的分量有一定衰減。
圖45 調(diào)用電壓環(huán)控制代碼
根據(jù)新輸入的控制器零極點(diǎn),重新產(chǎn)生代碼后,我們?cè)?/span>AN13的中斷服務(wù)程序中調(diào)用電壓環(huán)控制函數(shù),如圖45所示,完成閉環(huán)控制。
圖46 DCLD產(chǎn)生的數(shù)字補(bǔ)償器系數(shù)
圖46為DCLD所產(chǎn)生的補(bǔ)償器AB系數(shù),及相應(yīng)的Q15格式數(shù)據(jù)。
圖47 空載時(shí)PWM驅(qū)動(dòng)波形(CH1-PWM1H-CH2-PWM1L)
前述文章,BUCK電路模擬補(bǔ)償器的數(shù)字化過程 ,詳述了通過DCLD產(chǎn)生的數(shù)字補(bǔ)償器AB系數(shù)的過程,后續(xù)我們也會(huì)詳細(xì)分析基于產(chǎn)生的AB系數(shù)結(jié)合數(shù)字補(bǔ)償器,如何在DCLD產(chǎn)生的代碼上執(zhí)行新的控制量計(jì)算。
圖48 滿載時(shí)開環(huán)增益?zhèn)鬟f函數(shù)Bode圖
滿載時(shí)的開環(huán)增益?zhèn)鬟f函數(shù)曲線如圖48所示,我們從圖上得知,帶寬為17.7k,相位裕量為50C,增益裕量為17.2db,且低頻段具有較高的積分增益,高頻200k以上以40db/10倍頻衰減,它是一個(gè)非常穩(wěn)定的符合我們期望的環(huán)路曲線。
圖49 滿載和空載時(shí)開環(huán)增益?zhèn)鬟f函數(shù)Bode圖
從圖49滿載和空載時(shí)的開環(huán)增益曲線對(duì)比來看,空載時(shí)的穿越頻率略低于滿載時(shí)的穿越頻率,相位裕量略高于滿載時(shí)相位裕量,符合同步BUCK的特性。
總結(jié),本文通過介紹數(shù)字電源開發(fā)板DPSK3的基本結(jié)構(gòu)及基本代碼框架的形成,接著通過MCC去得到基本的開關(guān)電源外設(shè)配置代碼,最后通過DCLD去設(shè)計(jì)數(shù)字補(bǔ)償器設(shè)計(jì),首先由P控制器測(cè)試出功率級(jí)Bode圖,進(jìn)而得到控制器零極點(diǎn),最終本文設(shè)計(jì)了電壓模式BUCK電路的環(huán)路補(bǔ)償器,并且測(cè)試了典型負(fù)載下的環(huán)路Bode圖。
參考資源:
Creating a Digital Power Supply from Scratch (microchip.com)