【雕爷学编程】Arduino动手做(149)---MAX9814咪头传感器模块

发布时间 2023-07-04 16:16:52作者: 行者花雕

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实验场景图