開關(guān)電源顧名思義,開關(guān)電源便是使用半導(dǎo)體開關(guān)器件(如晶體管、場效應(yīng)管、可控硅閘流管等),經(jīng)過控制電路,使半導(dǎo)體開關(guān)器件不停地“導(dǎo)通”和“關(guān)閉”,讓半導(dǎo)體開關(guān)器件對輸入的電壓進行脈沖調(diào)制,從而完成直流到交流、直流到直流電壓變換,和輸出電壓可調(diào)和自動穩(wěn)壓。
開關(guān)電源一般有三種工作模式:頻率、脈沖寬度固定模式,頻率固定、脈沖寬度可變模式,頻率、脈沖寬度可變模式。前一種工作模式多用于直流交流逆變電源,或直流/直流電壓變換;后面兩種工作模式一般用在開關(guān)穩(wěn)壓電源。另外,開關(guān)電源輸出電壓也有三種工作式樣:直接輸出電壓的方式、平均值輸出電壓的方式、幅值輸出電壓的方式。同樣的,前一種工作方式經(jīng)常用在直流/交流逆變電源,或直流/直流電壓變換;后兩種工作模式經(jīng)常用于開關(guān)穩(wěn)壓電源[1]。
上個世紀(jì)的50年代初,美國宇航局為了搭載火箭,開關(guān)電源誕生了,這便是開關(guān)電源誕生的起源,此開關(guān)電源以小型化、輕巧化為目標(biāo)。在歷史進程中進行了近半個多世紀(jì)后,開關(guān)電源技術(shù)越來越成熟,更因具備了性能穩(wěn)定、小、發(fā)熱較低、輕、轉(zhuǎn)換效率高等優(yōu)點慢慢的在取代了傳統(tǒng)電源技術(shù)下所制造的不間斷工作電源,并在電子設(shè)備等各領(lǐng)域有了廣泛的應(yīng)用。最終在80年代,率先完成了大部分電子產(chǎn)品的電源換代,同時也完成了全面開關(guān)電源普及化。在到來的20世紀(jì)90年代,開關(guān)電源更是進入了快速發(fā)展的黃金時間,家電、電子設(shè)備都得到更廣泛的應(yīng)用。又經(jīng)歷了幾十年的努力下,現(xiàn)在的開關(guān)電源技術(shù)都有了技術(shù)性的重大突破與發(fā)展。更多新技術(shù)的發(fā)現(xiàn)與開發(fā)將當(dāng)代開關(guān)電源又帶上了另一個全新的時期,在高新技術(shù)領(lǐng)域的應(yīng)用更是推動了高新技術(shù)產(chǎn)品的發(fā)展,其中以其小型化、簡便化的特征尤為突出。
伴跟著開關(guān)電源的誕生,1960年代初期,我國開始對開關(guān)穩(wěn)壓電源進行的設(shè)計,研制并加以生產(chǎn)。直到60年代中期才開始慢慢地進入了實用的階段。在對開關(guān)電源有了一定認(rèn)識后,我國在70年代初期便試著開始對無工頻降壓變換器進行深入研究應(yīng)用在開關(guān)穩(wěn)壓電源上,繼而對其進行設(shè)計、研制和生產(chǎn)。最終在1974年,我國第一臺工頻降壓變壓器式的開關(guān)電源被研發(fā)出來了,輸出電流是5v,工作頻率是10KHz。跟著我國開關(guān)電源的向前發(fā)展,我國許多研究所、工廠等在近十年發(fā)展中也紛紛研制出來了無工頻降壓變換器的開關(guān)穩(wěn)壓電源,這種開關(guān)電源的工作頻率大概在20K左右,輸出的功率在1000W以下,但是其型號與用途眾多,都投入電子設(shè)備、電視機、通信等領(lǐng)域進行廣泛的使用。跟著時期的發(fā)展,因為我國半導(dǎo)體與工藝跟不上時期的潮流,導(dǎo)致了自己生產(chǎn)與研制的開關(guān)穩(wěn)壓電源的關(guān)鍵元器件大部分仍要經(jīng)過國外進口,導(dǎo)致當(dāng)代開關(guān)電源技術(shù)與一些先進國家相比仍存有巨大的差距。
設(shè)計出一種基于STC系列51單片機的BUCK型直流降壓開關(guān)電源是本課題所要研究的主要內(nèi)容。本系統(tǒng)需要達到的預(yù)期目標(biāo)是:在系統(tǒng)完成后,系統(tǒng)能預(yù)置電壓,其步進的電壓為1V,輸出的電壓的限度為0V~10V,輸出電流為0~1A。同時液晶顯示屏上可以顯示出所預(yù)置的電壓,另有實時的輸入輸出電壓,實時的電流,來使得本系統(tǒng)可以讓調(diào)整速度加快、提升精準(zhǔn)度,同時也能使得電壓和負(fù)載的調(diào)整率降低,提升系統(tǒng)的效率,不在附加額外的電源板,最后還可以讓輸出的紋波變小等。
5. 系統(tǒng)調(diào)試與測試,對做好的機開關(guān)電源進行調(diào)試與數(shù)據(jù)測試并對結(jié)果進行分析。
直流/直流變換是將固有的直流電壓轉(zhuǎn)換成可調(diào)整的電壓,又叫做直流斬波。它有多種拓?fù)浣Y(jié)構(gòu),本系統(tǒng)應(yīng)用的是BUCK(降壓式變換電路)型直流/直流,其特征是輸出的電壓比輸出電壓低。如圖2-1所示。
圖2-1 BUCK電路拓?fù)?/div>
2.2 Buck工作原理當(dāng)Mos管或者三級管導(dǎo)通很長很長時間后,所有的元器件均處在一種理想狀態(tài)的情況下,此時電容的電壓會等于輸入的電壓。在這樣的條件下,我們使用BUCK變換器的充電和放電這兩個階段來對這個電路進行說明:
2.2.1在電感充電的情況下當(dāng)BUCK變壓器處于充電的過程時,將開關(guān)閉合,此時三級管處于導(dǎo)通的狀態(tài),可以用一條導(dǎo)線來替代,替代后的等效圖如下。當(dāng)輸入的電壓經(jīng)過電感這時刻,二級管因為反接,所以沒起到作用,這里刪去。再加上輸入的是直流,因此電感發(fā)生的電感電流是成比率上升的,具體上升多少與電感的大小有關(guān)系,電感相當(dāng)于一個恒定電流源,起傳遞能量作用,電容等于恒定電壓源,在電路里起到濾波的作用。BUCK變換器充電階段等效圖如圖2-2所示。
圖2-2 BUCK變換器充電階段等效圖
2.2.2在電感放電的情況下當(dāng)BUCK變壓器處于放電的過程中,開關(guān)管子已經(jīng)斷開,此時的三級管處于截止?fàn)顟B(tài),這里把它拿掉,等效電路圖如下。在開關(guān)斷開的時間里,因為電感的保持電流不變特征,電感上的電感電流不會一下子下降到零,而是把充電完成后所累積的電流值慢慢下降到0。在這個過程中,因為原來的電路已經(jīng)斷開了,因此電感沿著之前的方向,經(jīng)過二極管D形成一個新的回路的,即流過電容對電容進行充電,從而保證了負(fù)載端獲得連續(xù)的不間斷的電流。BUCK變換器放電階段等效圖如圖2-3所示。
圖2-3 BUCK變換器放電階段等效圖
綜上所述,BUCK變換器的升壓過程便是電感能量儲存和釋放的過程。在充電的過程時。電感通過流過它自身的電流不斷儲存能量,在放電的過程時,假如電容容量足夠大,那電容的兩端就可以在放電的過程中保持一個持續(xù)不間斷的電流放電,假如這個通斷的過程不斷的被重復(fù),那么就可以夠讓電容兩端的電壓低輸出的電壓,從而完成降壓的目的。
2.3 Buck波形分析波形如下所示。

導(dǎo)通時Q電流

閉合時C電流
L的電流和輸出電流的關(guān)系:
輸出電壓與輸入電壓的關(guān)系

:
2.4 Buck穩(wěn)壓分析本設(shè)計采用串連型開關(guān)電源,其穩(wěn)壓原理框圖如圖2-4所示。在MOS管導(dǎo)通的時刻,電感L將流過的電流轉(zhuǎn)換成磁能進行能量儲存,電容C將流過電感L的部分電流轉(zhuǎn)換成電荷儲存。在MOS管關(guān)斷的時刻,電感L發(fā)生反向電動勢,輸送給負(fù)載R并與續(xù)流二極管D組成回路,同時電容C將電荷轉(zhuǎn)換成電流向負(fù)載供電。
經(jīng)過不斷導(dǎo)通與關(guān)斷MOS管,使uo發(fā)生脈動電壓,經(jīng)過LC濾波電路使脈動電壓轉(zhuǎn)變成較穩(wěn)定的直流電壓Uo輸送給負(fù)載,輸出電壓Uo的電壓值與MOS管在一個周期內(nèi)導(dǎo)通的時間成正比。當(dāng)外部因素使輸出電壓或電流發(fā)生變化時,經(jīng)過單片機自帶的10位ADC實時采集輸出的電壓和電流,實時調(diào)整開關(guān)K導(dǎo)通的占空比,從而組成閉環(huán)電壓控制電路,使輸出電壓能達到穩(wěn)定。
圖2-4開關(guān)電源模塊穩(wěn)壓原理
2.4.1 LC濾波電路參數(shù)推導(dǎo)采用輸入電壓25V,輸出電壓最大為10V,根據(jù)推導(dǎo)公式如式(2-1)所示:此中Ton為PWM一個周期內(nèi)導(dǎo)通時間、Ui為輸入電壓、Uo為輸出電壓、Ud為肖特基二極管的電壓降(約等于0.6V)、Io為一個直流/直流模塊的輸出電流。

(2-1)
PWM的占空比為D:

(2-2)
代入數(shù)據(jù)后得到

(2-3)
一般而言,開關(guān)電源的頻率越高,電感的感量可以越小,效率也可以越高。此單片機能輸出的PWM最高頻率為47KHZ,所以本設(shè)計選擇讓單片機輸出47KHZ的PWM。那么f=47Khz導(dǎo)通時間Ton為

(2-4)
電感量L為:

(2-5)
因此將各參數(shù)代入式(2-5)得式(2-6):

(2-6)
計算得到32uH電感,這里采用5倍以上余量,采用150uH的電感,可降低電感溫度。另外本設(shè)計采用銅線和磁芯做成的電感以增大電感的儲能能量提升供電的效率。
按照串連型開關(guān)電源的電容推導(dǎo)公式如式(2-7)所示,此中C為電容容量、Io為一個模塊個輸出電壓、△Up-p為輸出紋波電壓,T為PWM一個周期的時間。

(2-7)
輸出電壓最大為10V,我們設(shè)定紋波電壓為0.1V,將各參數(shù)代入式(2-7)得式(2-8)結(jié)果:

(2-8)
本設(shè)計采用2個1000

的電容,達到降低紋波電壓的目的。
2.5小結(jié)綜合以上的分析論證,本單片機的開關(guān)電源設(shè)計采用BCUK拓?fù)洌?jīng)過原理分析和認(rèn)證,最終推導(dǎo)選擇了合適的電容和電感。
3硬件設(shè)計
3.1總統(tǒng)框架基于單片機的開關(guān)電源設(shè)計,由STC單片機、變壓器,整流濾波電路,BUCK主回路、降壓穩(wěn)壓電路、按鍵電路、液晶電路、電壓檢測電路、電流檢測電路等組成。總體設(shè)計框圖如3-1圖所示。下面分別論證這些方面的詳細(xì)方案選擇。
圖3-1總體設(shè)計構(gòu)架圖
3.2各部分電路的選擇
3.2.1 單片機STC12C5A60S2單片機,在指令代碼的方面可以完全兼容傳統(tǒng)8051,同時它的速度比傳統(tǒng)的8051單片機要快8-12倍,體現(xiàn)了其高速度的一面。這系列單片機其里面有專用的集成復(fù)位電路,另有8路高速的10位ADC轉(zhuǎn)換,同時還兼有2路的PWM等,它的功能之強大遠超傳統(tǒng)的8051系列。
圖3-2 STC12C5A60S2單片機實物圖
3.2.2 IR2104半橋驅(qū)動電路
IR2104是一種高性能的半橋驅(qū)動芯片,該芯片內(nèi)部是采用被動式泵荷升壓原理。上電時,電源流過快恢復(fù)二極管D向電容C充電,C上的端電壓很快升至接近Vcc,這時假如下管導(dǎo)通,C負(fù)級被拉低,形成充電回路,會很快充電至接近Vcc,當(dāng)PWM波形翻轉(zhuǎn)時,芯片輸出反向電平,下管截止,上管導(dǎo)通,C負(fù)極電位被抬高到接近電源電壓,水漲船高,C正極電位這時已超過Vcc電源電壓。因有D的存在,該電壓不會向電源倒流,C此時開始向芯片里面的高壓側(cè)懸浮驅(qū)動電路供電,C上的端電壓被充至高于電源高壓的Vcc,只要上下管一直輪流導(dǎo)通和截止,C就會不斷向高壓側(cè)懸浮驅(qū)動電路供電,使上管打開的時刻,高壓側(cè)懸浮驅(qū)動電路電壓一直大于上管的S極。采用該芯片降低了整體電路的設(shè)計難道,只要電容C選擇恰當(dāng),該電路運行穩(wěn)定。IR2104應(yīng)用電路圖如3-3所示。
圖3-3 IR2104應(yīng)用電路圖
3.2.3 電路供電電源的選擇線性降壓芯片7805。這個穩(wěn)壓IC需要的外圍元件很少,IC內(nèi)部還有過流、過熱及調(diào)整管的保護措施,不但價廉且輸出電壓很穩(wěn)定。78系列的穩(wěn)壓集成塊要考慮輸出與輸入壓差帶來的功率損耗,所以一般輸入輸出之間壓差要大于2V。其應(yīng)用電路圖如圖3-4所示。

圖3-4 7805應(yīng)用電路
3.2.4 電流檢測電路方案一:霍爾電流傳感器。電流流過霍爾傳感器的線圈發(fā)生磁場,磁場隨電流的大小變化而變化,磁場匯集在磁環(huán)內(nèi),霍爾元件輸出跟著磁場變化的電壓信號。經(jīng)過檢測電壓值,能得到電流的大小。
方案二:電阻分壓檢測電路。經(jīng)過在輸出回路中串連采樣電阻,將經(jīng)過電阻的電流轉(zhuǎn)換成兩端的電壓,經(jīng)過檢測電壓值從而獲得電流值。該檢測方式電路和程序控制都比較簡潔。
要完成對輸出電壓和電流的閉環(huán)控制,務(wù)必對輸出電流和電壓進行采樣反饋。本設(shè)計采用如下圖所示的電流電壓檢測電路。為了便于MCU采集,分壓電阻發(fā)生的電壓經(jīng)過由LM358組成的同相比例放大器放大后,輸入到MCU的ADC端口。
LM358內(nèi)部集成的是雙運放,單電源和雙電源都能使其工作。
圖3-5 Lm358引腳圖及引腳功能
要完成對輸出電壓和電流的閉環(huán)控制,務(wù)必對輸出電流經(jīng)過運放放大后進行采樣反饋。本設(shè)計采用如圖3-6所示的電流檢測電路。
圖3-6 電流檢測電路
輸出最大電流為2A。本設(shè)計采用電阻分壓的式樣對輸出的電壓進行實時檢測,因為采樣電壓直接輸送給單片機10位ADC進行檢測,單片機供電電源為5V,所以其內(nèi)部自帶的檢測的最高電壓也為5V, 這個電路中,LM358由5V電壓供電,最大輸出電壓和供電電源電壓之前有1.2V壓差,所以能輸出最大電壓為:

(3-1)
2A電流經(jīng)過0.02Ω電阻得到的電壓為

(3-2)
該電壓要經(jīng)過放大后才能更容易被單片機檢測到,在這個應(yīng)用中運放的放大倍數(shù)應(yīng)該小于

(3-3)
這里選擇R12和R10為33K和1K,放大倍數(shù)為

(3-4)
因為

>

, 符合設(shè)計要求。
即當(dāng)電流為2A時,運放輸出電壓為:

(3-5)
3.2.5 電壓檢測電路輸入電壓最大為10V,而單片機的采樣電壓最高位5V,故電壓采樣電阻比例應(yīng)該小于

(3-6)
這里取R1和R5是47K 和10K,

(3-7)
因為

1<

2,所以滿足條件。
當(dāng)10V輸出時,單片機檢測到的電壓是,

(3-8)
電壓分壓檢測電路如圖3-7所示。
圖3-7 電壓檢測電路
3.2.6 按鍵電路目前單按鍵這種模式的鍵盤使用方便,響應(yīng)的快并且接口還簡潔。綜合以上本系統(tǒng)采用的是非編碼式鍵盤。本系統(tǒng)設(shè)計應(yīng)用了3 個按鍵,按照軟件來定義它的功能,鍵盤與單片機的P2.3、P2.2、P2.1鍵盤是若干按鍵的集合,是向系統(tǒng)提供操作人員干預(yù)命令的接口設(shè)備。
S1為開關(guān)按鍵,按一下即有輸出,按第二下即輸出停止,如此循環(huán)
S2為輸出電流增加。
S3為輸出電壓減少。
如圖3-8所示
圖3-8 按鍵電路
3.2.7 液晶顯示模塊系統(tǒng)采樣1602液晶顯示。液晶驅(qū)動電流較小,能顯示較大信息量,無需增外設(shè)電路。
能顯示多行數(shù)據(jù),方便用戶進行更多的操作。
能顯示輸入輸出的實時電壓,輸出的實時電流,預(yù)設(shè)的輸出電壓。如圖3-9所示

圖3-9 1602液晶顯示
3.3小結(jié)綜上所述,本開關(guān)電源設(shè)計采用STC12C5A60S2單片機發(fā)生47KHZ的PWM脈沖信號,經(jīng)過IR2104控制MOS,從而控制整個BUCK(降壓式變換)電路。單片機內(nèi)部自帶的10位ADC能通過電壓電流檢測電流實時反饋電流和電壓數(shù)值,并由此調(diào)整輸出的PWM的占空比,形成電流電壓閉環(huán)控制系統(tǒng)。按鍵能設(shè)置輸出電流從0.2A到2A,以0.01A遞增,輸出最大10V,液晶能顯示實時輸出電流與電壓?傮w電路圖如3-10所示。

圖3-10 總體電路圖
4軟件設(shè)計51的語言主要有匯編和C兩種。匯編雖然運行快,但是編程繁瑣,移植性差;C具備良好的可讀性和移植性。本系統(tǒng)采用C語言編寫程序,Keil C51作為集成開發(fā)環(huán)境。
4.1電壓電流雙閉環(huán)控制算法設(shè)計 由于題目要求輸出電壓在10V以內(nèi),輸出電流應(yīng)該在0.2~2A以內(nèi),所以應(yīng)該具有如下C-V曲線特性,在電流和電壓的雙閉環(huán)控制中。
使得輸出電流在2A范圍內(nèi),電壓在10V范圍內(nèi);
控制模式如下:
軟件設(shè)計包括:主程序設(shè)計,按鍵子程序設(shè)計,ADC中斷程序設(shè)計
4.2主程序程序設(shè)計主程序主要處理對時間要求不敏感的數(shù)據(jù),例如按鍵檢測,和顯示電壓電流狀況,
此中顯示這些數(shù)據(jù)時刻采用數(shù)字平均濾波算法,采集50個數(shù)據(jù),繼而取平均值,使得到的數(shù)據(jù)更加接近真實狀況,使得顯示出來的電壓和電流不會亂跳,抗干擾能量得很大的提升。

4.3按鍵子程序設(shè)計按鍵子程序中,按加鍵的話,增加輸出電壓預(yù)設(shè);按減鍵的話,降低輸出電壓預(yù)設(shè);按開關(guān)鍵的話,能控制IR2104的工作與否,從而控制整個BUCK的工作與否。

4.4 ADC中斷程序ADC中斷程序中,因為有輸入電壓,輸出電壓,輸出電流這3個數(shù)據(jù)要監(jiān)測,所以采用通道輪流詢問的辦法完成。
于此同時,要完成電流電壓檢測的雙閉環(huán)的話,要在ADC程序中加入PWM處理程序,使得當(dāng)輸出負(fù)載變動,引起檢測到的輸出電壓ADC值變動,PWM需要實時響應(yīng)這個變化,所以在ADC程序中,要加入PWM的重裝數(shù)據(jù)的語句。
4.5 關(guān)鍵程序void ADC_interrupt()interrupt 5 //ADC轉(zhuǎn)換完后ADC_FLAG由硬件自動置位,
{
uint ADC_value; //ADC轉(zhuǎn)換結(jié)果 10位
ADC_CONTR&=!ADC_FLAG; //clear ADCflag
ADC_value=(ADC_RES<<2)+ADC_RESL; // ADC_value=(ADC_RES<<2)+ADC_RESL;
switch(channel)
{
case 0: Battery_voltage=ADC_value;
channel=1;
break;
case 1: Boost_Buck_current=ADC_value;
if(!lock)
{
if((Boost_voltage<370)&&(Boost_Buck_current<(OUT_Current<<1))) //((Boost_voltage<Boost_temp)&&
{
PWM_temp--;
if(PWM_temp<10) PWM_temp=10;
}
else
{
PWM_temp++;
if(PWM_temp>250) PWM_temp=250;
}
CCAP1H = CCAP1L =PWM_temp;
}
channel=2;
break;
case 2:Boost_voltage=ADC_value;
channel=0;
break;
default:break;
}
ADC_CONTR=0xE8|channel;
ADC_ready=1;
}
STC12C5A60S2單片機內(nèi)部自帶的10位ADC能通過電壓電流檢測電流實時反饋電流和電壓數(shù)值,并由此調(diào)整輸出的PWM的占空比,形成電流電壓雙閉環(huán)控制系統(tǒng)。按鍵能設(shè)置輸出電流從0.2A到2A,以0.01A遞增,輸出最大10V,液晶能顯示實時輸出電流與電壓。
5系統(tǒng)測試5.1實物圖片實物由萬用板手工焊接,板子的正面(a)和背面(b)如圖5-1所示。
(a)板子正面 (b)板子背面
圖5-1 總體電路圖
5.2電壓調(diào)整率測試電壓調(diào)整率,來源于電源在滿載時,其輸出電壓因該電源的供電電壓波動引起的變化,是穩(wěn)壓性能優(yōu)劣的重要指標(biāo)。
5.2.1 測試儀器需要測試電源的電壓調(diào)整率,需要直流可調(diào)壓供電電源,要萬用表和負(fù)載。
可調(diào)壓電源:本實驗采用兆信30/5A數(shù)顯線性電源。如圖5-1所示。
萬用表:深圳勝利VC980+數(shù)字萬用表,數(shù)量為4個。
負(fù)載:負(fù)載為100W 50Ω的環(huán)形滑動變阻器。
圖5-2 可調(diào)壓電源
5.2.2 測試方式測試示意圖:
測量電路點如圖5-3所示(3、4、5、6、7為測量點):

圖5-3測量電路
測試步驟:
第一步:在3、4點間用電壓表測輸出電壓,在3、4點串入電流表在5、6點間用電壓表測輸出電壓,在5、7點串入電流表;
第二步:在1、2點源接入市電;
第三步:調(diào)整可調(diào)變壓器電阻,使電源滿載輸出;
第四步:調(diào)整穩(wěn)壓電源電壓,使電壓為12V,記錄輸入與輸出電壓;
第五步:逐步增大電源電壓,每隔一段做一次的記錄,直到輸出電壓的上限19V。
5.2.3 測試結(jié)果輸出輸入電壓測試結(jié)果如下表所示:
表5-1 輸出輸入電壓記錄表
(測試條件為輸出電壓10V,輸出電流為1.00A)
電壓調(diào)整率推導(dǎo):
(5-1)
5.3 負(fù)載調(diào)整率測試負(fù)載調(diào)整率:電源負(fù)載的變化會引起電源輸出的變化,負(fù)載增加,輸出降低,相反負(fù)載減少,輸出升高。好的電源負(fù)載變化引起的輸出變化較小,通常指標(biāo)為3%--5%。
負(fù)載調(diào)整率是衡量電源好壞的指標(biāo)。好的電源輸出接負(fù)載時電壓降較小。
5.3.1 測試儀器需要測試電源的負(fù)載調(diào)整率,需要帶隔離低壓電源、

萬用表、負(fù)載和示波器。
可調(diào)壓電源:本實驗采用兆信30/5A數(shù)顯線性電源。
萬用表:深圳勝利VC980+數(shù)字萬用表,數(shù)量為4個。
負(fù)載:負(fù)載為100W 50Ω的環(huán)形滑動變阻器。
示波器:單片機輸出的載波頻率為40KHZ,實
驗采用Siglent雙通道200M示波器,如圖5-4所示。 圖5-4 Siglent雙通示波器
5.3.2 測試方式測試示意圖:
測量電路如圖5-3所示。
測試步驟:
第一步:在3、4點間用電壓表測輸出電壓,在3、4點串入電流表在5、6點間用電壓表測輸出電壓,在5、7點串入電流表;
第二步:在1、2點間接上市電;
第三步:測試單片機輸出的PWM波形、mos管腳的驅(qū)動波形。
第四步:輸入電壓為額定值10V,輸出電流取最小值,記錄最小負(fù)載量的輸出電壓;
第五步:調(diào)整負(fù)載為50%滿載,記錄對應(yīng)的輸出電壓;
第六步:調(diào)整負(fù)載為滿載,記錄對應(yīng)的輸出電壓;
測試數(shù)據(jù)記錄如表5-2。
表5-2 不同負(fù)載下輸出電壓記錄表
負(fù)載調(diào)整率推導(dǎo):
5.3.3 測試結(jié)果把示波器的其中一個探針接到單片機的PWM輸出口,地接到另外一個端口,得到的測試波形如5-5、 把探針放在上下mos管腳G極的驅(qū)動波形波形如圖5-6所示。

圖5-5 單片機輸出的PWM波形 圖5-6 上下mos管腳G極的驅(qū)動波形
5.4 電路效率測試
5.4.1 測試儀器需要測試電源的帶載性能及效率,需要萬用表和負(fù)載。
可調(diào)壓電源:本實驗采用兆信30/5A數(shù)顯線性電源。
萬用表:數(shù)字萬用表。
負(fù)載:負(fù)載為30W 50Ω的環(huán)形滑動變阻器。
示波器:單片機輸出的載波頻率為47KHZ。
5.4.2 測試方式:測試示意圖:
測量電路如圖5-3所示。
測試步驟:
第一步:在3、4點間用電壓表測輸出電壓,在3、4點串入電流表在5、6點間用電壓表測輸出電壓,在5、7點串入電流表;
第二步:在1、2點間接入市電;
第三步:輸入電壓為額定值18V,
第四步:調(diào)整負(fù)載由大至小記錄對應(yīng)的輸出電壓、輸入電流、輸出電壓、輸出電流;
第五步:返回第四步,直到輸出電流達到自保護的狀態(tài)。
5.4.3 測試結(jié)果測試額定功率下的供電效率,測試結(jié)果如表3所示。
由以上數(shù)據(jù)得到:滿載輸出情況下,供電效率為81%。
輸出噪聲紋波電壓峰-峰值的測試,把示波器的測試輸出電壓波形如圖5-6所示。

圖5-6 輸出電壓波形
由以上數(shù)據(jù)得到:該電源的電壓調(diào)整率為0.069%,負(fù)載調(diào)整率為3.164%,滿載輸出情況下,供電效率為81%,當(dāng)輸出電流大于2A時,保護電路啟動。輸出電壓為0。輸出紋波峰峰值為290Mv。實際電路的調(diào)試圖如圖5-7所示。

圖5-7實際電路的調(diào)試圖
6 總結(jié)
6.1結(jié)論經(jīng)過研究國內(nèi)外關(guān)于開關(guān)電源的方式,本開關(guān)電源設(shè)計采用STC12C5A60S2單片機發(fā)生47KHZ的PWM脈沖信號,經(jīng)過IR2104控制MOS,從而控制整個BUCK(降壓式變換)電路。單片機內(nèi)部自帶的10位ADC能通過電壓電流檢測電流實時反饋電流和電壓數(shù)值,并由此調(diào)整輸出的PWM的占空比,形成電流電壓閉環(huán)控制系統(tǒng)。按鍵能設(shè)置輸出電流從0.2A到2A,以0.01A遞增,輸出最大10V,液晶能顯示實時輸出電流與電壓。根據(jù)測試,滿載的供電效率為88%。按鍵設(shè)置的輸出電流的誤差小于0.01A。
因此,本文所研究的基于單片機的開關(guān)電源設(shè)計滿足了當(dāng)初的設(shè)計預(yù)想,達到了較好的效果。
6.2創(chuàng)新點論文主要的創(chuàng)新點有以下三點:
1)使得開關(guān)電源硬件更加智能化,直接用單片機控制;
2)能顯示輸入和輸出的電流電壓狀況,實時監(jiān)測電源的運作;
3)能經(jīng)過按鍵數(shù)字化地設(shè)置預(yù)設(shè)輸出電壓,能得到精確的設(shè)定電壓。
6.3存在問題因為時間與能量有限,本文所設(shè)計的控制系統(tǒng)另有待于進一步的改進:
比如,
- 比如可以加大電感L,使得輸出紋波進一步降低;
- 采用PCB板制作實物,使得其穩(wěn)定性進一步提升,等等
致謝本論文的全部工作得到了指導(dǎo)老師的悉心指導(dǎo)和親切關(guān)懷,同時也衷心感謝學(xué)校的所有老師在這四年來對我的學(xué)習(xí)、工作、生活上給予的無私幫助和無微不至的關(guān)懷。我的論文選題和論文寫作都是在導(dǎo)師的指導(dǎo)下完成的,他崇高的師德和高深的學(xué)術(shù)造詣給我在我身上留下了深深的烙印,對我的學(xué)術(shù)訓(xùn)練和研究能量的培養(yǎng)會讓我受用終身。
在我大學(xué)生涯中,得到了專業(yè)課老師在電子技術(shù)上給予的悉心指導(dǎo),特此感謝。
在完成該課題的時刻,得到舍友們,同班同學(xué)們和學(xué)長們的幫助,在此深表感謝。
感謝惠州學(xué)院的老師們同學(xué)們,在學(xué)習(xí)工作的時,從他們身上我學(xué)習(xí)到了不少開發(fā)項目的方式和新的開發(fā)技術(shù)。
謝謝所有幫助和關(guān)心我的老師和同學(xué)。
單片機源程序如下:
- /*************手工焊板BUCK-BOOST******/
- #include <STC12C5A60S2.H>
- #include <intrins.h> /*use _nop_() function*/
- #define uchar unsigned char
- #define uint unsigned int
- #define ADC_FLAG 0X10
- /*****************************************
- 端口功能設(shè)定
- *****************************************/
- sbit PWM_1 = P1^4; //PWM1_Boost/Buck
- sbit SD_1 = P1^3; //SD1_Boost_Buck
- sbit Key_1 = P2^1; //Key_1
- sbit Key_2 = P2^2; //Key_2
- sbit Key_3 = P2^3; //Key_3
- uint ADC_value;
- uchar PWM_temp=2;
- uchar last_key; //按鍵變量
- uchar channel=0; //第一通道
- uchar Caes=0; //菜單
- uint OUT_Current=300;
- uint Battery_voltage; //輸入電壓
- uint Boost_voltage; //Boost電壓
- uint Boost_Buck_current; //Buck_Boost電流8位
- uint O_current;//輸出電流
- uint A_value=90;
- bit lock=0; //PWM輸出鎖定
- bit ADC_ready=0; //ADC完畢
- bit K=0;
- bit Charge=0;
- void delay();
- void Key_0_();
- void Key_1_();
- void Key_2_();
- void Key_3_();
- void init_pca();
- void init_timer();
- /**********************************************************
- 函數(shù)說明: 延時程序
- **********************************************************/
- void delay(uchar t)
- {
- uint j;
- uchar i;
- for(i=0;i<t;i++)
- for(j=0;j<1000;j++);
- }
- /**********************************************************
- 函數(shù)說明: PWM初始化
- **********************************************************/
- void init_pwm()
- {
- CCON = 0;
- CL = 0;
- CH = 0;
- CMOD = 0X08; //0X08:43KHZ // 0X02,22KHZ // 0X0A,10KHZ //
- CCAPM1 =0x42;//8位PWM輸出,無中斷
- CCAP1L =CCAP1H =250;//初始化spwm輸出的占空比
- CR=1;
- }
- /**********************************************************
- 函數(shù)說明: 中斷 始化函數(shù)
- **********************************************************/
- void InitADC()
- {
- P1M1=0x47;
- P1M0=0x00;
- P1ASF=0X47; //選擇ADC通道0126
- ADC_RES=0;
- ADC_CONTR=0X88; //1110 0000 E8 開電源,最高速
- EA=1;
- EADC=1;
- }
- /**************************************
- 1602液晶
- **************************************/
- sbit RS = P2^5;
- sbit RW = P2^6;
- sbit E = P2^7;
- /**************************************
- 短延時
- **************************************/
- void delay5ms()
- {
- uchar i,v,k;
- for(i=1;i>0;i--)
- for(v=168;v>0;v--)
- for(k=22;k>0;k--);
- }
- /**************************************
- 寫指令
- **************************************/
- void lcd_Write_com(uchar com)
- {
- RS=0; //定義指令寄存器
- RW=0; //寫允許
- P0=com; //寫指令
- delay5ms(); E=1; //片選端上拉
- delay5ms(); E=0; //下降沿鎖存
- }
- /**************************************
- 寫數(shù)據(jù)
- **************************************/
- void lcd_write_date(uchar date)
- {
- RS=1; //定義數(shù)據(jù)寄存器
- RW=0; //寫允許
- P0=date; //寫數(shù)據(jù)
- delay5ms(); E=1; //片選端上拉
- delay5ms(); E=0; //下降沿鎖存
- }
- /**************************************
- 顯示程序
- **************************************/
- void dis_lcd1602(uchar x,uchar y,uchar dat)
- {
- uchar add;
- if(y==1) add=(0x80+x);
- if(y==2) add=(0xc0+x);
- lcd_Write_com(add); //寫指令
- lcd_write_date(dat); //寫數(shù)據(jù)
- }
- /**************************************
- 液晶初始化
- **************************************/
- void lcd1602_init()
- {
- lcd_Write_com(0x38); //設(shè)置8位格式,2行,5*7
- lcd_Write_com(0x01); //清屏
- lcd_Write_com(0x0c); //整體顯示,關(guān)光標(biāo),不閃爍
- lcd_Write_com(0x06); //設(shè)定輸入方式,增量不移位
- lcd_Write_com(0x80); //初始坐標(biāo)
- }
- /**************************************
- 液晶顯示漢字程序
- **************************************/
- void hz_lcdDis(uchar x,uchar y,uchar *p) //漢字顯示
- {
- uchar i=0,temp;
- if(x)temp = 0x40; else temp = 0;
- for(i=y;*p!='\0';i++,p++)
- {
- lcd_Write_com(i|0x80+temp);
- lcd_write_date(*p);
- delay5ms();
- }
- }
- /**************************************
- 液晶顯示數(shù)字程序
- **************************************/
- void num_lcdDis(uchar X,uchar Y,uint num,uchar n)
- {
- uint i=0,temp,hang;
- n +=1;
- if(X)hang = 0x40;else hang = 0;
- for(i=(n-1);i>0;i--)
- {
- lcd_Write_com((i+Y-1)|0x80+hang); //從個位開始顯示
- temp = num%10+0x30;
- lcd_write_date(temp);
- delay5ms();
- num/=10;
- }
- }
- /**********************************************************
- 函數(shù)說明: 平均濾波函數(shù)
- **********************************************************/
- #define N 50
- uint Filter(uint adc_data)
- {
- uint value=0;
- uchar count,count_ADC;
- for(count=0;count<N;count++)
- {
- for(count_ADC=0;count_ADC<3;count_ADC++)
- {
- while(!ADC_ready){}
- ADC_ready=0;
- }
- value+=adc_data;
- }
- return (value);
- }
- /**********************************************************
- 函數(shù)說明:按鍵延時防抖動
- P3^5 Key_1
- P3^6 Key_2
- P3^7 Key_3
- **********************************************************/
- void key_scan()
- {
- uchar temp;
- temp = P2&0x0F;
- if(temp != 0x0F)
- {
- delay(10);
- temp = P2&0x0F;
- if(temp!= 0x0F)
- {
- switch(temp)
- {
- case 0x0E: Key_0_(); break; //20
- case 0x0D: Key_1_(); break; //21
- case 0x0B: Key_2_(); break; //22
- case 0x07: Key_3_(); break; //23
- default:break;
- }
- }
- }
- // last_key = temp;
- }
- /**********************************************************
- 函數(shù)說明: 按鍵程序
- **********************************************************/
- void Key_0_()
- {
- Charge=~Charge;
- if(Charge) {SD_1=1; hz_lcdDis(0,8,"d");}
- else {SD_1=0; hz_lcdDis(0,8,"c");}
- }
- void Key_1_()
- {
- if(K) {SD_1=0; lock=1; CCAP1L =CCAP1H =128; hz_lcdDis(0,8,"g"); }
- else {SD_1=1; lock=0; hz_lcdDis(0,8,"k"); }
- K=~K;
- }
- void Key_2_()
- {
- OUT_Current=OUT_Current+15;
- if(OUT_Current>600)OUT_Current=600;
- }
- void Key_3_()
- {
- OUT_Current=OUT_Current-15;
- if(OUT_Current<150)OUT_Current=150;
- }
- /**********************************************************
- 函數(shù)說明: 主函數(shù)
- **********************************************************/
- void main(void)
- {
- uint U1,U2,I1,S;
- SD_1=0;
- lcd1602_init();
- hz_lcdDis(0,4,"Welcome!");
- init_pwm();
- InitADC();
- delay(250);
- // delay(250);
- EA=1;//開總中斷
- lcd_Write_com(0x01); //清屏
- // SD_1=1;
- hz_lcdDis(0,0,"IN= . V S= . A");
- hz_lcdDis(1,0,"OU= . V I= . A");
- while(1)//主循環(huán)
- {
- U1=Filter(Boost_voltage)/92; //輸入電壓 1:10采樣電阻 93,
- U2=Filter(Battery_voltage)/92; //輸出電壓 1:10采樣電阻 93
- I1=Filter(O_current)/150; //輸出電流
- // if(I1>1) I1=I1-1;//輸出電流顯示校準(zhǔn)
- if(U2>242)
- {SD_1=0; lock=1; CCAP1L =CCAP1H =128; hz_lcdDis(0,8,"P"); }
- num_lcdDis(0,3,U1/10,2);
- num_lcdDis(0,6,U1%10,1);
- num_lcdDis(1,3,U2/10,2);
- num_lcdDis(1,6,U2%10,1);
- S=OUT_Current/3;
- num_lcdDis(0,11,S/100,1);
- num_lcdDis(0,13,S%100,2);
- num_lcdDis(1,11,I1/100,1);
- num_lcdDis(1,13,I1%100,2);
- // if((u2-u1)<40) hz_lcdDis(0,10,"Error!");
- // else hz_lcdDis(0,10,"OK ");
- key_scan();
- }
- }
- /****************************************************************
- 函數(shù)說明: ADC中斷
- 實現(xiàn)功能:執(zhí)行ADC采集并做電壓和電流的調(diào)整。
- ****************************************************************/
- void ADC_interrupt()interrupt 5 //ADC轉(zhuǎn)換完后ADC_FLAG由硬件自動置位,須由軟件清零
- {
- uint ADC_value; //ADC轉(zhuǎn)換結(jié)果 10位
- ADC_CONTR&=!ADC_FLAG; //clear ADCflag
- ADC_value=(ADC_RES<<2)+ADC_RESL; // ADC_value=(ADC_RES<<2)+ADC_RESL;
- switch(channel)
- {
- case 0: Boost_voltage=ADC_value;
- channel=1;
- break;
- case 1: Boost_Buck_current=ADC_value;
- if(!Charge)
- {
- if(!lock)
- {
- if((Battery_voltage<480)&&(Boost_Buck_current<OUT_Current)) //442
- {
- PWM_temp--;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
c.png (61.84 KB, 下載次數(shù): 162)
下載附件
2018-12-11 21:32 上傳
0.png (47.04 KB, 下載次數(shù): 148)
下載附件
2018-12-11 21:55 上傳
所有資料51hei提供下載:
雙向DC-DC.rar
(4.9 MB, 下載次數(shù): 855)
2018-12-11 21:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5