频率计数器,顾名思义,是一种电子设备或元件,用来测量信号的频率。对于重复的电子信号,频率计数器测量该信号中的脉冲数。
我们通常使用示波器来描述信号,计算信号的时间周期,最后将其转换为计算信号的频率。但是,示波器非常昂贵,每个人都买不起。
因此,可以建立一个简单的数字频率计数器,它可以方便地测量时钟信号的频率。
在这个项目中,一个基于Arduino的数字频率计数器被设计用来测量传入信号的频率。
线路图
图Arduino频率计数器电路图
组件
Arduino部分
信号发生器部分
- NE555定时集成电路
- 10 KΩ电位器X
- 100nf电容(代码:104)
- 1µF / 16V电解电容
- 5V电源(12V不合适,可能损坏Arduino板)
- 连接电线
- 原型板
组件描述
Arduino UNO:基于Arduino UNO的ATmega 328P单片机是本项目的主要部分。它捕获传入信号的时间周期并计算信号的频率。
555定时集成电路在本项目中,555定时器IC被用作脉冲发生器,即它工作在稳定模式下。
16 × 2液晶显示器: 16×2 LCD模块用于显示关键信息,如欢迎(或任何自定义)消息和计算出的信号频率。
电路设计
使用Arduino UNO的频率计数器的设计可以分为两部分:Arduino部分是对信号的信息进行处理,signal Generator部分是产生待测频率的信号。
Arduino电路
项目的Arduino部分包括Arduino UNO板和一个16 × 2液晶显示器。LCD (Vss和Vdd)的引脚1和2分别接地和5V电源。引脚3 (Vee)用于调节显示器的对比度,连接一个电位器。
LCD的引脚4和6 (RS和E)连接到Arduino的数字I/O引脚2和3。LCD引脚5 (RW)已接地。
引脚11 ~ 14 (D4 ~ D7)即LCD的数据引脚连接到Arduino的数字I/O引脚4 ~ 7。LCD的引脚15和16是背光led的供电引脚,分别连接到地面和5V(引脚16到5V通过1KΩ电阻)。
信号发生器部分
一个555定时器在此项目中用于生成脉冲。因此,它是在稳定运行模式下运行。此模式的连接如下所示。
引脚4和8(复位和Vcc)连接到5V电源。引脚1 (GND)已接地。引脚2和6(触发器和阈值)短路。
一个10KΩ电位器连接在电源和引脚7(放电)之间。电位器的雨刷端接在引脚7上。
类似地,另一个10KΩ电位器连接在引脚7和6之间。这次,电位器的雨刷连接到引脚6上。
引脚6与地之间连接100nF电容。通过选择这个电阻,输出信号的频率,可以从引脚3(输出),将在480赫兹到48 KHz的范围内。
可选地,可连接1 μ F电容,使用其产生的信号频率将在50 Hz到4.8 KHz的范围内。
请注意:信号发生器电路的电源只应是5V。这是因为,产生的脉冲电压将与输入电压相同,而Arduino UNO板(准确地说,是ATmega 328p微控制器)在其输入引脚上可以容忍5.5V的最大电压。
项目工作原理
本课题的目的是利用Arduino UNO和555定时器IC设计一个简单的数字频率计数器电路,该课题的工作非常简单,在这里进行说明。
如前所述,555定时器IC被配置为在稳定模式下运行。因此,555定时器IC(或更确切地说是信号发生器电路)的输出是一个具有可变频率的脉冲(使用电位器可变)。该脉冲作为输入信号,通过Arduino UNO的一个数字I/O引脚给出。
在Arduino中,我们使用了一个名为“pulseIn()”的函数;函数pulseIn可用于读取数字I/O引脚上的LOW或HIGH脉冲,并以微秒为单位返回脉冲长度。
例如,如果pulseIn函数用于读取引脚上的HIGH脉冲,它将等待引脚进入HIGH。一旦引脚走到HIGH,它就启动计时器,一直运行到引脚走到LOW。然后返回这个HIGH脉冲的持续时间(以微秒为单位)。
在我们的项目中,我们正在计算高脉冲和低脉冲的持续时间,并将它们相加,我们得到输入信号的周期。这个值的倒数给出了显示在LCD上的信号频率。
请注意:
- 如前所述,555层产生的信号的频率范围可以通过改变电容的值来改变。
- Arduino只能检测到传入脉冲,即传入信号可以是正方形或矩形。并非所有的测试信号都可以采用脉冲形式。因此,我们可以使用施密特触发器将任何传入信号转换为脉冲。
- 的输出也要注意施密特触发器集成电路(74LS14)是输入信号的反向信号。
应用程序
- 设计了一个简单的频率计数器,使用简单的组件,可以用来测量脉冲的频率,而不需要示波器。
- 通过选择合适的元件,可以测量多个频率范围。
- 通过在生成的信号和Arduino之间添加Schmitt Trigger,可以计算出所有类型测试信号的频率。
14的反应
我执行了电路,但我得到的读数是“inf Hz”,可能是什么问题????谢谢:)
嗨,如果你得到inf Hz,这意味着脉冲的持续时间(高脉冲+低脉冲)非常接近于0。试着检查一次脉冲发生器电路。
你好先生/女士
我在这个项目上工作的所有连接都按照上面的电路图。但它有一些错误,有时它显示频率,过了一段时间它只是显示中频,我试图检查所有的可能性的错误,但它似乎很好。请帮我解决一下
关于
希望你能尽快回复
嗨,如果你得到inf Hz,这意味着脉冲的持续时间(高脉冲+低脉冲)非常接近于0。试着检查一次脉冲发生器电路。
我不想用LCD显示,怎么能在电脑上显示
pulsePin = 8;//输入信号连接到Arduino的8脚
int pulseHigh;//输入脉冲的高时间
int pulseLow;//输入脉冲的低时间
浮动pulseTotal;//获取传入脉冲的总时间
浮动频率;/ /计算频率
无效的设置()
{
//把你的设置代码放在这里,运行一次:
Serial.begin (9600);
}
无效循环()
{
pulseHigh = pulseIn(pulsePin, HIGH);
pulseLow = pulseIn(pulsePin, LOW);
pulseTotal = pulseHigh + pulsellow;//脉冲的时间周期,单位为微秒
frequency = 1000000 / pulseTotal;//频率单位为赫兹(Hz)
并同时(频率);
系列。println(“赫兹”);
延迟(500);
}
这里用的是哪个计时器?我的意思是如上所述,当使用pulseIn()函数时,定时器在.....上得到这里哪个计时器开了?
你好,
我继续创建了LCD屏幕硬件输出,然后信号产生硬件,它像一个魅力,除了sign on频率是负的。这是硬件问题还是软件问题?任何关于解决这个问题的建议都是有帮助的。
我也有同样的问题。
我们怎么能说555 IC定时器正在产生信号
最好的检查方法是使用示波器。
早上好,
我怎样才能用天线接收信号?
我想检查一个来自433兆赫的远程信号。
谢谢你!
我正在使用一个外部设备来输入arduino电路。读取停止在200kHz -它会偶尔闪烁到250kHz,然后回到200kHz。有办法解决这个问题吗?试着用这个读数把东西调整到262kHz。较低的频率在输入时似乎工作正常。
连接到引脚6和7的电位器在电路的信号产生部分用于什么?