文号
t49962
阅读
14861
回复
21
收藏
11
DAC唱起来!
2012/08/24
IP:北京
(原创)



最近的DIY项目需要音频播放,于是我搭建了这个试验性电路,先体验一下DAC的放音效果。



03.jpg



04.jpg



音频信号是随时间变化的电压信号,只要把对应的音乐数据存储在单片机的flash存储器中,就可以控制DA转换器还原出原来的电压信号。

DA转换可以使用DAC转换器,也可以通过单片机PWM滤波后来实现。由于单片机通常内置PWM模块,并且无需其他外部IC,PWM方式受到很多爱好者的青睐,但PWM输出音质较DAC芯片稍差。


本次使用的是便宜易得的DAC0832芯片。DAC0832属于电流输出型DAC,但它同时也提供了电压模式。

如图所示:



24.jpg



dw.jpg



电压模式的注意事项

由于T形电阻网络的开关要求,基准电压必须介于电源电压和地之间。并且不能是负值,否则内部Iout引脚连接的二极管会将其限制。


家中没有合适的基准源,我用一个二极管的正向压降作为电压基准,在输出端产生了最大1V左右的电压,随后连接的运算放大器将DAC的输出电压放大3倍,送往输出接口和LM386。



sd.jpg



0832内部设有两个缓冲器,目的是方便多路数据同时输出。本应用要求快速响应,除ILE高电平之外,其他控制引脚应全部接低电平以使锁存器处于直通状态。


由于产生高电压较为不便,为了获得更大的电压摆幅,我选择了TI的OPA241轨至轨运放。OPA241是专为低电压应用设计的精密运放,具有低失调电压和高输入阻抗等优点。



下面展示了一个简单的应用,通过串口接收音频文件并播放。



the turtles - "happy together"

点击此处查看视频

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

后半部分音量并没有变化,可能是相机问题


音频文件是在audition中编辑的。步骤如下:



01.jpg

导入



02.jpg

设置输出选项。注意左下角,请去掉文件头




恭喜,你已经拥有可以通过单片机播放的8位PCM线性编码音频文件了。采样率为11025赫兹(再大的话串口不一定受得了)。
由于单片机几乎没有缓存空间,所以音频只能跟着串口速度走。
按照10位异步计算,11025*(5/4)*8等于110250bps。这个速度和标准波特率115200非常接近,但手头只有12和24M晶振,误差太大,不得已用了128000bps,播放速度是正常的1.16倍。。。囧

写个小程序,用串口助手将文件发出,即可享受美妙的音乐喽。


(STC12C5A60S2)
#include"STC12C5A60S2.h"
void UART_init()
{
SCON=0x50;
BRT=0xfa;
AUXR=AUXR|0x15;
EA=1;
ES=1;
}

void timerint() interrupt 4
{
RI=0;
P0=SBUF;
}

void main()
{
UART_init();
while(1);
}  



欢迎击中 fs.jpg
+32
科创币
绘梦工坊
2012/08/24
+150
科创币
任某人
2012/08/25
nice~~
+50
科创币
金坷居士
2012/08/25
你太厉害了
+31
科创币
玄明
2012/09/04
我是来凑整的
21
科学人作者
14年4个月前IP:未同步
444025
1楼
引用
评论
科学人作者
14年4个月前IP:未同步
444046
4楼
回 3楼(山寨雷神公司) 的帖子
嗯。不用IC座也有优点呢,比如增加EMC性能、减少接触电阻。
引用
评论
科学人作者
14年4个月前IP:未同步
444049
6楼
回 2楼(霹雳游侠) 的帖子
用耳机听还是有一点粗糙的感觉,主要是采样率低的缘故。
感觉底噪几乎为零~~~
这个板子作为实验性电路有点对不起它了,应该会找时间改成SD卡的便携式播放器[s:274]
引用
评论
科学人作者
14年4个月前IP:未同步
444051
7楼
回 5楼(山寨雷神公司) 的帖子
其实主要的原因是——家里没有了...
引用
评论
科学人作者
14年4个月前IP:未同步
444078
9楼
回 8楼(任某人) 的帖子
USB声卡那得追求高音质啊,这可就是音响发烧友玩的了~

其实这个倒是最简单的,随便一个USB音频DAC芯片都可以搞定
引用
评论
科学人作者
14年4个月前IP:未同步
444137
16楼
回 15楼(任某人) 的帖子
可以。。。需要编写对应的上位机程序。
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的