单模先声 发表于 2024-5-9 08:25

单片机读取麦克风信号


这个电路输出的不是交流信号吗?单片机怎么读取?

LcwSwust 发表于 2024-5-9 08:40

单片机的ADC脚接一只100K电阻到VCC,一只100K电阻到GND,再接一只100欧电阻到MIC,用ADC功能采集信号。

单模先声 发表于 2024-5-9 09:16

LcwSwust 发表于 2024-5-9 08:40
单片机的ADC脚接一只100K电阻到VCC,一只100K电阻到GND,再接一只100欧电阻到MIC,用ADC功能采集信号。 ...

这算是只读取交流正部分吗

coody 发表于 2024-5-9 11:25

用分压电阻将输入信号移位至0点在VREF/2即可读取正负电压值。采样交流电、声音就要这样处理。

gx_huang 发表于 2024-5-9 11:47

哈哈,这个和MCU几乎无关,你需要的是一个正确的原理图,你缺少的是对硬件的理解。
答案,上面几位给出了

单模先声 发表于 2024-5-9 14:09

coody 发表于 2024-5-9 11:25
用分压电阻将输入信号移位至0点在VREF/2即可读取正负电压值。采样交流电、声音就要这样处理。 ...

能帮我改一下电路吗?我不知道这个移位怎么弄,我硬件比较差

admvip 发表于 2024-5-9 16:26

沙发楼的朋友讲的很清楚了,将音频零点电位钳位到1/2 VCC,假设是12bit采样,这样处理后,音频的负半周采样值范围是0-2047,正半周采样值范围是2048-4095,零点是2048。 做DSP处理时,需要将数值处理成有符号的整数,将采样值-2048就可以了,这样处理后的采样值范围就是-2048至2047,符合DSP处理的类型要求了。

单模先声 发表于 2024-5-9 16:40

admvip 发表于 2024-5-9 16:26
沙发楼的朋友讲的很清楚了,将音频零点电位钳位到1/2 VCC,假设是12bit采样,这样处理后,音频的负半周采样 ...

不好意思我第一次搞音频,我是读取音频来做灯光律动的,我只需要知道声音的大小的情况下,±2048应该都是一样的吧?

coody 发表于 2024-5-9 19:33

单模先声 发表于 2024-5-9 16:40
不好意思我第一次搞音频,我是读取音频来做灯光律动的,我只需要知道声音的大小的情况下,±2048应该都是 ...

那就是要计算声音电平,不知道你是要峰值还是有效值?

admvip 发表于 2024-5-9 20:37

取得ADC值后,将其转换为带符号的整形数,然后用DSP库的求平均功率函数,计算平均功率,这就是音频信号这一时刻的功率值,可以用于控制灯光

admvip 发表于 2024-5-9 20:40

如果需要根据音乐的频谱进行灯光显示,则需要调用DSP库里面的傅里叶变换函数,求出音频频谱数值,来控制灯光,可能更炫酷一些。

单模先声 发表于 2024-5-10 07:48

coody 发表于 2024-5-9 19:33
那就是要计算声音电平,不知道你是要峰值还是有效值?

有效值吧,只需要根据现场的声音大小来控制LED,误差允许很大的。

单模先声 发表于 2024-5-10 07:50

admvip 发表于 2024-5-9 20:40
如果需要根据音乐的频谱进行灯光显示,则需要调用DSP库里面的傅里叶变换函数,求出音频频谱数值,来控制灯 ...

我用的是8位MTP单片机,没有这些功能,我打算用adc读取麦克风的放大信号,然后根据ad值显示灯的数量,可以吗?

LcwSwust 发表于 2024-5-10 11:08

单模先声 发表于 2024-5-9 09:16
这算是只读取交流正部分吗

正负都行,相当于加了个偏移。

coody 发表于 2024-5-10 11:14

单模先声 发表于 2024-5-10 07:48
有效值吧,只需要根据现场的声音大小来控制LED,误差允许很大的。

那就读取ADC值(有符号整数),每个采样点计算平方和,到了一定点数(跟显示刷新时间对应)求均方值即可。
不过我通常用峰值来显示电平,用WS2812灯串显示。
而做128段频谱用LED点阵屏显示才炫!我的音箱设备就有两块屏,左右声道各一块,128点FFT频谱。

单模先声 发表于 2024-5-10 15:08

coody 发表于 2024-5-10 11:14
那就读取ADC值(有符号整数),每个采样点计算平方和,到了一定点数(跟显示刷新时间对应)求均方值即可 ...

我是这样操作的,每隔100ms读取一次adc,读到多少就显示对应多少个led,这样可以吗?

xch 发表于 2024-5-10 16:40

这电路不行。
MIC 信号很弱,一般毫伏量级,需要放大1000倍。
建议使用LMV358 这种轨对轨双运放。两级放大。用单片机电源供电输出电平适配MCU。
芯片价格低。






cjseng 发表于 2024-5-10 21:59

这电路不行,MIC后应该加运放而不是功放,ADC不需要信号源提供那么大功率,另外,不考虑加个低通滤波啥的,频率高了单片机处理得过来么?

oufuqiang 发表于 2024-5-11 08:10

单模先声 发表于 2024-5-9 16:40
不好意思我第一次搞音频,我是读取音频来做灯光律动的,我只需要知道声音的大小的情况下,±2048应该都是 ...

既然是要搞节奏灯,那我刚好发了一个开源,你看我的帖子应该对你有帮助,源码都已经开源了。
页: [1]
查看完整版本: 单片机读取麦克风信号