基于AT89C51SND1C单片机的MP3播放器设计

引言
MP3作为高质量音乐压缩标准 , 正在进入越来越多人的生活 , 给数字音频工业带来了强劲的冲击 。MP3使用此技术可以获得较大的音乐压缩比 , 还可以得到较高的音乐回放质量 , 比如将CD格式的音乐数据压缩成MP3格式 , 音效相差无几 , 文件大小至少可以压缩12倍 。
正是由于MP3音乐的较小数据量和近似完美的播放效果 , 使得以MP3为后缀的音乐文件在网络上的传输得以实现 。当前MP3播放器正朝着功能强大、外观丰富、价格便宜的方向发展 , 这里提出一种基于AT89C51SND1C单片机的MP3播放器设计方案 。
1 MP3编码简介
MP3是MPEG LayerIII(第3层音频编码标准)的缩写 , 图1为MP3编码器内部原理框图 。它是一种超级声音文件的压缩方法 , 其数字压缩速率为每通道128Kb/s 。MPEG由音频和视频两部分组成 , 可以分别进行压缩 。MPEG在音频上压缩分为MPEG Layerl、MPEG Layer2和MPEGLayer3 , 其中MP3具有最高的压缩比12:1 。在一般没有压缩数据的情况下 , 音频被数字化时 , 采样频率必须为实际声音最高频率的2倍以上 。
 
目前最好的CD音质中 , 声音最高频率是20 kHz , 采样频率定为44.1 kHz , 16位量化 , 要获得CD音质立体声 , 每秒钟的数据量将超过1.4Mb;而采用MP3压缩 , 数据量可以缩小到1/12 , 音质却没有损失 。如果再进一步压缩数据量到1/24或者更多 , 依然可以维持相当好的音质 , 比起通过降低采样频率、缩短采样深度的方法要好得多 。
2 MP3播放器设计
对于便携式MP3系统 , 主要考虑的是其体积小巧、低功耗、高容量、低价格 。当前流行的MP3播放器主要包括:单片机控制系统、大容量移动存储设备、MP3解码器、D/A转换芯片、音频放大电路、USB接口、LCD显示和键盘电路等 , 其基本工作原理如图2所示 。通过USB接口把Flash存储器上的MP3、WMA等格式的数字音乐文件送到单片机内部集成的解码芯片进行解码 , 这些音乐文件经解码后成为数字信号 , 然后音频DAC通过D/A转换将数字音频信号转换为模拟音频信号 , 再通过功率放大器进行音频放大 , 最后通过耳机输出音乐 。
 
本系统主要实现一个MP3播放器功能 , 由于涉及文件传输和存储问题 , 所以附带需要实现USB存储器功能 。整个系统由AT89C51SND1C(MCU)、K9F2808U0A(Flash芯片)、电源部分、音频部分、串行通信部分和人机接口部分组成 。
MCU部分:控制整个系统 , 提供USB控制和MP3解码功能 。FLASH芯片:存放整个系统文件 。电源部分:提供系统工作需要的电源 , 包括一个升压和一个降压部分 。音频部分:把数据流转换为声音信号 。人机接口部分:包括按键和LED指示等 。USB接口部分:通过PC的USB接口进行MP3文件的下载 。
2.1 硬件设计
2.1.1 控制器部分
AT89C51SND1C是Atmel公司专门针对MP3设计需求研发的一款多媒体8位微处理器 , 使用通用的C51内核 , 集成了CPU和硬件解码器 , 为MP3设计提供了一套方便的解决方案 。该芯片的高度集成大大降低了系统的耗电和发热 , 提高了系统的稳定性和速度 , 抗干扰能力也显著增强 。需要注意的是 , 由于在系统中有MP3和USB传输等高频信号 , 为了避免噪声对系统的影响 , 尤其是对音频输出信号的影响 , 所以在AT89C51SND1C的正负电源间需要加上一个RC滤波电路以消除电路中的噪声 。对于AVDD和UVDD的两个模拟电压和数字电源而言 , 两者需要在数字地和模拟地处单点通过一个磁珠相连 , 以免数字电源和模拟电源之间相互影响 。
2.1. 2 音频部分
音频是整个系统中最为重要的一个部分 , 在把数字信号转换为模拟信号的过程中容易产生噪声 , 这个关系到MP3播放器声音效果的好坏 , 本系统选择的是CS4330芯片 , CS4330能兼容48 KHz、44.1 KHz和32KHz的音频流 。声音数据通过串行输入引脚SDATA输入 , 左右输入时钟LRCK决定了左右声道 , 而在串行输入时钟SCLK的驱动下数据被送入CS4330的数据缓存中 , 而主时钟决定了数据滤波器的使用 。
2.1.3 存储部分
采用三星公司的NAND FlashK9F1208作为系统的数据存储器 , 用来存储本系统所需播放的音乐文件 。主芯片AT89C51SND1C和Flash存储器间的通信与读取一般的存储器RAM、EEPROM等基本一致 , 不同的就是多了CLE和ALE这2个引脚 , 这是由Flash本身特点所决定的 。主芯片通过读取R/B这个引脚来判断Flash读写是否完成 , 如果正在读写 , 那么这个引脚为低电平 , 表示正忙;如果读写完成 , 该引脚电平变高 , 处于READY(准备)状态 , 等待下次操作 。ALE和CLE这两个信号均为上升沿有效 , WP引脚为写保护 , 用来在电源由于切换等造成不稳定的情况下防止数据丢失 。
2.1.4 人机接口部分
人机接口部分主要提供一个人和系统进行信息交换的接口 , 包括键盘输入、LED显示以及串行口3个部分 。键盘输入提供给用户选择功能的能力、LED显示系统现在的工作状态 , 串行口可以方便开发过程中的调试 , 通过串口调试助手等工具 , 把系统运行的情况反馈到PC机的屏幕 。
2. 1.5 USB接口部分
一般通过PC的USB接口进行MP3文件的下载 , 传输速率为12Mbps 。由于Atmel公司生产的AT89C51SND1C芯片仅支持USB1.1技术规范 , 因此接口速度稍慢 。但对于MP3播放来说 , 可以满足需要 。
2. 2 软件设计
MP3播放系统的软件设计 , 按照模块可以划分为以下几个部分:
◆Flash存储部分:这是系统中的文件存储系统 , 按照FAT文件格式对Flash芯片进行划分 , 对芯片的操作必须按照FAT格式进行 。
◆USB通信驱动:USB驱动通信主要包括如何按照Windows 7中对USB移动硬盘的描述编写设备的固件程序 , 以便操作系统对MP3系统的操作 。
◆MP3解码控制:控制系统中间的MP3解码器把从Flash中取出来的MP3压缩数据流解码成音频数据流 , 提供给音频解码接口 。
◆音频解码接口:和外围的音频驱动芯片接口 , 对音频驱动芯片进行配置以及控制 , 把解码后的数字信号转化为模拟声音并且驱动耳机 。
◆其他部分:由提供人机接口的键盘扫描驱动、LED显示驱动、数码管驱动部分组成 。
系统软件结构框图如图3所示 。
 
2.3 MP3播放程序结构
【基于AT89C51SND1C单片机的MP3播放器设计】在主程序时 , 如果处于播放状态 , 则调用PlayMP3函数播放歌曲 , 直至播放到最后一首 , 在PlayMP3里面 , MP3解码器一旦开始工作以后 , 就会一直向CPU请求数据 , 直至歌曲结束 。程序进入此函数以后 , 只有改变当前歌曲的键盘操作才能使此函数提前结束 , 进入下一首歌曲的播放 。
MP3播放函数的工作分两部分进行:第一部分是播放一首新的MP3歌曲时 , 要做一些初始化工作;第二部分则一直在等待中断发生 。第二部分与键盘结合 , 以实现MP3播放过程中的用户操作 。MP3播放程序结构框图如图4所示 。
 
2.4 人机接口程序结构
当执行MP3程序的时候 , 需要通过按键操作来控制MP3歌曲的播放 , 每个键对应一个键盘响应函数:
①Func:功能切换 。
②Next:向后 。
③Previous:向前 。
④PlayPause:播放/暂停 。
人机接口流程图如图5所示 。
 
结语
本文提出基于AT89C51SND1C单片机的MP3播放器的设计方案 , MP3为取得较好的压缩效果而采用相对复杂的技术 , 宽带音频信号的取样率也较高(一般为44.1 KHz以上) , 所以MP3编解码的运算量和数据量都相当庞大 。MPEGLayerIII解码算法在AT89C51SND1C上验证通过并获得较好的效果 , 通过优化后可流畅播放音乐 。此MP3播放器系统既有播放歌曲的功能又有U盘功能 。两种功能的转换用USB接口检测电路来控制:当MP3播放器上的USB设备插入PC机上的USB接口进行文件下载时 , 执行U盘功能;否则程序执行MP3功能 。

    推荐阅读