频率计数器电路

发布时间:2023-08-09  

在本项目中,我将设计并演示一个简单的电路,可用于测量信号的。本项目基于 8051 微控制器,不过您也可以设计非微控制器版本。

本文引用地址:

Frequency Counter Circuit Image 1

简介

计是一种用于测量信号频率的仪器。在科学术语中,频率是指信号每秒的周期数。通俗地说,信号的频率表示信号在一定时间内的出现率。频率基本上是一种简单的计数系统,其计数时间有限。

在这里,我们使用两个定时器和两个设计了一个简单的频率计数器系统。其中一个定时器集成电路用于产生时钟信号,另一个用于产生一秒的限时信号。

频率计数器电路工作原理

该电路基于频率的简单定义,即每秒的周期数。基本上,方波发生器电路用于产生简单的脉冲波。这些脉冲被输入 8051 微控制器的定时器/计数器,并对脉冲数进行计数。

在进行一些简单计算后,得到的频率将以赫兹为单位显示在 16X2 液晶显示屏上。

需要注意的一点是,我使用 Arduino UNO 作为方波源。您既可以使用 Arduino,也可以使用 555 定时器 IC 将其配置为可控多频振荡器,从而完全建立自己的方波发生器。

频率计数器电路图

Frequency Counter Circuit Circuit Diagram

频率计数器电路设计

由于我使用 Arduino 来产生方波,因此只需要几行代码和访问一个数字 I/O 引脚。但是,如果你打算使用 555 定时器 IC 构建方波发生器电路,请理解下面的解释。

555 定时器电路的主要要求是产生占空比约为 99% 的振荡信号,使输出信号的低电平时间值小于高电平时间值。 由于占空比只取决于阈值和放电电阻的值,因此可以通过选择适当的电阻值来调整占空比。


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Ω。

电路设计的下一步是设计计数器电路。我们的要求是测量几千赫兹的频率。如电路原理所述,我将使用 8051 的定时/计数器。事实上,我将同时使用 8051 微控制器的定时器 0 和定时器 1。

我将使用定时器 0 产生延时,使用定时器 1 计数来自脉冲发生器的脉冲。定时器 0 在模式 1 中配置为定时器,而定时器 1 在模式 1 中配置为计数器。

代码

以下是使用 8051 微控制器的频率计数器电路代码。

#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

频率计数器电路操作

按照电路图进行连接,将 Arduino 产生的脉冲输入端口 3 引脚 P3.5,即定时器 1 引脚。由于我已将定时器 1 配置为计数器,因此使用 TCON 位 TR1,我将通过将 TR1 设置为高电平和低电平来计数持续时间约为 100 毫秒的脉冲。脉冲计数存储在定时器 1 中,即 TH1 和 TL1 寄存器中。

要获得频率值,必须使用以下公式。

frequency=(TH1*256)+TL1;

为了将频率值转换为赫兹(即每秒周期数),需要将结果值乘以 10。然后,通过一些简单的数学运算将结果值格式化,以便在 16X2 LCD 显示屏上轻松显示结果。

Frequency Counter Circuit Image 2

该电路的应用

使用 8051 微控制器的频率计数器电路可用于精确测量信号的频率。

由于我们对脉冲进行计数,因此只能测量方波及其导数(占空比不同)的频率。

文章来源于:电子产品世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>