今天主要是想跟大家分享一下,单片机如何检测特定频率的声音的问题!
前段时间,我一直被一个问题给困扰着,那就是我需要检测一个发声体是否发声,比如按下一个按键,蜂鸣器会发出特定频率的声音,那么我需要检测这个蜂鸣器到底有没有发出声音,而且发出的声音频率是不是在指定的范围。
一开始,我是通过硬件设计这么一个电路,咪头接收到物体发出的声音,经过一个带通的滤波器,将其他频率段的声音过滤掉,只留下需要的频率段的声音,然后经过放大电路将收到的信号放大,最后经过一个比较器,通过调节比较器的比较电压,实现对声音强弱的判定,原理图如下:
这个电路在模拟的时候,效果也还不错,可是实际应用中,环境中其他的噪音对其影响很大,很多时候会出现发声源没有发声的时候,都会有信号输出!这样一来,就会导致误判,而且这种概率非常的高!这个电路还有一个很严重的问题,那就是:我需要测试的发声源有好几种频率,这就让人很蛋疼了,难道每次测不同频率段的声源,要单独换一个模块?肯定不行拉!如果只是实验用,或许还能行的同,但是我们是应用到设备上去的,而且一个设备上要有四个这样的模块同时工作,难道每次换测试的产品的时候,同时更换测试模块?肯定是行不通的!
几经周折,于是又将测试方案改进!于是得到了这样一个模块:
声音还是经过一个咪头检测,然后经过LM358经行两次放大(第一次放大是一个固定倍数,第二次放大倍数可调,这样做的目的是便于调节模块跟声源的距离.),然后经一个LM567 (通用锁相环电路音调译码器,详见附件资料!)电路,当发声源的频率跟LM567设定的频率比较接近的时候,就会输出一个低电平信号!
最终设计的硬件如下图所示:
图中的GAIN是用来调节放大倍数的,FRE是用来调节LM567的中心频率,FR是用来接示波器显示FRE调节的频率。
首先我们将模块的LM567中心频率设置成4KHZ:
由于手上没有信号源,所以只能通过一个“声卡虚拟示波器%2C用声卡代替示波器”软件,在电脑上模拟声源发声,通过一个耳机连接到测试模块,我们用软件输出一个4KHZ的频率:
将耳机放到咪头处,实验现象如下图所示:
我们可以看到,这个时候是有信号输出的,那么如果其他频率段的声音也会导致有信号输出么?我们来试一下吧,现在我们将软件声源设置成2KHZ,再次把耳机放置到咪头处,实验现象如下:
没有信号输出!这样是不是就可以证明了该模块确实只能接收到特定频率段的声音信号?!经过多次反复实验,确实证明了上述结论!
好了,今天的话题就讲到这里吧,详细的设计资料请自行下载附件,欢迎留言指定设计不足之处,谢谢!