基于89c51的開(kāi)關(guān)電源課程設(shè)計(jì)報(bào)告(附程序)_第1頁(yè)
已閱讀1頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論