DIY功能完整的全平衡PCM1794解码器STM32单片机
本帖最后由 mchoi518 于 2025-11-16 12:09 编辑从21年开始正式混hifidiy论坛,学习了很多知识,感谢hifidiy平台和这些年帮助过我的所有大师!
1. 回顾我的媒体播放器DIY历程
自2021年买了个4307的惊雷前级机箱,一直用它diy,
2021版2.1媒体播放器,当时还不会画PCB。都是tb上买的成品板子
2022版2.1媒体播放器自己画了个主板,看着舒服多了
2023版2.2媒体播放器,用上了minidsp flex。学习了STM8S单片机,低通解码是自己做的
2025版,这次做的2.0全平衡解码器
亮度等级1~8调节
2. 机箱内部布局设计
上个月制作了sansui x1111功放之后想重新折腾2.0系统了,目前还不会用CAD,,ppt画的~
孔的位置精度很重要,没有台钻最好不要自己搞,费时费力不说PCB和机箱孔还对不上,, 花点钱CNC加工就好,当然图一定要准确~
3. 解码器功能和代码
单片机用上STM32,实现较完整的功能。
单片机功能设计
STM32代码,标准库,模块化。
主程序、系统配置文件、数码管、编码器、红外遥控、掉电存储、继电器控制等驱动源文件下载:
目前编码器旋转、按键都有防抖,遥控器音量+-长按有加速功能等。
pcm1794不需要软控,硬件I2C代码有,功能暂时没用
请注意:本程序版权归hifidiy用户mchoi518所有,不得用于商业用途,违者必究!
**** Hidden Message *****
我之前也发过软控帖子,好多人下载连句谢谢都没有,没办法,只能隐藏内容了~
4. 电路制作
电路同样模块化,方便后期重做板子调声音
4.1 数字输入和主控板
单片机时钟放在pcb下面,dir9001进行spdif到i2s转换。
开始给解码器设计了POWER_ON/OFF功能,后来去掉了,因为主插排做成了开关机遥控,这样播放器解码功放都能统一开关机,每个设备只要通电开机就可以了。
原理图
**** Hidden Message *****
4.2 前面板
这个机箱前面板开孔就是给数码管用的,OLED没有尺寸合适的。所以用了2个TM1650驱动两个3位数码管。两个编码器间距220mm
原理图
**** Hidden Message *****
4.3 输出主板
5v电源用了lm1085-5.0稳压管,+-15v用了功放上用过的分立稳压电源,用multisim仿真过,大管CE压差只要3v以上,输出纹波1uv以下。AC15v整流后有21V左右。
与机箱(市电地)连接的100Ω+0.1uf 两边都没有焊接,因为有左右2个主板,都连接机箱后左右串扰,如果只连接一个又感觉不舒服~
原理图
**** Hidden Message *****
4.4 解码板PCM1794
用si8620数字隔离
原理图
**** Hidden Message *****
4.5 I/V LPF
电阻没用vishay 0204,我觉得平衡版里面+-信号阻值一致更重要,使用了低温飘0.01%精度的
原理图
**** Hidden Message *****
4.6 继电器音量调节
同样电阻使用了低温飘0.01%精度的
原理图
**** Hidden Message *****
4.7 输出缓冲
目前暂时没做,只预留了位置。因为后级功放x1111仿真结果,前端继电器音调直接输出就可以,不需要阻抗匹配。
5. RMAA测试
声卡用了minidsp flex,rca输入端官方指标115db。 上个月测试功放时把板子都烧了,邮寄回香港,说只能换新板,花了$355,心疼啊,,,
使用XLR的+和GND测试。
测试环境:
测试结果:
24bit 48khz成绩
2023年我做的pcm1794测试结果如下:
https://www.minidsp.com/community/attachments/file_bfb2f7f-jpg.5841/
对比之前的,动态变小了,thd有改善。后期再做个输出缓冲估计动态能上来点。
补充内容 (2025-11-30 12:06):
20251130做了一些改进,请看下面69#楼
【2025年11月30日,有一些小的问题和改进共享】
输出缓冲也装上,机箱内满满登登的看着舒服多了:lol
1. 添加了输出缓冲,尝试了LME49990和金嗓子前级电路,RMAA测试结果自制金嗓子分立电路比运放指标高
LME49990缓冲
金嗓子前级电路缓冲
**** Hidden Message *****
2. 继电器音量噪音问题,有两个解决方法
1)简单直接的方法就是把控制电路数字地线,与模拟电路地线短接,最好大电解下面。 但是这样做指标会降低不少,但是基本可以去掉噪音。
2)音量调节后面增加缓冲,这样可以基本没噪音,测试指标也没问题。
3. 继电器音量调节后面,必须加RC滤波,因为继电器音量调节电路还是很容易引入数字电路的高频噪声。 后级功放输出嬬贝尔电路对地电阻烧了才想起来,前面没加RC滤波,功放输入端也没加RC滤波~ 最好都加上。
4. PCM1794静音功能忘了设计,切换同轴和光纤无信号时有白噪音。应该用DIR9001的ERROR端口高低电平控制PCM1794静音端口,这个比较麻烦后期重做板子再改吧。
5. 软件没发现bug,丝滑流畅。 唯一后期改的是音量从0~127改成0~100了,因为前面0~60基本没声音~~下面是改善后的代码
修改relay_control.c文件中的下面函数:
void SetVolumeRelays(uint16_t volume) {
uint16_t relay_value;
// 将 0~100 的输入映射到继电器控制值
if(volume == 0) {
relay_value = 0;
} else if(volume >= 1 && volume <= 27) {
relay_value = volume * 2;
} else { // volume >= 28 && volume <= 100
relay_value = volume + 27;
}
// 确保值在有效范围内 (0~127)
if(relay_value > 127) {
relay_value = 127;
}
// 清除所有继电器状态
GPIO_ResetBits(VOL_PORT, VOL1_PIN | VOL2_PIN | VOL3_PIN | VOL4_PIN);
GPIO_ResetBits(VOL_HIGH_PORT, VOL5_PIN | VOL6_PIN | VOL7_PIN);
delay_ms(5);
// 设置低4位 (PB12-PB15)
if(relay_value & 0x01) GPIO_SetBits(VOL_PORT, VOL1_PIN);
else GPIO_ResetBits(VOL_PORT, VOL1_PIN);
if(relay_value & 0x02) GPIO_SetBits(VOL_PORT, VOL2_PIN);
else GPIO_ResetBits(VOL_PORT, VOL2_PIN);
if(relay_value & 0x04) GPIO_SetBits(VOL_PORT, VOL3_PIN);
else GPIO_ResetBits(VOL_PORT, VOL3_PIN);
if(relay_value & 0x08) GPIO_SetBits(VOL_PORT, VOL4_PIN);
else GPIO_ResetBits(VOL_PORT, VOL4_PIN);
// 设置高3位 (PA8-PA10)
if(relay_value & 0x10) GPIO_SetBits(VOL_HIGH_PORT, VOL5_PIN);
else GPIO_ResetBits(VOL_HIGH_PORT, VOL5_PIN);
if(relay_value & 0x20) GPIO_SetBits(VOL_HIGH_PORT, VOL6_PIN);
else GPIO_ResetBits(VOL_HIGH_PORT, VOL6_PIN);
if(relay_value & 0x40) GPIO_SetBits(VOL_HIGH_PORT, VOL7_PIN);
else GPIO_ResetBits(VOL_HIGH_PORT, VOL7_PIN);
}
别忘了修改system_config.h中最大音量配置:
#define MIN_VOLUME 0
#define MAX_VOLUME 100 pcm1794
价格太便宜了吧:lol 多谢共享! 大制作赞一个,分体板能有效控制成本和提高成功率。PCM1794手册有写的,THD+N=0.0004%(-108dB)。 赞!这样的Diy看着才有劲。 谢谢分享 楼主玩得大气磅礴,充分把机箱塞满。感谢分享。 瞄瞄 厉害了 想学习PCM1794 筑总玩一下 厉害,比商品机好多了,商品机用上分立IV和LPF得卖上万。 嘉立创有开源的XU208的USB界面,搜XU208能搜到。 感谢分享:handshake 楼主前面几版用的SOEKRIS分立R2R解码,后面换成1794解码了,更换的原因是什么?:lol 学习一下 德哥2023 发表于 2025-11-15 14:33
pcm1794
价格太便宜了吧
对,这是便宜货,20块钱的PCM1794,又不支持DSD,最高又只能上192K,但这是TI的旗舰DAC,也是我们论坛烧友最容易DIY出好声音的方案,并且可以调整音色的部份有更多空间。所以为什么DIY论坛这么多人喜欢玩,不是没有道理的。当然啦,兄弟你有过硬的技术,弄个8并联或者16并联的ES9039PRO,DIY出来分享下给大家就最好了。:$ 大制作,功夫都花在设备上有时间听音吗?:lol 德哥2023 发表于 2025-11-15 14:33
pcm1794
价格太便宜了吧
前年mouser买的闲置的2个,正好用上 zxhdoop 发表于 2025-11-15 15:26
大制作赞一个,分体板能有效控制成本和提高成功率。PCM1794手册有写的,THD+N=0.0004%(-108dB)。
多谢大师鼓励~!
重新看了手册看到了,之前没注意哈哈,THD+N 108db真的不容易,估计都用贴片做到一个小板子上能实现,但是声音可能就不好听了