
歌曲封面显示唱片机
简介
基于AT32F403A与LTX裸机调度器,usb链接电脑后可显示正在播放的音频的封面,并且唱臂可动
简介:基于AT32F403A与LTX裸机调度器,usb链接电脑后可显示正在播放的音频的封面,并且唱臂可动开源协议
:CERN Open Hardware License
描述
封面显示唱片机

演示视频:【Bilibili】@realTiX - 可以显示电脑歌曲封面的唱片机【开源】
目录:
一、项目说明
本项目对于个人学习用途者免费开放,请您遵守开源协议;
对于商用行为,请联系作者获取授权,否则视作侵权,您可通过下方电子邮件地址联系作者:
二、开源与管理
本页面负责管理本项目的 原理图/PCB 部分,所有部分开源链接如下:
- 单片机源码:
- Github:TiX233/song_cover_display
- Gitee:TiX233/song_cover_display
- 上位机源码:
- 原理图/PCB:
- 立创开源平台:本文
- 外壳:
- MakerWorld:@realTiX - 电脑歌曲封面显示唱片机
三、项目简介
这是一个用于显示电脑当前正在播放音频的封面的唱片机风格桌面摆件。
播放状态下,唱臂会靠近唱片,且显示屏中的封面会旋转;
暂停状态下,唱臂会离开唱片,显示屏中的画面会暂停旋转。
通过手动拨动唱臂,可以控制电脑音频的播放与暂停。
您可以先下载附件里的 唱片机控制器 软件来测试您所用的播放器能否被正常识别,再决定是否对硬件进行复刻。

一般来说,只要系统媒体服务能看到音频信息选项卡的播放器基本都能使用,也就是会显示在如下图区域的播放器都能使用(网页 b 站也支持,对于咱开不起 vip 的 b 站听歌选手很友好):

win10 没有这个选项卡,但是会在调整音量的时候在屏幕左上角看到如下选项卡:

部分播放器可能需要手动打开 smtc 设置才能支持:

这个 smtc 已经是八年还是十年前的东西了,如果您的播放器还不支持,那么赶紧撇了吧
四、项目原理
全局原理:
上位机通过 windows smtc 服务(win10 及以上)获取系统当前正在播放的音频的各种信息,通过 usb 向单片机发送封面和暂停/播放等信息来控制唱片机的状态;当手动拨动唱臂时,单片机会向上位机发送请求,上位机收到请求后会通过 smtc 来控制系统音频的播放或暂停状态,然后回传状态给单片机。上位机会每秒发送一次系统音频的播放状态给唱片机,在上位机超过一分钟没有发过来命令后,唱片机会进入休眠。
唱片机部分:
使用一颗 AT32F403A 作为主控,使用一片 GC9A01 240*240 圆形显示屏显示音频封面;
使用两个 9*10 带铁芯线圈来驱动唱臂,唱臂磁铁可不分极性随意安装,算法会自动识别;
唱臂原理类似于磁保持继电器;
使用全速 usb cdc 虚拟串口来收发上位机数据;
开启拓展 ram,使用一个 115.2 KB 全局数组来存储图片;
使用 50M spi dma 刷屏,设置了两个十分之一屏幕尺寸的 buffer 进行双缓冲刷屏;
spi dma 部分非 at32 官方库,而是自己移植了 stm32 hal 库,因为 at 的 spi 库连多字节发送都没有,dma 收发也没有;
很难不吐槽 at32 的官方库为什么不像 py32 一样直接套 st 的 hal 库,反正 bsd 协议;
使用自研 ltx 裸机调度器,显示屏初始化和唱臂自检可同时运行,包括后续的运行阶段。
五、烧录
使用 jlink/daplink/... 等等任一 swd 调试器进行固件烧录,可使用 keil 编译源码烧录或其他 swd 固件烧录工具(如 DapLinkUtility、CoFlash 等等),固件在 pcb 开源页面附件有提供
六、焊接与组装
0、可能用到的工具
- 烙铁:刀头,尖头
- 锡丝
- 锡膏
- 助焊剂
- 镊子:用于夹取元件
- 加热台:可选
- 带 HEPA 滤芯的焊接排烟器:可选
- 剥线钳:用于处理线圈延长线
- 502 胶水:用于粘接小磁铁
- 胶水细嘴滴管:用于控制挤出少量胶水,避免溢胶
- 美工刀/笔刀:可选,由于磁铁尺寸存在误差,您可能需要手动削宽外壳以安装磁铁
- 十字螺丝刀:3mm,用于安装外壳螺丝
- 3d 打印机:用于打印外壳,或者您也可以寻找代打印服务
- dap-link:用于烧录固件
- 防静电手套:可选,避免元器件被静电打坏
> 本项目含有 LQFP 封装器件,需要一定的焊接经验
1、线圈
直径 9mm,高 10mm,带铁芯。
两个线圈并联焊接在 pcb 的 ab 焊盘上,确保安装后两个线圈的电流方向相反,也就是产生的磁场方向相反,希望你还记得初中学的右手螺旋定则,样例如图

对于图中的例子,这块左 N 右 S 磁铁会被左边线圈吸引,右边线圈排斥,从而向左边运动。在运动到位后,停止通电这块磁铁也不会松开线圈,因为磁铁吸住了线圈里的铁芯。总之效果类似磁保持继电器。
> 如果您是在作者咸鱼购买的材料包,那么可以参考下述接法样例,不保证您在其他地方购买的线圈也能这样接:

两个线圈都是内部抽头接 B 焊盘,侧边引线接 A 焊盘

2、磁铁
一块大点的磁铁用于控制唱臂来回运动,直接插入唱臂轴即可,尺寸为 13.92*9.41*2.57 mm

一块小点的磁铁用于检测唱针是否移动到黑胶位置,粘接在唱头内,尺寸为 9.2*4.64*0.78 mm

这两款磁铁均为厚度方向充磁磁铁,安装时不需要确认极性,算法会在开机时自动识别
3、显示屏

记得先 撕膜 再安装,否则可能夹坏屏幕!另外,这款屏幕有些商家卖的是黑色 fpc 排线的(商品图片是黄色,但到手是黑色),会宽一点,也就是排线边缘可能会被电容阻碍,需要稍对排线进行裁剪或弯折,或者你打板的时候把电容挪一挪也行
> 手册里 spi 速度最高是 100M,实际使用的是 50M,但是网络上的教程似乎都说上限 40M,以及实际测试中有少量屏幕在快速刷新时会出现跳动黑帘,可能是屏幕体质不行。如果出现这种情况请尝试更换屏幕或降低 spi 速度
4、螺丝
四颗 M2*8 自攻
5、usb
使用一根单公头 usb 四芯线焊接。建议使用热熔胶或者其他方式在内部固定后再将线引出到外壳外,否则焊接处可能会被扯断(不过不内部额外固定似乎还挺结实就是)
6、其他
唱片机背部的支撑属于可拆卸结构,您可以根据孔径设计自己喜欢的装配件,比如可以自行设计一个可以挂在洞洞板上的中间件

七、调试
如果您需要对本项目进行二次开发或拓展,那么应该需要一些调试手段。
本项目没有引出串口,输入输出信息是通过 segger RTT 保存在一块 ram 中的,当调试器链接后,电脑用通过 openOCD 来对内存进行写入读出以实现输入输出,理论上,这会比串口更快,毕竟只要读写内存,而无需外设收发,并且还能保存一定的历史输出在调试器连接后一起发出。
如果您有 jlink,那么可以直接用 segger 提供的 rttviewer 进行调试,这里仅提供使用 dap-link 的调试方法:
- 在雅特力官网下载官方提供的
openocd版本,将其加入环境变量 - 链接调试器和设备,打开任意
shell,输入openocd -f rtt2vofa.cfg- 注:如果没有加入环境变量,那么上述命令需要输入 openocd.exe 的完整路径
- 打开任意支持
tcp的串口调试工具,这里以vofa+为例,填入如下图的配置信息 - 链接成功后,即可查看输入输出信息
通过自定义命令,可控制单片机的运行状态,比如暂停某些 app 如 usb 等等,也可依赖发布订阅机制实现数据更新后的自动打印,在 ltx_cmd.c 中提供的 /print 命令有一个 heart_beat 样例,用来每秒打印心跳,您可参考该样例来设置自己的订阅数据打印;
如果您需要经常修改一些参数如尝试某些不同的背景颜色,那么也无需重新烧录,在 ltx_cmd.c 中提供了一个 /param 命令,该命令可对 ltx_param.c 中指向的自定义数据进行读写;
所有的自定义命令可在 ltx_cmd.c 中查看,也可开机后给单片机发送 /help 命令来列出所有命令,您也可以参考这些命令创建一些方便调试自定义命令,以下是目前所有的自定义命令,部分命令可能会影响系统的正常运行:
| 命令 | 作用 |
|---|---|
echo | 返回第二个参数来测试收发功能 |
hello | 打印 hello world |
help | 帮助,无参数则列出所有命令,第二个参数可设置为某个命令(如 /help print) |
print | 在某些数据更新后进行打印,非阻塞,非 poll,依赖 ltx 发布订阅机制 |
param | 读写自定义参数 |
alarm | 测试 ltx 闹钟功能用,非阻塞,第二个参数可设置闹钟倒计时 tick,会在闹钟到时后打印 |
reboot | 重启 |
ltx_app | 管理 ltx app 用,可列出所有 app 及其 task,可对其进行暂停继续或销毁操作 |
lcd_bl | 设置显示屏背光亮度用 |
lcd_clear | 显示屏清屏为第二个参数所指定的 rgb565 颜色,阻塞,非 dma 方式 |
tonearm_get | 获取唱臂状态 |
tonearm_set | 直接设置唱臂驱动输出 pwm,调试用 |
pic_down | 播放一次下落图片动画 |
pic_rotate | 开启或关闭图片旋转动画 |
rst_pic | 将图片数组设置为某种颜色 |
rst_pic_tix | 在图片数组上绘制 TiX |
rst_pic_ms | 在图片数组上绘制四色块 |
usb_tx | 通过 usb 向上位机发送消息 |
八、注意事项
- 开机时请确保唱臂运动不受阻碍,否则可能导致唱片机开机自检阶段判断为唱臂无法正常工作,这会影响正常使用,需要重新插拔 usb 进行唱片机重启
- 本项目含有感性负载驱动,虽然功率较小(<500mA),但如果您需要连接拓展坞,那么需要确保拓展坞带有额外供电功能,否则可能导致唱臂无法被驱动,以及对于直插电脑的情况下,需要确保 usb 已插好,否则可能因接触不良导致没有足够的电力驱动唱臂
九、其他
> 如下情况下,唱片机会在一分钟后关闭屏幕进入休眠:
- 未打开控制器
- 系统睡眠
- 没有开启任何播放器播放音乐
还没写真的休眠,只是关了屏幕而已,发一条暂停/播放指令就会进入正常运行状态
> 如果在音频播放/暂停时阻碍唱臂运动会发生什么?
唱臂超时未移动到指定位置则会停止驱动唱臂,唱片机会每五秒重新尝试移动一次,并向上位机报告错误
上位机还没写对错误报告的反馈,总之不会影响正常运行。
> b 站切换视频时会先下落一次当前视频的封面再下落新视频的封面
或者有时候新视频封面会重复下落两次
浏览器的锅,上位机只会根据系统提供的封面下发给下位机,而浏览器在切换视频时会有封面闪烁,可能是浏览器对封面的缓存没有良好管理
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。










