ehengio 发表于 2021-10-24 19:38:30

分享 DIY USB耳放(R2R DAC)的设计过程(持续更新)

本帖最后由 ehengio 于 2021-10-24 19:38 编辑

一、项目的出发点
最近一段时间,迷上了R2R DAC。它精度的关键就是电阻的匹配精度,那些几万元的R2R解码器都是用的昂贵的万分之一精度的电阻。
其实就是万分之一精度的电阻,也不能完全满足他们所谓的24bit,32bit的需求。
这个时候我就在想,现在ADC技术实现十万分之一以上的相对精度还是很容易的,是不是可以通过ADC对R2R输出的结果进行一个反馈。
这样用普通的电阻,就能实现十万分之一以上的匹配精度。想想就可行,所以就一直想做一个R2R DAC。
但光做R2R DAC没法验证,也不好玩。就想做一个可以听音乐的东东,所以就有了本项目。

二、项目的定义
第一次做,完全对音频完全没有经验,所以就想尽量简化音其他的元素。所以选择做USB耳放。
初步方案:usb -> SA9023 -> i2s -> stm32 -> R2R DAC -> RC滤波-> OPA2612功率放大 -> 驱动耳机
               反馈回路使用AD7192
音频指标:24bit 96kHz
设计目标:尽可能的还原原始波形。(不追求好听,因为音频我不懂)

kms2hh 发表于 2021-10-24 22:45:39

好东东,端个板凳听课{:lol:}{:lol:}

aammoo 发表于 2021-10-25 02:34:38

再加个恒温控制,电阻买几盘回来做个自动筛选就好了

liao-ljj 发表于 2021-10-25 08:26:26

XMOS的方案如何了?STM系列不擅长搞这些吧?

tomzbj 发表于 2021-10-25 09:45:25

ad7192到96kHz时远远到不了24位吧...

ehengio 发表于 2021-10-25 10:35:34

tomzbj 发表于 2021-10-25 09:45
ad7192到96kHz时远远到不了24位吧...

不是实时校准,而是定期校准

ehengio 发表于 2021-10-25 10:39:51

aammoo 发表于 2021-10-25 02:34
再加个恒温控制,电阻买几盘回来做个自动筛选就好了

这个项目就是不想做电阻塞选,跟何况电阻还会随温度和时间的而变化
要到十万分之一的精度,长期保持,一个电阻估计就要几百块。
(我现在做的电阻表,用的RJ711的电阻5ppm/℃ 年漂移小于100ppm,一颗要30几块)

ehengio 发表于 2021-10-25 10:44:09

liao-ljj 发表于 2021-10-25 08:26
XMOS的方案如何了?STM系列不擅长搞这些吧?

R2R DAC比较简单,纯逻辑电路也可以搭
考虑到需要电阻修正,所以菜需要一颗MCU
原则上用任何MCU都可以,选STM32主要是大家都比较熟悉,方便交流

ehengio 发表于 2021-10-26 09:20:39

三、输出功率放大设计
R2R DAC输出阻抗一般为几k。要驱动耳机的话,还需要加一级功率放大。
一般音频放大,都会使用到正负电源,而且需要高电压大功率。比较麻烦,而且用开关电源的话,又会带来噪声。

这次DIY主要想验证DAC,又想偷懒了,只想做一个单一5V供电的功率放大电路。
R2R DAC 输出的电压范围为 0~Vref,Vref取3.3V的话就是0~3.3V。
OPA6122的信号输入范围,在5V供电的情况下,是1.5V~4V。所以DAC输出还需要变换一下才能接入OPA6122。
我处理的方法是,输出对Vref,再加一个2R(相当于再加一级最高位恒定为1的输入)。
这样DAC的输出,就变为1.65V~3.3V,正好满足OPA6122的要求。




ehengio 发表于 2021-10-26 10:22:46

四、音量调节
把R2换成10K的可调电阻,就可对输出幅度进行调节
Vout = Vdac * R2 / ( R2 + 10K) + 3.3V * 10K / (R2 +10K)
当R2 = 0K 时, Vout = 3.3V                              输出为0
当R2 = 5K 时, Vout =1/3 Vdac + 2/3 * 3.3V   输出为1/3
当R2 = 10K 时, Vout =1/2 Vdac + 1/2 * 3.3V   输出为1/2

缺点是调节音量时DAC输出的共模电压会变化,这样会输出一个噪音,暂时还解决不了


flash3g 发表于 2021-10-26 12:30:12

以前用74HC595做过8bit的

armok. 发表于 2021-10-26 12:34:23

帖子移动通知:
原分论坛:STM32/8
目标分论坛:HiFi音乐
移动时间:8小时之后

armok. 发表于 2021-10-26 12:34:48

放到HiFi板块更适合。

armok. 发表于 2021-10-26 12:35:52

精华,打赏100汤圆,

并且打赏3个月VIP++资格。

saccapanna 发表于 2021-10-26 13:16:57

R2R原理倒是很简单,以前也用过。不过我好奇的是,你怎么补偿电阻?

ehengio 发表于 2021-10-26 13:50:07

谢谢,老大的打赏

五、R2R控制方式
网上大多数的R2R DAC都是采用74HC595直接输出控制,595导通电阻大概在30Ω,对于几KΩ的R2R网络而言,稍微有点大。
为了提高精度,采用RS2118模拟开关来控制R2R网络,它的导通电阻只有1Ω,对于几KΩ,只额外引入万分之几的误差,基本可以忽略。

为了减少开关不同步带来的噪声,尽量使用MCU同一个端口进行控制,如PA0~PA15控制左声道DAC高16位,PB0~PB15控制右声道DAC高16位。
低8位,采用75hc595扩展。这样即使低8位有点不同步,带来的噪声也比较小。

ehengio 发表于 2021-10-26 15:04:15

五、R2R DAC原理
24bit R2R DAC,其中高16位用IO口直接控制,低8位用74hc595扩展(主要是IO口不够了)
电阻选择常见的,成倍数关系的1.8k 和 3.6k贴片电阻。
为了直观下图中,只画了左声道的DAC,右声道与它完全相同。

ehengio 发表于 2021-10-30 12:41:41

六、原理图
74HC595,响应延时要几十ns。想想还是算了,换一颗管脚多一点的MCU,不要595扩展了。
附件是新方案的原理图。
看大家不是太感兴趣,后续就不再分享开发过程了,等做出成品来再来汇报。


hecat 发表于 2021-10-30 14:01:30

最终性能怎么评估?

会测试THD+N和SNR吗?

dellric 发表于 2021-10-31 13:14:41

ehengio 发表于 2021-10-30 12:41
六、原理图
74HC595,响应延时要几十ns。想想还是算了,换一颗管脚多一点的MCU,不要595扩展了。
附件是新 ...

可以考虑74AHC595,延迟在4-5个ns

rz007 发表于 2021-11-1 08:41:31

学习了!{:handshake:}

鲸鱼不好吃 发表于 2021-12-15 09:40:31

学习学习,第一次听说这种DAC

th632136402 发表于 2023-11-21 16:31:04

开发出来了吗,楼主
页: [1]
查看完整版本: 分享 DIY USB耳放(R2R DAC)的设计过程(持续更新)