<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 頻率計數(shù)器電路

          頻率計數(shù)器電路

          作者: 時間:2023-08-09 來源:電子產(chǎn)品世界 收藏

          在本項目中,我將設(shè)計并演示一個簡單的電路,可用于測量信號的。本項目基于 8051 微控制器,不過您也可以設(shè)計非微控制器版本。

          本文引用地址:http://www.ex-cimer.com/article/202308/449422.htm

          Frequency Counter Circuit Image 1

          簡介

          計是一種用于測量信號頻率的儀器。在科學(xué)術(shù)語中,頻率是指信號每秒的周期數(shù)。通俗地說,信號的頻率表示信號在一定時間內(nèi)的出現(xiàn)率。頻率基本上是一種簡單的計數(shù)系統(tǒng),其計數(shù)時間有限。

          在這里,我們使用兩個定時器和兩個設(shè)計了一個簡單的頻率計數(shù)器系統(tǒng)。其中一個定時器集成電路用于產(chǎn)生時鐘信號,另一個用于產(chǎn)生一秒的限時信號。

          頻率計數(shù)器電路工作原理

          該電路基于頻率的簡單定義,即每秒的周期數(shù)?;旧?,方波發(fā)生器電路用于產(chǎn)生簡單的脈沖波。這些脈沖被輸入 8051 微控制器的定時器/計數(shù)器,并對脈沖數(shù)進(jìn)行計數(shù)。

          在進(jìn)行一些簡單計算后,得到的頻率將以赫茲為單位顯示在 16X2 液晶顯示屏上。

          需要注意的一點是,我使用 Arduino UNO 作為方波源。您既可以使用 Arduino,也可以使用 555 定時器 IC 將其配置為可控多頻振蕩器,從而完全建立自己的方波發(fā)生器。

          頻率計數(shù)器電路圖

          Frequency Counter Circuit Circuit Diagram

          頻率計數(shù)器電路設(shè)計

          由于我使用 Arduino 來產(chǎn)生方波,因此只需要幾行代碼和訪問一個數(shù)字 I/O 引腳。但是,如果你打算使用 555 定時器 IC 構(gòu)建方波發(fā)生器電路,請理解下面的解釋。

          555 定時器電路的主要要求是產(chǎn)生占空比約為 99% 的振蕩信號,使輸出信號的低電平時間值小于高電平時間值。 由于占空比只取決于閾值和放電電阻的值,因此可以通過選擇適當(dāng)?shù)碾娮柚祦碚{(diào)整占空比。


          Schematic of IC 555 as Astable Multivibrator

          占空比的計算公式為 D = (R1+R2)/(R1+2R2)

          將 D 值代入 0.99,可得 R1 的值是 R2 值的 98 倍。因此,R2 的值為 100Ω,R1 的值為 9.8KΩ。實際上,R1 的值為 10KΩ。

          電路設(shè)計的下一步是設(shè)計計數(shù)器電路。我們的要求是測量幾千赫茲的頻率。如電路原理所述,我將使用 8051 的定時/計數(shù)器。事實上,我將同時使用 8051 微控制器的定時器 0 和定時器 1。

          我將使用定時器 0 產(chǎn)生延時,使用定時器 1 計數(shù)來自脈沖發(fā)生器的脈沖。定時器 0 在模式 1 中配置為定時器,而定時器 1 在模式 1 中配置為計數(shù)器。

          代碼

          以下是使用 8051 微控制器的頻率計數(shù)器電路代碼。

          #include<reg51.h>

          #define lcd P1

          sbit rs=P3^0;

          sbit e=P3^1;


          unsigned long z=0;

          void delay (int);

          void display (unsigned char);

          void cmd (unsigned char);

          void init (void);

          void string (char *);

          void intro (void);

          char i=0;


          void delay (int i)

          {

          int j=0;

          for(j=0;j<i;j++)

          {

          TMOD=0x51;

          TH0=0xFC;

          TL0=0x66;

          TR0=1;

          while(TF0==0);

          TR0=0;

          TF0=0;

          }

          }


          void cmd (unsigned char c)

          {

          lcd=c;

          rs=0;

          e=1;

          delay(10);

          e=0;

          }

          void display (unsigned char c)

          {

          lcd=c;

          rs=1;

          e=1;

          delay(10);

          e=0;

          }

          void string (char *c)

          {

          while(*c)

          {

          display(*c++);

          }

          }

          void init (void)

          {

          cmd(0x38);

          cmd(0x01);

            cmd(0x0c);

          cmd(0x80);

          }

          void intro (void)

          {

          cmd(0x80);

          string("  Electronics  ");

          cmd(0xc0);

          string("      Hub      ");

          delay(2000);

          cmd(0x01);

          cmd(0x80);

          string("   Frequency   ");

          cmd(0xc0);

          string("    Counter    ");

          delay(2000);

          cmd(0x01);

          cmd(0x80);

          }


          void main()

          {

          unsigned int temp=0;

          unsigned int temp1=0;

          unsigned int frequency;

          init();

          intro();

          delay(100);

          while(1)

          {

            TMOD=0x51;

          TH1=0;

          TL1=0;

          TR1=1;

          delay(100);

          TR1=0;

          frequency=(TH1*256)+TL1;

          frequency=frequency*10;

           

          ////////////////////////////////////////////////////////////////////////////////////////////////////////////

          if(i==0)

          {

          string("Frequency In Hz");

          i++;

          }

              cmd(0xc5);

          if((frequency>=1) && (frequency<10))

          {

          string("    ");

            temp=frequency*10000;

            temp1=((temp/10000)+48);

            display(temp1);

            }

            else if((frequency>=10) && (frequency<100))

          {

          string("   ");

          temp=frequency*1000;

            temp1=((temp/10000)+48);

            display(temp1);

          temp1=(((temp/1000)%10)+48);

            display(temp1);

          }

          //////////////////////////////////////////////////////////////////////

          else if((frequency>=100) && (frequency<1000))//1234

          {

          string("  ");

          temp=frequency*100;

            temp1=((temp/10000)+48);

            display(temp1);

          temp1=(((temp/1000)%10)+48);

            display(temp1);

          temp1=(((temp/100)%10)+48);

          display(temp1);

          }

          else if((frequency>=1000) && (frequency<10000))//1234

          {

          string(" ");

          temp=frequency*10;

            temp1=((temp/10000)+48);

            display(temp1);

          temp1=(((temp/1000)%10)+48);

            display(temp1);

          temp1=(((temp/100)%10)+48);

          display(temp1);

          temp1=(((temp/10)%10)+48);

          display(temp1);

          }

          else if((frequency>=10000) && (frequency<100000))//12345

          {

          temp=frequency*1;

            temp1=((temp/10000)+48);

            display(temp1);

          temp1=(((temp/1000)%10)+48);

            display(temp1);

          temp1=(((temp/100)%10)+48);

          display(temp1);

          temp1=(((temp/10)%10)+48);

          display(temp1);

          temp1=((temp%10)+48);

          display(temp1);

          }

          else

          {

          string("    0");

          }

          delay(500);

           }

          while(1);

          }

          view rawFrequency_Counter_Circuit_8051.c hosted with ? by GitHub

          頻率計數(shù)器電路操作

          按照電路圖進(jìn)行連接,將 Arduino 產(chǎn)生的脈沖輸入端口 3 引腳 P3.5,即定時器 1 引腳。由于我已將定時器 1 配置為計數(shù)器,因此使用 TCON 位 TR1,我將通過將 TR1 設(shè)置為高電平和低電平來計數(shù)持續(xù)時間約為 100 毫秒的脈沖。脈沖計數(shù)存儲在定時器 1 中,即 TH1 和 TL1 寄存器中。

          要獲得頻率值,必須使用以下公式。

          frequency=(TH1*256)+TL1;

          為了將頻率值轉(zhuǎn)換為赫茲(即每秒周期數(shù)),需要將結(jié)果值乘以 10。然后,通過一些簡單的數(shù)學(xué)運算將結(jié)果值格式化,以便在 16X2 LCD 顯示屏上輕松顯示結(jié)果。

          Frequency Counter Circuit Image 2

          該電路的應(yīng)用

          使用 8051 微控制器的頻率計數(shù)器電路可用于精確測量信號的頻率。

          由于我們對脈沖進(jìn)行計數(shù),因此只能測量方波及其導(dǎo)數(shù)(占空比不同)的頻率。



          關(guān)鍵詞: 計數(shù)器 頻率

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();