纯手工打造我的便携音乐播放器,基于RTT和STM32
本帖最后由 majianjia1991 于 2014-1-17 09:23 编辑放寒假了,今天刚刚回到家,马上将我许诺已久的帖子发出来。
MCU:STM32F407ZGT6
USB FS:USB3300
DAC: PCM1795
AMP:OPA2132*2 OPA627*2, BUF634*2
其他传感器:光敏电阻,红外遥控收发器,三轴加速度传感器 ADXL345
wifi模块:WM G MR 09 (WIFI 还没焊上去,因为铝壳也许会屏蔽wifi信号,不清楚怎么弄。)
废话少说,直接上图:
机器下面是两个3.5MM耳机口,一个是line out,一个是耳放输出。
电位器是起到数字调音量,移动文件列表的作用,与模拟电路完全不相干。。
上面那个蓝色的线,是调试口,调好后可以拿下来,调试线从miniUSB座的口子伸出来的。。
调试线左边有一个轻触开关,用于开机,关机,锁定键盘等用处。
TF卡插槽也在上方。
裸板
大家一定更感兴趣外壳是怎么做的,而不是那堆乱糟糟的电路。。
以下是外壳制作过程。
筷子+跳线帽制作的按钮
下面是电路部分。
调试接口,包括SWD和UART,自己用洞洞板飞线飞了个转换器。
板子大小是6.2*10CM,依据外壳打的板子。
软件上,全部移植于RTT的例程,包括文件管理器,WAV播放等。只有部分驱动是自己写的,比如DAC驱动,键盘驱动。
关于开源的问题,这个版本不开源,因为代码写得太乱,都是为了实现功能写的代码,当时没考虑太多这方便的事,并且这个并不完整。另一个原因是如果软件开源了,硬件不开源,那意义不大,但是这个版本的硬件BUG太多,不足的地方也太多。
下学期,我会完成STM32F429制作的播放器,下个版本,开!
硬件上,没有什么特殊的地方,板子是双层板,可以看得出布局比较挤..
电池充电使用linear申请来的LTC4055,线性USB电源管理,单节锂电池充电管理芯片。可以USB掉线时,自动切换电池给系统供电。
另外,使用了库仑计 LTC2942 来检测电池容量
系统需要1个3.3V电源,1个5V电源和1个正负电源。
3.3V与5V都是采用申请来的LTC3441 boost-buck DC-DC芯片制作的,3.3V供给STM32,SD卡,wifi模块之类的数字电路。5V供给PCM1795,另外通过3.3V的LDO供给DIT4192,PLL1707。
正负6V采用1个boost DC-DC芯片来做,型号好像叫RT9293,经过CLC滤波后直接给运放,电压是+-6V。
正负电压与5V供电,均是设有开关,不播放时DAC,时钟电路与运放不工作。
宿舍的插座电源太差,没有接地,所以没法测电源噪声。排除运放的电路设计缺陷后,输出的底噪已经不可闻了。
关于时钟电路,我想这是HIFI所关心的,虽然我做不到HIFI,我也尽可能去接近它。。
我用有源27M晶振输入到PLL1707,通过设置,可以产生22.5792M,24.576M这两种无敌的频率,涵盖了所有PCM1795支持的采样率。
这个时钟输出同时供给PCM1795和STM32,STM32I2S使用主模式,驱动PCM1795发声。
但是,24.576M的频率在STM32F407的I2S模块上是不能输出192K的采样率的,因为STM32F407的I2S时钟需要至少四分频,于是乎最低时钟要求=192k*32*2 *4倍频=49.152M
手册上是禁止使用2分频的,我通过直接操作寄存器使他二分频,可以实现播放,但是会在关闭端口查BSY位时死循环。我手动写数据进去,可以实现关闭,但还没找到完美的解决方法。
运放这边,使用在淘宝上找汕头卖家买的运放,都能用。TI申请的opa2132做IV转换,然后opa627做LPF和线路输出,再输出给BUF634做1倍放大的耳放输出,Buf634工作在半宽模式。下一版本打算把耳放独立出来,原因是发热太厉害了,冬天都可以感觉到温度...
按计算,输出应该是1VRMS,实际没测,范围感觉合适,平时听歌音量在一半,刚刚好。音量调节我没有加入专用的衰减芯片,而是用DAC内置的衰减器衰减的。
自己木耳调音后,自我感觉不错,我自己已经满意了。
不播放时,耗电150mA左右,半音量播放时达到480mA,电源部分载荷还能接受,没有发热的情况。电池容量测试结果是3800mAh,实际播放7~8小时,自己还算满意,就是不爽功耗有点高,发热。
关于wifi,还没焊上去,打算做FTP client的。。
南宁的朋友可以联系我试听~非常欢迎,我的耳机太少,我也想试试不同的设备出什么音。
高手 绝对大作 支持了~期待开源 好 支持 {:victory:} 好厉害的楼主,怎么做到的呀 太牛了,我关注的是体积有多少大? 这……也是很厉害!围观支持 真是不错呀,请教LZ一个问题,怎样把一个WAV文件变成I2S信号呢? 顶楼主!
真心不错! 牛人啊!!
机电一体化人才。 牛人。 外观真好看! 不错,关心音质怎么样 这个必须顶! 连学生也做hifi播放器了,不错 牛B哄哄{:lol:} 不是应该是22.5792M吗? 我也做了个mp3,不过是430+vs1053的,打算下一版做个stm32f407+fpga的。我是打算用2块电池直接提供正负电压,线性ldo给运放供电,407做主控控制按键显示什么的,fpga直接读sd卡然后转成iis给dac。楼主可以参考一下。 楼主真是厉害啊! 按键是一次性筷子?{:shutup:} 可以看出来楼主的功力还可以{:loveliness:} majianjia1991加油!
青出于蓝胜于蓝,
长江后浪推前浪。 pspike 发表于 2014-1-16 22:47
不是应该是22.5792M吗?
对,是的
我原先写错了,我改一下{:handshake:} cheungman 发表于 2014-1-16 22:43
连学生也做hifi播放器了,不错
水平不够。。不敢提HIFI。。 rainyuoko 发表于 2014-1-16 23:20
我也做了个mp3,不过是430+vs1053的,打算下一版做个stm32f407+fpga的。我是打算用2块电池直接提供正负电压 ...
你的方案不错,比我这套自由多了。
FPGA我没有了解过。。不敢碰。。 xfdr 发表于 2014-1-16 21:52
真是不错呀,请教LZ一个问题,怎样把一个WAV文件变成I2S信号呢?
把WAV数据顺序不停的送给I2S模块就OK了 看见第一张图就惊呆了,绝对的牛人!做工杠杠的! 这拿出去吊炸了 惊艳!期待开源!!!! 铝制盒子的体积 102mm*67mm*22mm,个人觉得大小非常合适。内置的电路板插槽有2层,大小是100mm*62mm
更新部分图片:
关于大小,用iphone4S来对比。
厚度
跟手掌对比
板子的正面:
背面
自爆一张在宿舍的工作台
USB3300 不是USB_HS吗? xfdr 发表于 2014-1-16 21:52
真是不错呀,请教LZ一个问题,怎样把一个WAV文件变成I2S信号呢?
WAV数据流就是左右左右声道的数据的数据流的合成,只需要把他们写到到单片机的I2S模块就行。
需要先读取WAV的头,然后在里面根据数据流的通道,采样率,分辨率之类的设置好I2S模块 xp54312 发表于 2014-1-17 09:02
USB3300 不是USB_HS吗?
是的,既然有了192k 32bit的DAC,我就想设计成支持USB Audio Class 2.0
我其实是想设计成一个可以当做USB声卡用的机子,这部分代码我还不懂怎么写。。。
没有做成触摸屏,音乐文件放的多了,选起来可以费劲啊。只有5个键。 不错不错
年轻有为 pldjn 发表于 2014-1-17 09:23
没有做成触摸屏,音乐文件放的多了,选起来可以费劲啊。只有5个键。
这个问题我也考虑过,现在的界面只是移植RT-THREAD的文件浏览器例程,占用的内存挺大。
我接下来会自己写界面,然后使用音量旋钮来拉进度条,使用旋转速度和位置来做类似鼠标的动作,应该可以得到不错的手感。
现在大约50多个wav,翻页是使用左右按键来翻页,还是比较轻松的 好东西 支持 手工打造牛逼! majianjia1991 发表于 2014-1-17 09:26
这个问题我也考虑过,现在的界面只是移植RT-THREAD的文件浏览器例程,占用的内存挺大。
我接下来会自己写 ...
音质怎么样 电池用3.7的还要DCDC升压,这样可能会对音质有影响,我本来打算是用磷酸铁锂,这样多节电池可以做到比较高的电压,也比较安全。 pldjn 发表于 2014-1-17 09:44
电池用3.7的还要DCDC升压,这样可能会对音质有影响,我本来打算是用磷酸铁锂,这样多节电池可以做到比较高 ...
音质不好说,每个人都有自己的看法,我自己是满意了。比NE830好听,因为相比起来CD推力比这个小很多。
高频足够亮,但是不刺耳,低频很圆,人声方面我也觉得满意了,不好评价。。。
DCDC滤波后还是不错的,你的设计多节电池当然电源纯净很多。我怕充电不方便,才做的单节电池。因为我要去它能当声卡...多节电池需要用DC-DC的管理芯片...我水平差,做不出来 以开源库实现mp3软解码的话, 要占用多大内存? xp54312 发表于 2014-1-17 09:53
以开源库实现mp3软解码的话, 要占用多大内存?
不清楚,一共应该20k以内,主要用内存的是两个缓冲PCM缓冲和file缓冲... DA芯片是蛮高档, 对这类芯片,硬件要做那些处理, 才能保证语音的质量, 如电源噪音等问题?? xp54312 发表于 2014-1-17 10:07
DA芯片是蛮高档, 对这类芯片,硬件要做那些处理, 才能保证语音的质量, 如电源噪音等问题?? ...
我水平差,这方面我是没有发言权。。用高档芯片只是为了弥补我水平差的事实...
这方面你可以参考制作HIFI机的大神们,国内的比较乱,DIY Audio论坛可以参考。我看他们的帖子,时钟的Jitter对DAC的影响比电源大一些,我没有设备,测不出来,只能尽量选好的时钟芯片。 RTT基于 stm32f4xx 系列代码 和 原理图, 在那里下载,
麻烦楼主给个连接 牛…………………… jiaxinhui 发表于 昨天 22:40static/image/common/back.gif
这个必须顶!...
请去rt thread那找官方的realtouch项目和 art项目,都是基于stm32f407的f42x 43x的我还没了解 {:victory:}不明觉厉{:shocked:} majianjia1991 发表于 2014-1-17 08:17
你的方案不错,比我这套自由多了。
FPGA我没有了解过。。不敢碰。。
我之前也没用过fpga,现学呗。。感觉430同时搬数据和控制有点费劲,数据速度不够,320k wma偶尔会卡。所以下一版打算fpga直接读数据到dac。现在这个用的是这个外壳 item.taobao.com/item.htm?id=19325848209 ,上下两块板子,上层液晶按键,下层主板,剩余空间也就够放一块3.5mm厚,1350mah锂电+海绵胶固定。自己做个什么东西外壳是个大问题。。纠结 另外我看楼主接口部分好像没加ESD,有条件还是尽量加上比较好。时钟jitter确实影响比较大,这也是我打算用fpga给dac信号的原因 筷子做按钮, 碉堡!
LZ手工赞一个! 顺便问一下LZ外壳的材料是那里弄的? 供电部分,有条件还是用两块电池比较好,不行的话先dc-dc升压和负压转换,再线性稳压。 mark 赞一个,很漂亮的说,不过看楼主桌子比我乱多了! ~just_yy 发表于 昨天 21:12static/image/common/back.gif
高手 绝对大作 支持了~期待开源...
嗯嗯是的,我的基础不好,非电子专业,没有系统学习过。我还得慢慢学习ESD majianjia1991 发表于 昨天 21:03static/image/common/back.gif
本帖最后由 majianjia1991 于 2014-1-17 09:23 编辑
放寒假了,今天刚刚回到家,马上将我许诺已久的帖子发出来。
MCU:STM32F407ZGT6...
手机版论坛回帖不方便,手一抖就发出去了。 我回去在看看你看好的外壳。你这样设计的话,电池会不会不够地方放呢?我是为了省事,也是我单板设计的原因,同时可以塞下一块超大的电池。电池大了,充电时间是个问题,现在需要10个小时才能充满,如果是usb供电,几乎充不进电了…430做这个确实不够给力。 xfdr 发表于 昨天 21:52static/image/common/back.gif
真是不错呀,请教LZ一个问题,怎样把一个WAV文件变成I2S信号呢?...
乱桌子可以练习记忆力~哈哈 有什么意义,这种产品 tragedy 发表于 昨天 21:25static/image/common/back.gif
好厉害的楼主,怎么做到的呀...
淘宝上直接搜索铝盒 可以看到我这款 PCBBOY1991 发表于 昨天 22:07static/image/common/back.gif
外观真好看!...
练手用,没有技术含量的 不得不说,真是个牛人 楼主能给个keil下的模板不啊? 牛人,呀 {:lol:} LZ啥时候有空,我可以上门刷下限。 赞一个
楼主你的贴片那么小,是怎么焊上去的啊? 牛人~~~~ 高大上的音量旋钮。 aozima 发表于 2014-1-17 17:08
高大上的音量旋钮。
大神好眼力! rainyuoko 发表于 2014-1-17 12:59
另外我看楼主接口部分好像没加ESD,有条件还是尽量加上比较好。时钟jitter确实影响比较大,这也是我打算用f ...
手机版论坛不给力,回复引用都乱掉了。
ESD我还得继续学习,非电子专业,没有系统地学过。。 高端大气上档次,弱弱的问一句,那个外壳在哪家淘宝买的?我也想搞一个。 majianjia1991 发表于 2014-1-17 09:05
WAV数据流就是左右左右声道的数据的数据流的合成,只需要把他们写到到单片机的I2S模块就行。
需要先读取W ...
谢谢楼主回复,目前做好了模拟信号转S/PDIF信号,光纤,同轴输出,给生产线测试功放用的,打算做个带光纤同轴输出的音乐播放器,向楼主学习一下。 MARK~~好东西 LZ是一个综合型人才,赞 90999 发表于 2014-1-17 15:42
LZ啥时候有空,我可以上门刷下限。
大师出现了{:titter:} 我做的,mp3,供楼主参考。里面空间是比较挤的,上下两层板子,剩下的空间刚好够放一块1350mah锂电+固定
外壳基本和楼主做法一样,慢慢磨的
顶部,从左到右是耳机,mic,line-in,录音部分还没有写
底部从左到右是tf卡,usb,电源开关。usb现在只有充电功能,mass storage程序还没写
右下角白色的一道是引出的jtag插针,为防止短路外面插了个剪掉脚的插座
{:sad:}mark rainyuoko 发表于 2014-1-17 22:55
大师出现了
南宁本地很多烧友的。
我只是其中一个。 用心的折腾,顶 好东西,期待开源。。。 支持 不错不错。 这个真的很棒,支持 好吧,都做出来了,就数我的进度慢了,哈哈,赞一个 话说,楼主有没有测量,播放96k24bit和92k24bit,407需要跑到多高的主频,耗电怎样?? 太厉害了 本帖最后由 majianjia1991 于 2014-1-20 00:25 编辑
dudududu 发表于 2014-1-18 23:21
话说,楼主有没有测量,播放96k24bit和92k24bit,407需要跑到多高的主频,耗电怎样??
不好意思,这几天忙于各自事情
刚刚有空测了一下,做了个STM32F407在168M下对WAV文件进行播放的能力。
部分截图
32k 16bit
44k_16bit
44k 24bit
44k_32bit
96k_16bit
96k_24bit
96k 32bit
192k_16bit
192k 24bit
192k 32bit
这是总汇,空的是没有测试文件。
测试所用的文件是一张MJ的Thriller 192k 24bit的镜像用千千静听转的,这里不说音质。
CPU测试是1秒内的平均值,所以对于96k以下的文件来说,误差会比较大,因为我的文件缓存开得比较大,有16k,比如对于44k 16bit的文件来说,只需要读取11次即可播放1秒的时间。
我是使用SPI总线驱动SD卡的,最高读取速度在3.8Mbyte/s,8k缓存下,在3.0Mbyte/s,对于192k 32bit的文件1536kbyte/s的数据流,还是足够的,但实际中跟卡的关系很大,因为卡的寻道延迟实际会非常拖慢这个读取速度,我这测试的4张TF卡,有一张是不能流畅播放的。
可以看到,STM32F407可以轻松地应对192k下各种分辨率的WAV文件。如果能使用F429之类带SAI接口的单片机,就可以不需要原始的I2S模块,解放SDIO口,这么样子就可以兼容更多的卡。
至于为啥48k码率下占用CPU比44k下小。。我也不知道为啥。
另外,16bit的数据占用的CPU都是非常少的,是因为文件读取出来的数据流直接可以传入I2S接口,整个操作都是由DMA完成。至于这里192k下cpu占用变高,是因为寻道的次数加大了,RTT的SPI设备下寻道是需要等待SD卡的返回的,这个似乎没有办法。
而24bit,32bit,因为大小端问题,需要将高低位换位,这里需要去细心优化,优化完成后,基本就是我的测试结果那样。
rainyuoko 发表于 2014-1-17 23:42
我做的,mp3,供楼主参考。里面空间是比较挤的,上下两层板子,剩下的空间刚好够放一块1350mah锂电+固定
外 ...
你的相当不错啊,空间利用率比我的高多了。。接口设计得也好看!
我那个里面松松的。。 本帖最后由 majianjia1991 于 2014-1-20 07:12 编辑
90999 发表于 2014-1-18 02:28
南宁本地很多烧友的。
我只是其中一个。
哈哈~ 我学生一个,没啥设备,几个小耳机都没个正牌货呢。。
不过如果能去你那拜访一下会比较有意义{:titter:}
majianjia1991 发表于 2014-1-20 00:22
不好意思,这几天忙于各自事情
刚刚有空测了一下,做了个STM32F407在168M下对WAV文件进行播放的能力。
恩,很好,有没有机会测试下MCU的耗电情况,我猜测如果只是播放44.1k16bit或者48k16bit的文件,MCU工作在30MHz的主频就足够了,这样就可以大大减小功耗延长续航时间,192k24bit估计主频要跑到80MHz以上,甚至100MHz以上才行,这样功耗会增大很多 其实做编写播放器的话,NXP的M4更加合适,相比较STM32F4,其相同工作条件下,功耗更小(小很多),并且I2S外设没有什么BUG,slave模式是可以正常工作的,这样就可以直接使用外部时钟,更加符合hifi的需求{:lol:}
就是NXP官方推广力度不够大,主要是没有像discovery这样超级便宜实惠的开发板{:lol:} mark 筷子按键帽,很有创意! 厉害,年轻有为啊 dudududu 发表于 2014-1-20 09:43
其实做编写播放器的话,NXP的M4更加合适,相比较STM32F4,其相同工作条件下,功耗更小(小很多),并且I2S ...
NXP的我不熟...
想用STM32F429来做... 可惜不好买呀。
耳放感觉要换,功耗太TM高了。下一版耳放板单独做,可以尝试不同的耳放。有些单IC的耳放芯片,做得很不错的,功耗又低。。 过来顶贴的,lz的真心不错,外观漂亮。 dudududu 发表于 2014-1-20 09:43
其实做编写播放器的话,NXP的M4更加合适,相比较STM32F4,其相同工作条件下,功耗更小(小很多),并且I2S ...
NXP的也挺好的,看看今年是否可以出一个便携版本
选择的是NXP的LPC4088
为4.3寸重写的UI界面,现在也可以使用UI builder工具来进行UI设计了
UI builder工具,可视化设计界面,然后生成代码(或者使用解析脚本),和RT-Thread一起编译或编译成单独的App
固件远程升级,可以通过网络把固件下载下来升级
后面还有个强悍的AppStore,这样想要一个douban电台,就可以直接安装豆瓣App就可以了
ffxz 发表于 2014-1-21 09:19
NXP的也挺好的,看看今年是否可以出一个便携版本
选择的是NXP的LPC4088
你这个NXP最小系统版,便携起来不容易啊,功耗不小的说 ffxz 发表于 2014-1-21 09:19
NXP的也挺好的,看看今年是否可以出一个便携版本
选择的是NXP的LPC4088
bga的个人基本没法焊啊,而且布线很麻烦吧 dudududu 发表于 2014-1-21 10:17
你这个NXP最小系统版,便携起来不容易啊,功耗不小的说
为什么呢,SDRAM功耗大?
页:
[1]
2