基于STC12系列單片機(jī)的串聯(lián)型開關(guān)電源設(shè)計(jì)與實(shí)現(xiàn)_第1頁
基于STC12系列單片機(jī)的串聯(lián)型開關(guān)電源設(shè)計(jì)與實(shí)現(xiàn)_第2頁
基于STC12系列單片機(jī)的串聯(lián)型開關(guān)電源設(shè)計(jì)與實(shí)現(xiàn)_第3頁
基于STC12系列單片機(jī)的串聯(lián)型開關(guān)電源設(shè)計(jì)與實(shí)現(xiàn)_第4頁
基于STC12系列單片機(jī)的串聯(lián)型開關(guān)電源設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基于STC12系列單片機(jī)的串聯(lián)型開關(guān)電源設(shè)計(jì)與實(shí)現(xiàn)開關(guān)電源是一種利用現(xiàn)代電力電子技術(shù),控制開關(guān)管開通和閉合的時(shí)間比率,維持穩(wěn)定輸出電壓的一種電源,開關(guān)電源一般是由脈沖寬度調(diào)制(PWM)控制。與一般的線性電源相比較,兩者的成本都隨著輸出功率的增加而增長,但兩者的增長速率有所差異,最重要的一點(diǎn)就是開關(guān)電源效率一般都會(huì)要比線性電源的效率要高?;陂_關(guān)電源與線性電源的不同,開關(guān)電源主要由以下的幾個(gè)模塊組成:1串聯(lián)開關(guān)電源電路;2 AD轉(zhuǎn)換模塊采集電源電壓;3 PWM波形輸出模塊;4數(shù)碼管顯示;5鍵盤輸入設(shè)置電壓;6通過CPU(STC12C5A60S2)控制算法。系統(tǒng)的基本框圖如下:基本思路為:首先從鍵

2、盤輸入一個(gè)電壓值,并把該電壓值在數(shù)碼管上面顯示出來,再由A/D轉(zhuǎn)換模塊對(duì)串聯(lián)開關(guān)電源電路的輸出端進(jìn)行電壓采集,將采集到的電壓值與鍵盤輸入的電壓值進(jìn)行比較,通過閉環(huán)算法,控制PWM的脈寬輸出,由此控制串聯(lián)開關(guān)電壓電源電路,改變輸出的電壓值,使得輸出值與設(shè)定的電壓值相等。一:串聯(lián)開關(guān)電源電路部分該電路圖由一個(gè)三極管,電感,電阻,電容,二極管,還有就是接VCC和接GND端,電路相對(duì)比較簡單,如圖所示:原理:在PWM端無輸入時(shí),三極管相當(dāng)于閉合,三極管右邊的電路無電流流過,此時(shí)RL兩端的電壓為0V。當(dāng)PWM端有電流輸入時(shí),三極管導(dǎo)通,電感L1和電容C1,可以分別防止電流和電壓突變,有一定的穩(wěn)壓作用。高

3、頻二極管D1,可以在PWM由開向關(guān)狀態(tài)轉(zhuǎn)換時(shí)與電感L1形成通路,釋放電感的能量。而由于PWM端輸入的是方波,也就是說三極管是處于開或者關(guān)狀態(tài)的。由此C1和R1在開狀態(tài)時(shí)電容充電,R1兩端的電壓逐漸升高,而當(dāng)三極管處于關(guān)狀態(tài)時(shí),電容C1對(duì)R1進(jìn)行放電,此時(shí)電壓逐漸降低。最后通過控制三極管的開與關(guān)的時(shí)間比例便可以使得在R1兩端形成穩(wěn)定的電壓。二:鍵盤輸入數(shù)據(jù)部分在該實(shí)驗(yàn)中,輸入數(shù)據(jù)時(shí)要用到矩陣鍵盤,矩陣鍵盤又稱為行列式鍵盤,它是用4條I/O線作為列線,4條I/O線作為行線組成的鍵盤。在行線和列線的每一個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵,由此組成了4*4的鍵盤,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,

4、區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時(shí),采用矩陣法來做鍵盤是合理的。這樣的行列式鍵盤結(jié)構(gòu)可以有效地提高單片機(jī)系統(tǒng)中I/O口的利用率。如下圖所示的4*4矩陣鍵盤:為了判斷矩陣鍵盤上面的按鍵是否有按下的,由于矩陣鍵盤是連接著P2口的,可以事先對(duì)P2端口賦值,比如使P2 = 0x7f,則除了P2.7口是低電平之外,其余的均為高電平。通過掃描P2.0到P2.3,要是有按鍵按下,假如P2.3為低電平,則可知道P2.3與P2.7對(duì)應(yīng)的那個(gè)按鍵按下了(也就是SM1),以此類推,便可以知道具體是哪個(gè)按鍵被按下了。除了上面要知道是

5、哪個(gè)按鍵被按下了之后,還要知道那個(gè)按下的按鍵代表的是哪個(gè)值,此時(shí)通過給所賦的低電平的端口和另一個(gè)低電平的端口組合起來就可以知道所按下的按鍵所代表的數(shù)值。三:數(shù)碼管數(shù)據(jù)顯示部分知道了上面在矩陣鍵盤輸入的數(shù)值后,便要在數(shù)碼管上面顯示出來。該實(shí)驗(yàn)板的8位數(shù)碼管是共陰極的數(shù)碼管,使用端口為P0和P1口,且為動(dòng)態(tài)數(shù)碼管,因此在同一時(shí)間,只有一個(gè)數(shù)碼管是亮著,但由于人眼的視覺殘留,使得看上去是全部一起亮著的。8位分別有段選和位選,段選就是要一個(gè)數(shù)碼管顯示的字型,而位選則是由低電平選中所要那一個(gè)數(shù)碼管,該數(shù)碼管才能亮。因此要使得數(shù)碼管亮并顯示數(shù)字,則必須在位選時(shí)該數(shù)碼管的位選管腳出于低電平,然后再通過段選顯

6、示字型。如下圖所示的數(shù)碼管:四:控制PWM輸出部分STC12C5A60S2系列單片機(jī)集成了兩路可編程計(jì)數(shù)器陣列(PCA)模塊,可用于軟件定時(shí)器,外部脈沖的捕捉,高速輸出以及脈寬調(diào)制(PWM)輸出。在該實(shí)驗(yàn)中主要用到PWM脈寬調(diào)制輸出,通過對(duì)特殊功能寄存器初始化,就可以在P1.3(選擇模式0時(shí)) 或P1.4(選擇模式1時(shí))端口輸出可調(diào)占空比的高速脈沖。五:A/D轉(zhuǎn)換部分(完成萬用表功能,即測(cè)量開關(guān)電源輸出電壓)STC12C5A60S2系列單片機(jī)自帶有8路10位高速A/D轉(zhuǎn)換器,在本實(shí)驗(yàn)中只用到其中的一路,故可以通過軟件設(shè)計(jì)選擇其中的一路用來測(cè)量電壓。在不需作為A/D轉(zhuǎn)換的端口可以繼續(xù)作為I/O口

7、使用。AD轉(zhuǎn)換對(duì)特殊功能寄存器的初始化主要有ADC_CONTR和A/D轉(zhuǎn)換結(jié)果寄存器ADC_RES(用來存放高八位)ADC_RESL(用來存放低兩位);在ADC_CONTR中包含有ADC電源控制位ADC_POWER,模數(shù)轉(zhuǎn)換器轉(zhuǎn)換速度控制位SPEED1SPEED0,模數(shù)轉(zhuǎn)換器轉(zhuǎn)換結(jié)束標(biāo)志位ADC_FLAG,模數(shù)轉(zhuǎn)換器(ADC)轉(zhuǎn)換啟動(dòng)控制位ADC_START,模擬輸入通道選擇CHS1/CHS2/CHS3。由于是2套時(shí)鐘,在設(shè)置ADC_CONTR控制寄存器的語句執(zhí)行之后,要經(jīng)過4個(gè)CPU時(shí)鐘的延時(shí),其值才能夠保證被這只進(jìn)ADC_CONTR控制寄存器,所以設(shè)置ADC_CONTR控制寄存器后,要加4

8、個(gè)空操作延時(shí)才能正確讀到ADC_CONTR寄存器的值。ADC的結(jié)構(gòu)如下圖所示:六:閉環(huán)控制算法這部分是整個(gè)實(shí)驗(yàn)中最重要的部分,該部分主要是通過A/D采集數(shù)據(jù)控制PWM輸出,PWM控制開關(guān)電源輸出,以達(dá)到穩(wěn)定,即讓開關(guān)電源輸出電壓穩(wěn)定在鍵盤輸入的電壓值。針對(duì)前面的要求,則需要用單片機(jī)來完成所有的控制與計(jì)算。在該實(shí)驗(yàn)中,作為AD采集的端口為P1.0,PWM輸出端口為P1.3,在采集完電壓數(shù)據(jù)的時(shí)候把數(shù)據(jù)存放在ADC之中,而從鍵盤輸入數(shù)值時(shí),鍵盤上顯示的是一個(gè)小數(shù),但在單片機(jī)中存在中間變量temp的是一個(gè)整數(shù),為小數(shù)的1000倍,因此在引用數(shù)碼管顯示的數(shù)值時(shí)要將temp除以1000才能得到實(shí)際的設(shè)置

9、電壓數(shù)值Vs;另一方面,采集回來的電壓ADC要轉(zhuǎn)換成實(shí)際的電壓數(shù)值,則由下面的算法得出:真實(shí)值 Vr = ADV*5.0/1024.0 在得到這兩個(gè)數(shù)值之后對(duì)他們進(jìn)行比較,要是Vr<Vs,說明采集回來的電壓偏低,此時(shí)則要降低PWM輸出脈沖的占空比;同理,當(dāng)Vr>Vs時(shí),則要降低PWM輸出脈沖的占空比,由此而使得串聯(lián)開關(guān)電路的輸出電壓與事先所設(shè)置的電壓值相同。實(shí)際測(cè)得的電壓與設(shè)置的電壓對(duì)比表格如下:Vs<0.80.80.91.01.11.21.31.41.51.61.7Vr0.860.951.031.161.261.341.451.561.651.71.81.92.02.12.

10、22.32.42.52.62.72.82.91.81.92.012.122.232.342.442.532.642.762.852.933.03.13.23.33.43.53.63.73.83.94.0>4.03.073.123.253.353.463.583.693.783.93.964.08通過上面的表格可以看出來,雖然實(shí)際測(cè)出來的電壓Vr和設(shè)置的電壓Vs有一定的誤差,但是總體還是在設(shè)置的電壓附近波動(dòng),所能輸出地電壓范圍為0.8v4.0v。心得體會(huì):通過這次基于STC12系列單片機(jī)的串聯(lián)型開關(guān)電源的課程設(shè)計(jì)讓我對(duì)單片機(jī)的理論有了更加深入的了解,同時(shí)在具體的制作過程中我發(fā)現(xiàn)現(xiàn)在書本上的

11、知識(shí)與實(shí)際的應(yīng)用存在著不小的差距,書本上的知識(shí)很多都是理想化后的結(jié)論,忽略了很多實(shí)際的因素,或者涉及的不全面,可在實(shí)際的應(yīng)用時(shí)這些是不能被忽略的,因此不得不考慮這方面的問題,這讓我無法根據(jù)書上的理論就輕易得到預(yù)想中的結(jié)果,有時(shí)結(jié)果甚至很差別很大在實(shí)驗(yàn)之中,要使用單片機(jī)的管腳,則必須要對(duì)所要用到的管腳充分的了解。在此之中我充分了解到,單片機(jī)的管腳不單單是輸入輸出而已,還有很多的其他功能,就比如說這次實(shí)驗(yàn)中所用到的AD轉(zhuǎn)換功能和PWM脈沖輸出功能。要知道怎么樣使用一些管腳的第二功能或者第三功能,就要對(duì)該單片機(jī)的結(jié)構(gòu)有更深的了解,在設(shè)計(jì)程序的時(shí)候就可以對(duì)一些特殊的功能寄存器進(jìn)行初始化,以便更好地使用

12、復(fù)用的管腳。除此之外,我更加深了對(duì)C語言的理解,C51是針對(duì)單片機(jī)設(shè)計(jì)的,它與純粹的C語言還是有一些差別的。像在這次實(shí)驗(yàn)之中使用到的定時(shí)器和對(duì)一些特殊功能寄存器賦值的那些語句,在純粹的C語言里面是沒有的。C51是要在熟知單片機(jī)的結(jié)構(gòu)下才能編程的,特別是此次里面所要用到的AD轉(zhuǎn)換和PWM脈寬輸出。在編程的時(shí)候,有幾點(diǎn)很深的體會(huì)就是:1定時(shí)器的使用,定時(shí)器有點(diǎn)類似于死循環(huán),不過和死循環(huán)不一樣的是,定時(shí)器是當(dāng)計(jì)時(shí)超過所設(shè)定的時(shí)間時(shí),就會(huì)產(chǎn)生中斷,從頭開始幾時(shí),在定時(shí)器中斷里面的程序也重新開始執(zhí)行。而死循環(huán),比如說while(1),在它里面的程序執(zhí)行完一次的時(shí)候有會(huì)從新從頭開始執(zhí)行,不像定時(shí)器要到一定

13、的時(shí)間之后才可以重新運(yùn)行一次程序。2還有就是對(duì)一些細(xì)節(jié)上面的改進(jìn),比如說按按鍵是的防抖動(dòng)問題,可以加上一些延時(shí)防止單片機(jī)誤判多次按下按鍵。關(guān)于小數(shù)點(diǎn)的時(shí)候,可以用一個(gè)除所需顯示的數(shù)字按鍵來表示,小數(shù)點(diǎn)的移動(dòng)可以設(shè)置標(biāo)志位,再與前面現(xiàn)實(shí)的數(shù)值相或,就可以使得小數(shù)點(diǎn)顯示在相應(yīng)的位那里了??傮w來說,我通過這次課程設(shè)計(jì)不單單學(xué)到了很多單片機(jī)和C51編程的的知識(shí),更多的是學(xué)會(huì)了學(xué)習(xí)的方法,能夠?qū)⑺鶎W(xué)到的知識(shí)用到實(shí)驗(yàn)上面,可以把知識(shí)記得更清楚。這還更多地提高了在遇到實(shí)際問題時(shí)該怎樣解決實(shí)際問題的能力。更深入地學(xué)習(xí)C語言,又可以更多地提高自己的邏輯,思考能力,使思維結(jié)構(gòu)更嚴(yán)謹(jǐn)。希望在以后的學(xué)習(xí)之中可以更多地

14、接觸到這樣的實(shí)驗(yàn),那樣就可以更好地提高自己的動(dòng)手能力與對(duì)所學(xué)知識(shí)的運(yùn)用能力。本實(shí)驗(yàn)C程序源代碼:/*/*文件名:開關(guān)穩(wěn)壓電源.c*/*功能:設(shè)定電壓初始值,使得輸出電壓值與數(shù)碼管顯示值相同*/*單片機(jī)型號(hào):STC12C5A60S2(帶AD轉(zhuǎn)換與PWM脈寬調(diào)制輸出功能)*/*/*/#include <STC12C5A60S2.H>#include <intrins.h> /51基本運(yùn)算(包括_nop_空函數(shù)#define uchar unsigned char#define uint unsigned intvoid Display_Number(unsigned int

15、 Number); /顯示函數(shù)聲明void delay (unsigned int t ); /延時(shí)函數(shù)的聲明void Read_init (uchar CHA);unsigned int ADC_Read (void);void KeyScan(void); /鍵盤掃描函數(shù)void PWM_init(void); /PWM輸出初始化函數(shù)void PWM0_set (unsigned char a); /PWM脈寬占空比輸出設(shè)置unsigned char code Bit_Table8=0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F;unsigned char

16、code Seg_Table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x00;unsigned charLedBuf=0,1,2,3,4,5,6,7;unsigned char DispPoint = 200; /小數(shù)點(diǎn)標(biāo)志位unsigned char t = 50;unsigned char i,xxx =50;unsigned int j,temp =0;unsigned int ADC = 0;unsigned int Vset = 200;uchar KeyDownFlag = 0;uchar KeyValue = 0;uc

17、har KeyValueTemp = 0;uchar Key20msDelay = 0;sbit P2_0 = P20;sbit P2_1 = P21;sbit P2_2 = P22;sbit P2_3 = P23;sbit P3_5 = P35;void main(void)TCON = 0x01; EX0 = 1;EA = 1;TMOD = 0x11;/設(shè)置定時(shí)器T0T1都是工作方式1TH0 = 0xF8;/定時(shí)器0初始化T0 = 65535-2000 定時(shí)2ms TL0 = 0x2F;TH1 = 0xEC;/定時(shí)器1初始化T1 = 65535-5000 定時(shí)5msTL1 = 0x77;

18、ET0 = 1;ET1 = 1; TR0 = 1;TR1 = 1;Read_init(0); /選擇AD轉(zhuǎn)換通道7PWM_init(); /PWM初始化Display_Number(0);while(1) if(P3_5 = 0)Display_Number(xxx);/顯示占空比,用于測(cè)試 delay(20);if(KeyDownFlag)/判斷矩陣鍵盤是否有按鍵按下 if(KeyValue = 16)/16表示小數(shù)點(diǎn)DispPoint = 4;elseif(temp<1000&&KeyValue<11) /只用到矩陣鍵盤的1到10的按鍵if(KeyValue =

19、 10) KeyValue = 0;temp = 10*temp+KeyValue ;/讀取矩陣鍵盤值DispPoint = DispPoint+1;/小數(shù)點(diǎn)左移一位 Display_Number(temp);/顯示數(shù)值for(i=10;i>0;i-)for(j=20000;j>0;j-); /*AD轉(zhuǎn)換函數(shù)*/unsigned int ADC_Read (void)unsigned char c,AD_FIN=0; /存儲(chǔ)A/D轉(zhuǎn)換標(biāo)志unsigned int SUM = 0;for(c=50;c>0;c-) ADC_CONTR |= 0x08;/啟動(dòng)A/D轉(zhuǎn)換(0000

20、1000 令A(yù)DCS = 1) _nop_(); _nop_(); _nop_(); _nop_(); while (AD_FIN =0) /等待A/D轉(zhuǎn)換結(jié)束 AD_FIN = (ADC_CONTR & 0x10);/0001 0000測(cè)試A/D轉(zhuǎn)換結(jié)束否 ADC_CONTR &= 0xE7; /1111 0111 清ADC_FLAG位, 關(guān)閉A/D轉(zhuǎn)換,SUM = SUM +ADC_RES*4+ADC_RESL;/10位ADC數(shù)據(jù)高8位在ADC_RES中,低2位在ADC_RESL中 SUM = SUM/50;return (SUM); /返回A/D轉(zhuǎn)換結(jié)果 取10次的平均

21、/*AD轉(zhuǎn)換初始化函數(shù)*/void Read_init (uchar CHA)uchar AD_FIN=0; /存儲(chǔ)A/D轉(zhuǎn)換標(biāo)志 CHA &= 0x07; /選擇ADC的8個(gè)接口中的一個(gè)(0000 0111 清0高5位) ADC_CONTR = 0x60; /ADC轉(zhuǎn)換的速度 _nop_(); ADC_CONTR |= CHA; /選擇A/D當(dāng)前通道 _nop_(); ADC_CONTR |= 0x80; /啟動(dòng)A/D電源 delay(1); /使輸入電壓達(dá)到穩(wěn)定(1ms即可) /*數(shù)碼管顯示函數(shù)*/void Display_Number(unsigned int Number)un

22、signed int Temp = Number;unsigned char i = 0x04;while(Temp > 0)LedBufi = Temp % 10;Temp = Temp / 10;i+;for(;i<8;i+)LedBufi = 10;/*利用定時(shí)器T0對(duì)數(shù)碼管掃描顯示數(shù)值*/void T0_interrupt(void)interrupt 1static unsigned char data i = 0x04;TMOD = 0x11;TH0 = 0xF8;/定時(shí)器T0初值重裝t TL0 = 0x2F;KeyScan();P0 = 0x00;P1 = Bit_T

23、ablei;if(i = DispPoint)P0 = Seg_TableLedBufi|0x80;else P0 = Seg_TableLedBufi;i+;if(i>7) i = 0x04;/*延時(shí)函數(shù)*/void delay (unsigned int t ) unsigned int i; while (-t != 0) for (i = 0; i < 600; i+); /*矩陣鍵盤掃描*/void KeyScan(void) uchar TestKeyCode;uchar ScanKeyCode;uchar i;ScanKeyCode = 0x00;for(i=0;i&

24、lt;4;i+)TestKeyCode = 0x80;/1000 0000TestKeyCode >>=i; /右移1000 0000TestKeyCode = TestKeyCode;/取反得0x7f 0111 1111 P2 = TestKeyCode;if(!P2_3) ScanKeyCode = 4*i+1;break;else if(!P2_2) ScanKeyCode = 4*i+2; break;else if(!P2_1) ScanKeyCode = 4*i+3; break;else if(!P2_0) ScanKeyCode = 4*i+4; break;if(ScanKeyCode) /按鍵按下if(!KeyDownFlag) if(Key20msDelay)Key20msDelay+; if(Key20msDelay > 8) /延時(shí)防抖動(dòng)if(KeyValueTemp = ScanKeyCode) KeyDownFlag = 1; KeyValue = KeyValueTemp; Key20msDelay = 0; elseKey20msDelay = 1;KeyValueTemp = Sc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論