美文网首页Arduino雕爷学编程
【雕爷学编程】Arduino动手做(149)---MAX9814

【雕爷学编程】Arduino动手做(149)---MAX9814

作者: 驴友花雕 | 来源:发表于2023-07-03 16:09 被阅读0次

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

    【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
    实验一百四十九:MAX9814麦克风放大器模块 MIC话筒声音放大/咪头传感器

    000.jpg 00.jpg

    CMA-4544PF-W
    电容式麦克风

    0.jpg 0-1.jpg 0-2.jpg 0-3.jpg

    电容式话筒

    是利用电容大小的变化,将声音信号转化为电信号.这种话筒最为普遍,常见的录音机内置话筒就这种.因为它便宜,体积小巧,而且效果也不差.有时也叫咪头。

    电容式麦克风有两块金属极板,其中一块表面涂有驻极体薄膜(多数为聚全氟乙丙烯)并将其接地,另一极板接在场效应晶体管的栅极上,栅极与源极之间接有一个二极管,如图所示。当驻极体膜片本身带有电荷,表面电荷地电量为Q,板极间地电容量为C,则在极头上产生地电压U=Q/C,当受到振动或受到气流地摩擦时,由于振动使两极板间的距离改变,即电容C改变,而电量Q不变,就会引起电压的变化,电压变化的大小,反映了外界声压的强弱,这种电压变化频率反映了外界声音的频率,这就是驻极体传声器地工作原理。

    电容式麦克风优点

    1、能将声音直接转换成电能讯号的

    电容式麦克风是利用导体间的电容充放电原理,以超薄的金属或镀金的塑料薄膜为振动膜感应音压,以改变导体间的静电压直接转换成电能讯号,经由电子电路耦合获得实用的输出阻抗及灵敏度设计而成。

    2、能展现原音重现的特性

    音响专家以追求『原音重现』为音响的最高境界!从麦克风的基本设计原理分析,不难发现电容式麦克风不仅靠精密的机构制造技术,而且结合复杂的电子电路,能直接将声音转换成电能讯号,先天上就具有极优越的特性,所以成为追求『原音重现』者的最佳选择。

    3、具有极为宽广的频率响应

    振动膜是麦克风感应声音及转换为电能讯号的主要组件。振动膜的材质及机构设计,是决定麦克风音质的各项特性。由于电容式麦克风的振动膜可以采用极轻薄的材料制成,而且感应的音压,直接转换成音频讯号,所以频率响应低音可以延伸到10Hz以下的超低频,高音可以轻易的达到数十KHz的超音波,展现非常宽广的频率响应特性!

    4、具有超高灵敏度

    在振动膜上面因为没有音圈的负载,可以采用极为轻薄的设计,所以不但频率响应极为优越,而且具有绝佳的灵敏度,可以感应极微弱的声波,输出最清晰、细腻及精准的原音!

    5、快速的瞬时响应特性

    振动膜除了决定麦克风的频率响应及灵敏度的特性外,对声波反应快慢的能力,即所谓「瞬时响应」特性,是影响麦克风音色的一个最重要因素。麦克风瞬时响应特性的快慢,决定于整个振动膜的轻重,振动膜越轻,反应速度就越快。电容式音头极为轻薄的振动膜,具有极快速的瞬时响应特性,能展现清晰、明亮而有劲的音色及精准的音像。尤其中、低音完全没有音染及『箱音』,高音细腻而清脆,是电容式最显著的音色特点。由下面的附图可明显看出电容式音头的瞬时响应特性远优于动圈式。

    6、具有超低触摸杂音的特性

    使用手握式麦克风时因与手掌接触产生的触摸杂音,让原音混杂了额外的噪音,对音质影响至巨,尤其对具有前置放大电路的无线麦克风更严重,所以触摸杂音成为评断麦克风优劣的重要项目。从物理现象探讨,鹅毛与铜板同样掉到地板上,鹅毛几乎听不到掉落的声音,而铜板就很大声,显示较轻的材料比较重的撞击声小。同理,电容式麦克风的振动膜比较轻,先天上就具有『超低触摸杂音』的绝佳特点。

    7、具有耐摔与耐冲击的特性

    使用麦克风难免因不慎掉落碰撞导致故障或异常。由于电容式音头是由较轻的塑料零件及坚固的轻金属外壳构成,掉落地面的撞击力较小,损坏的故障率较低。

    8、体积小、重量轻

    电容式麦克风因采用超薄的振动膜,具有体积小、重量轻、灵敏度高及频率响应优越的特点,所以能设计成超小型麦克风(俗称小蜜蜂及小蚂蚁)广泛的应用

    9、最适合装配在无线麦克风上

    电容式麦克风具有上述绝佳的特点,成为音响工程专家及演唱高手的最爱,而无线麦克风在舞台演唱或在家里唱卡拉OK,已经成为当今世界的趋势,无线麦克风因本身可以提供电容式音头所需的偏压,而拥有电容式麦克风的全部优点,成为数字音响时代,专业音响行家梦寐以求的最佳麦克风。

    电容式麦克风缺点

    结构复杂、造价昂贵,音膜脆弱,怕潮,名贵型号都用真空防潮箱保存,难以推广。

    0-4 (1).jpg

    MAX9814芯片

    是美信公司出品的带AGC控制的麦克放大模块,很适于各种麦克放大和控制电路的前置部分,外围只要10个以内的元件,就能满足一般使用者的需要,麦克放大在0-8米的距离,保证输出电平保持近似一致。是很好的简单代替复杂麦克控制电路的代表之作。

    01- (1).jpg

    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。

    01.jpg 02.jpg

    MAX9814主要特征
    自动增益控制(AGC)
    三种增益设置(40dB,50dB,60dB)
    可编程攻击时间
    可编程的攻击和释放比率
    2.7V至5.5V电源电压范围
    30nV /的低输入参考噪声密度
    低总谐波失真(THD):0.04%(典型值)
    低功耗关机模式
    内部低噪声麦克风偏置,2V
    采用节省空间的14引脚TDFN(3mm×3mm)封装
    -40°C至+ 85°C扩展温度范围

    03.jpg 04.jpg 04-.jpg

    MAX9814麦克风放大器模块
    MAX9814是一款低成本高性能麦克风放大器,具有自动增益控制(AGC)和低噪声麦克风偏置。器件具有低噪声前端放大器、可变增益放大(VGA)、输出放大器、麦克风偏置电压发生器和AGC控制电路。
    ●自动增益控制(AGC)
    ●3种增益设置(40dB、50dB、60dB)
    ●可编程动作时间
    ●可编程动作和释放时间比
    ●电源电压范围2.7V~5.5V
    ●低THD:0.04% (典型值)
    ●低功耗关断模式
    ●内置2V低噪声麦克风偏置

    06-0 (1).jpg

    MAX9814麦克风放大器模块电原理图

    07.jpg 07-.jpg 08.jpg 06-.jpg

    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

    09.jpg 11.jpg

    来自放大器输出的音频信号是变化的电压。要测量声级,我们需要进行多次测量以找到信号的最小和最大范围或“峰到峰幅度”。

    在下面的实验中,我们选择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);
    
    }
    

    项目测试之二:测量声级
    实验串口返回情况

    12.jpg 13.jpg

    修改为

    double volts = (peakToPeak * 5.0) / 255;  // 转换为1/4伏特值
    
    14.jpg

    项目测试之三:简易测量声级(输出毫伏)

    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);
    
    }
    

    实验串口绘图器返回情况之一

    17.jpg

    实验串口绘图器返回情况之二(当中低点区为无讲话人声时的声级)

    18.jpg

    Arduino实验场景图

    20.jpg

    相关文章

      网友评论

        本文标题:【雕爷学编程】Arduino动手做(149)---MAX9814

        本文链接:https://www.haomeiwen.com/subject/ttnqudtx.html