几乎每个电子爱好者都必须面对一个场景,即他或她必须测量由时钟,计数器或计时器生成的信号的频率。我们可以使用示波器来完成这项工作,但并非所有人都能负担得起示波器。我们可以购买用于测量频率的设备,但所有这些设备都很昂贵,并不适合所有人。考虑到这一点,我们将使用Arduino Uno和Schmitt触发门设计一个简单而有效的频率计数器。
这款Arduino频率计数器具有成本效益,并且易于制造,我们将使用ARDUINO UNO来测量信号的频率,UNO是这里项目的核心。
为了测试频率计,我们将制作一个虚拟信号发生器。该伪信号发生器将使用555定时器芯片制成。计时器电路生成方波,该方波将提供给UNO进行测试。
一切就绪后,我们将拥有一个Arduino频率计和一个方波发生器。Arduino还可以用于生成其他类型的波形,例如正弦波,锯齿波等。
所需组件:
- 555定时器IC和74LS14施密特触发器门或非门。
- 1KΩ电阻(2个),100Ω电阻
- 100nF电容器(2个),1000µF电容器
- 16 * 2 LCD,
- 47KΩ电位器,
- 面包板和一些连接器。
电路说明:
下图显示了使用Arduino进行频率测量的电路图。电路很简单,LCD与Arduino相连以显示测得的信号频率。“ Wave Input”将进入信号发生器电路,从该电路我们将信号馈送到Arduino。施密特触发器门(IC 74LS14)用于确保仅将矩形波馈入Arduino。为了滤除噪声,我们在电源两端增加了两个电容器。该频率计可以测量高达1 MHz的频率。
信号发生器电路和施密特触发器的说明如下。
使用555定时器IC的信号发生器:
首先,我们将讨论基于555 IC的方波发生器,或者我应该说555 Astable Multivibrator。该电路是必需的,因为在安装了频率计的情况下,我们必须有一个频率已知的信号。没有这个信号,我们将永远无法分辨频率计的工作状态。如果我们具有已知频率的平方,则可以使用该信号来测试Arduino Uno频率计,并且可以对其进行调整以调整精度,以防出现任何偏差。下图是使用555定时器IC的信号发生器的图片 :
下面给出了非稳态模式下555的典型电路,从中我们得出了上述给定的信号发生器电路。
输出信号频率取决于RA,RB电阻和电容器C。
频率(F)= 1 /(时间段)= 1.44 /((RA + RB * 2)* C)。
在此,RA和RB是电阻值,C是电容值。通过将电阻和电容值放在上述公式中,我们可以得出输出方波的频率。
可以看到,上图的RB由信号发生器电路中的一个电位器代替;这样做是为了使我们可以在输出端获得可变频率的方波以进行更好的测试。为简单起见,可以用一个简单的电阻器代替电位器。
施密特触发器门:
我们知道,所有测试信号都不是方波或矩形波。我们有三角波,齿波,正弦波等。由于UNO只能检测方波或矩形波,因此我们需要一种可以将任何信号更改为矩形波的设备,因此我们使用施密特触发器门。施密特触发器门是一种数字逻辑门,设计用于算术和逻辑运算。
该门根据输入电压电平提供输出。施密特触发器具有THERSHOLD电压电平,当施加到栅极的INPUT信号的电压电平高于逻辑门的THRESHOLD时,OUTPUT变为高电平。如果INPUT电压信号电平低于THRESHOLD,则门的OUTPUT将为LOW。通常,我们通常不会单独获得施密特触发器,施密特触发器之后总是有一个非门。施密特触发器的工作原理在此处进行了说明:施密特触发器门
我们将使用74LS14芯片,该芯片中有6个施密特触发器门。这些六个门在内部进行了连接,如下图所示。
的倒立施密特触发器门的真值表是在下面的图显示,与此我们必须为在其端子反相的正和负的时间段的UNO编程。
现在,我们将任何类型的信号馈送到ST门,在输出端将有一个反相时间周期的矩形波,我们会将这个信号馈送到UNO。
Arduino频率计数器代码说明:
使用arduino进行此频率测量的代码 非常简单并且易于理解。在这里,我们解释了 pulseIn 功能,该功能主要负责测量频率。Uno具有特殊的函数 pulseIn , 它使我们能够确定特定矩形波的正态持续时间或负态持续时间:
Htime = pulseIn(8,HIGH); Ltime = pulseIn(8,LOW);
给定的功能测量Uno的PIN8上出现高电平或低电平的时间。因此,在单个波动周期中,我们将获得以微秒为单位的正电平和负电平的持续时间。该 pulseIn 功能测量微秒的时间。在给定信号中,我们的高时间= 10ms,低时间= 30ms(频率为25 HZ)。因此,Ltime整数将存储30000,Htime将存储10000。当我们将它们加在一起时,我们将得到“循环持续时间”,通过反转它,我们将得到“频率”。
下面给出了使用Arduino的频率计的完整代码和视频 。