久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5248|回復: 0
打印 上一主題 下一主題
收起左側

ARM7 LPC2138數字頻率計的設計源碼與報告

[復制鏈接]
跳轉到指定樓層
樓主
ID:418561 發表于 2018-10-31 15:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
摘要
在當代電子設備中運用中,經常要測量一個波形的頻率,然后對其進行分析研究。為了測量頻率,就要用到頻率計。在傳統的電子測量儀器中,示波器在進行頻率測量時測量精度較低,誤差較大。頻譜儀可以準確的測量頻率并顯示被測信號的頻譜,但測量速度較慢,無法實時快速的跟蹤捕捉到被測信號頻率的變化。正是由于頻率計能夠快速準確的捕捉到被測信號頻率的變化,因此,頻率計擁有非常廣泛的應用范圍。 數字頻率計的設計包括時基電路、整形電路、控制電路和計數顯示電路四部分組成。 由時基電路產生一標準時間信號控制閥門,調節時基電路中的電阻可產生需要的標準時間信號。信號輸入整形電路中,經過整形,輸出一方波,通過閥門后,計時器對其計數。當計數完畢,時基電路輸出一個上升沿,使鎖存器打開,計數器計數結果輸入譯碼器,從而讓顯示器顯示,達到測量頻率的目的。
目錄
設計原理及方案選擇
1.1、設計原理
1.2、方案選擇
程序設計及原理圖
2.1、原理圖設計
2.2、程序設計
3、仿真結果
4、實物調試
  4.1、調試結果
4.2、調試中遇到的問題
5、設計小結
  • 設計原理及方案選擇

1.1、設計原理

頻率就是周期性信號在單位時間(1s)內變化的次數。若在一定時間間隔T內測得這個周期性信號的重復變化次數為N,則其頻率可表示為f=N/T。其中f為被測信號的頻率,N為計數器所累計的脈沖個數,T為N個脈沖所產生的時間。計數器所記錄的結果就是被測信號的頻率計數法又稱測頻法,是將被測信號通過一個定時閘門加到計數器進行計數的方法,如果閘門打開的時間為T,計數器得到的計數值為N1,則被測頻率為f=N1/T。改變時間T,則可改變測量頻率范圍。設在T期間,計數器的精確計數值應為N,根據計數器的計數特性可知,N1的絕對誤差是N1=N+1,N1的相對誤差為ΔN1=(N1-N)/N=1/N。由N1的相對誤差可知,N的數值愈大,相對誤差愈小,成反比關系。因此,在f以確定的條件下,為減少N的相對誤差,可通過增大T的方法來降低測量誤差。當T為某確定值時(通常取1s),則有f1=N1,而f=N,故有f1的相對誤差:Δf1=(f1-f)/f=1/f 從上式可知f1的相對誤差f成反比關系,即信號頻率越高,誤差越小;而信號頻率越低,則測量誤差越大。因此測頻法適合用于對高頻信號的測量,頻率越高,測量精度也越高。

1.2、方案選擇

計時法又稱為測周期法,測周期法使用被測信號來控制閘門的開閉,而將標準時基脈沖通過閘門加到計數器,閘門在外信號的一個周期內打開,這樣計數器得到的計數值就是標準時基脈沖外信號的周期值,然后求周期值的倒數,就得到所測頻率值。但由于用計時法所獲得的信號周期數據,還需要求倒數運算才能得到信號頻率,而求倒數運算用中小規模數字集成電路較難實現,因此,計時法不適合本實驗要求。

計數法則適合于對較高頻信號的測量。測頻法的測量誤差與信號頻率成反比,信號頻率越低,測量誤差就越大,信號頻率越高,其誤差就越小。但用測頻法所獲得的測量數據,在閘門時間為一秒時,不需要進行任何換算,計數器所計數據就是信號頻率。根據本設計要求的性能與技術指標,首先需要確定能滿足這些指標的頻率測量方法。因此,本實驗所用的頻率測量方法是測頻法。


圖1.1原理框圖及其波形圖


2.1原理圖設計

圖2.1 proteus電路圖

2.2 程序設計

圖2.2 程序流程圖

3、仿真結果

  利用proteus和Keil軟件,將程序編譯正確后,并且生成HEX文件,然后用protest仿真。修改發射頻率,觀察結果。



圖3.1仿真結果

4、實物調試

4.1調試結果

當信號發射器輸入的頻率為2kHz方波時,LCD顯示屏顯示也為2k,發射頻率為3kHz時,顯示屏顯示3k,由此可得,實物實現了功能,并且達到了相應的精度。


4.1實物調試

4.2調試中遇到的問題

由于我們需要將編譯好的程序燒錄進入我們的板子,所以當時不是很清楚燒錄程序的用法,所以開始出現LCD沒有任何顯示,我們一直以為是板子和顯示屏的問題,所以浪費了很多時間。后來在了解清楚程序的使用方法后,我們成功的燒錄進去了程序,然后連接好我們之前焊接好的局部程序電路板,實行調試,取得了最后的成功。


5、設計總結

本次設計讓我體會到設計程序,連接原理圖,調試的苦與甜,設計是我們必須得技能,而這次實習恰恰給了我們一個很好的實際操作的機會,從圖書館找資料設計程序、連接原理圖,在這個過程中我學到了很多新的知識,并且對keil和proteus的應用更加的嫻熟,感受到了這些軟件的強大功能,當調試成功的時候感覺很神奇,很不可思議,同時更加深了我對這些知識的印象。

在設計過程中,因為我們設置定時器為計數模式。所以最高計數頻率為時鐘頻率(44.2368MHz)的1/4(11.0592MHz),但是我們又100分頻了的,所以最終只能測得110kHz。由于顯示器的問題,前面固定字符已經占了很多位,所以只能到9999Hz。

在設計過程中,不能急躁,設計和調試要一步一步來,這次在設計過程中,由于剛開始對LPC2138的管腳功能不熟,設計過程中老是混淆,經過查資料認真學習才辨別清楚,特別是程序修改的時候,一定不能馬虎,一個字母不對都編譯失敗,在最后的調試過程中,因為仿真結果已經準確無誤,所以調試不出結果讓人特別心急,還耽擱了了時間,建議能多一些好的開發板,若不是因為開發板和顯示器有問題,也許我們的進度能更快一些。


LPC2138源程序:
  1. #include"LPC213x.h"
  2. #define uint unsigned int
  3. #define uchar  unsigned char
  4. int g_sample_cnt;
  5. #define RS              1<<5
  6. #define RW              1<<6
  7. #define EN               1<<7
  8. #define KEY_MC    (1<<31)
  9. #define KEY_RST    (1<<30)
  10. #define KEY_NIGHT    (1<<29)
  11. uchar num,i;
  12. uchar  table1[]={"frequency:    hz      "};
  13. uchar  table2[]={"                      "};
  14. uint HZ[]={                   0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x00,           0x0F,0x09,0x0F,0x09,0x0F,0x09,0x11,0x00,              
  15. 0x0F,0x09,0x09,0x0F,0x09,0x09,0x0F,0x00};            
  16. void DelayNs(uint NS)
  17. {  uint i;
  18.    for(;NS>0;NS--)   
  19.    for(i=0;i<500;i++);
  20. }
  21. void writecom(uint com)
  22. {
  23.   IO0CLR=RS;
  24.   IO0PIN=(IO0PIN&0X00FF)+(com<<8);   
  25.   DelayNs(1);
  26.   IO0SET=EN;
  27.   IO0CLR=EN;
  28. }
  29. void writedata( uint data)
  30. {
  31.   IO0SET=RS;
  32.   IO0PIN=(IO0PIN&0X00FF)+(data<<8);     //P0=data;
  33.   DelayNs(1);
  34.   IO0SET=EN;
  35.   IO0CLR=EN;
  36. }
  37. void init()
  38. {
  39.    PINSEL0=0X00000000;
  40.    IO0DIR =0XFFFF;
  41. IO0CLR=RW;
  42.    IO0CLR=EN;
  43.    writecom(0x38);
  44.    writecom(0x0c);
  45.    writecom(0x06);
  46.    writecom(0x01);
  47. }
  48. int mile=0,premile=0;
  49. int night=0;
  50. int lowmode=0;
  51. int price=0;
  52. int lowmodefirsttime=0;
  53. int price_low=0;
  54. static int lowmodetime=0;
  55. void __irq IRQ_Timr0(void)
  56. {

  57.               table1[10]=g_sample_cnt/1000%10+'0';              table1[11]=g_sample_cnt/100%10+'0';
  58. table1[12]=g_sample_cnt/10%10+'0';
  59.               table1[13]=g_sample_cnt%10+'0';
  60.               writecom(0x80);
  61.               for(num=0;num<21;num++)
  62.               {
  63.                             writedata(table1[num]);
  64.                             DelayNs(1);
  65.               }
  66.               writecom(0x80+0x40);
  67.               for(num=0;num<21;num++)
  68.               {
  69.                             writedata(table2[num]);
  70.               }
  71.     g_sample_cnt=0;
  72.               T0IR = 0x01;   
  73.               VICVectAddr = 0x00;  
  74. }

  75. /**********************************************************
  76. void Timer0Init(void)
  77. {
  78.               //Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz
  79.               //Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz
  80.               T0PR = 99;                                                  // 設置定時器0分頻為100分頻,得110592Hz
  81.               T0MCR = 0x03;                                                           // 匹配通道0匹配中斷并復位T0TC
  82.               T0MR0 = 150350;                                              // 比較值(1S定時值)
  83.               T0TCR = 0x03;                                                           // 啟動并復位T0TC
  84.               T0TCR = 0x01;
  85. VICIntSelect = 0x00;  
  86.               VICVectCntl0 = 0x20|4;
  87.               VICVectAddr0 = (unsigned long)IRQ_Timr0;
  88.               VICIntEnable = 1<<4;      
  89. }
  90. void main()
  91. {
  92.   init();
  93.   writecom(0x80);
  94.   DelayNs(100);
  95.   Timer0Init();
  96.   for(num=0;num<19;num++)
  97.   {
  98.                 writedata(table1[num]);
  99.               DelayNs(1);
  100.   }
  101.   //writecom(0x40);
  102. // for(num=0;num<24;num++)
  103. // {
  104. //   writedata(HZ[num]);
  105. // }
  106.   writecom(0x80+0x40);
  107.   for(num=0;num<19;num++)
  108.   {
  109.                 writedata(table2[num]);
  110.   }

  111.                 PINSEL1 &=0x00ffffff;
  112.               //IODIR  =0xe83fffff;
  113.               IO1DIR  |=0xff000000;
  114.   //writedata(0x00);
  115.   //writedata('4');
  116.   //writedata(0x01);
  117.   //writedata('2');
  118.   //writedata('6');
  119.   //writedata(0x02);
  120.               IO1DIR&=~KEY_MC;
  121.               IO1DIR&=~KEY_RST;
  122.               IO1DIR&=~KEY_NIGHT;
  123.               mile=325400;
  124.               lowmodetime=lowmodefirsttime=price=premile=mile=0;
  125.                 while(1)
  126.                 {
  127.                             #if 1
  128.                             if((IO1PIN&KEY_MC)==0)
  129.                             {
  130.                                           g_sample_cnt+=1;
  131.                                           //DelayNs(1);
  132.                                           while((IO1PIN&KEY_MC)==0);
  133.                             }
  134.                             #endif
  135.                 }

  136. }
復制代碼

完整的Word格式文檔51黑下載地址:
簡易數字頻率計的設計.docx (498.7 KB, 下載次數: 55)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人影院网站ww555久久精品 | 欧日韩不卡在线视频 | 亚洲精品乱码 | 亚洲中午字幕 | 国产精品久久久久久久久图文区 | av黄色在线播放 | 国产在线中文字幕 | 高清久久久 | 中文字幕av一区 | 国产精品国产a级 | 久久久国 | 国产亚洲一区二区三区 | 中文字幕在线视频免费视频 | 天堂综合网久久 | 波多野结衣av中文字幕 | 久久久久电影 | 亚洲视频a| 一区二区三区视频在线观看 | 国精产品一区一区三区免费完 | 日韩在线免费 | 国产中文视频 | 欧美日韩在线观看一区二区三区 | 亚洲国产激情 | 国产成人在线视频 | 久久国内精品 | 久久天堂网 | 美女黄网站| 欧美a在线 | 国产精品久久久久久久久久 | 99精品99久久久久久宅男 | 日韩爱爱网 | 国产免费一区二区三区 | 日韩精品一区二区三区高清免费 | 欧美日韩国产一区二区 | 日本免费黄色一级片 | 亚洲 欧美 另类 日韩 | 不卡在线一区 | 色片在线观看 | 成人欧美一区二区三区黑人孕妇 | 国产精品一区二区三区在线播放 | 亚洲精品国产综合区久久久久久久 |