- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【方案概述】
在家庭影院、卡拉 OK 等音响系统中,实时显示音乐信号的频谱将为音乐
系统增添不少色彩。这里采用 Arduino 来实现这一效果,具体系统设计原理图如
图 1:
整个系统分前端放大、ADC 采集转换、FFT 频谱计算、LED 点阵驱动四部分组
成。下面分不分对各个不分进行说明:
1.前端放大电路
直接从电脑音频孔取出的音频信号是个交流信号,电压幅值约
100mv~500mv 左右,而 ADC 只能采样正电压,为了充分利用ADC 的采样
精度,需要将音频信号放大并叠加一个直流分量(有点类似数字示波器的前端电
路),在设计中我直接用了一个音频集成功放 LM386,原理图如下(参数以网
上实际参数为准):
测试从 386 的 5 脚取出信号,刚好有 2.5V 的直流电压,另外放大倍数约20 倍。
2.ADC 采样
直接接入 atmega8 的模拟输入端即可。这里要注意采样频率,按照采样
定理,采样频率要大于信号频率的两倍,这些上课时大家都学过,就不展开了。
而我们音频信号频率范围在 20Hz~20kHz 之间,按照最大的频率来算,要求
ADC 采样频率不得小于 40kHz 。
在 Arduino 的教程中介绍其ADC 完成一次采样转换的时间要 100 μ秒,
约 10K 的采样率,不符合上述对音频信号采样最低频率的要求,在网上找到解
决办法如下:
复制内容到剪贴板
代码 :
#define FASTADC 1
// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) = ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
//。。。。。。。。
//在 setup()函数中添加
#if FASTADC
//set prescale to 16
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
#endif
如此转换频率理论达到 60K 左右,添加一些其他处理代码后测试得到的一
次采样率约为 48K ,符合要求。
3.LED 点阵屏驱动
为了美观,采用方形发光二极管(蓝色)来焊接的一个 8*13 的 LED 点
阵屏,原理图跟常见的 8*8 的一样。由于开发板 IO 口的限制,只有 14 个数字
IO 口,所以采用2 块 74HC595 串转并,用来扫描 13 个公共端,数据段直接由
数字 IO 驱动,这里要注意限流:一是 LED 的最大电流,二是 595 最大灌电流,
三是 atmega8 的最大输出电流。
【制作步骤】
以下是制作过程中的一些贴图:
#define FASTADC 1
// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) = ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
//设置 595 的控制
文档评论(0)