打印
[国产单片机]

单片机读取麦克风信号

[复制链接]
1922|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
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即可读取正负电压值。采样交流电、声音就要这样处理。

使用特权

评论回复
5
gx_huang| | 2024-5-9 11:47 | 只看该作者
哈哈,这个和MCU几乎无关,你需要的是一个正确的原理图,你缺少的是对硬件的理解。
答案,上面几位给出了

使用特权

评论回复
6
单模先声|  楼主 | 2024-5-9 14:09 | 只看该作者
coody 发表于 2024-5-9 11:25
用分压电阻将输入信号移位至0点在VREF/2即可读取正负电压值。采样交流电、声音就要这样处理。 ...

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

使用特权

评论回复
7
admvip| | 2024-5-9 16:26 | 只看该作者
沙发楼的朋友讲的很清楚了,将音频零点电位钳位到1/2 VCC,假设是12bit采样,这样处理后,音频的负半周采样值范围是0-2047,正半周采样值范围是2048-4095,零点是2048。 做DSP处理时,需要将数值处理成有符号的整数,将采样值-2048就可以了,这样处理后的采样值范围就是-2048至2047,符合DSP处理的类型要求了。

使用特权

评论回复
8
单模先声|  楼主 | 2024-5-9 16:40 | 只看该作者
admvip 发表于 2024-5-9 16:26
沙发楼的朋友讲的很清楚了,将音频零点电位钳位到1/2 VCC,假设是12bit采样,这样处理后,音频的负半周采样 ...

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

使用特权

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

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

使用特权

评论回复
10
admvip| | 2024-5-9 20:37 | 只看该作者
取得ADC值后,将其转换为带符号的整形数,然后用DSP库的求平均功率函数,计算平均功率,这就是音频信号这一时刻的功率值,可以用于控制灯光

使用特权

评论回复
11
admvip| | 2024-5-9 20:40 | 只看该作者
如果需要根据音乐的频谱进行灯光显示,则需要调用DSP库里面的傅里叶变换函数,求出音频频谱数值,来控制灯光,可能更炫酷一些。

使用特权

评论回复
12
单模先声|  楼主 | 2024-5-10 07:48 | 只看该作者
coody 发表于 2024-5-9 19:33
那就是要计算声音电平,不知道你是要峰值还是有效值?

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

使用特权

评论回复
13
单模先声|  楼主 | 2024-5-10 07:50 | 只看该作者
admvip 发表于 2024-5-9 20:40
如果需要根据音乐的频谱进行灯光显示,则需要调用DSP库里面的傅里叶变换函数,求出音频频谱数值,来控制灯 ...

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

使用特权

评论回复
14
LcwSwust| | 2024-5-10 11:08 | 只看该作者
单模先声 发表于 2024-5-9 09:16
这算是只读取交流正部分吗

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

使用特权

评论回复
15
coody| | 2024-5-10 11:14 | 只看该作者
单模先声 发表于 2024-5-10 07:48
有效值吧,只需要根据现场的声音大小来控制LED,误差允许很大的。

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

使用特权

评论回复
16
单模先声|  楼主 | 2024-5-10 15:08 | 只看该作者
coody 发表于 2024-5-10 11:14
那就读取ADC值(有符号整数),每个采样点计算平方和,到了一定点数(跟显示刷新时间对应)求均方值即可 ...

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

使用特权

评论回复
17
xch| | 2024-5-10 16:40 | 只看该作者
这电路不行。
MIC 信号很弱,一般毫伏量级,需要放大1000倍。
建议使用LMV358 这种轨对轨双运放。两级放大。用单片机电源供电输出电平适配MCU。
芯片价格低。

gtv358p8 rmb0.20@100.pdf (2.35 MB)




使用特权

评论回复
18
cjseng| | 2024-5-10 21:59 | 只看该作者
这电路不行,MIC后应该加运放而不是功放,ADC不需要信号源提供那么大功率,另外,不考虑加个低通滤波啥的,频率高了单片机处理得过来么?

使用特权

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

既然是要搞节奏灯,那我刚好发了一个开源,你看我的帖子应该对你有帮助,源码都已经开源了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

87

主题

572

帖子

1

粉丝