在上一篇文章中,筆者以buck電路為例,講述了數(shù)字電源內(nèi)部的控制環(huán)路、采樣環(huán)節(jié)是如何數(shù)字化的,以及經(jīng)典的PID算法是如何讓電源穩(wěn)定的。在本文中,將介紹開發(fā)板另一部分的Boost升壓電路是如何配置外設(shè)寄存器的。
現(xiàn)在開始。
主電路如下,是最傳統(tǒng)的電路形式
在上一篇文章中的附件里有開發(fā)板完整的原理圖。先要說(shuō)明一下,為了能使初學(xué)者更容易明白代碼的結(jié)構(gòu)體系和功能,筆者將上文中的buck電路的程序和本文中的boost電路的程序完全分開,即不能在以前buck程序的基礎(chǔ)上添加boost的程序代碼,否則boost電路工作不正常。代碼分開的好處就是讓初學(xué)者關(guān)注數(shù)字電源本身的功能實(shí)現(xiàn),至于兩套電路代碼融合的問(wèn)題并不是本文關(guān)心的重點(diǎn)。
我們開始編寫boost升壓電路程序代碼。
同樣在MPLAB X IDE中新建一個(gè)工程文件。注意是“新建”,不能用上文中的Buck電路的代碼。然后打開MCC。
1)配置系統(tǒng)時(shí)鐘
系統(tǒng)時(shí)鐘為60MHz,PWM時(shí)鐘為240MHz。
2)數(shù)字PWM發(fā)生器
因?yàn)槭怯肞WM2發(fā)生器控制Boost主開關(guān)管,所以要配置PWM2的寄存器,PWM1用缺省值。
使能PWM總開關(guān)“Enable PWM”,然后將PWM的開關(guān)周期定為10us(100KHz),最大占空比設(shè)為60%(這是數(shù)字PWM的一大特點(diǎn),最大占空比是可以設(shè)置的,模擬芯片幾乎不可能實(shí)現(xiàn)這一功能)。其中“Primary Duty Cycle”寄存器設(shè)置最大占空比,“Primaty Phase Shift”寄存器確定開關(guān)周期。計(jì)算公式如下:
這里240,是在系統(tǒng)時(shí)鐘里設(shè)置的PWM工作時(shí)鐘240MHz,8是公式的常數(shù),10是需要的PWM開關(guān)周期10us的意思。19192的十六進(jìn)制數(shù)就是0x4AF8。同理可以算出對(duì)應(yīng)60%占空比的“Primary Duty Cycle”寄存器值為0x2D00。但是計(jì)算公式稍有不同。
接下來(lái)
“1”與buck電路有所不同,boost只是用“PWM2L”控制主開關(guān)MOS管,所以把“PWM2H”關(guān)掉。“2”PWM的輸出形式選擇“冗余輸出”模式。“3”限流比較器是“CMP1”,“4”發(fā)生限流時(shí),“PWM2L PWM2H”都處于關(guān)斷狀態(tài)。“5”表示每個(gè)PWM周期要觸發(fā)一次ADC的采樣,采樣頻率越快,控制環(huán)路的帶寬上限越寬。“6”是死區(qū)時(shí)間,不同于同步降壓BUCK電路,boost電路不存在兩mos管直通的問(wèn)題。所以死區(qū)是0。數(shù)字PWM配置完成。
3)ADC配置
和同步buck電路中的ADC配置相似,但是我們將ADC的采樣時(shí)間更改為100ns,也可以使電路穩(wěn)定。至于有何種影響,會(huì)在后面文章中涉及。注意,boost輸出電壓的ADC采樣用的是AN3通道。并將中斷使能勾選,觸發(fā)源選“PWM2 Primary Trigger”。其它的中斷都應(yīng)該禁止。
4)限流比較器
上文buck電路用的是CMP2,boost要用CMP1,即內(nèi)部比較器1,查看電路圖可以確認(rèn)。
比較器輸入源是“CMP1B”,完成比較器1的配置。
5)控制環(huán)路的算法
自動(dòng)生成代碼后,還是在“adc1.c”文件中添加PID算法代碼。先聲明變量
輸出電壓:
將上面的代碼添加至
回調(diào)函數(shù)中。在AN3中斷的回調(diào)函數(shù)中,筆者還加入了“軟啟動(dòng)”和“開關(guān)控制”的功能,這兩項(xiàng)功能很簡(jiǎn)單,并不影響對(duì)PID算法的理解。
“軟啟動(dòng)”讓電路在初次上電時(shí),最大占空比緩慢的從0到設(shè)定值,防止過(guò)沖。
“開關(guān)控制”是當(dāng)X3短路時(shí),boost電路開機(jī)工作,有輸出電壓。X3斷開時(shí),boost電路停止工作,輸出電壓為零。
同樣用PI補(bǔ)償器就能使boost控制環(huán)路達(dá)到穩(wěn)定。其中Kp=24.6,Ki=0.122
6)控制環(huán)路穩(wěn)定性驗(yàn)證
用網(wǎng)絡(luò)分析儀測(cè)量環(huán)路參數(shù)。額定輸入電壓15V,輸出電壓19.8V
19.8V0.5A(穿越頻率2.2KHz,相位裕度73.5°)
輸出19.8V0.25A(穿越頻率356Hz,相位裕度108.4°)
輸出19.8V0A(穿越頻率120Hz,相位裕度114°)
輸出紋波(0.5A負(fù)載,基波95mv,峰峰值1.6V)
負(fù)載階躍響應(yīng)(0A至0.5A,向下過(guò)沖195mv,恢復(fù)時(shí)間1.41ms)
總結(jié):
通過(guò)調(diào)整boost控制環(huán)路的PI參數(shù),能使電路有較好的穩(wěn)定性,但是輕載狀態(tài)時(shí)的穿越頻率較低,動(dòng)態(tài)響應(yīng)不夠快,有改進(jìn)的空間。本例中用到的PID算法雖然有點(diǎn)簡(jiǎn)陋和不完善,但也具備使控制環(huán)路穩(wěn)定的能力,實(shí)現(xiàn)了數(shù)字電源最基本的功能:穩(wěn)壓及負(fù)載變化的快速響應(yīng)。
下面根據(jù)前面內(nèi)容,筆者認(rèn)為還有一些技術(shù)細(xì)節(jié)和讀者探討一下:
1)PID公式中的數(shù)據(jù)是不是用浮點(diǎn)數(shù)據(jù)結(jié)構(gòu)更直觀更簡(jiǎn)捷。
其它牌子的dsp筆者還沒(méi)用過(guò),但是單就本文中提到的dspic33系列的dsp,筆者曾嘗試將u_N、u_P等這些變量變成float(浮點(diǎn)型)后,單獨(dú)一個(gè)執(zhí)行PID算法的ADC中斷處理程序就要用去40us的時(shí)間,已經(jīng)遠(yuǎn)遠(yuǎn)超過(guò)了一個(gè)PWM周期的時(shí)間,嚴(yán)重影響ADC的觸發(fā)中斷。即使將PWM觸發(fā)ADC采樣的頻率調(diào)整為每5個(gè)PWM周期觸發(fā)一次ADC采樣(即控制環(huán)路的帶寬上限為20KHz),用浮點(diǎn)型數(shù)據(jù)也是不行的。因?yàn)樵趯?shí)際的數(shù)字電源中,dsp程序內(nèi)還會(huì)有其它功能代碼,也是會(huì)占用一定的時(shí)間的,PID差分方程占用過(guò)多的CPU時(shí)間,一定會(huì)導(dǎo)致其它功能工作不正常。
2)PID公式中的Kp和Ki如何得到
PID中的Kp和Ki可以用多種方式獲得,其實(shí)筆者以前的文章中也講述過(guò)一種方法,用simplis+matlab。但是得到的是s域的傳遞函數(shù),怎么變成差分方程?matlab中有“雙線性變換”函數(shù),自動(dòng)完成s域的傳遞函數(shù)到z域中的差分方程的變換。至于是否準(zhǔn)確,還要在實(shí)際調(diào)試中驗(yàn)證,即使建模不準(zhǔn)確,但也能得到一些基礎(chǔ)數(shù)據(jù),再做調(diào)整就事半功倍了。
在MPLAB X IDE中有一個(gè)插件,也可以方便計(jì)算出結(jié)果。
如果什么方法都不會(huì),那就一個(gè)一個(gè)參數(shù)試吧,只要有耐心總是能試出來(lái)的。
3)官方開發(fā)板工作頻率為350KHz,為何筆者的開發(fā)板開關(guān)頻率降為100KHz
為了繞過(guò)用匯編語(yǔ)言編寫PID算法的代碼,只能將PID的代碼以C語(yǔ)言寫入到ADC中斷里,代價(jià)就是C語(yǔ)言的執(zhí)行速度比匯編代碼要慢的多,所以為了適應(yīng)較慢的PID計(jì)算速度,我們也只能將開關(guān)頻率降低。經(jīng)過(guò)驗(yàn)證,100KHz的PWM開關(guān)頻率時(shí),C語(yǔ)言代碼在dsp時(shí)鐘頻率為60MHz速度下,執(zhí)行PID計(jì)算的時(shí)間是滿足要求的。
4)電流采樣都沒(méi)有斜率補(bǔ)償
按照理論來(lái)說(shuō),峰值電流型反饋控制系統(tǒng)要求對(duì)電流斜坡進(jìn)行斜率補(bǔ)償,但在buck和boost電路中,pwm驅(qū)動(dòng)波形都沒(méi)有超過(guò)50%,所以也就沒(méi)有必要補(bǔ)償,而且還減少了一個(gè)干擾因素,使環(huán)路設(shè)計(jì)更簡(jiǎn)單。其實(shí)斜坡補(bǔ)償也可以用代碼的方式實(shí)現(xiàn),甚至限流比較器都可以用代碼實(shí)現(xiàn),這樣才是真正意義上的數(shù)字電源。有時(shí)間筆者會(huì)在這方面探索一下。
5)官方開發(fā)板代碼內(nèi)容簡(jiǎn)介
在這里說(shuō)說(shuō)筆者對(duì)官方代碼的理解,如有不對(duì)請(qǐng)多指出,謝謝。
這是所有代碼的結(jié)構(gòu)圖
“1”main主函數(shù),程序執(zhí)行的入口,里面包括一些出始化的操作和外設(shè)的配置。
“2”這是匯編代碼,包含在系統(tǒng)初始化代碼內(nèi),這段代碼只在程序初始化時(shí)執(zhí)行一次。主要的功能就是把要計(jì)算的差分方程的參數(shù)裝入CPU內(nèi)核的備用工作寄存器中,目地是在進(jìn)入或離開ADC中斷時(shí),盡量節(jié)省工作寄存器壓入堆棧和彈出堆棧的時(shí)間,從而減少整體ADC中斷處理程序的執(zhí)行時(shí)間,這在高頻的PWM應(yīng)用中是非常重要的。在代碼中有下面一條匯編指令:
就是告訴CPU當(dāng)ADC1有中斷產(chǎn)生時(shí),內(nèi)核要切換到該備用工作寄存器。怎么把ADC中斷與上圖黃色標(biāo)示出的“CTXTSWP #0x01;”綁定起來(lái)?在mcc界面下,“Interrupt Module”選項(xiàng)中,比如,要把ADC1通道中的AN11中斷操作與1號(hào)備用工作寄存器綁定,就選擇“CTXT1”。從圖上可以發(fā)現(xiàn),該顆dsp內(nèi)核其中是有4套備用工作寄存器可供切換,意味著dsp內(nèi)核支持多種控制算法的切換,這是數(shù)字電源最大的優(yōu)點(diǎn)之一。
“3”是數(shù)字電源控制環(huán)路的算法,也是用匯編代碼寫的,核心功能很簡(jiǎn)單,處理ADC產(chǎn)生的中斷,并調(diào)用庫(kù)中的算法函數(shù)。注意,如果是用mcc生成的代碼,一定要在C代碼中,去掉相應(yīng)的ADC中斷處理程序,否則與匯編代碼中的中斷程序產(chǎn)生沖突,不知該執(zhí)行哪個(gè)中斷處理程序。前面提到的庫(kù)函數(shù)就在“5”,將它包含進(jìn)工程文件中并且要在“init.h”文件中包含該函數(shù)庫(kù)的頭文件。
然后就可以調(diào)用里面的算法了。該算法函數(shù)庫(kù)中包含2P2Z、3P3Z、4P4Z和PID等多種算法,方便程序員調(diào)用。具體函數(shù)名稱還是要查看幫助手冊(cè)。
“4” 其實(shí)是由MPLAB X IDE中的一個(gè)插件“Digital Compensator Design Tool”生成的控制環(huán)路的參數(shù),也比較方便易用,筆者用的不多。對(duì)此感興趣的讀者可以試試。
以上就是數(shù)字電源控制環(huán)路的主功能,官方軟件代碼中還包括LCD顯示、通訊、負(fù)載控制等功能,讀者可以自己探索。