-
前言
大三时,有一个课题:做一个频率计,量程为100Hz至100kHz。科普一下:数字频率计是可以直接显示被测信号(方波,正弦波或其他脉冲信号)的频率,并用人们熟悉的十进制数字显示的仪器。其实这个题目还有一个高大上的名字:数显式计数/计时法频率测量电路!
接到这个题目时,我找了室友做拍档。当时是一脸懵逼的,因为频率计就用得多了,但是怎么做出来,还真的不知道。后来去找老师指点了一下,原来可以用基准频率乘以一个系数的原理去实现。基于这个方向,我们在图书馆找到了相关的资料,一步一步地把这个作品完成了。
附上一张测试过程的照片:
-
方案和原理
按照刚刚的思路,我们需要一个基准频率\( f_{h} \)、一个系数x,那么\( f_{x} = x\bullet f_{h} \)。例如我们有个1kHz的基准频率,然后测量得到的系数为0.5,那么得到的\(f_{x}\)为500Hz。基准频率的产生比较简单,就用波形发生电路就可以了。那么怎么得到系数呢?思路也不复杂,就是用计数器计算一定的时间内,被测信号的周期数和基准信号周期数的商。那么问题又来了,怎么得到这个商呢?这个倒是有点复杂:首先把两个周期数都转换为模拟信号,用除法电路相除之后再把结果转换为数字信号,再显示出来。
- 整体方案
系统由波形转换电路、波形发生电路、计数器、数模转换、运算电路、模数转换、数显模块组成。其中计数器分为测量计数器和标准计数器,数模转换完成把原始数字量转化为反映频率的电压信号,模数转换把电压信号转换为可供共阴数码管显示的数字编码。
图1 组成框图
- 整体工作原理
被测信号通过整形电路,变成上升沿和下降沿都很陡的矩形波,记频率为\(f_{x}\),然后使用计数器计算一定时间内(记为\(\Delta t\))的上升沿个数,结果记为\(C_{x}\),反映被测信号在这段时间内的周期数;另外,设计波形发生电路产生标准1kHz、10kHz、100kHz方波,频率记为,并使用另一个计数器计算同一大小的时间内(记为T)的上升沿数,结果记为\(C_{h}\),反映标准信号在这段时间内的周期数。
根据频率与周期的关系,可得:
\( \frac{ C_{x} }{ C_{h} } = \frac{ T_{x} }{ T_{h} } = \frac{ f_{h} }{ f_{x} } \) (1)
其中\(T_{x}\)和\(T_{h}\)分别为被测信号和标准信号在一定时间内的周期数。
则表征被测信号频率的数学表达式为:
\(f_{x} = \frac{ C_{x} }{ C_{h} } \bullet f_{h} \) (2)
为了测量的稳定性,测量时间应该是不受输入信号影响,所以使用单稳态触发器来产生\(\Delta t\),然后让T跟随\(\Delta t\),这样T和\(\Delta t\)时间内的被测信号周期数对应的时间接近。但为了精确计数,\(\Delta t\)时间内所测信号的周期数对应的时间和T应该大小相等,所以有必要做相关对齐电路,这里使用D触发器来作为时间跟随器,让T从\(\ f_{x}\)在\(\Delta t\)内的第一个上升沿跟踪到\(\Delta t\)结束后的第一个上升沿,这样所对应的周期总和和T就严格相等了,则计数器所带来的的系统误差消除了。
为了持续测量频率,另外需加一个测量触发脉冲,这里使用一个频率约为2Hz的方波,记为\(f_{m}\)。在\(f_{m}\)的每一次上升沿触发一次测量。另外,在每次测量前应该清除上一次的数据,所以在前加上一个CLR清零信号。
上述测量过程可使用如图2所示波形图表示:
图2 时序图
上述测量得到的是一系列原始数字数据,接下来是处理并显示数据。由(2)式可知,当\(f_{h}\)的取值为1kHz、10kHz等10的整数倍时,可通过小数点位置来表示\(f_{n}\),而无需再做一次乘法运算。但\(C_{x}\)和\(C_{h}\)的除法是必要的,为了将\(C_{x}\)和\(C_{h}\)相除,需要把它们转换为模拟信号再相除。相除后所得的结果是一个模拟信号,所以还需要重新转换为数字信号才能显示。
为了方便显示模块进行显示,运算模块把运算后的结果作一个线性变换,得到一个0~2V的电压量,其电压数值直接对应相应的频率大小,这样就可以直接通过测量电压的原理来测量并显示频率大小,大大简化了显示模块。
-
各部分功能、实现电路与工作原理
- 波形转换电路
波形转换电路实现把输入的波形转换为上升沿和下降沿都很陡的矩形波,以供后续的数字电路处理。
另外为了减少对源信号的影响,使用一个电压跟随器作为首级输入,减少吸取的电流。
为了减少抖动,选择常用的施密特触发器作为主要处理元件。
原理图如图3:
图3 波形转换原理图
- 波形发生电路
- 测量触发脉冲(\(f_{m}\))
测量触发脉冲是用来每隔一定时间,触发测量电路对被测信号进行一次频率测量,与被测信号无关。考虑到人眼能识别的最小时间和D/A转换模块的转换速率,触发脉冲的频率不能太高,但也不宜太低,否则不能体现实时性,所以我们选择了约2Hz的方波信号。电路原理图如图4:
图4 多谐振荡器
使用施密特反相器构成多谢自激振荡器,当接通电源后,因为电容C上的初始电压为0,所以输出为高电平,并开始经电阻R向电容C充电。当充到输入电压为时,输出电压变为低电平,电容C又经过电阻R开始放电。当放电知时,输出电平又跳变为高电平,电容C重新开始充电。如此周而复始,电路便不停地振荡。其中振荡周期计算公式为:
$$T = RCln \big( \frac{ U_{DD}-U_{T-} }{U_{DD}-U_{T+}} . \frac{U_{T+}}{U_{T-}} )$$ (3)
- 清零信号(CLR)和测量时间控制信号(\(\Delta t\))
清零信号的作用是在每次重新测量之前清除上次测量的数据,所以要求在测量触发脉冲之前有效。时间不需要太长,几微米即可,这里我们选择了1ms左右的信号,人无感觉,但又足够长,保证了电路的稳定性。因为与测量触发脉冲关联而自身有效时间又是固定的,所以选用单稳态电路。电路原理图如图5:
图5 单稳态触发电路
- 标准频率测量控制信号(T)
由波形图可以直观地看出,标准频率测量控制信号由\(\Delta t\)和被测频率共同决定,其时间为\(\Delta t\)开始后,被测信号的第一个上升沿直至结束后的第一个上升沿的时间。因为开始和结束都是与被测信号有关,所以首先考虑触发器,而这段时间内的状态完全跟随\(\Delta t\),所以可以使用D触发器实现。电路原理图如图6:
图6 标准频率测量时间控制电路
T的表达式为:
$$ T^{n+1} = \Delta t$$(4)
- 标准频率
由式(2)可知,标准频率直接影响测量结果的准确性,所以标准频率必须较为准确。考虑电路结构、成本和调试难度等因素,继续选用施密特触发器作为标准频率发生单元的基础元件。其电路如同测量触发脉冲,只是元件参数不同。
为了扩大频率测量范围,我们还增加了元件参数选择开关。
- 计数器
- 计数单元
由式(4)可知,分别要\(C_{x}\)和\(C_{h}\)两个参数,考虑到与8位D/A的连接,每个计数单元需要8位,而一般十六进制计数器均只有4位,所以这里需要使用两片十六进制组成8位计数器(二百五十六进制)。
参考十六进制同步计数器74LS161的真值表可知,当计数器接收第15个上升沿时,进位标志为高电平,接收第16个脉冲后恢复低电平。而计数器接受上升沿触发,所以为了避免高4位计数器在第15个上升沿时计数,需要在低4位计数器的进位输出接反相器再接入高4位计数器。
因为需要分别在\(\Delta t\)和T时间段内才能计数,所以需要输入相应使能信号。参考真值表,发现有两个EN输入端,通过不同的搭配可以实现不同的使能和保持功能。为了方便后续数据处理,这里选择锁存功能进行计数使能,当两计数器分别在\(\Delta t\)和T时间段内时,计数器可以计数,反之则保持数据和进位端。在一下个测量触发脉冲到来并触发清零信号后,计数器立即清零,开始新一轮计数。
图7 计数器原理图
- 溢出检测单元
8位计数器是256进制计数器,即单次最大可计数256,以1kHz标准频率计算,T最大取值为256毫秒。当计算标准频率的计数器溢出时,意味着所测量的被测信号频率太低,在量程之外。同理,当计算被测信号频率的计数器溢出时,意味着被测信号频率太高,超出量程。
为了指示清楚这种情况,借助高4位计数器的进位输出,可以方便地显示溢出情况。当任何一个计数器溢出后,计数数据将被保持,并停止计数,直到下一个清零信号来临。电路如图所示。
图8 超量程指示电路
- 数模转换和运算电路
由于使用计数器计算出来的是数字了,不能通过简单电路直接相除,所以需要先转换为模拟量再进行相除运算。一般信号量相除可以通过乘法器实现,但是本电路转换出来的信号属于大信号,不能通过普通乘法器来运算,所以这里设计了一种无需乘法器的除法电路。
- 模数转换
一般模数转换后得到一个数字量,但是若本电路依然使用普通AD转换得到一个数字量的话,需要进一步进行复杂处理才能得到数码管能显示的数字量。所以我们参考数字电压表的做法,选用一个双积分型3位半AD转换器,能直接产生数字量并控制数码管扫描显示。
- 数显模块
虽然AD转换器已经直接完成了数码管的扫描和输出控制,但因为驱动能力有限,所以还需要进一步添加数码管驱动电路,主要为添加CD4511译码器和电流驱动器。
另外,因为设计了多档量程,所以还需要添加一个小数点选择电路。
-
元器件选择与参数计算
- 波形转换电路
一般波形转换电路使用施密特触发器,利用回差电压减少零点抖动。这里也使用这种做法。
选择施密特触发器时,有TTL芯片和CMOS电路两种芯片,分别为74LS06和CD40106。考虑到整体电路为TTL电平,首选74LS06。但实际测试结果表明,74LS06转换效果不理想。幸运的是CD40106和74LS06的引脚是一样的,而且CD40106的转换效果比较理想,所以直接用CD40106替换74LS06即可。
- 波形发生电路
- 测量触发脉冲(\(f_{m}\))
测量触发脉冲实际上为一个矩形波,所以可以利用上面提到的CD40106六施密特反相器做多谐振荡器。计算公式如式(3)所示。
所需\(f_{m}\)为2Hz左右,无需精确,所以可以用常用电阻电容直接搭建。这里选10uF电容,20KΩ电阻。
- 清零信号和测量时间控制信号(\(\Delta t\))
这两个信号都是单稳态信号,有几种方案可以搭建单稳态发生器,分别为:555电路、施密特触发器和集成单稳态触发器。由于本方案已经选用CD40106六斯密特反相器,所以可以利用此芯片。但是考虑到扩展量程的需求和稳定性,选用集成集成双单稳态触发器CD4538,刚好满足设计需求,且组建电路方便,易于调节。
由于清零信号和都不需要精确,取定时时间为T\( \approx \)0.1RC,计算得清零信号电路的\(C_{x}=0.1\mu F\),\(R_{x}=20KΩ\);
\(\Delta t\)电路的典型档位取\(C_{x}=1\nu F\),\(R_{x}=200KΩ\),最大可以测量2kHz的频率;
10kHz档位取\(C_{x}=1\mu F\),\(R_{x}=20KΩ\),最大可测量20kHz的频率;
100kHz档位取\(C_{x}=0.1\mu F\),\(R_{x}=20KΩ\),最大可测量200kHz的频率。
- 标准频率时间控制信号(T)
此部分电路需要使用D触发器,由于所有状态都从被测信号跳变处更改,所以只需要\(f_{x}\)作为时钟沿,选用74LS175四D触发器,使用公共时钟沿。
- 标准频率
因为CD40106六个施密特反相器只使用了两个,所以剩下三个档位的标准频率可继续使用CD40106,利于电路设计、调试和节省成本。为了提高频率的精确度和稳定性,再设计反馈电阻时,使用固定电阻加电位器的方法。
计算得典型量程的参数为:电容取\(C_{x}=0.1\mu F\),电位器R=4.7KΩ+2KΩ;
20kHz量程的参数为:电容取\(C_{x}=0.1\mu F\),电位器R=470Ω+200Ω;
200kHz量程的参数为:电容取\(C_{x}=0.01\mu F\),电位器R=470Ω+200Ω。
- 计数器
16进制计数器有同步和异步计数器,同步计数器之中,又分为同步清零和异步清零计数器。市面上较容易买到的是同步计数器,TTL型的有74LS161、74LS163和74LS192等。其中74LS192是可逆计数器,本电路并不需要此功能,所以不予选择,74LS163是同步清零,需要等到下一个时钟沿才能清零,考虑本电路的清零并不需要等待,且越快越好,所以使用74LS161。
- 数模转换与运算电路
综合考虑转换精度和成本,本系统选用8为DA转换器DAC0832。
DA转换出来的信号是电流量,需要转换成电压信号,所以需要搭配运算放大器使用。考虑整体成本,这里选择常用的ua741集成单运放,虽然有调零引脚,但是实测发现即使不加任何调零措施,还是没有大型杂波输出的。
- 模数转换
选用MC14433双积分型三位半AD转换器。MC14433具有自动调零、自动极性转换等功能。可测量正或负的电压值,当CP1、CP0接入470kΩ电阻时,每秒钟可进行4次AD转换。它的调试简便,能与微处理机或其它数字系统兼容,广泛用于数字面板表、数字万用表、数字温度计、数字量具及遥测、遥控系统。
- 数显模块
因为MC14433的输出信号包含特殊值,可能会令显示出现难以理解的的符号,所以利用显示译码器的消隐功能阻挡这部分输出,能实现这个功能的芯片有CD4511。其价格便宜,调试方便,是首选。
另外,需要使用反相控制和增大驱动能力,选用齐鲁达林顿晶体管列阵MC1413。具有很高的电流增益和很高的输入阻抗,并把电压信号转换成足够大的电路信号驱动共阴数码管。
- 调试过程
- Multisim软件仿真
在方案选择和论证过程中,为了进一步确定方案的可行性,我们使用了Multisim软件进行仿真。
由于设计涉及元件比较多,使用普通纸张无法容纳所有元件,所以我们使用了分层次仿真的方法:把系统分为计数器部分、运算电路部分和波形发生与变换部分。如图:
图9 总体仿真结构
图10 计数器仿真部分
图11 运算电路仿真部分
图12 波形发生与转化仿真部分
- 面包板真实电路分模块验证方案
虽然使用了Multisim进行了软件仿真,但实际电路与仿真还是存在很大区别的,主要体现在两方面:一是实际元件参数与理论参数不一致,二是部分仿真的元件模型存在错误。前者表现在波形发生和数模转换部分电路较多,而后者就表现在计数器电路,使得实际电路设计与仿真不相同。
在做计数器电路时,我们发现仿真软件中的74LS161模型是下降沿触发的,而实际真值表是上升沿触发,这个差异让我们开始怀疑仿真软件的正确性,随后在做溢出指示时,同样发现进位输出与真值表存在出入。本着对理论知识的充分信任,我们抱着怀疑的态度用面包板分模块验证方案,果然发现部分电路方案是正确的,仿真是错误的,而实际电路又的确是正确的!
- 制作PCB
使用面包板分模块验证过方案后,我们对方案充满信心。为了电路稳定和美观,我决定要做PCB。但是这块板比较复杂,要用双面板。恰好实验室的雕刻机又坏了。当时我们又没有使用外面商业打板的经验,所以决定自己使用感光板做一个双面电路板。
但是当时有个比较熟悉实验室条件的同学跟我说,在我们的实验室,从来没有人成功做过双面感光板。这是一个大大的Warning!!但是学生时代做实验会理会Warning的吗?所以我决定继续安自己的思路做一块感光双面板。
然而,果然这条路并并不顺利,光画板就画了一个通宵。。。那天晚上还下了一晚上的雨,好冷好冷的。最后用AltiumDesigner画出的PCB长这样:
图13 PCB总览
图14 感光、显影之后的感光板
图15 腐蚀之后的电路板透视图
图16 焊接元件后的电路板
- 整体测试
完成上述所有步骤后,最后整体联调。
测试时,断开计数器输出端与DAC0832连接的跳线帽,使用杜邦线手动输入数据以测试DAC0832的数模转换效果,用万用表测试并调整经过DA转换后的模拟电压,使之符合使用条件。
调好DAC0832部分后,继续调试数显模块,直至数码管上显示的频率与万用表测量的电压示数相差最小。
然后重新连接上所有跳线帽,调试计数器部分。首先测试计数功能和溢出提示功能能否实现:用示波器监测各计数器的最低位输出端,监测到电平随输入脉冲变化,说明计数功能已经实现。把长接高电平,使测量时间达到能肉眼可识别的程度,此时T也被无限延长。同时,把两个计数器的时钟输入端都输入相同的2kHz信号,很快频率过高和过低指示灯都亮,并且保持不灭。然后手动输入一个清零信号,指示灯皆灭。至此,说明计数器部分功能完全实现。