【雕爷学编程】Arduino动手做(149)---MAX9814咪头传感器模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百四十九:MAX9814麦克风放大器模块 MIC话筒声音放大/咪头传感器
CMA-4544PF-W
电容式麦克风
电容式话筒
是利用电容大小的变化,将声音信号转化为电信号.这种话筒最为普遍,常见的录音机内置话筒就这种.因为它便宜,体积小巧,而且效果也不差.有时也叫咪头。
电容式麦克风有两块金属极板,其中一块表面涂有驻极体薄膜(多数为聚全氟乙丙烯)并将其接地,另一极板接在场效应晶体管的栅极上,栅极与源极之间接有一个二极管,如图所示。当驻极体膜片本身带有电荷,表面电荷地电量为Q,板极间地电容量为C,则在极头上产生地电压U=Q/C,当受到振动或受到气流地摩擦时,由于振动使两极板间的距离改变,即电容C改变,而电量Q不变,就会引起电压的变化,电压变化的大小,反映了外界声压的强弱,这种电压变化频率反映了外界声音的频率,这就是驻极体传声器地工作原理。
电容式麦克风优点
1、能将声音直接转换成电能讯号的
电容式麦克风是利用导体间的电容充放电原理,以超薄的金属或镀金的塑料薄膜为振动膜感应音压,以改变导体间的静电压直接转换成电能讯号,经由电子电路耦合获得实用的输出阻抗及灵敏度设计而成。
2、能展现原音重现的特性
音响专家以追求『原音重现』为音响的最高境界!从麦克风的基本设计原理分析,不难发现电容式麦克风不仅靠精密的机构制造技术,而且结合复杂的电子电路,能直接将声音转换成电能讯号,先天上就具有极优越的特性,所以成为追求『原音重现』者的最佳选择。
3、具有极为宽广的频率响应
振动膜是麦克风感应声音及转换为电能讯号的主要组件。振动膜的材质及机构设计,是决定麦克风音质的各项特性。由于电容式麦克风的振动膜可以采用极轻薄的材料制成,而且感应的音压,直接转换成音频讯号,所以频率响应低音可以延伸到10Hz以下的超低频,高音可以轻易的达到数十KHz的超音波,展现非常宽广的频率响应特性!
4、具有超高灵敏度
在振动膜上面因为没有音圈的负载,可以采用极为轻薄的设计,所以不但频率响应极为优越,而且具有绝佳的灵敏度,可以感应极微弱的声波,输出最清晰、细腻及精准的原音!
5、快速的瞬时响应特性
振动膜除了决定麦克风的频率响应及灵敏度的特性外,对声波反应快慢的能力,即所谓「瞬时响应」特性,是影响麦克风音色的一个最重要因素。麦克风瞬时响应特性的快慢,决定于整个振动膜的轻重,振动膜越轻,反应速度就越快。电容式音头极为轻薄的振动膜,具有极快速的瞬时响应特性,能展现清晰、明亮而有劲的音色及精准的音像。尤其中、低音完全没有音染及『箱音』,高音细腻而清脆,是电容式最显著的音色特点。由下面的附图可明显看出电容式音头的瞬时响应特性远优于动圈式。
6、具有超低触摸杂音的特性
使用手握式麦克风时因与手掌接触产生的触摸杂音,让原音混杂了额外的噪音,对音质影响至巨,尤其对具有前置放大电路的无线麦克风更严重,所以触摸杂音成为评断麦克风优劣的重要项目。从物理现象探讨,鹅毛与铜板同样掉到地板上,鹅毛几乎听不到掉落的声音,而铜板就很大声,显示较轻的材料比较重的撞击声小。同理,电容式麦克风的振动膜比较轻,先天上就具有『超低触摸杂音』的绝佳特点。
7、具有耐摔与耐冲击的特性
使用麦克风难免因不慎掉落碰撞导致故障或异常。由于电容式音头是由较轻的塑料零件及坚固的轻金属外壳构成,掉落地面的撞击力较小,损坏的故障率较低。
8、体积小、重量轻
电容式麦克风因采用超薄的振动膜,具有体积小、重量轻、灵敏度高及频率响应优越的特点,所以能设计成超小型麦克风(俗称小蜜蜂及小蚂蚁)广泛的应用
9、最适合装配在无线麦克风上
电容式麦克风具有上述绝佳的特点,成为音响工程专家及演唱高手的最爱,而无线麦克风在舞台演唱或在家里唱卡拉OK,已经成为当今世界的趋势,无线麦克风因本身可以提供电容式音头所需的偏压,而拥有电容式麦克风的全部优点,成为数字音响时代,专业音响行家梦寐以求的最佳麦克风。
电容式麦克风缺点
结构复杂、造价昂贵,音膜脆弱,怕潮,名贵型号都用真空防潮箱保存,难以推广。
MAX9814芯片
是美信公司出品的带AGC控制的麦克放大模块,很适于各种麦克放大和控制电路的前置部分,外围只要10个以内的元件,就能满足一般使用者的需要,麦克放大在0-8米的距离,保证输出电平保持近似一致。是很好的简单代替复杂麦克控制电路的代表之作。
MAX9814是一款低成本,高质量的麦克风放大器,具有自动增益控制(AGC)和低噪声麦克风偏置。该器件具有一个低噪声前置放大器,可变增益放大器(VGA),输出放大器,麦克风偏置电压发生器和AGC控制电路。
低噪声前置放大器具有固定的12dB增益,而VGA增益则根据输出电压和AGC阈值自动从20dB调整至0dB。输出放大器提供8dB,18dB和28dB的可选增益。在没有压缩的情况下,放大器的级联会导致总增益为40dB,50dB或60dB。三级数字输入对输出放大器的增益进行编程。外部电阻分压器控制AGC阈值,单个电容器设定启动/释放时间。三级数字输入可设定起效时间与释放时间的比率。AGC的保持时间固定为30ms。低噪声麦克风偏置电压发生器可以使大多数驻极体麦克风偏置。
MAX9814采用节省空间的14引脚TDFN封装。该器件的额定温度范围为-40°C至+ 85°C。
MAX9814主要特征
自动增益控制(AGC)
三种增益设置(40dB,50dB,60dB)
可编程攻击时间
可编程的攻击和释放比率
2.7V至5.5V电源电压范围
30nV /的低输入参考噪声密度
低总谐波失真(THD):0.04%(典型值)
低功耗关机模式
内部低噪声麦克风偏置,2V
采用节省空间的14引脚TDFN(3mm×3mm)封装
-40°C至+ 85°C扩展温度范围
MAX9814麦克风放大器模块
MAX9814是一款低成本高性能麦克风放大器,具有自动增益控制(AGC)和低噪声麦克风偏置。器件具有低噪声前端放大器、可变增益放大(VGA)、输出放大器、麦克风偏置电压发生器和AGC控制电路。
●自动增益控制(AGC)
●3种增益设置(40dB、50dB、60dB)
●可编程动作时间
●可编程动作和释放时间比
●电源电压范围2.7V~5.5V
●低THD:0.04% (典型值)
●低功耗关断模式
●内置2V低噪声麦克风偏置
MAX9814麦克风放大器模块电原理图
Arduino实验开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百四十九:MAX9814麦克风放大器模块 MIC话筒声音放大/咪头传感器 项目测试:串口输出人声波形 模块接线: MAX9814 Arduino VCC 5V GND GND OUT A0 */ void setup() { Serial.begin(9600); pinMode(A0,INPUT); } void loop() { Serial.println(analogRead(A0)); delay(100); }
项目测试:串口输出人声波形
模块接线:
MAX9814 Arduino
VCC 5V
GND GND
OUT A0
来自放大器输出的音频信号是变化的电压。要测量声级,我们需要进行多次测量以找到信号的最小和最大范围或“峰到峰幅度”。
在下面的实验中,我们选择50毫秒的示例窗口。这足以测量低至20 Hz(人类听觉的下限)频率的声音水平。
找到最小和最大样本后,我们计算差值并将其转换为伏特,然后将输出打印到串行监视器。
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百四十九:MAX9814麦克风放大器模块 MIC话筒声音放大/咪头传感器 项目测试之二:测量声级 模块接线: MAX9814 Arduino VCC 5V GND GND OUT A0 */ const int sampleWindow = 50; // 以mS为单位的采样窗口宽度(50 mS = 20Hz) unsigned int sample; void setup() { Serial.begin(9600); pinMode(A0,INPUT); } void loop() { unsigned long startMillis= millis(); // 样本窗口的开始 unsigned int peakToPeak = 0; // 峰峰值 unsigned int signalMax = 0; unsigned int signalMin = 1024; // collect data for 50 mS while (millis() - startMillis < sampleWindow) { sample = analogRead(A0); if (sample < 1024) // 抛出错误的读数 { if (sample > signalMax) { signalMax = sample; // 只保存最大级别 } else if (sample < signalMin) { signalMin = sample; // 仅保存最低级别 } } } peakToPeak = signalMax - signalMin; // max-min =峰峰值幅度 double volts = (peakToPeak * 5.0) / 1024; // 转换为伏特 Serial.println(volts); }
项目测试之二:测量声级
实验串口返回情况
修改为
double volts = (peakToPeak * 5.0) / 255; // 转换为1/4伏特值
项目测试之三:简易测量声级(输出毫伏)
Arduino实验开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百四十九:MAX9814麦克风放大器模块 MIC话筒声音放大/咪头传感器 项目测试之三:简易测量声级(输出毫伏) 模块接线: MAX9814 Arduino VCC 5V GND GND OUT A0 */ const int sampleWindow = 50; // 以mS为单位的采样窗口宽度(50 mS = 20Hz) unsigned int sample; void setup() { Serial.begin(9600); pinMode(A0, INPUT); } void loop() { unsigned long startMillis = millis(); // 样本窗口的开始 unsigned int peakToPeak = 0; // 峰峰值 unsigned int signalMax = 0; unsigned int signalMin = 1024; // 收集 50 毫秒的数据 while (millis() - startMillis < sampleWindow) { sample = analogRead(A0); if (sample < 1024) // 抛出错误的读数 { if (sample > signalMax) { signalMax = sample; // 只保存最大级别 } else if (sample < signalMin) { signalMin = sample; // 仅保存最低级别 } } } peakToPeak = signalMax - signalMin; // max-min =峰峰值幅度 double volts = (peakToPeak * 5.0 * 1000) / 1024; // 转换为mV Serial.print("声级mV= "); Serial.println(volts); }
实验串口绘图器返回情况之一
实验串口绘图器返回情况之二(当中低点区为无讲话人声时的声级)
Arduino实验场景图