原创 超强,硬盘MP3播放机DIY!!!(含原理图、源代码)我们一起来DIY

2008-8-19 10:41 4334 5 6 分类: 消费电子
图片:
20052262043899.jpg

图片:
2005226201012772.jpg

图片:
点击看大图

图片:
2005226204345663.jpg

图片:
点击看大图

图片:
2005226205354103.jpg

图片:
2005226205354817.jpg

图片:
2005226213540102.jpg

图片:
2005226213541869.jpg

图片:
2005226213541178.jpg

图片:
2005226214255759.jpg

图片:
2005226214256682.jpg

图片:
2005226214257939.jpg

图片:
2005226215744811.jpg

图片:
2005226215745236.jpg

图片:
2005226215746962.jpg

图片:
2005226221616954.jpg

图片:
2005226221617877.jpg

图片:
2005226221617592.jpg

图片:
2005226224234432.jpg

DIY自己的MP3的一个很大原因是手头有几个小硬盘(1,2个G),扔了可惜,放在电脑里简直是浪费主板的IDE接口,相信DIY玩家们都深有同感吧。所以我就想,如果不需要PC,直接接个解码板就可以播放里面的MP3,那该是多好的事情啊。




MP3播放机的工作原理



  首先来看看硬件结构:




[UserCP=1][/UserCP]



  一个完整MP3播放机要分几个部分:中央处理器、解码器、存储设备、主机通讯端口、音频DAC和功放、显示界面和控制键。如上图。其中中央处理器和解码器是整个系统的核心,在我的DIY作品中,这两个部分集成在一个芯片中。这里的中央处理器我们通常称为MCU(单片微处理器),简称单片机。它运行MP3的整个控制程序,也称为fireware。控制MP3的各个部件的工作:从存储设备读取数据送到解码器解码;与主机连接时完成与主机的数据交换;接收控制按键的操作,显示系统运行状态等任务。解码器是芯片中的一个硬件模块,或者说是硬件解码(有的MP3播放机是软件解码,由高速中央处理器完成)。它可以直接完成各种格式MP3数据流的解码操作,并输出PCM或I2S格式的数字音频信号。





  存储设备是MP3播放机的重要部分,通常的MP3随身听都是采用半导体存储器(FLASH MEMORY),在我的作品中是用硬盘存作为存储器。它通过主机通讯端口传来的数据(通常以文件形式),回放的时候MCU读取存储器中的数据并送到解码器。数据的存储是要有一定格式的,众所周知,PC管理磁盘数据是以文件形式,MP3也不例外,最常用的办法就是直接利用PC的文件系统来管理存储器,微软操作系统采用的是FAT文件系统,这也是最广泛使用的一种。播放机其中一个任务就是要实现FAT文件系统,即可以从FAT文件系统的磁盘中按文件名访问并读出其中的数据。



  主机通讯端口是MP3播放机与PC机交换数据的途径,PC通过该端口操作MP3播放机存储设备中的数据,拷贝、删除、复制文件等操作。目前最广泛使用的是USB总线,并且遵循微软定义的大容量移动存储协议规范,将MP3播放机作为主机的一个移动存储设备。这里需要遵循几个规范:USB通信协议、大容量移动存储器规范和SCSI协议。



  音频DAC是将数字音频信号转换成模拟音频信号,以推动耳机、功放等模拟音响设备。这里要介绍一下数字音频信号。数字音频信号是相对模拟音频信号来说的。我们知道声音的本质是波,人说能听到的声音的频率在20Hz到20kHz之间,称为声波。模拟信号对波的表示是连续的函数特性,基本的原理是不同频率和振幅的波叠加在一起。数字音频信号是对模拟信号的一种量化(如下图),典型方法是对时间坐标按相等的时间间隔做采样,对振幅做量化。单位时间内的采样次数称为采样频率。这样一段声波就可以被数字化后变成一串数值,每个数值对应相应抽样点的振幅值,按顺序将这些数字排列起来就是数字音频信号了。这是ADC(模拟-数字转换)过程,DAC(数字-模拟转换)过程相反,将连续的数字按采样时候的频率顺序转换成对应的电压。MP3解码器解码后的信息属于数字音频信号(数字音频信号有不同的格式,最常用的是PCM和I2S两种),需要通过DAC转换器变成模拟信号才能推动功放,被人耳所识别。






  MP3播放机的显示设备通常采用LCD或者LED发光二极管。显示系统的工作状态。








  控制键盘通常是按钮开关。键盘和现实设备合起来构成了MP3播放机的人机交互界面。





  MP3播放机的软件结构跟硬件是相对应的,即每一个硬件部分都有相应的软件代码,这是因为大多数的硬件部分都是数字可编程控制的。最简化的MP3软件处理任务只有两个操作:



  1. 读取存储器上的数据,送到解码器,解码器的输出送到音频DAC;



  2. 分析USB主机控制器发的指令,完成对存储器的操作,将操作结果送回USB主机。



  前一个处理过程完成了MP3数据的回放,后一个处理过程实现了USB移动存储器。这两个过程也是整个软件部分最复杂的。除此之外的部分都是为了实现主要功能设计的,由于篇幅限制,不能对每个模块详细说明。




DIY过程



  如此复杂的一个系统,DIY的过程也是漫长艰难的,从最初到初步完成历时8个月。大致分成几个阶段:资料搜集和器件选型、绘制电路图、制作印刷电路板、焊接和硬件调试、软件编码、外壳包装。



  资料搜集和器件选型



  这项工作我很早就开始了。 小小的MP3播放机汇聚了多项标准协议,包括MP3标准本身,用于存储的FAT文件系统,USB通信协议和微软大容量移动存储标准。互联网真是个好东东,假如没有互联网,这个东西恐怕也不可能造出来。所有的参考资料都来自于网络。



  资料是有了,能否实现关键依赖于能否找到合适的器件。好在一开始就选定了ATMEL公司的MP3单芯片解决方案,这颗IC真是做MP3绝好的选择,它集成了MP3需要的大多数部件。外围芯片也很重要,首先要解决的就是音频DAC,选择的要点是要能与解码器输出的数字音频信号格式匹配,其次要考虑价格,是否能买到等因素。剩下的就是一些普通芯片了,逻辑门、存储器,电源、功放、各种插件等。这可是一个痛苦的过程,在网上找到资料,经研究符合使用条件,于是就到市场上找,买到后回来做实验。很多器件不是很容易就能买到的,买不到就得重新查资料,选新的型号,然后再去市场。辗转很多次,最终定了现在看到的这些东西。





  接下来是绘制电路图。首先要做的是根据各种芯片的数据手册绘制原理图,工具是protel 99se,这是一个广泛使用的电路图CAD软件。






  原理图设计好后是画印刷电路板图(简称PCB)。这种复杂程度的电路图至少要用双面板来设计了,否则走线根本走不通。这个过程需要准确测量元件的外形尺寸,安排他们的位置,叫做元件布局。当然大多数元件都有标准的外形尺寸,我们叫做封装。所有的元件位置放好后就开始布线了(将原理图中标记的需要连通的两个管脚在线路板上用连起来)。虽然PROTEL提供了自动布线的能力,但是机器布线的目标是全部走通,并不考虑美观问题和走线对信号的影响(这点在高速电路中尤其重要,MP3还不算是高速系统)。最终布线的结果就是下面这个样子。






  接下来就是制作印刷电路板,如此密度的线路板已经不可能手工制作了,只能外包加工。电子市场有很多加工线路板的厂家,交给他们做就好了,这个我也不多介绍了。下面的图就是最终做好的线路板,表面一层绿色的是阻焊层,因为多数IC的管脚非常密,如果没有阻焊层焊接的时候很可能造成短路。银白色的叫做焊盘,因为没有被阻焊层覆盖,裸露的铜表面烫了一层焊锡,为了将来焊接更方便。





焊接



  焊接是个很大的挑战,为了小型化和降低布线难度,大部分器件都采用表面焊接技术,表面焊接的器件特点是IC的管脚密度很大,阻容元件体积很小。其中主芯片有84个引脚,分布在芯片四周,两管脚的中心距只有0.65mm,间距更是小到0.35mm。最小的是FLASH存储器的管脚,中心距只有0.5,间距0.3mm。手工焊接这样的器件一般有两种方法,一种就是用普通烙铁焊,焊接短路的地方用吸锡带修整;另一种就是用热风抢吹。我没有热风抢,只能用前一种方法。下面是我的焊接工具。





电路调试



  线路板不能一次把所有的器件焊上,主要是为分部测试考虑,如果一下都焊上,有的器件有问题,影响整个电路工作,就不好找原因了。要先焊主芯片,以及主芯片运行所必需的一些外围器件,完成后可以加点,看看主芯片是否正常运行。正常情况主芯片内部有一个引导程序(相当于PC的BIOS),它运行后连接USB总线能够被PC发现新硬件。



  这些正常后可以继续焊完其他的器件。如下图,就是焊接完成的板子。其它部分的硬件需要程序来测试,比如硬盘的读写,串口通信,液晶显示,键盘处理等。针对每个部件写一段最简单的程序进行测试,证明其能正常工作。





  软件编码



  完成了上面的所有工作,大约值进行了整个工程的30%,软件至少占了50%的工作量。由于要实现文件系统和USB的通讯协议,需要大量复杂的数据结构和运算,为了提高开发效率,完全使用C语言来写程序。软件编码很抽象,不象硬件值做那样直观,也就不过的描述了。这部分工作最终的结果就是赋予MP3播放机以灵魂,使一堆密密麻麻的电路动了起来,能够接受人的控制,显示自己的状态,读取硬盘的数据,最终播放出音乐。




  由于程序都是分模块写的,我没精确统计过程序长度,大概估计有4000行C源代码,编译后有40多KB。也许朋友们会问怎么这么少?这对MCU来说已经很大了,要知道这个芯片只有64K的地址空间,也就是程序最大不能超过64K。






  至此可以说一个完整的MP3播放机已经诞生了,来看看它的完整照片。剩下的就是给他弄个外壳了。



  这个壳子在电子市场随便就可以买到。选了半天就是为了能把上面图中的这些东西都放进去。回到家开始对壳子进行改造,上学的时候我们称这种活为土木工程,需要动用电动工具。把各个定位空都画好后,打空,用锉刀修整。最后打造出面板和背板。










外壳内部也需要改造,做一些支架固定线路板、硬盘、电源、液晶等等。











  这就是最后的整机了。放在桌子上,书架上还是很好。如果你的MM宿舍没有电脑,送给MM放在宿舍也不错,呵呵。



制作后记



  半年多的努力终于有了成果,由于是完全由自己DIY的东西,还有不少技术细节很难在这里完全表达清楚,而且我还要不断完善我的这个作品。马上要做的是给它加上遥控器,随便找一个家电的遥控器就可以控制。



  最后,我要对大家说的是,一些产品并不是我们想像中的那么高深莫测的,只要肯动脑动手去摸索,其实是可以弄明白它的原理及制法的。通过这篇文章,我希望能让更多的朋友尝试这个原本让人不敢接触的领地,让朋友们能轻松打造自己的MP3播放机。不过我也知道不少朋友单是通过这篇文章恐怕还很难完全掌握所有的细节,真正制作起来可能还存在着这样那样的疑问。

文章评论3条评论)

登录后参与讨论

用户1420872 2008-10-4 14:34

向你致敬!!! 太强了 什么时候我也学学!!!!

用户164889 2008-9-11 17:25

LZ 很有专研精神。强!

用户151534 2008-8-19 13:38

强~~~~确实强
相关推荐阅读
用户461316 2009-08-17 17:57
Zigbee星型网络组网程序段
最近一直在做Zigbee的星型网络的组网试验,由于时间的原因,现在只是在最高的应用层上来编写程序。即协议栈的程序是2430的开发商(无限龙)编写的,我只是调用相应的函数来完成组网的,星型网络组网部分的...
用户461316 2009-08-17 17:14
VB6的标题栏使用上真彩色图标
模块 ModIcon.Bas 代码: Option Explicit Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long...
用户461316 2009-08-17 16:58
AppendToLog一个API方式存取日志文件的模块
'**************************************' 模块名称: AppendToLog' 功能描述:一个很不错的日志文件写入模块,不同于'     open/print/...
用户461316 2009-08-17 16:57
(VB自定义函数)去除字符串中的空格
'去除字符串中的空格(方法一)Public Function DelBlank(SearchString As String)   DelBlank = Replace(SearchString, C...
用户461316 2009-08-17 16:56
(VB自定义函数)对任意输入的汉字,可以得到它的拼音的第一个字母
调用方法:Command1.Caption = getHzPy("你")'//函数入口为汉字串,返回值为该汉字的第一个字母Public Function getHzPy(hzStr As String...
用户461316 2009-08-17 16:54
VB_代码执行速度测试
'**************************************'Windows API/Global Declarations for :[ '     A Simple] code ...
我要评论
3
5
关闭 站长推荐上一条 /2 下一条