標(biāo)題: 初學(xué)者關(guān)于頻率計的一點疑問 [打印本頁]

作者: ldc2000    時間: 2022-12-17 05:41
標(biāo)題: 初學(xué)者關(guān)于頻率計的一點疑問
本帖最后由 ldc2000 于 2022-12-17 05:43 編輯

前兩天學(xué)了51定時器計數(shù)器和中斷,然后看到論壇里有關(guān)頻率計的好幾個例子,看得有點懵。
現(xiàn)在我的問題是:為什么加那么多復(fù)雜的電路?51本身就有計數(shù)器,為什么不直接把信號輸入到51的中斷腳上,或隨便哪個I/O腳,比如P3^2 INT0,然后讓這個中斷捕捉信號的下降沿,每捕捉到一次變量++,一秒內(nèi)捕捉到多少個下降沿就是多少頻率唄。按用12M晶振算,測量1MHz以下的頻率應(yīng)該沒問題吧?信號弱的頂多加個放大電路

我這個想法是不是太簡單了?請大佬指教

作者: Hephaestus    時間: 2022-12-17 11:12
想法不錯,但是想法和實際產(chǎn)品的距離有多大,要自己做一遍才會知道。
作者: ldc2000    時間: 2022-12-17 11:42
Hephaestus 發(fā)表于 2022-12-17 11:12
想法不錯,但是想法和實際產(chǎn)品的距離有多大,要自己做一遍才會知道。

是什么原因呢,是51的反應(yīng)速度跟不上嗎
作者: coody_sz    時間: 2022-12-17 11:53
我做頻率計一直是用的51,特別是STC的1T51,計數(shù)器可以計數(shù)的最高頻率為主頻的一半,比如我常用溫補晶振32.768MHz做時鐘做頻率計/周期計,可以計數(shù)到16MHz,精度可達0.1ppm。MCU用PCA高速輸出高電平1秒低電平10ms信號接INT0 INT1分別對Timer0和Timer1做門控計數(shù),同時允許下降沿中斷,高電平計數(shù),低電平停止計數(shù),進外部中斷讀取計數(shù)值即是頻率。輸入用不同的方式分頻,0~50MHz分辨率是1Hz,2.4GHz分辨率是100Hz。
作者: ldc2000    時間: 2022-12-17 12:32
coody_sz 發(fā)表于 2022-12-17 11:53
我做頻率計一直是用的51,特別是STC的1T51,計數(shù)器可以計數(shù)的最高頻率為主頻的一半,比如我常用溫補晶振32. ...

我 我是新手,剛百度了PPM和分頻,1T51是啥?單片機型號?可以2個時鐘周期運算1次的?沒查到。
不分頻的話可以嗎,分頻的作用是什么呢,會不會加大誤差?因為我想測的信號頻率頂多也就幾十KHz,不過這個信號應(yīng)該是復(fù)合的,即有低頻也有高頻,還沒想好怎么測
作者: 老愚童63    時間: 2022-12-17 13:19
ldc2000 發(fā)表于 2022-12-17 12:32
我 我是新手,剛百度了PPM和分頻,1T51是啥?單片機型號?可以2個時鐘周期運算1次的?沒查到。
不分頻的 ...

只要脈沖波形規(guī)則(方波)也就是有陡峭的下降沿,電平和頻率符合單片機要求就可以直接使用。
作者: 王秋冬    時間: 2022-12-17 14:00
老愚童63 發(fā)表于 2022-12-17 13:19
只要脈沖波形規(guī)則(方波)也就是有陡峭的下降沿,電平和頻率符合單片機要求就可以直接使用。

能不能發(fā)個程序,讓我們學(xué)習(xí)學(xué)習(xí)。感謝。
作者: angmall    時間: 2022-12-17 15:49
王秋冬 發(fā)表于 2022-12-17 14:00
能不能發(fā)個程序,讓我們學(xué)習(xí)學(xué)習(xí)。感謝。

給你一個。用89C51單片機制作了一個頻率計



  1. /****************************************************
  2. 名稱:頻率計,用8位數(shù)碼管顯示

  3. 說明:用計數(shù)器1對外部頻率信號進行計數(shù),用定時器0每隔
  4.           一秒查詢計數(shù)器1的累計值,就是信號頻率。
  5.         89c52 主頻11.0592M         在開發(fā)板上測試通過
  6. ****************************************************/

  7. #include <REGX52.H>
  8. #include "SMG.h"

  9. unsigned long num;           //        儲存計算頻率值
  10. unsigned char T1_count;         //計數(shù)器1計滿65536的次數(shù)

  11. void init()
  12. {
  13.         TMOD = 0x51;// 0101 0001
  14.         TH0 = 0x4c;// 初值=65536 - 11.0592/12*50000;定時50ms
  15.         TL0 = 0x00;
  16.         PT0 = 1;
  17.         EA = ET1 = ET0 =1;
  18.         TR0 = TR1 = 1;
  19.         TI = 1;
  20. }
  21. void main()
  22. {
  23.         init();
  24.         while(1)
  25.         {
  26.                  smgxs8w(num);         //數(shù)碼管顯示8位數(shù)
  27.         }
  28. }

  29. void T1_int() interrupt 3        //計數(shù)65536次觸發(fā)一次
  30. {
  31.         T1_count++;        
  32. }

  33. void T0_int() interrupt 1        //50ms觸發(fā)一次
  34. {
  35.         static unsigned char T0_count;
  36.         TR1 = 0;
  37.         TH0 = 0x4c;//定時50ms
  38.         TL0 = 0x13;        //理論值0x00,實測0x13最準(zhǔn)
  39.         if(++T0_count == 20)          //達到1秒
  40.         {
  41.                 num = T1_count *65536 + TH1*256+TL1;
  42.                 TH1 = TL1 = 0;
  43.                 T1_count = 0;
  44.                 T0_count = 0;
  45.         }         
  46.         TR1 = 1;

  47. }

復(fù)制代碼





作者: ldc2000    時間: 2022-12-17 17:09
angmall 發(fā)表于 2022-12-17 15:49
給你一個。用89C51單片機制作了一個頻率計

哈哈哈,作過校驗沒有,精度怎么樣?
作者: ldc2000    時間: 2022-12-17 17:15
老愚童63 發(fā)表于 2022-12-17 13:19
只要脈沖波形規(guī)則(方波)也就是有陡峭的下降沿,電平和頻率符合單片機要求就可以直接使用。

感謝感謝
作者: ldc2000    時間: 2022-12-17 17:36
coody_sz 發(fā)表于 2022-12-17 11:53
我做頻率計一直是用的51,特別是STC的1T51,計數(shù)器可以計數(shù)的最高頻率為主頻的一半,比如我常用溫補晶振32. ...

除了STC12系列,其他的還有能工作在1T模式下的嗎
作者: ldc2000    時間: 2022-12-18 11:08
有沒有大佬還有別的看法?
作者: TTQ001    時間: 2022-12-20 09:51
為了創(chuàng)造實用的設(shè)計,我們需要添加信號調(diào)理電路、濾波電路和補償電路等。




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