版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> XX大 學(xué)</b></p><p> 模擬電路課程設(shè)計(jì)報(bào)告</p><p> 課題名稱(chēng):基于STC12系列單片機(jī)的串聯(lián)型開(kāi)關(guān)電源設(shè)計(jì)與實(shí)現(xiàn)</p><p> 學(xué) 院 計(jì)算機(jī)與電子信息學(xué)院</p><p> 專(zhuān) 業(yè) </p><
2、p> 班 級(jí) </p><p> 學(xué) 號(hào) </p><p> 姓 名 </p><p> 摘要:本模擬電路課程設(shè)計(jì)要求制作開(kāi)關(guān)電源的模擬電路部分,在掌握原理的基礎(chǔ)上將其與單片機(jī)相結(jié)合,完成開(kāi)關(guān)電源的設(shè)計(jì)。本報(bào)告旨在詳述開(kāi)關(guān)電源的原理分析、計(jì)算、仿真波形、相關(guān)控制方法以及程
3、序展示。</p><p><b> 開(kāi)關(guān)電源原理分析</b></p><p> 本課程設(shè)計(jì)采用單片機(jī)控制與模擬電路相結(jié)合的方法來(lái)實(shí)現(xiàn)開(kāi)關(guān)電源。單片機(jī)所采用的芯片為STC12C5A60S2,該芯片在擁有8051內(nèi)核的基礎(chǔ)上加入了10為AD和PWM發(fā)生器。通過(guò)程序,即可控制單片機(jī)產(chǎn)生一定占空比的PWM脈沖,將此脈沖輸入到模擬電路部分,在模擬電路的輸出端即可產(chǎn)生一定的輸
4、出電壓,可比較容易的通過(guò)程序來(lái)實(shí)現(xiàn)對(duì)輸出電壓的控制。但上述的開(kāi)環(huán)控制是無(wú)法達(dá)到精確的調(diào)節(jié)電壓,因此需要采用閉環(huán)控制來(lái)精確調(diào)制。即,對(duì)輸出電壓進(jìn)行AD采樣,將其輸入回單片機(jī)中進(jìn)行數(shù)據(jù)處理。單片機(jī)根據(jù)處理的結(jié)果來(lái)對(duì)輸出電壓做出修正,經(jīng)過(guò)這樣的逐步調(diào)節(jié)即可達(dá)到閉環(huán)的精密輸出。由此原理,可以將整個(gè)過(guò)程分成一下模塊:MCU控制模塊,PWM波形輸出模塊,模擬電路模塊,AD轉(zhuǎn)換模塊,數(shù)碼管顯示模塊,鍵盤(pán)輸入模塊。原理圖如下:</p>&
5、lt;p><b> 二、本設(shè)計(jì)的特色</b></p><p> 經(jīng)過(guò)幾次完善,本課程設(shè)計(jì)的程序改掉了之前的獨(dú)立按鍵而換用了矩陣鍵盤(pán),同時(shí),矩陣鍵盤(pán)與數(shù)據(jù)的對(duì)應(yīng)形式與手機(jī)鍵盤(pán)相同,操作方便。對(duì)于顯示函數(shù)進(jìn)行了一定的修改,廢棄了應(yīng)用Delay函數(shù)的原始辦法,改用中斷進(jìn)行顯示,這樣的效果更佳。同時(shí),對(duì)于閉環(huán)控制也進(jìn)行了一定的更改,由原來(lái)的簡(jiǎn)單的對(duì)占空比進(jìn)行操作變成了在一定時(shí)刻后對(duì)占空比進(jìn)
6、行10000次疊加取均值,這樣使顯示更加的穩(wěn)定準(zhǔn)確。將每次輸入數(shù)據(jù)都要復(fù)位的缺點(diǎn)進(jìn)行看修改,只需先按獨(dú)立按鍵就可進(jìn)入重復(fù)鍵入數(shù)據(jù)的模式,使得程序更加實(shí)用。同時(shí)程序中也加入了對(duì)輸入數(shù)據(jù)進(jìn)行修改和按鍵音的功能,使得整個(gè)設(shè)計(jì)更加人性化。</p><p> 三、模擬電路原理說(shuō)明</p><p><b> 模擬電路圖如下:</b></p><p>
7、 該模擬電路的控制部分原理為,通過(guò)MCU輸出的PWM脈沖來(lái)不斷的使三極管導(dǎo)通和截止,這樣就達(dá)到了一個(gè)類(lèi)似開(kāi)關(guān)的功能,使得三極管的射極與VCC導(dǎo)通和截止。而射極的電壓經(jīng)過(guò)后續(xù)電路后,其輸出端就會(huì)輸出一定的電壓值。也就是說(shuō)通過(guò)調(diào)整PWM脈沖即可該電路的輸出電壓。</p><p><b> 四、相關(guān)控制說(shuō)明</b></p><p> 本系統(tǒng)通過(guò)STC12C5A60S2單
8、片機(jī)對(duì)其進(jìn)行控制,具體控制流程為:首先,程序先對(duì)定時(shí)器進(jìn)行初始化,通過(guò)定時(shí)器中斷來(lái)對(duì)數(shù)據(jù)進(jìn)行顯示,之后通過(guò)鍵盤(pán)輸入程序?qū)?shù)據(jù)進(jìn)行輸入,并將其輸入的數(shù)據(jù)保存在數(shù)組中。在這個(gè)過(guò)程中可以對(duì)輸入的數(shù)據(jù)進(jìn)行更改。之后對(duì)單片機(jī)進(jìn)行AD、PWM初始化。使其處于工作狀態(tài)。在初始化時(shí),應(yīng)該將PWM的占空比設(shè)定為最小,即CCAP0H、CCAP0L=0XFE。之后,AD采樣回電壓并將其儲(chǔ)存在數(shù)組中同時(shí)轉(zhuǎn)化成能夠與鍵盤(pán)輸入值進(jìn)行比較的形式。將該值與鍵盤(pán)輸入值進(jìn)
9、行比較,通過(guò)比較結(jié)果來(lái)對(duì)CCAP0H,CCAP0L進(jìn)行調(diào)整,考慮到如果閉環(huán)控制如果是在不斷的調(diào)整占空比,那么隨之接收到并且顯示的電壓必定在不斷跳動(dòng),因此,可以采用將不斷調(diào)整的占空比進(jìn)行疊加取出均值然后賦給CCAP0H,CCAP0L的方法,直至調(diào)整為與鍵盤(pán)輸入的數(shù)值達(dá)到最優(yōu)為止,這樣即完成了閉環(huán)精確調(diào)制電壓的過(guò)程。</p><p> 在編程中,需要注意的問(wèn)題有:1、在AD采樣時(shí),不一定會(huì)達(dá)到很高精度,這時(shí)需要實(shí)測(cè)
10、數(shù)據(jù),根據(jù)數(shù)據(jù)對(duì)程序進(jìn)行修正。2、關(guān)于閉環(huán)控制,起初,程序中將鍵盤(pán)輸入與占空比設(shè)置聯(lián)系到了一起。這是十分不明智的。應(yīng)將鍵盤(pán)輸入數(shù)據(jù)與占空比的設(shè)置分開(kāi),鍵盤(pán)輸入的數(shù)據(jù)僅僅作為一個(gè)標(biāo)準(zhǔn)用于比較。</p><p> 五、設(shè)計(jì)中存在的不足</p><p> 在設(shè)計(jì)過(guò)程中,雖說(shuō)程序可以正確運(yùn)行,但是程序中語(yǔ)句的運(yùn)用確實(shí)存在不合理之處。例如本應(yīng)是if……else的語(yǔ)句卻用了兩個(gè)if,這樣看似可以正
11、常運(yùn)行,但是效率卻不如if……else。這些細(xì)微之處都應(yīng)該加以注意。</p><p> 六、本次課程設(shè)計(jì)的體會(huì)</p><p> 本次課程設(shè)計(jì)的最大體會(huì)就是:對(duì)待程序,要多注意關(guān)注它的細(xì)節(jié),不要以程序可以正確運(yùn)行為目的,而應(yīng)當(dāng)盡可能的提高程序的效率,盡可能的增強(qiáng)程序的可讀性,盡可能的達(dá)到人性化的設(shè)計(jì)。增加一些諸如可刪除,按鍵音,可重復(fù)輸入數(shù)據(jù),狀態(tài)指示燈等小功能。這些看似容易的小功能實(shí)
12、際是設(shè)計(jì)者的設(shè)計(jì)思想理念的體現(xiàn),這也正是我們應(yīng)該培養(yǎng)的。</p><p> #include <reg52.h></p><p> #include <intrins.h></p><p> #include <PWM.h></p><p> #include <AD.h></p&
13、gt;<p> #define uint unsigned int </p><p> #define uchar unsigned char</p><p> #define ADC_POWER 0x80 </p><p> #define ADC_FLAG 0x10</p><p> #define ADC_ST
14、ART0x08</p><p> #define ADC_SPEEDLL 0x00</p><p> uchar number[6];</p><p> uchar code Bit_Table[6]={0xbf,0xdf,0xef,0xfb,0xfd,0xfe};</p><p> uchar code Table[]={0x3
15、f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};</p><p> uchar key_flag,keyValue,num_key,temp_circle=0xfe,flag4,flag6,flag7,temp,keyValueTemp,z,ratio1=0xfd,KeyDelay,test1,sure=
16、1,b,flag9,try=1,h,k,m,n;</p><p> uint i,flag8,j;</p><p> long int keyinto,reci,avg;</p><p> float a=19.53125;</p><p> sbit keyrein=P3^2;</p><p> sbit
17、finish=P3^7;</p><p> sbit trylight=P3^1;</p><p> sbit speak=P3^3;</p><p> sbit change=P3^0;</p><p> void Inittimer();</p><p> void Keyin();</p>
18、<p> void InitADC();</p><p> void InitPWM();</p><p> void ADCrecieve();</p><p> void delay(uint z);</p><p> void main()</p><p><b> { <
19、;/b></p><p> Inittimer();</p><p> while(sure)</p><p><b> {</b></p><p><b> Keyin();</b></p><p><b> }</b></p&g
20、t;<p> InitPWM();</p><p> InitADC();</p><p><b> while(1)</b></p><p><b> {</b></p><p> ADCrecieve(); </p><p> if((keyin
21、to>reci)&&(k==0))</p><p><b> {</b></p><p><b> m=0;</b></p><p><b> ratio1--;</b></p><p> if(ratio1==0x01)k=1;</p>
22、;<p><b> flag8++;</b></p><p> CCAP0H=CCAP0L=ratio1;</p><p><b> } </b></p><p> if((keyinto<reci)&&(m==0))</p><p><b>
23、 {</b></p><p><b> k=0;</b></p><p> ratio1++; </p><p> if(ratio1==0xfe)m=1;</p><p><b> flag8++;</b></p><p> CCAP0H=CCAP
24、0L=ratio1;</p><p><b> }</b></p><p> if(flag8>10000)</p><p><b> {</b></p><p> avg+=ratio1;</p><p><b> j++;</b>&
25、lt;/p><p> if(j==10001)</p><p><b> {</b></p><p> ratio1=avg/10000;</p><p> CCAP0H=CCAP0L=ratio1;</p><p> while(keyrein)</p><p>&
26、lt;b> {</b></p><p> ADCrecieve(); </p><p><b> finish=0;</b></p><p><b> } </b></p><p><b> } </b></p><p&g
27、t;<b> }</b></p><p> if(keyrein==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(keyrein==0)</p><p><b&g
28、t; {</b></p><p><b> sure=1;</b></p><p> for(n=0;n<6;n++)</p><p> number[n]=0;</p><p> ratio1=0xfd;</p><p> CCAP0H=CCAP0L=ratio1;
29、</p><p><b> reci=0;</b></p><p><b> flag8=0;</b></p><p><b> k=m=0;</b></p><p><b> finish=1;</b></p><p>&
30、lt;b> avg=0;</b></p><p><b> j=0;</b></p><p> while(sure)</p><p><b> {</b></p><p><b> Keyin();</b></p><p>
31、<b> }</b></p><p><b> }</b></p><p> while(!keyrein);</p><p><b> delay(5);</b></p><p> while(!keyrein);</p><p><b
32、> } </b></p><p><b> } </b></p><p><b> }</b></p><p> void T0_interrupt(void) interrupt 1</p><p><b> {</b></p>
33、<p> TH0 = 0xfc;</p><p> TL0 = 0x66;</p><p><b> if(sure)</b></p><p><b> {</b></p><p> P2=temp_circle; </p><p><
34、b> temp=P2;</b></p><p> if(temp!=temp_circle)</p><p><b> { </b></p><p> if(KeyDelay) </p><p><b> {</b></p><p> KeyDe
35、lay++;</p><p> if( KeyDelay>50)</p><p> { </p><p> if(temp==keyValueTemp)
36、 </p><p><b> { </b></p><p> key_flag=1; </p><p> keyValue=temp;</p><p> KeyDelay=0; </p><p><b> }</b></p&
37、gt;<p><b> else</b></p><p><b> {</b></p><p> KeyDelay=1;</p><p> keyValueTemp=temp;</p><p><b> }</b></p><p>
38、;<b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> keyValueTemp=temp;</p><p> K
39、eyDelay=1;</p><p><b> } </b></p><p><b> }</b></p><p><b> else</b></p><p><b> { </b></p><p> key_flag
40、=0;</p><p><b> } </b></p><p><b> }</b></p><p> if((z==0)||(z==3))</p><p> P0=Table[number[z]]+0x80;</p><p><b> else</
41、b></p><p> P0=Table[number[z]];</p><p> P1=Bit_Table[z];</p><p><b> z++;</b></p><p> if(z==6) z=0;</p><p><b> }</b></p&g
42、t;<p> void Inittimer()</p><p><b> {</b></p><p><b> EA=1;</b></p><p><b> ET0=1;</b></p><p> TH0 = 0xfc;</p><p
43、> TL0 = 0x66;</p><p> TMOD = 0x01;</p><p><b> TR0 =1;</b></p><p><b> }</b></p><p> void Keyin()</p><p><b> {</b&
44、gt;</p><p> if(key_flag==1)</p><p><b> { </b></p><p><b> speak=0;</b></p><p> for(i=0;i<15000;i++);</p><p> key_flag=0; &l
45、t;/p><p> switch(keyValue)</p><p><b> { </b></p><p> case 0x7B: num_key=1; change=1;break; </p><p> case 0x7D: num_key=2; change=1;break; </p&g
46、t;<p> case 0x7E: num_key=3; change=1;break; </p><p> case 0xBB: num_key=4; change=1;break; </p><p> case 0xBD: num_key=5; change=1;break; </p>&l
47、t;p> case 0xBE: num_key=6; change=1;break; </p><p> case 0xDB: num_key=7; change=1;break; </p><p> case 0xDD: num_key=8; change=1;break; </p><p&g
48、t; case 0xDE: num_key=9; change=1;break; </p><p> case 0xED: num_key=0; change=1;break; </p><p> case 0xEB: flag9=1;flag6--;change=0;break; </p><p><b> }
49、 </b></p><p> number[flag6]=num_key;</p><p><b> flag6++;</b></p><p> if(flag6==3)</p><p><b> {</b></p><p> keyinto=numb
50、er[0]*1000+number[1]*100+number[2]*10;</p><p><b> flag6=0;</b></p><p><b> sure=0;</b></p><p><b> }</b></p><p><b> if(flag9
51、)</b></p><p><b> {</b></p><p><b> flag6--;</b></p><p><b> flag9=0;</b></p><p><b> }</b></p><p>&l
52、t;b> } </b></p><p><b> else</b></p><p><b> { </b></p><p> temp_circle=_crol_(temp_circle,1);</p><p> if(temp_circle==0xEF)<
53、/p><p><b> { </b></p><p> temp_circle=0xFE; </p><p><b> }</b></p><p><b> }</b></p><p><b> speak=1;</b><
54、;/p><p><b> i=0;</b></p><p><b> }</b></p><p> void InitADC()</p><p><b> {</b></p><p> P1ASF=0x80; </p>
55、<p> ADC_RES=0;</p><p><b> }</b></p><p> void InitPWM()</p><p><b> {</b></p><p> CCON=0; </p><p><b> CL=0;&
56、lt;/b></p><p><b> CH=0;</b></p><p> CMOD=0x02;</p><p> CCAPM0=0x42;</p><p> CCAP0H=CCAP0L=ratio1;</p><p><b> CR=1;</b></
57、p><p><b> }</b></p><p> void ADCrecieve()</p><p><b> {</b></p><p> ADC_CONTR=0x8f;</p><p><b> _nop_();</b></p>
58、<p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> while(!(ADC_CONTR&ADC_FLAG));</p><p> AD
59、C_CONTR&= ~ADC_FLAG;</p><p> b=ADC_RES;</p><p><b> reci=b*a;</b></p><p> number[3]=reci/1000;</p><p> number[4]=reci%1000/100;</p><p>
60、 number[5]=reci%1000%100/10;</p><p><b> } </b></p><p> void delay(uint z)</p><p><b> {</b></p><p><b> uint x,y;</b></p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于89c51單片機(jī)的開(kāi)關(guān)電源設(shè)計(jì)
- 89c51單片機(jī)課程設(shè)計(jì)
- 基于89c51單片機(jī)的秒表課程設(shè)計(jì)
- 基于89c51電子密碼鎖設(shè)計(jì)課程設(shè)計(jì)
- 基于89c51單片機(jī)的秒表課程設(shè)計(jì)
- 基于89c51的轉(zhuǎn)速測(cè)量系統(tǒng)設(shè)計(jì)c程序
- 基于89c51的自身斷電保護(hù)系統(tǒng)設(shè)計(jì)課程設(shè)計(jì)
- 基于89c51單片機(jī)的秒表課程設(shè)計(jì) 2
- 基于89c51單片機(jī)的秒表課程設(shè)計(jì) (2)
- 開(kāi)關(guān)電源課程設(shè)計(jì)--開(kāi)關(guān)電源電路設(shè)計(jì)
- 開(kāi)關(guān)電源課程設(shè)計(jì)
- 基于89c51單片機(jī)交通燈課程設(shè)計(jì)
- 基于89c51單片機(jī)電子時(shí)鐘課程設(shè)計(jì)
- 開(kāi)關(guān)電源課程設(shè)計(jì)
- 開(kāi)關(guān)電源課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于89c51的電纜定長(zhǎng)控制設(shè)計(jì)
- 基于89c51電子密碼鎖設(shè)計(jì)程序
- 基于89c51電子密碼鎖設(shè)計(jì)報(bào)告
- 89c51單片機(jī)課程設(shè)計(jì)之秒表設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 基于89c51的智能時(shí)鐘設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論