基于单片机的MP3播放器设计毕业设计
基于单片机的MP3播放器设计1
音频信号数字化后所面临的一个不容忽视的问题是:巨大的数据量给存储和传输带来的压力。因此音频压缩技术在广播专业领域、网络传输及多媒体应用中受到广泛关注,成为音频信号处理的关键技术之一。MPEG(Moving Picture Experts Group)运动图像专家组,在1992年底制定了第一个世界范围的Hi-Fi(High-Fidelity)质量的音频编码标准MPEG-1。MPEG-1分为三种不同的方式,称为Layer1、Layer2和Layer3。序号越高,复杂性越大,但是可提供更好的编码效率,特别是在低比特率时。MP3就是MPEG-1 Layer3,是基于感知编码的算法,目前在CD音质的声音压缩方面,是一种通用的方法。使用MP3标准对于音频数据编码既可以获得较大的音频数据压缩比,又可以得到较好的音乐回放质量。MP3的解码器结构复杂,涉及到大量的数学计算,对处理器与内存的要求相当高。目前,AT89C51处理器以其高性价比,丰富的外设资源,越来越受到各种嵌入式研发人员的青睐[5-7]。基于以上背景,我在此次设计中提出了AT89C51SND1C微处理器的软件解码方案,在降低硬件成本的基础上保证高质量的播放效果。
1.2.2 课题研究的意义
MP3音频播放器的最合理工作速度为30Mips,而一个典型的视频媒体播放器的理想速度则为175Mips,所以提高MP3的工作速度,以及改善MP3的音质是最关键的,也是亟待解决的问题。
MP3是一种典型的嵌入式设备,而现在市场上比较常见的是闪存式MP3。由于闪存式MP3的容量限制,使它存储歌曲数目较少,在功能上也很难实现多样化。而硬盘式MP3的多功能及大容量,也必将受到不少消费者的喜爱。
另外一个原因是近年来,嵌入式系统与单片机开发的有机结合,已广泛被应用于网络通信、工业控制、机顶盒、PDA等诸多领域[8]。本文提出了一种基于单片机的MP3播放器的设计方案,这就进一步的体现了该设计的灵活性。目前该设计方案已经实现,实践证明,此播放器拥有市面MP3所有的全部功能并能够很好的运行。
MP3播放器一般分成3个部分:CPU、MP3硬件解码器存储器。其中可以将前两部分集成在一起,即带MP3硬件解码器的CPU;或将后两部分集成在一起,即集成硬件解码、D/A转换及音频输入。存储器可以是Flash存储器或硬盘。通过用MP3编码技术,可以得到大约12:1压缩的有损音乐信号。尽管MP3音乐是有损的,它在压缩过程中对功率谱较弱的信号有所丢失,但它同CD原声区别不大,不影响一般音乐爱好者对音乐的欣赏。MP3大大缩小了声音文件的长度,使音乐的存储和传输更方便。
2 MP3的编解码过程
2.1 MP3的工作原理
一个完整MP3播放器要分几个部分:中央处理器、解码器、存储设备、主机通讯端口、音频D/A和功放、显示界面和控制键、其中中央处理器和解码器是整个系统地核心。这里的中央处理器我们通常成为MCU(单片微处理器),简称单片机。它运行MP3的整个控制程序,也称为fireware(或者固件程序)。控制MP3的各个部件的工作:从存储设备读取数据送到解码器解码;与主机连接时完成与主机的数据交换;接收控制按键的操作;显示系统运行状态等任务。解码器是芯片中的一个硬件模块,或者说是硬件解码(有的MP3播放机是软件解码,由高速中央处理器完成)。它可以直接完成各种格式MP3
本课题来源于生产实践
数据流的解码操作,并输出PCM或I2S格式的数字音频信号[10]。
存储设备是MP3播放机的重要部分,通常的MP3随身听都是采用半导体存储器(FLASH MEMORY)或者硬盘(HDD)作为储存设备的[11]。它通过接收储存主机通讯端口传来的数据(通常以文件形式),回放的时候MCU读取存储器中的数据并送到解码器。数据的存储是要有一定格式的,众所周知,PC管理磁盘数据是以文件形式,MP3亦不例外,最常用的办法就是直接利用PC的文件系统来管理存储器,微软操作系统采用的是FAT文件系统,这也是最广泛使用的一种[12]。播放机其中一个任务就是要实现FAT文件系统,即可以从FAT文件系统支持的磁盘中按文件名访问并读出其中的数据。
主机通讯端口是MP3播放机与PC机交换数据的途径,PC通过该端口操作MP3播放机存储设备中的数据,拷贝、删除、复制文件等操作。目前最广泛使用的是USB总线,并且遵循微软定义的大容量移动存储协议规范,将MP3播放机作为主机的一个移动存储设备。这里需要遵循几个规范:USB通信协议、大容量移动存储器规范和SCSI协议[13-15]。
音频DAC是将数字音频信号转换成模拟音频信号,以推动耳机、功放等模拟音响设备。这里要介绍一下数字音频信号。数字音频信号是相对模拟音频信号来说的。我们知道声音的本质是波,人们能听到的声音频率在20Hz到20kHz之间,称为声波。模拟信号对波的表示是连续的函数特性,基本的原理是不同频率和振幅的波叠加在一起。数字音频信号是对模拟信号的一种量化,典型方法是对时间坐标按相等的时间间隔做采样,对振幅做量化。单位时间内的采样次数称为采样频率。这样一段声波就可以被数字化后变成一串数值,每个数值对应相应抽样点的振幅值,按顺序将这些数字排列起来就是数字音频信号了。这是ADC(模拟—数字转换)过程,DAC(数字—模拟转换)过程相反,将连续的数字按采样时候的频率转换成对应的电压。MP3解码器解码后的信息属于数字音频信号(数字音频信号有不同的格式,最常用的是PCM和I2S两种),需要通过DAC转换器变成模拟信号才能推动功放,被人耳所识别。
2.2 MP3播放器编码过程
2.2.1 编码分析
一、音频信号数字化
信号的数字化就是将连续的模拟信号转换成离散的数字信号,一般需要完成采样、量化和编码三个步骤,如图2-1所示。采样是指用每隔一定时间间隔的信号样本值序列来代替原来的时间上连续的信号;量化是用有限个幅度近似表示原来的时间上连续变化的幅度值,把模拟信号的连续幅度变为有限数量、有一定时间间隔的离散值;编码则是按照一定的规律,把量化后的离散值用二进制数码表示。上述数字化的过程又称为脉冲编码调制,通常由A/D转换器来实现。
模拟音频信号 低通滤波器 采样 数字流 编码 量化 图2-1音频信号数字化
数字音频信号经过处理、记录或传输后,当需要重现声音时,还必须还原为连续变
化的模拟信号。将数字信号转换成模拟信号为D/A转换。
数字音频的质量取决于采样频率和量化位数。采样频率越高,量化位数越多,数字化后的音频质量越高。 二、音频采样
采样就是从一个时间上连续变化的模拟信号取出若干个有代表性的样本值,来代表这个连续变化的模拟信号。一个在时间和幅值上都连续的模拟音频信号的函数表示为xt,采样的过程就是在时间上将函数xt离散化的过程。一般的采样是按照均匀的时间间隔进行的。设这一时间间隔为T,则取样后的信号为xnT,n为自然数。
根据奈奎斯特采样定理:要从采样值序列完全恢复原始的波形,采样频率必须大于或等于原始信号最高频率的2倍。设连续信号xt的频谱为xf,以采样间隔时间T抽样得到离散信号xnT,如果满足ffc时,其中fc是截止频率,即T1fc时,可以
2由xnT完全确定连续信号xf,如公式(2-1)所示。
xfTxnt2fnT (2-1) 因此,可由离散信号xnT完全确定频谱xt,如公式(2-2)所示。
xtnxntsinTntnTT (2-2)
tnT当采样频率为1/2T时,即fn1T时,称fn为奈奎斯特采样频率。
2三、音频量化
采样把模拟信号变成了时间上离散的样值序列,但每个样值的幅度仍然是一个连续的模拟量,因此还必须对其进行离散化处理,将其转换为有限个离散值,才能最终与数码来表示其幅值。量化过程是将采样值在幅度上再进行离散化处理的过程。所有的采样值可能出现的范围被划分成有限多个量化阶的集合,把凡是落入某个量化阶内的采样值都赋予相同的值,即量化值。通常这个量化值用二进制来表示,用N位二进制码字可以表示2N个不同的量化电平。存储数字音频信号的比特率为:IN•fs,其中的fs是采样率,N是每个采样值的比特数。
表示采样值的二进制的位数为量化位数,它反映出各采样值的精度,如3位能表示采样值的8个等级,8位能反映256个等级,其精度为音频信号最大振幅的1/256。量化位数越多,量化值越接近于采样值,其净度越高,但要求的信息存储量就越大。
根据以上公式可知,要减小比特率I,在2s已经确定的情况下,只能去减少N的值。N的值降低会导致量化的精度降低,N的值增加又会导致信息存储量的增加。因此在编码时就需要合理地选择N的值[16]。
均匀量化就是采用相等的量化间隔进行采样,也称为线性量化。用均匀量化来量化输入信号时,无论对大的输入信号还是小的输入信号都一律采用相同的量化间隔。因此,要想既适应幅度大的输入信号,同时又要满足精度高的要求,就需要增加采样样本的位数。
非均匀量化的基本思想是对输入信号进行量化时,大的输入信号采用大的量化间隔,小的输入信号采用小的量化间隔,这样就可以在满足精度要求的情况下使用较少的位数来表示。其中采样输入信号幅度和量化输出数据之间一般定义了两种关系,一种成为u
律压缩算法,另一种成为A律压缩算法。
采用不同量化方法,量化后的数据量也就不同。因此说量化也是一种压缩数据的方法。
四、音频编码
采样、量化后的信号还不是数字信号,需要把它转换成数字脉冲,这一过程成为编码。最简单的编码方式是二进制编码。具体说就是用n比特的二进制编码来表示已经量化了的样值,每个二进制数对应一个量化电平,然后把它们排列,得到由二值脉冲串组成的数字信息流。用这种方式组成的二值脉冲的频率等于采样频率与量化比特数的乘积,成为数字信号的数码率。采样频率越高,量化比特数越大,数码率就越高,所需要的传输带宽就越宽[17]。
音频编码方法归纳起来可分三大类:波形编码、参数编码、混合编码。波形编码是尽量保持输入波形不变,即重建的语音信号基本上与原始语音信号波形相同,压缩比较低;参数编码是要求重建的信号听起来与输入语音一样,但其波形可以不同,它是以语音信号所产生的数学模型为基础的一种编码方法,压缩较高;混合编码是综合了波形编码的高质量潜力和参数编码的高压缩效率的混合编码方法,这类方法也是目前低码率编码的方向。
2.2.2编码过程
MP3文件由一系列长度不同的帧组成,一个接着一个,就好像电影胶片一样。每一帧的前面都有一个头信息,其中就包括一些关于后继数据的额外信息。在某些编码中,这些帧可以互相影响。例如,一帧有剩余的空间,而下一帧没有,他们就可以组合起来产生一个优化的结果。在一个MP3文件的开始或者结尾,通常会存储一些额外的信息,包括歌手、曲目名、专辑名、录制时间、流派以及个人评论。这叫做“ID3”数据,当文件数目不断增长是,将会非常有用。
MP3使用两种技术获得好的压缩比:一种有损压缩,一种无损压缩。首先,压缩过程将人类根本不能听到的部分丢弃(或者至少做出可接受的折衷),然后对冗余编码进一步的压缩[18]。然而,正是第一部分的压缩做了大部分的工作,也具有更多的复杂性,这里也被更多的考虑。
MP3编码工具分析信号源,把它分解为各种数学模板,并与编码器存储的心理声学模板进行比较。编码器就可以丢弃大部分不匹配的数据。
MP3编码过程可以分成几个步骤:首先,将信号分解成称为帧的组建片、每一帧持续不到一秒。这和电影中的帧很类似。第二,分析信号已决定其“光谱能量分布”,也就是说,在整个可听频率的光谱范围内,找出怎样将比特流进行分布,以产生最好的音频编码。因为频率光谱的不同部分使用相同的算法,经过轻微的变换,可以进行高效编码,这一步将信号分解为子带(sub-bands),子带可以独立的进行处理以产生最优的效果(注意所有的子带都使用相同的算法,不同只是因为使用的编码器不同造成的其分配的比特流大小不同而已)。第三,要考虑数据传输率,它决定了每一帧能够分配的比特最大值。例如,如果数据传输率是128kbit/s,那么每一帧可以分配的数据上限就确定了(除非使用变比特率方法)。这一步决定了可以存储多少可获得的数据以及有多少数据被丢弃。把每一帧的频率分布于人类心理声学的数学模板进行比较(数学模板作为一个索引表存储在编/解码器中),从这些模板中就可以决定,哪些频率应该准确的渲染表现出来,那些频率可以丢弃或者分配较少的bit。第四,经过Huffman编码的处理,这个过程去处取样的冗余信息。Huffman编码与心理声学模型并不相关,它只是通过传统的压缩方式获得额外的压缩比。因此,读者可以看到,整个MP3编码过程是:首先,利用所有的心理声学模板选择性的丢弃大量数据,然后压缩剩余的数据,消除冗余。其中的第二步,并不丢
弃数据,它仅仅使用更小的空间存储剩余的数据。把一定数量的帧集合起来,再在每个数据帧前加上头信息,就组装成一系列的比特流,头信息主要包括一些相关帧的指令。在这个过程中,许多其他因素需要考虑,这经常在开始编码前就需要预先设定。另外,对每个单独的帧的编码算法经常还依赖于对前一帧和后一帧。整个过程包含了某种程度的同步,前面的步骤并不必须按顺序进行[19]。
MP3的声音数据分成帧,每帧包含1152个样本的数据,由32个子带分别输出MP3的编码器输入,以12个样本为一组,每组样本经过时间-频率变换之后进行一次位分配并记录一个比例因子(scale factor)。位分配的信息告诉解码器每个样本由几位表示,比例因子用6位表示解码器,使用6位的比例因子乘以量化器的每个输出样本值,以恢复被量化的子带值。比例因子的作用是充分利用量化器的量化范围,通过位分配的比例因子相配合,可以表示的动态范围超过了120dB的样本[20]。
MP3使用了从ASPEC(Audio Spectral Perceptual Encoding)和OCF(Optimal Coding In The Frequency domain)导出的算法。在滤波器组上,MP3在使用了正交镜像滤波(和MP1和MP2相同)后,紧跟着使用了改进离散余弦变换MDCT(Modified Discrete Cosine Transform),对正交镜像滤波的不足进行了一些补偿。MDCT把子带的输出在频域里进一步细分已达到更高的频域分辨率。而且通过对子带的进一步细分,编码器部分消除了多相滤波器组引入的混迭效果。
MP3编码器的详细框图如图2-2所示。
分析滤波器组 MDCT动态加窗 比例器和量化器 哈夫曼编码 MCU FFT 掩蔽域值 边信号编码器 合成滤波器组 逆MDCT动态加窗 逆比例器和量化器 哈夫曼解码器 MCU 数字通边信号解码器
图2-2 MP3编码器和解码器的结构
MP3指定了两种MDCT的块长:长块的块长为18个样本,短块的块长为6个样本,相邻变换的窗口之间有50%的重叠。长块对于平稳的声音信号可以得到更高的频域分辨率,而短块对跳变的声音信号可以得到更好的时域分辨率。在短块模式下,3个短块代替了一个长块,短块的长恰好是一个长块的1/3,所以MDCT的样本数不受块长的影响。给定的一个帧声音信号,MDCT可以全部使用长块或全部使用短块,也可以长短块混合使用。因为低频区的频域分辨率对音质有重大影响,所以在混合块长模式下MDCT对低频的2个子带使用长块,而对其余的30个子带使用短块。这样,既能保证低频区的频域分辨率,又不会牺牲高频域的时域分辨率。长块和短块之间的切换有一个过程,一般用一个带特殊长转短或者短转长数据窗口的长块来完成这个长短块之间的切换。除了使用
MDCT外,MP3还采用了其他许多改进措施来提高压缩比而不降低音质。虽然MP3引入了许多复杂的感念,但是它的计算量并没有比MP2增加许多。增加的主要是编码器的复杂度和解码器所需要的存储容量。
2.3 MP3播放器解码过程
作为一个整体,MP3系统的大部分工作放在了解码部分。但是,普通用户主要是播放MP3文件而不是制造它,这里将重点介绍解码过程。解码器并不需要存储或者利用人类心理声学理论,也不需要进行比特分配过程。MP3播放器所关注的只是检查比特流的头和频谱分布的数据帧,以及和它们存储在一起的边信息,然后再将重建这些信息为音频信号。从某种意义上说,播放器其实就是一个MP3文件、播放列表和声卡的接口,将它们包装为相对简单明了的解码MP3比特流格式的规则。
不同的MP3解码器在效率上有着很大的不同,同样在解码后声音的质量上也有很大的不同,在过去的几年里,这些不同对计算机硬件的依赖在很大程度上被忽视了,实际上解码器也同样要消耗大量系统资源的。这在那些没有良好微线程特征的操作系统中特别的明显,如果有适当的硬件,可以在很大程度上免除MP3的中断的问题。
一些MP3解码器比其他解码器占用更多的CPU时间,但是,用效率来衡量它们之间的区别并不比用其它特征来衡量的区别大。选择MP3播放器关系到成本、可扩展性、音频质量和外观。
图2-3为MP3的整个解码过程的流程图,与解码器的图相对应:
同步并读取帧头 重新量化 解码边信息 删除伪信号 解码比例系数 逆离散余弦变化 霍夫曼解码 转化为PCM采样
图2-3 MP3解码流程
本节主要介绍了MP3的编解码过程。MP3播放器的编码过程包括:音频信号数字化、音频采样、音频量化和音频编码。编码器将模拟信号经处理后,转换成数字信号进行传输。MP3的解码是编码的反过程,主要是从编码后的谱线成分中,经过反量化和逆变换,提取出声音信号。MP3的解码总体上可分为比特流分析,霍夫曼编码,逆量化处理,立体声处理,频谱重排列,抗锯齿处理,逆离散余弦变化,子带合成,PCM输出。
3 MP3播放器的硬件设计与实现
3.1 系统的总体设计
此次设计方案可以方便的将外部的MP3格式的音乐文件传输到本系统的存储器Flash中。如图3-1可以看出本系统的具体硬件设计主要包括:主芯片和USB接口的连接设计,此部分主要用于MP3文件的传输和固件下载;主芯片和按键以及LCD之间的设计连接,用户通过显示屏幕获取播放器的进程息,通过按键来对音乐进行选择和控制;主芯片和D/A转换器之间,这一系统将该系统解码后的数字信号转换为人耳能识别的模拟信号,这一部分主要包括时钟信号、数据信号以及反馈信号的连接;电源转换部分,本系统内部使用的电源一般为3.3V,而USB接口以及电池的电源都需要DC-DC部分来进行转换,从而为系统提供所需的3.3V电源;播放系统和存储系统的切换电路设计。
通信LCD MP3解码器 KeyboaMCU 音频功D/A转 图3-1系统硬件结构
MP3工作原理流程图如图3-2所示。
读取存储器上的信号 解码器对信号进行解码 通过D/A转换器将解码出的数字信号转换成模拟信号 把转换后的模拟音频放大 低通滤波后到音频输出
图3-2工作原理流程图
MP3播放器的软件结构跟硬件是相对应的,即每一个硬件部分都有相应的软件代码,这是因为大多数的硬件部分都是数字可编程控制的。音乐播放器首先读取存储器上的音乐信号,再通过解码器对信号进行解码分析,经解码的信号通过D/A转换器将解码出的
数字信号转换成模拟信号,然后把转换后的模拟音频放大,通过低通滤波后到音频输出。
3.2. 主电路设计
系统的主芯片采用美国ATMEL公司的AT89C51SND1C,该芯片是一个2.5~3.3 V低电压、80 mW低功耗、运算速度高、功能完善、高度集成并且低成本的单芯片数字(MPEG1,2,2.5&3)音频解码器。其特点如下:基于8位C51MCU核(最大时钟频率20MHz);内部集成了单独的MP3 解码器,而且支持48,44.1,32,24,22.05,16 kHz采样频率,支持左右声道独立的音量控制(软件使用31级)、重低音、中音、高音均衡控制(31级)、重低环绕声效果、辅助数据输出、“CRC错误”和“MPEG帧同步”指示;有44通用I/O口的嵌入式C51 Nand Flash,SSFDC,I2S,SPI和IDE多种扩展功能接口容易适应多种应用场合Flash/CD/HDD播放器等;具有适应市场上不同的D/A转换器的可编程的音频输出接口,兼容PCM格式和I2S格式;内置2304BRAM;64KBFlash程序空间和4KB引导闪存(AT89C51SNDl),在系统编程:通过USB,UART接口进行在系统编程;USB1.1控制器,“Full speed”数据传输;内置锁相环,提供MP3音频时钟和USB时钟;兼容 MultiMedia Card(MMC)卡接口、Atmel Data Flash SPI接口、IDE/ATAPI(硬盘)接口 ; 通道10位A/D转换器,8kHz(8位真有效值),包括电池电压监视和软监控的录音;AT89C51SNDIC内部结构简化后实际就是64K80C51+MP3解码器+USB,使用该芯片设计MP3播放系统具有很多优点,如支持在系统编程不需要昂贵的仿真器,系统设计成本降低;内置2304B的RAM,方便用户增加复杂的功能。AT89C51SND1内部主要资源如图3-3所示。
图3-3 AT89C51SND1C 内部主要资源
此外,由于该芯片内部集成了大量的接口,所以只需要很少的外围器件如DC-DC,音频D/A转换器和存储器就可以实现系统的要求,这样可以做到系统空间很小,这一点正好适应现代系统设计的纤小而功能全面的要求。
该芯片共80引脚,封装为TQFP80,就是四边各20引脚的贴片封装。图3-4为AT89C51SND1的引脚定义。对于功能复用的引脚要慎重考虑。本设计并没有使用单片机的全部功能,部分没有占用的IO端口和MMC等专用借口都用扩展槽引出了,可以用来扩展其他电路。 管脚说明: ·IO端口
P1-P3和8051功能相同。P1端口第二功能有KIN3:0 SCL SDA P4具有8-bit内部上拉IO.第二功能 MISO MOSI SCK SS P5具有4-bit内部上拉IO. 时钟信号管脚 ·X1 I
输入芯片上反向振荡放大器
使用内部振荡器,晶振/谐振器电路连接到该管脚。如果使用一个外部振荡器,其输出被连接到该管脚。X1是内部的时间的时钟脉冲源。
·X2 O
输出片上振荡器反相放大器
使用内部振荡器,晶振/谐振器电路连接到该管脚。如果外部振荡器使用,给X2的悬空。
·FILT I PLL的低通滤波器输入 FILT员工接收PLL的低通滤波器的RC网
络。
定时器信号说明:·INT0 I (P3.2)
INT0的服务为定时器0,当选定TCON中的位寄存器由GATE0外部运行控制。
INT0的输入控制TCON寄存器里的IE0位.If(IT0=1)位IE0被INT0低电平.If(IT0=0)位IE0被INT0低电平触发. ·INT1 I (P3.3)
INT1的作为定时器1当由GATE1 TCON寄存器中的位选择外部运行控制。
INT1的输入控制TCON寄存器里的IE1位.If(IT1=1)位IE1被INT1低电平.If(IT1=0)位IE1被INT1低电平触发. ·T0 I P3.4
当定时器0作为一个计数器运行,T0代引脚下降沿递增计数。 ·T1 I P3.5
当定时器1作为一个计数T1引脚上的下降沿递增计数操作。
图3-4 AT89C51SND1C引脚图
3.2.1 单片机最小系统
单片机芯片,配以必要的外部器件就能构成单片机最小系统。单片机具有较强的外部扩展、通信能力,能方便地扩展至应用系统所要求的规模。
当使用带ROM或EPROM的MCS-51系列单片机时,只要一个芯片即可构成一个单片机的最小系统。选用AT89C51单片机作为主机,它具有4K片内ROM,128字节片内RAM,片外ROM寻址范围达64K,2个16位计数器,5个中断源,4个并行口,一个串行口。简易自动乐曲播放器采用单片机最小系统足以满足系统设计要求,同时要设计单片机最小系统的晶振和复位电路。
3.2.2 电源部分
电源是整个播放器的重要组成部分,图3-5是电源部分的电路,图中AS1117是一款低压差的线性稳压器,当输出1A电流时,输入输出的电压差典型值仅为1.2V。除了能提供各种稳定电压版本外(Vout=1.8V,2.5V,2.85V,3.3V,5V),还提供可调端输出版本,该版本能提供的输出电压范围为1.25V~13.8V。
图3-5 电源电路图
AS1117提供完善的过流保护和过热保护功能(AS1117正常工作环境温度范围极宽,为-50℃~140℃),确保芯片和电源系统的稳定性。同时在产品生产中应用先进的修正技术,确保输出电压和参考精度在1%的精度范围内。
AS1117的系统框图如图3-6所示。
图3-6 AS1117系统框图
3.2.3 D/A 转换部分
当MP3或者WMA等格式的音乐文件经过主芯片内部解码后为数字信号, 而人耳所能识别的信号却为模拟信号,系统利用CS4331进行转换。AT89C51SND1C从Flash中读取数据之后,将MP3格式的音乐在其内部进行硬件解码为二进制数据, 之后通过 D/A 转换器CS4331来对这些数据进行数模转换,转换成人耳可以接受的音乐。主芯片
AT89C51SND1C 内部有一个音频输出接口,支持不同格式的音频数据流格式,如PCM格式和I2S格式,该接口可以跟几乎所有的通用音频 D/A 转换器相连。CS4331在改善音频质量,降低信噪比等方面都很好。同时AT89C51SND1C内部集成了MP3软件解码器,系统不需要外接额外的解码器。解码后的数字信号经过D/A转换后还原为模拟音频信号。
图3-7为D/A转换电路图。
图3-7 D/A转换电路图
音频DA芯片在MP3播放器中承担音频信号的数字/模拟转换功能,其性能直接影响最终的音乐效果和音质。CS4331芯片没有配置引脚,无需软件配置。CS4331的内部框图如下图。SDATA是位流数据输入,SCLK是位流时钟,LRCK是声道选择时钟,其频率即采样率。MCLK则是DAC电路所需的主时钟。图3-8为CS4331芯片内部结构图。
图3-8 CS4331芯片内部结构
3.2.4 控制部分
播控系统的设置通过按键来选择,AT89C51SND1C提供4个按键输入口,连接USB 前,短接了DFU跳线,运行BootLoader,进入到固件下载;接到USB前,按下了FORMAT,则格式化U盘;连接到USB,不按任何键,则进入U盘功能。使用电池供电时,不按任何键,则进入MP3模式。MP3键盘由4个键组成,分别为Play/Pause键、Previous键、Next键和Func键:Func,功能切换;Next,向后;Previous,向前;Play/Pause,播放/暂停。用户在使用播放器时可以方便地根据自己的喜好来选择歌曲播放或暂停。操作状
态和设置信息通过LCD1602来显示。LCD采用液晶显示模块,可显示汉字及图形。液晶显示具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,正好适应MP3播放器的需求。图3-9为键盘控制电路,图3-10为LCD显示电路。
图3-9 键盘控制电路 图3-10 LCD显示电路
系统整体电路图如图3-13所示:
图3-13 整体电路图
4 MP3播放器软件设计及实现
4.1 MP3播放器播放功能的设计
MP3播放程序设计要与键盘配合起来使用。在主程序中,如果已经处于播放状态,则调用Play MP3程序播放歌曲,直至播放到最后一首。在Play MP3程序里面,MP3解码器一旦开始工作以后,就会一直向CPU请求数据,直至歌曲结束。如果用户想切换歌曲,则可直接按暂停键,这样此程序函数就会提前结束,进入下一首歌曲的播放。
其播放流程图如图4-1所示:
向CPU请求数据 否产生数据请求中断 是 否需要读下一个扇区的数据 是 否当数据已经不足一扇区 等待再次按读出一个新的扇区 下暂停键 是 结束当前歌曲,指向下一首歌曲 继续往解码器中送数据 是 是否按了暂停键 否 是 是否单击“选曲”按钮 否
图4-1 播放器播放过程流程图
当产生数据请求时,程序判断是否产生请求中断,当产生了请求中断时,数据读取失败。如果数据请求未产生中断,重新载入数据。产生中断后,程序读取下一个扇区中的数据,如果程序不需要再读取下一扇区的数据,则将数据送入解码器中。当读取到的数据已经不足一扇区时,结束当前所播放的歌曲,读取下一首歌曲的数据;如果所读取的数据超过一扇区,则将数据存入另一个扇区,并读取这个扇区的数据。将读取后的数据送入解码器中,解码时,通过键盘控制。当键盘位于暂停状态时,解码器暂时不工作,等待再次按下暂停键后继续解码。在播放过程中,如果需要选择播放的歌曲时,按下选曲按钮则结束当前播放的歌曲,进入所选歌曲的播放过程。 其主要程序代码为:
Void playMP3(unsigned char *SongName) {
Int i=0,j=0;
//First 1024 Byte MP3 Data
m=ReadSector(SongName,Page_Buf) ;//从当前歌曲中读取512字节 if(MP3STA1&MPFREQ) //解码器数据请求中断产生时 {
For(i=0;i<1024;i++) //第一次要向解码器缓存中置入1024字节 {
if(j==512) //当用完512字节时 {
m=ReadSector(SongName,Page_Buf);
//读取当前歌曲的下一个512字节 j=0; }
MP3DAT=Page_Buf[j++]; //向MP3解码器数据寄存器送入一个数 while(!PlayState); //如果是暂停状态则等待 while(ChangeSong) {DataRead=0;ChangeSong=0;return;}
//如果选曲时,则重新播放当前曲目 while(!(MP3STA1&MPBREQ)); //等待中断再次产生 } }
//Other MP3 data while(1){
while(MP3STA1&MPFREQ) {0解码器数据请求中断产生时 if(j==512) {//当用完512字节时 j=0;
if(m<512) {NowPlaying++;return;}
//如果上一次从歌曲中读取的数据 //不足512时,则结束本歌曲播放
m=ReadSector(SongName,Page_Buf);
//读取当前歌曲的下一个512字节 }
MP3DAT=Page_Buf[j++]; //向MP3解码器数据寄存器送入一个数 while(!PlayState); //如果是暂停状态则等待
while(ChangeSong) {DataRead=0;ChangeSong=0;return;}
//如果选曲时,则重新播放当前曲目 while(!(MP3STA1&MPBREQ)); //等待中断再次产生 }
4.2 MP3功能按钮设计
当执行MP3程序的时候,需要通过按键操作来控制MP3歌曲的播放,当键盘响应流程图如图4-2所示。
产生键盘中断 判断哪个键被按下 向后 功能切换 播放 向前 置播放/暂停状态 根据所处功能不同设置不同寄存器的值 切换功能 清中断标志,等待下一次中断
图4-2键盘相应流程图
每个键对应了一个键盘响应函数。
1) Func,功能切换。功能切换的作用是设置功能状态。没按下一次此键,则功能状
态计数器在1~3之间轮换。源代码如下: void Func() {
if(CurrentFun<3) CurrentFun++;//在选曲/音量调节/音效调节三者之间切换 else if(CurrentFun==3) CurrentFun==1; }
2) Next,向后。根据所处功能状态的不同,按下此键时,将进行不同的操作,进而
可以实现不同的功能。当处于“音量控制(VOLUME)”状态时,则改变音量寄存器的值,从而控制音乐音量。当处于“音效(EFFECTION)”状态时,则改变音效寄存器的值。而如果处于“选曲(SELECTSONG)”状态时,则切换到当前MP3歌曲列表中的下一曲。源代码如下:
void Next() //按下*下一首/音量减小*键时的处理 {
switch(CurrentFun){ //如果当前处于音量调节功能 case VOLUME : {
if(MP3VOR>0x00) //当前音量没有达到最小时
MP3VOR-=0x01; //右声道音量增大一档 MP3VOL-=0x01; //左声道音量增大一档 }
break; }
case EFFECTION : //如果出于音效调节功能 {
If(MP3BAS>7){ //降低重音效果 MP3BAS-=7; MP3MED=0x0f; MP3TRE+=7; } break; }
case SELECTSONG : //如果处于MP3选曲功能 {
if(NowPlaying==(NumofSong-1)) NowPlayiing=0;
//如果已经处于最后一首了,则指向第一首 else NowPlaying++; //否则,指向下一首 ChangeSong=1; //置选曲标志位 break; }
default:break; } }
3) Previous,向前。此键的功能与Next正好相对应。源代码如下:
void previous() //按下“上一首/音量增大”键时的处理 {
switch(CurrentFun){
case VOLUME : //如果当前处于音量调节功能 {
if(MP3VOR<0x1f) //当前音量没有达到最大时 {
MP3VOR+=0x01; //右声道音量增大一档 MP3VOL+=0x01; //左声道音量增大一档 }
break; }
case EFFECTION: //如果处于音效调节功能 {
If(MP3BAS<0x1d){ //增加重音效果 MP3BAS+=7; MP3MED=0x0f; MP3TRE-=7; }
break;
case SELECTSONG : //如果处于MP3选曲功能 {
if(NowPlaying>0)NowPlaying--;
//如果当前播放歌曲不为第一首,则指向上一首 else NowPlaying=NumofSong-1;
//如果当前已经到达第一首,则指向最后一首 ChangwSong=1; //置选曲标志位 break; }
default:break; } }
4) Play Pause,播放/暂停。每当按下此键时,改变一下播放状态,配合在MP3播放
函数中对此状态的判断,可以实现MP3播放过程中的暂停。源代码如下: void PlayPause() {
PlayState=!PlayState; //按一下播放键时,改变播放状态 }
4.3 USB通信功能程序设计
USB通信功能模块用于对Flash存储器内的文件进行管理,实现MP3文件的下载,由于AT89C51SND1C没有外部中断引脚,USB中断没有中断向量地址入口,USB驱动程序采用中断查询工作方式。其流程图如图4-3所示。在USB控制器使用前,首先对其进行初始化,然后在主程序中循环读取USB断电中断寄存器,当查询到有中断产生时则进入到相应的中断处理程序,开始设备配置和数据传输。 程序代码如下:
#include unsigned char CH375_RD_DAT_PORT( void ) { return( CH375_DAT_PORT ); } void CH375_Init( ) { switch ( InterruptStatus ) { case USB_INT_BUS_RESET1: //USB总线复位 { break; } case USB_INT_BUS_RESET2: //USB总线复位 { break; } case USB_INT_BUS_RESET3: //USB总线复位 { break; } case USB_INT_BUS_RESET4: //USB总线复位 { break; } case USB_INT_EP0_SETUP: { //端点0 的接收器接收到数据,SETUP 事务成功,内部固件模式时不需要处理 break; } case USB_INT_EP0_OUT: { //端点0 的接收器接收到数据,OUT 事务成功,内部固件模式时不需要处理 break; } case USB_INT_EP0_IN: { //端点0 的发送器发送完数据,IN 事务成功,内部固件模式时不需要处理 break; } case USB_INT_EP2_OUT: //批量端点/端点2接收到数据,OUT成功 { //从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); length = CH375_RD_DAT_PORT( ); /* 首先读取后续数据长度 */ for ( i = 0; i < length; i ++ ) buffer[ i ] = CH375_RD_DAT_PORT( ); //接收数据包 /* -----------测试数据正确性,将接收到的命令包数据返回给PC机----------- */ CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); /* 向USB端点2的发送缓冲区写入数据块 */ CH375_WR_DAT_PORT( length ); /* 首先写入后续数据长度,回传刚接收到的数据长度 */ for ( i = 0; i < length; i ++ ) CH375_WR_DAT_PORT( buffer[ i ] ); /* 数据返回,由计算机应用程序测试数据是否正确 */ /* ------------------------------------------------------------------------------------------------------ */ break; } case USB_INT_EP2_IN: //批量端点/端点2发送完数据,IN成功 { CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); //释放当前USB缓冲区 break; } default: { CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); break; } } } main( ) { Delay50ms( ); CH375_Init( ); //对CH375/CH372初始化 EA = 1; //允许中断 while(1); } 开初始化USB时钟 读取中断寄存器状态 是否有端点产生中断 是 相应的中断服务子程序 否中断寄存器清零 图4-3 USB通信功能程序流程图 5 结论 本次设计我采用的是AT89C51SND1C单片机为核心展开对MP3播放器的设计,在AT89C51SND1的64KFlash中,其中地址在F000~FFFF的区域为4K字节的Boot Flash,这部分程序是出厂时已经固化的Boot Loader代码,它使用DFU(设备固件升级)协议来更新芯片Flash存储器中的用户程序。有两种方式可以使得芯片在上电复位后执行Boot Flash中的这段程序:一是当芯片中的BLJB位为1时,上电即执行这段代码;二是当BLJB位不为1时,如果在复位后芯片检测到引脚ISP为低时,也会执行这段程序。在输入程序时,AT89C51SND1自带USB接口,可对Flash进行在线编程,不需要硬件烧写器就可以下载目标代码到芯片中,这样大大的降低了这次毕业设计的成本。 在硬件部分,首先由复位电路和晶振电路与单片机构成最小系统,由最小系统为核心展开对外围电路的设计,这样会大大减少设计电路的难度。由于设计所需电源为3.3V, 而外接电源为5V,因此,要在设计中加上可调输出电源电路部分,在设计中我采用AS1117低压差线性稳压器,不仅仅它可以将5V电压转换为设计所需要的3.3V电压,它还具有完善的过流保护和过热保护功能,可以很好的保护电路;在D/A转换电路部分,我选用CS4331将解码后的数字信号转换成模拟信号。AT89C51SND1C从Flash中读取数据之后,将MP3格式的音乐在其内部进行硬件解码为二进制数据, 之后通过 D/A 转换器CS4331来对这些数据进行数模转换,转换成人耳可以接受的音乐。CS4331 在改善音频质量,降低信噪比等方面都很好,可以减少信号的失真。 因篇幅问题不能全部显示,请点此查看更多更全内容