欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 51單片機數字頻率測量儀設計論文下載 [打印本頁]

作者: xujingyao    時間: 2018-7-13 20:05
標題: 51單片機數字頻率測量儀設計論文下載

數字頻率測量儀設計

摘要

數字頻率計主要應用于計算機、通訊設備、音頻視頻等科研領域,數字頻率計是一種用十進制數字,顯示被測信號頻率的數字測量儀器。它的基本 功能是測量正弦信號,方波信號以及其他各種單位時間內變化的物理量。在進行模擬、數字電路的設計、安裝、調試過程中,由于其使用十進制數顯示,測量迅速,顯示直觀,所以經常要用到數字頻率計。

頻率測量中直接測量的數字頻率計主要由四個部分構成:時基(T)電路、輸入 電路、計數顯示電路以及控制電路。在一個測量周期過程中,被測周期信號在輸入電路中經過放大、整形、微分操作之后形成方波信號,加到與非門的另一個輸入端上.該與非門起到主閥門的作用,在與非門第二個人輸入端上加閥門控制信號,控制信號為低電平時閥門關閉,無信號進入計數器;控制信號為高電頻時,閥門開啟整形后的信號進入計數器,若閥門控制信號取1s,則在閥門時間1s內計數器得到的脈沖數N就是被測信號的頻率。

在普通的電子測量儀器中,示波器在進行頻率測量時測量精度較低,誤差較大。 頻譜儀可以準確的測量頻率并顯示被測信號的頻譜,但測量速度較慢,無法實時快速的跟蹤捕捉到被測信號頻率的變化。正是由于頻率計能夠快速準確的捕捉到被測信號頻率的變化,因此,頻率計擁有非常廣泛的應用范圍。

在此次的課程設計中我們將用51單片機來設計數字頻率計。

一:單片機和頻率計的研究現狀
1.單片機系統的研究現狀
在我國,單片機的推廣、普及、開發應用已經經過十多個年頭,在此期間也涌現出了不少單片機的專家和技術成果,使我國在單片機技術應用方面獲得了長足的進步。由于我國單片機發展起步晚,盡管單片機的品種很多,但是在我國使用較為廣泛的是Intel公司的MCS-51單片機系列。近年來32位單片機已進入實用階段。也向多功能、高性能、高速度、低電壓、低功耗、低價格、外圍電路內裝化及片內存儲容量增加的方向發展。
2.頻率計的研究現狀
    頻率測量是電子學測量中最為基本的測量之一。由于頻率信號抗干擾性強,易于傳輸,因此可以獲得較高的測量精度。隨著數字電子技術的發展,頻率測量成為一項越來越普遍的工作,測頻原理和測頻方法的研究正受到越來越多的關注。
數字頻率計是計算機、通訊設備、音頻視頻等科研生產領域不可缺少的測量儀器。它是一種用十進制數字顯示被測信號頻率的數字測量儀器。它的基本功能是測量正弦信號、方波信號及其他各種單位時間內變化的物理量。在進行模擬、數字電路的設計、安裝、調試過程中,由于其使用十進制數顯示,測量迅速,精確度高,顯示直觀,經常要用到頻率計。傳統的頻率計采用測頻法測量頻率,通常由組合電路和時序電路等大量的硬件電路組成,產品不但體積大,運行速度慢而且測量低頻信號不準確。本次采用單片機技術設計一種數字顯示的頻率計,測量準確度高,響應速度快,體積小等優點。
國際國內通用數字頻率計的主要技術參數:1.頻率測量范圍:電子計數器的測頻范圍,低端大部分從10Hz開始;高端則以不同型號的頻率計而異。因此高端頻率是確定低、中、高速計數器的依據。如果裝配相應型號的變頻器,各種類型的數字頻率計的測量上限頻率,可擴展十倍甚至幾十倍。2.周期測量范圍:數字頻率計最大的測量周期,一般為10s,可測周期的最小時間,依不同類型的頻率計而定。對于低速通用計數器最小時間為1ys;對中速通用計數器可小到0.1ys。3.晶體振蕩器的頻率穩定度:是決定頻率計測量誤差的一個重要指標。可用頻率準確度、日波動、時基穩定度、秒級頻率穩定度等指標,來描述晶體振蕩器的性能。4.輸入靈敏度:輸入靈敏度是指在側頻范圍內能保證正常工作的最小輸入電壓。目前通用計數器一般都設計二個輸入通道,即d通道和月通道。對于4通道來說,靈敏度大多為50mV。靈敏度高的數字頻率計可達30mV、20mV。5.輸入阻抗:輸入阻抗由輸入電阻和輸入電容兩部分組成。輸入阻抗可分為高阻(1M//25PF、500k//30PF)和低阻(50)。一般說來,低速通用計數器應設計成高阻輸入;中速通用計數器,測頻范圍最高端低于100MHz,仍設計為高阻輸入;對于高速通用計數器,測頻>100MHz, 設計成低阻 (50Q) 輸入,測頻<100MHz,設計成高阻(500k//30PF)輸入。

二:硬件電路設計
1.單片機周邊電路框圖以及電路設計
    在設計電路的過程中,涉及整體電路設計時,倘若能將整體電路分割為幾部分別設計,就會使思路變得清晰,效率會大大提高。本系統被分為:同步門邏輯控制電路、AT89C52、時鐘脈沖電路、顯示電路。
    在本系統中,等精度測量硬件電路需要一個標準頻率信號。選擇了單片機添加的晶振電路來產生。需要的啟計信號和清零信號由單片機AT89C51來產生。

   




                  


P0口:P0 口是一組8 位漏極開路型雙向I/O 口, 也即地址/數據總線復用口。作為輸出口用時,每位能吸收電流的方式驅動8 個TTL邏輯門電路,對端口P0 寫“1”時,可作為高阻抗輸入端用。在訪問外部數據存儲器或程序存儲器時,這組口線分時轉換地址(低8 位)和數據總線復用,在訪問期間激活內部上拉電阻。在Flash編程時,P0 口接收指令字節,而在程序校驗時,輸出指令字節,校驗時,要求外接上拉電阻。
P1口:P1 是一個帶內部上拉電阻的8 位雙向I/O 口, P1 的輸出緩沖級可驅動(吸收或輸出電流)4 個TTL 邏輯門電路。對端口寫“1”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。與AT89C51 不同之處是,P1.0 和P1.1 還可分別作為定時/計數器2 的外部計數輸入(P1.0/T2)和輸入(P1.1/T2EX),
P2口:P2 是一個帶有內部上拉電阻的8 位雙向I/O 口,P2 的輸出緩沖級可驅動(吸收或輸出電流)4 個TTL 邏輯門電路。對端口P2 寫“1”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。在訪問外部程序存儲器或16 位地址的外部數據存儲器(例如執行MOVX @DPTR 指令)時,P2 口送出高8 位地址數據。在訪問8 位地址的外部數據存儲器(如執行MOVX @RI 指令)時,P2 口輸出P2鎖存器的內容。Flash編程或校驗時,P2亦接收高位地址和一些控制信號。
P3口:P3 口是一組帶有內部上拉電阻的8 位雙向I/O 口。P3 口輸出緩沖級可驅動(吸收或輸出電流)4 個TTL 邏輯門電路。對P3 口寫入“1”時,它們被內部上拉電阻拉高并可作為輸入端口。此時,被外部拉低的P3 口將用上拉電阻輸出電流(IIL)。P3 口除了作為一般的I/O 口線外,更重要的用途是它的第二功能P3 口還接收一些用于Flash閃速存儲器編程和程序校驗的控制信號。
RST:復位輸入。當振蕩器工作時,RST引腳出現兩個機器存儲以上高電平將使單片機復位。
ALE/PROG:當訪問外部程序存儲器或數據存儲器時,ALE(地址存儲允許)輸出脈沖用于鎖存地址的低8 位字節。一般情況下,ALE 仍以時鐘振蕩頻率的1/6 輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數據存儲器時將跳過一個ALE 脈沖。對Flash存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過對特殊功能存儲器(SFR)區中的8EH 單元的D0 位置位,可禁止ALE 操作。該位置位后,只有一條MOVX 和MOVC指令才能將ALE 激活。此外,該引腳會被微弱拉高,單片機執行外部程序時,應設置ALE 禁止位無效。
PSEN:程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當AT89C52 由外部程序存儲器取指令(或數據)時,每個機器存儲兩次PSEN 有效,即輸出兩個脈沖。在此期間,當訪問外部數據存儲器,將跳過兩次PSEN信號。
EA/VPP:外部訪問允許。欲使CPU 僅訪問外部程序存儲(地址為0000H—FFFFH),EA 端必須保持低電平(接地)。需注意的是:如果加密位LB1 被編程,復位時內部會鎖存EA端狀態。如EA端為高電平(接Vcc端),CPU 則執行內部程序存儲中的指令。Flash存儲編程時,該引腳加上+12V 的編程允許電源Vpp,當然這必須是該器件是使用12V編程電壓Vpp。
XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。
XTAL2:來自反向振蕩器的輸出。

時鐘脈沖電路的主要作用是對外發出時序控制信號,在AT89C52芯片上,XTAL1和XTAL2分別為反向放大器的輸入和輸出,其中,當與本試驗線路相同時,即使用內部時鐘方式時,XTAL1和XTAL2必須外接石英晶體和微調電容,其中電容C1、C2對振蕩頻率起穩定的作用,振蕩頻率應在1.2MHz——12MHz。該反向放大器可以配置為片內振蕩器。如采用外部時鐘源驅動器件,XTAL2應不接。有余輸入至內部時鐘信號要通過一個二分頻觸發器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。產生的時鐘信號送至單片機內部的各個部分,時鐘頻率越高,單片機控制器的節拍越快,運算速度也越快。
時鐘電路可以簡單定義如下:
(1).就是產生象時鐘一樣準確的振蕩電路;
(2).任何工作都按時間順序。用于產生這個時間的電路就是時鐘電路。
時鐘電路一般由晶體振蕩器、晶震控制芯片和電容組成。時鐘電路應用十分廣泛,如電腦的時鐘電路、電子表的時鐘電路以及MP3MP4的時鐘電路。如圖3-5所示。      
4.同步門邏輯控制電

同步門邏輯控制電路由D觸發器構成,由它來產生同步門信號Ts。在測試開始后,利用單片機的P1.7作為預置門信號Ts的輸出線。當P1.7=1時,在被測信號的上升沿作用下D觸發器的輸出Q=1,使得單片機的INT0和INT1同時為1,啟動單片機內部的定時/計數器開始工作。其中,T0對被測信號的輸出Q仍然為1,因此兩個計數器并不停止計數,直到隨后而至的待測信號的上升沿到來時,才使得D觸發器的輸出為0,同步門關閉,兩個計數器才同時停止計數。

5.靜態顯示電路

顯示電路是六位數碼管的靜態顯示電路。靜態顯示:各個數碼管在現實過程中持續得到送顯信號,與各數碼管接口的I/O口線是專用的。靜態電路顯示特點:無閃爍,用元器件多,占I/O線多,無須掃描,節省CPU時間,編程簡單。單片機系統擴展LED數碼管時多用共陽LED:共陽數碼管每個段筆畫是用低電平(“0”)點亮的,要求驅動功率很小;而共陰數碼管段筆畫是用高電平(“0”)點亮的,要求驅動功率較大。通常每個段筆畫要串一個數百歐姆的降壓電阻。



原理圖:


  1. <font color="rgb(0, 0, 0)">#include<reg51.h>
  2. #include<intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. /****************定時器設置相關的變量***********************/
  6. unsigned char TL0_temp;              /*暫存TL0的初值*/
  7. unsigned char TH0_temp;              /*暫存TH0的初值*/
  8. #define INT_CLOCK 5 /*INT_CLOCK為定時值,單位為ms ,此處定義為5ms*/
  9. #define CRY_FREQUENCY 12000000 /*CRY_FREQUENCY為晶振頻率,單位為Hz*/

  10. uchar T0count;
  11. uchar timecount;
  12. bit flag;
  13. uint x;







  14. ////////////////////
  15. /***數碼管位選定義*****/
  16. sbit w3 = P2^2;
  17. sbit w4 = P2^3;
  18. sbit w1 = P2^0;
  19. sbit w2 = P2^1;
  20. sbit w5 = P2^4;
  21. sbit w6 = P2^5;



  22.                                                          




  23. /////共陰數碼管段選//////////////////////////////////////////////
  24. uchar table[22]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0XF6,0X38};


  25.                                                                        



  26. /*******************************************
  27. 定時器0初始化函數
  28. /******************************************/
  29. void Timer0_init()
  30. {
  31.               unsigned long T0_temp;                                     /*暫存T0的初始值              */
  32.               T0_temp = 65536-((INT_CLOCK *CRY_FREQUENCY /1000)/12);    /*T0初始值計算公式,參考教科書*/
  33.               TL0_temp = T0_temp & 0xff;
  34.               TH0_temp = T0_temp >> 8;
  35.               TL0 = TL0_temp;
  36.               TH0 = TH0_temp;
  37.               TMOD |= 0x01;
  38.               TR0 = 1;
  39.               ET0 = 1;                                                  /*開定時器0中斷*/

  40. }

  41. /************************
  42. 12M晶振下,延時1MS的函數
  43. ***********************/
  44. void delay(uint ms)
  45. {
  46.               uchar x;
  47.               for(ms;ms>0;ms--)
  48.                             for(x=110;x>0;x--);
  49. }








  50. void display()//顯示函數
  51. {
  52.             

  53.                  
  54.                                           w1=0;P0=table[x/100000];delay(5);//第1位顯示數據            
  55.                                           P0=0x00;w1=1;delay(1);//關閉顯示消除動態掃描陰影
  56.                                           w2=0;P0=table[(x%100000)/10000];delay(5);//第2位顯示數據
  57.                                           P0=0x00;w2=1;delay(1);//關閉顯示消除動態掃描陰影
  58.                                           w3=0;P0=table[((x%10000)/1000)];delay(5);//第3位顯示數據
  59.                                           P0=0x00;w3=1;delay(1);//關閉顯示消除動態掃描陰影
  60.                                           w4=0;P0=table[(((x%1000)/100))];delay(5);//第4位顯示數據
  61.                                           P0=0x00;w4=1;delay(1);//關閉顯示消除動態掃描陰影
  62.                                           w5=0;P0=table[((x%100)/10)];delay(5);//第4位顯示數據
  63.                                           P0=0x00;w5=1;delay(1);//關閉顯示消除動態掃描陰影
  64.                                           w6=0;P0=table[(x%10)];delay(5);//第4位顯示數據
  65.                                           P0=0x00;w6=1;delay(1);//關閉顯示消除動態掃描陰影
  66.             
  67.             




  68. }





  69. void main()
  70. {
  71.               uchar i;
  72.             
  73.               TMOD=0x15;
  74.                 TH0=0;
  75.                 TL0=0;
  76.                 TH1=(65536-49989)/256;
  77.                 TL1=(65536-49989)%256;
  78.                 TR1=1;
  79.                 ET0=1;
  80.                 ET1=1;
  81.                 EA=1;
  82.                 TR0=1;



  83.               while(1)
  84.               {
  85.                             /******每隔一秒鐘計算脈沖數****/
  86.                             display();
  87.                             if(flag==1)
  88.                      {
  89.                        flag = 0;
  90.                        x=(T0count*65536+TH0*256+TL0);
  91.                        timecount=0;
  92.                        T0count=0;               /****T0count清零,準備下一秒的計數***/
  93.                        TH0=0;                                                                                                                                                                                      
  94.                        TL0=0;
  95.                        TR0=1;
  96.                                          
  97.                      }
  98.             
  99.               }


  100. }


  101. void t0(void) interrupt 1 using 0              //計脈沖個數
  102. {
  103. ……………………

  104. …………限于本文篇幅 余下代碼請從51黑下載附件…………
  105. </font>
復制代碼

完整的Word格式文檔51黑下載地址:
論文.zip (112.01 KB, 下載次數: 17)







歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1