MIC工作原理(驻极体麦克风)

1.驻极体麦克风声电转换原理

如图所示,驻极体麦克风属于电容式麦克风,背极板和振膜构成平板版电容器,背极板驻有一定量的电荷,背极板通过金属环连接到FET的栅极;振膜镀层金属,通过金属外壳连接到FET的S极;

驻极体麦克风电容器简图

由静电学可知,对于平行版电容器,由如下关系

C=ε*S/d

C:电容容量; ε:介电常数;S两极正对面积,d:两极距离

当电容器充电荷量为Q,电容器两个极之间形成的电压U,由如下关系

C=Q/U

当振膜收到声压作用时产生振动,从而改变振膜与背极板之间的距离d,于是产生了Δd的变化,由公式(1)可知,其必然产生ΔC的变化,也就是

ΔC= ε*S/Δd

由公式(2)可知,由于△C的变化量,充电电荷Q是固定不变的,因此必然产生ΔV的变化,也就是

ΔV=Q/ ΔC

这样就完成了从声信号到电信号的转换。但是这个信号非常弱,内阻非常高,不能直接使用,还要进行阻抗变换和放大。

FET场效应管是一个电压控制元件,漏极(D)电流Id受源极S与栅极G之间的电压Vgs的控制;

平行板电容器的两个极是接到FET的S极和G极,因此相当于FET的S极和G极之间加了一个ΔVgs的变化量,FET的漏极电流I就产生一个ΔId的变化量,因此这个电流的变化量就在电阻RL上产生一个ΔVd的变化量,这个电压的变化量就可以通过电容C输出,这个电压的变化量是由声压引起的,因此整个麦克风传感器就完成了一个声电的转换过程,将声音信号转化为电信号输出。

ΔVgs→ ΔId→ ΔVd

ECM原理图

—声电转换:振膜,垫片背极板组成有空气间隙的平行板电容器,背极板覆膜并驻极后存储电荷,振膜振动导致电容输出变化,由声信号转变为电信号;

—阻抗变换:驻极体电容的容值很小,产生的电信号的也很小,输出阻抗就很大。为了匹配后级音频处理线路的输入阻抗,需要MIC中内置FET,实现阻抗的变换,将GΩ级转变为kΩ级。

2.驻极体麦克风输出信号分析

根据测试电路设置偏置负载电阻RL, 确定MIC输出的交流信号电压,根据FET等效模型,由于FET的Rgs很大,所以电容上的驻极电荷不会放电消失,同时Rd相对RL很大,并联后可以忽略。所以MIC输出的交流信号电压

最大交流信号幅值:

Max Vac=AOP(Pa)*0.0126V*SQRT(2) 峰值信号

同时Vac=gmVgs*RL

——0.0126v对应为-38dBV/Pa即94dBSPL

——假设给麦克风的电压Vdc=1v, 电源电压2V

——AOP 20Pa

则最大峰值输出信号Vdc+Vac=1.355v<Vs, 符合输出要求【

如果RL升高, 94dBSPL时, Vac=0.0398V 也就是 -28dB

Max Vac=1.126V AOP 20Pa计算

Vdc+Vac=2.12V>Vs,显然不成立

所以RL升高后,AOP变小,麦克风的动态范围变小。

### STM32 使用驻极体麦克风教程 #### 硬件准备 为了实现STM32与驻极体麦克风之间的通信,除了STM32开发板之外,还需要一个驻极体麦克风以及必要的连接线。由于来自驻极体麦克风的信号较弱[^2],建议采用额外电路来增强信号强度。 对于初学者来说,在调试过程中推荐使用MAX9814模块代替简单的三极管放大器,因为这可以减少因信号过饱和而导致的问题,并简化调试过程。然而,一旦确认系统功能正常,则可以根据成本考虑更换为更经济的选择——即由驻极体麦克风加上自制的三极管放大电路组成。 #### 接口连接 当决定直接使用驻极体麦克风时,应将其输出端通过适当设计的前置放大电路接入到STM32的一个模拟输入通道上(如ADC_IN0)。具体而言: - 将驻极体麦克风正极端接到电源VCC; - 负极端接地(GND); - 输出端则需经过电阻分压网络后送入带有内部或外部运算放大的缓冲级处理后再连至MCU ADC引脚; 注意:这里提到的是基本原理图示意而非精确数值参数设置,请参照实际产品手册调整元件选型及参数匹配。 #### 示例代码 下面给出一段基于HAL库编写用于读取并显示从驻极体麦克风电平转换而来的电压值的例子: ```c #include "stm32f1xx_hal.h" // 定义使用的ADC通道号 #define MIC_CHANNEL ADC_CHANNEL_0 void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_ADC1_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_ADC1_Init(); while (1){ uint32_t adcValue; /* 启动一次转换 */ HAL_ADC_Start(&hadc1); if(HAL_OK == HAL_ADC_PollForConversion(&hadc1, 1)){ adcValue = HAL_ADC_GetValue(&hadc1); // 计算对应的电压值 float voltage = ((float)(adcValue * 3.3)) / 4096; // 打印结果 printf("Mic Voltage:%f V\r\n",voltage); } HAL_Delay(500); } } /* ADC初始化函数 */ static void MX_ADC1_Init(void){ hadc1.Instance = ADC1; hadc1.Init.ScanConvMode = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; if (HAL_ADC_Init(&hadc1) != HAL_OK){ Error_Handler(); } /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. */ sConfig.Channel = MIC_CHANNEL; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_7CYCLES_5; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK){ Error_Handler(); } } ``` 此程序片段展示了如何配置ADC以测量来自驻极体麦克风的电平变化,并计算相应的电压值。需要注意的是,这里的`printf()`函数假设已经实现了串行打印的功能以便于观察输出数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值