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"

点击此处查看视频

XXXXXXXXXXXXXXXXXX/v_show/id_XXXXXXXXXXXXXXXXml

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


音频文件是在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
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
科学人 作者
11年10个月前 IP:未同步
444025
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
vocal@ルカ
11年10个月前 IP:未同步
444040
好•••
这种音质如何?
底燥呢?
建议试试看搞个sd卡播放器
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
山寨雷神公司
11年10个月前 IP:未同步
444045
建议芯片用ic座这种飞行线万一短路烧芯片换下来就麻烦了
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
科学人作者
11年10个月前 IP:未同步
444046
回 3楼(山寨雷神公司) 的帖子
嗯。不用IC座也有优点呢,比如增加EMC性能、减少接触电阻。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
山寨雷神公司
11年10个月前 IP:未同步
444047
回 4楼(科学人) 的帖子
貌似好像这种低频小功率电路影响不大啊
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
科学人作者
11年10个月前 IP:未同步
444049
回 2楼(霹雳游侠) 的帖子
用耳机听还是有一点粗糙的感觉,主要是采样率低的缘故。
感觉底噪几乎为零~~~
这个板子作为实验性电路有点对不起它了,应该会找时间改成SD卡的便携式播放器[s:274]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
科学人作者
11年10个月前 IP:未同步
444051
回 5楼(山寨雷神公司) 的帖子
其实主要的原因是——家里没有了...
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
任某人
11年10个月前 IP:未同步
444072
回 7楼(科学人) 的帖子
期待USB版本的HIFI版~~

DJ歪是否考虑拿出来晒晒DAC了~~
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
科学人作者
11年10个月前 IP:未同步
444078
回 8楼(任某人) 的帖子
USB声卡那得追求高音质啊,这可就是音响发烧友玩的了~

其实这个倒是最简单的,随便一个USB音频DAC芯片都可以搞定
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
硝化咸鱼
11年10个月前 IP:未同步
444107
运放居然用LM386  没有一点HIFI精神[s:274]
+1
科创币
金坷居士
2012-09-04
至少也要分立单端甲类吧 呵呵呵
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
jxs
11年10个月前 IP:未同步
444121
回 9楼(科学人) 的帖子
usb声卡不是只要十几块钱么。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
hefanghua
11年10个月前 IP:未同步
444123
opa241很冷门的说,轨对轨适合低失真放大,这电路想让音质好,就要用16位DAC或者PWM,44.1k采样。如果要做便携式播放器,还有很多东西要加,要多努力几倍。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
mobius
11年10个月前 IP:未同步
444128
回 1楼(科学人) 的帖子
满天星是什么
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
mobius
11年10个月前 IP:未同步
444129
可以吃么?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
任某人
11年10个月前 IP:未同步
444131
回 9楼(科学人) 的帖子
I just came up with a hint./ Why don't you try to use two syconized sereal ports to take turns while transmitting data.  That should release the presure on each one of it and push the MCU to the extream at the same time.

Sorry there is no inpit method on the computer
+1
科创币
金坷居士
2012-09-04
不会安啊 我学校的电脑上各种语言输入法横飞
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
科学人作者
11年10个月前 IP:未同步
444137
回 15楼(任某人) 的帖子
可以。。。需要编写对应的上位机程序。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
11年9个月前 IP:未同步
448627
用1bit DAC更简单
或者干脆PWM闭环推大功率管做D类功放

1bit verilog 例子
已经modelsim过关


module dac(clk,nrst,data,dout);

`define wl 17

input clk,nrst;
input [`wl-2:0]data;
output dout;

reg [`wl-1:0]acc;

always @ (nrst or posedge clk)
begin
    if(!nrst)
    begin
        acc <= `wl'b0;
    end
    else
    begin
        acc <= acc[`wl-2:0] + data;
    end
end

assign dout = acc[`wl-1];

endmodule
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
山寨雷神公司
11年9个月前 IP:未同步
448654
回 11楼(jxs) 的帖子
我用的usb声卡500元多还是套件 [s:275]
不要思维定势啊[s:275]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon
11年9个月前 IP:未同步
448702
楼主可以写一个程序,实时产生音色,按下一个按钮就开始产生三角波,随着时间推移振幅渐渐降低……就成了电子琴。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
金坷居士
11年9个月前 IP:未同步
448703
回 8楼(任某人) 的帖子
RYRY哈哈哈哈

话说发烧DAC好还是光驱改的CD转盘好呢
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
科学人
学者 笔友
文章
178
回复
1739
学术分
1
2011/07/24注册,6年4个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}