2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  XX大 學(xué)</b></p><p>  模擬電路課程設(shè)計報告</p><p>  課題名稱:基于STC12系列單片機的串聯(lián)型開關(guān)電源設(shè)計與實現(xiàn)</p><p>  學(xué) 院 計算機與電子信息學(xué)院</p><p>  專 業(yè) </p><

2、p>  班 級 </p><p>  學(xué) 號 </p><p>  姓 名 </p><p>  摘要:本模擬電路課程設(shè)計要求制作開關(guān)電源的模擬電路部分,在掌握原理的基礎(chǔ)上將其與單片機相結(jié)合,完成開關(guān)電源的設(shè)計。本報告旨在詳述開關(guān)電源的原理分析、計算、仿真波形、相關(guān)控制方法以及程

3、序展示。</p><p><b>  開關(guān)電源原理分析</b></p><p>  本課程設(shè)計采用單片機控制與模擬電路相結(jié)合的方法來實現(xiàn)開關(guān)電源。單片機所采用的芯片為STC12C5A60S2,該芯片在擁有8051內(nèi)核的基礎(chǔ)上加入了10為AD和PWM發(fā)生器。通過程序,即可控制單片機產(chǎn)生一定占空比的PWM脈沖,將此脈沖輸入到模擬電路部分,在模擬電路的輸出端即可產(chǎn)生一定的輸

4、出電壓,可比較容易的通過程序來實現(xiàn)對輸出電壓的控制。但上述的開環(huán)控制是無法達到精確的調(diào)節(jié)電壓,因此需要采用閉環(huán)控制來精確調(diào)制。即,對輸出電壓進行AD采樣,將其輸入回單片機中進行數(shù)據(jù)處理。單片機根據(jù)處理的結(jié)果來對輸出電壓做出修正,經(jīng)過這樣的逐步調(diào)節(jié)即可達到閉環(huán)的精密輸出。由此原理,可以將整個過程分成一下模塊:MCU控制模塊,PWM波形輸出模塊,模擬電路模塊,AD轉(zhuǎn)換模塊,數(shù)碼管顯示模塊,鍵盤輸入模塊。原理圖如下:</p>&

5、lt;p><b>  二、本設(shè)計的特色</b></p><p>  經(jīng)過幾次完善,本課程設(shè)計的程序改掉了之前的獨立按鍵而換用了矩陣鍵盤,同時,矩陣鍵盤與數(shù)據(jù)的對應(yīng)形式與手機鍵盤相同,操作方便。對于顯示函數(shù)進行了一定的修改,廢棄了應(yīng)用Delay函數(shù)的原始辦法,改用中斷進行顯示,這樣的效果更佳。同時,對于閉環(huán)控制也進行了一定的更改,由原來的簡單的對占空比進行操作變成了在一定時刻后對占空比進

6、行10000次疊加取均值,這樣使顯示更加的穩(wěn)定準(zhǔn)確。將每次輸入數(shù)據(jù)都要復(fù)位的缺點進行看修改,只需先按獨立按鍵就可進入重復(fù)鍵入數(shù)據(jù)的模式,使得程序更加實用。同時程序中也加入了對輸入數(shù)據(jù)進行修改和按鍵音的功能,使得整個設(shè)計更加人性化。</p><p>  三、模擬電路原理說明</p><p><b>  模擬電路圖如下:</b></p><p> 

7、 該模擬電路的控制部分原理為,通過MCU輸出的PWM脈沖來不斷的使三極管導(dǎo)通和截止,這樣就達到了一個類似開關(guān)的功能,使得三極管的射極與VCC導(dǎo)通和截止。而射極的電壓經(jīng)過后續(xù)電路后,其輸出端就會輸出一定的電壓值。也就是說通過調(diào)整PWM脈沖即可該電路的輸出電壓。</p><p><b>  四、相關(guān)控制說明</b></p><p>  本系統(tǒng)通過STC12C5A60S2單

8、片機對其進行控制,具體控制流程為:首先,程序先對定時器進行初始化,通過定時器中斷來對數(shù)據(jù)進行顯示,之后通過鍵盤輸入程序?qū)?shù)據(jù)進行輸入,并將其輸入的數(shù)據(jù)保存在數(shù)組中。在這個過程中可以對輸入的數(shù)據(jù)進行更改。之后對單片機進行AD、PWM初始化。使其處于工作狀態(tài)。在初始化時,應(yīng)該將PWM的占空比設(shè)定為最小,即CCAP0H、CCAP0L=0XFE。之后,AD采樣回電壓并將其儲存在數(shù)組中同時轉(zhuǎn)化成能夠與鍵盤輸入值進行比較的形式。將該值與鍵盤輸入值進

9、行比較,通過比較結(jié)果來對CCAP0H,CCAP0L進行調(diào)整,考慮到如果閉環(huán)控制如果是在不斷的調(diào)整占空比,那么隨之接收到并且顯示的電壓必定在不斷跳動,因此,可以采用將不斷調(diào)整的占空比進行疊加取出均值然后賦給CCAP0H,CCAP0L的方法,直至調(diào)整為與鍵盤輸入的數(shù)值達到最優(yōu)為止,這樣即完成了閉環(huán)精確調(diào)制電壓的過程。</p><p>  在編程中,需要注意的問題有:1、在AD采樣時,不一定會達到很高精度,這時需要實測

10、數(shù)據(jù),根據(jù)數(shù)據(jù)對程序進行修正。2、關(guān)于閉環(huán)控制,起初,程序中將鍵盤輸入與占空比設(shè)置聯(lián)系到了一起。這是十分不明智的。應(yīng)將鍵盤輸入數(shù)據(jù)與占空比的設(shè)置分開,鍵盤輸入的數(shù)據(jù)僅僅作為一個標(biāo)準(zhǔn)用于比較。</p><p>  五、設(shè)計中存在的不足</p><p>  在設(shè)計過程中,雖說程序可以正確運行,但是程序中語句的運用確實存在不合理之處。例如本應(yīng)是if……else的語句卻用了兩個if,這樣看似可以正

11、常運行,但是效率卻不如if……else。這些細微之處都應(yīng)該加以注意。</p><p>  六、本次課程設(shè)計的體會</p><p>  本次課程設(shè)計的最大體會就是:對待程序,要多注意關(guān)注它的細節(jié),不要以程序可以正確運行為目的,而應(yīng)當(dāng)盡可能的提高程序的效率,盡可能的增強程序的可讀性,盡可能的達到人性化的設(shè)計。增加一些諸如可刪除,按鍵音,可重復(fù)輸入數(shù)據(jù),狀態(tài)指示燈等小功能。這些看似容易的小功能實

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

評論

0/150

提交評論