本站搬迁,新网址https://via-dean.com即将涵盖更多内容,敬请访问

Arduino频率计数器电路

 二维码 17
发表时间:2019-01-13 21:20


在这个项目中,我将设计并演示一个简单的频率计数器电路,它可用于测量信号的频率。该项目基于8051微控制器,但您可以设计非微控制器版本。

介绍

频率计数器是用于测量信号频率的仪器。在科学术语中,频率是信号每秒的周期数。在外行术语中,信号的频率表示在一定时间内信号的发生率。频率计数器基本上是简单的计数器系统,其计数时间有限。

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


频率计数器电路工作原理

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

执行一些简单的计算后,得到的频率在16X2 LCD显示器以赫兹的形式显示。

需要注意的一点是,我使用Arduino UNO作为方波来源。您可以使用Arduino或使用555定时器IC完全构建自己的方波发生器,将其配置为一个稳定的多路振荡器。


频率计数器电路图

频率计数器电路设计

由于我使用Arduino生成方波,我只需要几行代码并访问单个数字I / O引脚。但如果您打算使用555定时器IC构建方波发生器电路,请理解以下说明。

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

占空比由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);

}


频率计数器电路操作

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

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

频率=(TH1 * 256)+ TL1;

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


该电路的应用

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

由于我们计算脉冲,我们只能测量方波及其衍生物的频率(具有不同的占空比)。




文章分类: 平台创客Arduino
分享到:
联系电话:18112932078
微信号:Via_Dean
邮箱:kiyo84001@163.com
会员登录
登录
我的资料
留言
回到顶部