基于单片机的音乐播放器设计毕业设计.docx
《基于单片机的音乐播放器设计毕业设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的音乐播放器设计毕业设计.docx(94页珍藏版)》请在冰豆网上搜索。
基于单片机的音乐播放器设计毕业设计
基于单片机的音乐播放器设计毕业设计
第一章绪论
1.1基于单片机的MP3概述
1.1.1基于单片机的MP3系统组成
基于单片机的MP3播放器主要由主控制器、SD卡、解码芯片、键盘等四个部分组成。
其基本框架如下图所示。
图1-1基本框架图
1.控制模块
控制模块是整个系统的核心。
主要完成对系统中各种芯片的输入、输出控制,也是实现数据交换、软硬件接口的中心模块。
2.解码模块
这是系统中又一重要模块。
其主要功能是实现对数据进行处理并输出模拟信号驱动耳机发声。
3.输入模块
此模块可大致分为键盘部分和SD卡部分。
键盘部分主要用来控制对MP3的操作。
SD卡部分主要是对SD卡的读取。
4.输出模块
此部分主要包括音频输出。
音频输出主要会用到一些模拟电路,对电路进行去噪等。
1.1.2基于单片机的MP3播放器特点
在半导体行业中,消费类电子是近年来发展最迅猛的一个领域。
2006年消费类电子在中国Mcu市场的需求所占份额超过了百分之四十[1]。
现在mp3技术已基本成熟,一般mp3都采用专用DSP芯片和集成的数据程序存储器。
集成数据存储器优点是成本低廉,但是,这样却无法方便的进行容量的扩展。
因此,本次论文在于设计出能够用SD或CF卡作为音乐存储介质的存储器,从而,使mp3的容量能够方便地得到扩展。
随着现在存储器微型化快速发展,无法扩展容量的mp3已经很难满足人们的需求。
虽然现在一些mp3容量已经达到2G、4G甚至8G。
但是,由于其容量无法扩展,为用户以后的使用造成了极大不便。
当用户想要扩展容量时,不得不再换一个新的mp3。
这样就造成了用户成本上的增加,会使用户觉得得不偿失。
而SD卡mp3的出现则可以解决用户的这一烦恼。
这也是本次设计的优势所在。
另外,mp3为了达到音质效果的完美,往往采用高档DSP器件作为专门的解码播放芯片,这样虽然在效果上取得较大的突破,但是,由于mp3格式本身的限制,因此,即使尽可能提高系统性能和效果也会有一定限制,不可能无限制地提高,而且这些提高对于成本来说是得不偿失的。
所以,这类mp3价格是一般mp3的好几倍。
因此,本次论文并不采用这种DSP器件作为mp3载体,而是采用一般的单片机控制和mp3格式解码芯片实现。
由于社会上的大多数人群都属于低端消费者,也并不是专业的音乐欣赏者,他们对音乐的要求并不高。
因此,此次设计的播放SD卡数据的mp3能够适合于大多数人群。
1.2课题研究的背景及意义
1.2.1课题研究的背景
便携式音乐播放器的历史从1979年Sony的WalkmanTPS-12随身听的问世开始。
这台磁带机音乐系统开启了个人娱乐市场的大门,在此之前,人们只能呆在家里用笨重的立体声录音机欣赏音乐[2]。
至今,便携式音乐播放器产品已经经历了磁带机、CD机、MD播放器、MP3播放器四个阶段[3]。
1980年,索尼和飞利浦共同制定了数字音频光盘格式的标准,光盘直径为12厘米,采样频率44.1K,比特率1411.2Kbps,16位音频数据,CD的音轨可以说几乎是无损的。
一张光盘可以容纳75分钟的音乐。
1982年索尼推出的D-50是真正意义上的CD随身听,拉开了CD随身听的序幕。
1990年左右发展达到了鼎盛时期。
时至如今,不管音乐播放器的未来怎么样发展,CD这承载完美音质的载体永远不会落伍,即使因为体积上有着无法回避的缺点[3]。
1989年,德国人Brandenburg的博士论文,为MP3这一数字音频压缩技术提供了理论基础。
1995年诞生的MP3标准具有较高的压缩比以及较小的音质损失,是音乐史上划时代的革命性技术。
这种数字音乐压缩技术的诞生和流行,推动了MP3随身听的开发和应用。
在MP3标准诞生不久的20世纪90年代后期,便携式MP3音乐播放器正式登场[2]。
从1995年上半年开始直到整个九十年代后期,MP3开始在因特网上蓬勃发展。
MP3的流行主要得益于如Nullsoft于1997年发布的Winamp和Napster于1999年发布的Napster这样的公司和软件包的成功,并且它们相互促进发展。
这些程序使得普通用户很容易地播放、制作、共享和收集MP3文件[4]。
1998年Saehan公司推出了世界上第一台的MP3播放器——MPManF10。
MPMan,取意于MP3与WALKMAN的结合。
MPManF10的体积为70x90x16.5mm,约有四个1.44M软盘堆叠起来这么大,体重为65克,可谓非常轻巧[5]。
在世韩的MPmanF10为人们带来了惊喜之后,美国的帝盟(Diamond)公司挑头,于1998年底推出了RioPMP300,这是第一个让全世界都印象深刻的MP3。
RioPMP300最大的优点就是可在互联网上下载MP3而不用花一分钱[5]。
MP3文化的标志——AppleiPod。
诞生于2001年10月,作为一款MP3,它在很多方面并不出色:
价格高、音质一般、使用时间短以及缺乏对Windows的支持等等,但它却是第一个把互联网音乐与MP3随身听捆绑销售的产品。
许多人都愿意付少量钱到Apple官方站下载单歌,或使用包月制的无限时Download,iPod真正让唱片公司获得利润,所以得到了消费者和唱片商的双重支持[5]。
直到2004年,MP3行业不平凡的一年。
随着随身听的发展,人们已经越来越被迷你小巧的MP3所征服,原本人们对于MP3音质上的顾虑,已经被现有MP3高品质所打消。
在这一年中,无论是从本身的品质,还是市场销售的情况来看,MP3已经完全占有了市场,成为随身听行业的霸主[6]。
当MP3在容量、外观、音质上的发展无法再吸引更多眼球的时候,开始转向多功能方向发展。
正如在手机身上所发生的一切,人们对于MP3的要求,不再是单一的欣赏音乐,而是能像手机一样身兼多职[5]。
而目前消费类电子产品的发展呈现出数字化和多功能集成化的明显趋势[7]。
在MP3的研究上,由于市场趋近饱和,大多数公司都将精力集中在外观造型上,对于其功能及性价比的探索趋势相对较弱。
1.2.2课题研究的意义
本次论文主要是为了开发出一套低成本、可扩展容量的MP3。
现在一般个人随身携带使用MP3存在容量固定,性价比较低的情况。
此次论文便是根据这些情况而设计。
此次设计的突出优势是:
1、突破了存储容量限制。
本系统提供了SD卡接口,可以方便地访问外部的移动存储介质,这样就不会有特定的容量限制。
当前,个人多媒体娱乐市场的需求快速增长,各种多媒体的应用也日趋丰富,对存储容量的要求必然越来越高,因此本系统采用的方案可以说是应势而生。
2、低成本。
由于MP3编码算法的CPU的性能要求非常,因此目前大部分的MP3实时编码都是采用专用的DSP芯片来实现,这些芯片大部分价格较高[8]。
本系统采用通用单片机处理,对MP3算法做了硬件方式的实时编码满足音质要求。
设计中又将汉字存储芯片移除,大大降低了系统的成本。
1.3论文研究的内容和目标
1.3.1论文研究的内容
1.分析FAT32磁盘文件格式。
由于此次论文要求对SD卡数据进行读写,而现在大多数SD卡的数据格式几乎都是FAT16或FAT32格式。
其内部数据存储方式及引导区大小等情况显得尤其重要。
如果忽略此环节,势必在读取数据时造成错误,对结果造成重大影响。
2.分析mp3文件格式。
在进行MP3播放时,MP3解码器并不能够完成数据的分析任务,它只能根据控制部分给出的控制方式及速率接受并运算数据,并将其转换为相应的模拟信号。
故进行MP3格式的分析可以帮助我们编写相应分析程序,并为控制MP3解码芯片作出必要的准备。
3.分析出mp3解码方法。
在使用MP3解码芯片解码时,必然会用到解码相关知识。
而且,在将数据送到MP3解码芯片前,对数据做必要的处理也可以提高MP3解码芯片处理效率,增加设计的可实现性。
如果对MP3解码不够了解,就可能导致设计的失败。
4.了解mp3解码芯片的相关使用。
对于不同的MP3解码芯片,其操作、控制字及外围电路也各不相同,找出性价比高且外围电路简单的芯片就显得比较重要。
这不但可以降低成本,也会大大提高系统的可行性并降低系统成本。
5.对MiniSD卡的初始化及文件读写。
SD属于存储设备,但是,它却与一般存储设备不同。
其与集成芯片相似,需要对其初始化才能正常工作。
而对其进行读写操作也与其它存储器不同,每次读写均需写入相应的命令控制字,否则,对SD卡的操作均为无效操作。
1.3.2论文研究的目标
1.能够完成对SD卡或CF卡的初始化及SD卡中mp3数据进行读取。
2.通过mp3解码芯片播放出原音频文件。
3.通过控制部分,能够进行上一曲、下一曲的切换等。
第二章硬件设计
本章着重介绍基于SD卡的MP3播放器设计的硬件设计。
其设计流程如图2-1所示。
图2-1硬件框图
2.1AVR单片机简介
一般MP3文件大小都在3-8MB之间,而每个文件的播放时间为5分钟左右,按这样计算,单片机的处理能力必须在200kb/s以上,再加上SD卡的读取时间、解码时间和单片机自身需要的控制指令时间,因此,单片机的处理能力必须在600kb/s以上,即每微秒执行1.6条指令。
而51系列单片机大部分指令为双周期指令,其工作频率在12MHZ时,每条指令需要2μm,所以,本论文采用AVR系列的ATmega8l单片机,其具有更高的工作性能。
下面我们作以简单介绍。
ATmega8l单片机属于AVR单片机中配置较高的产品。
它在AVR内核基础上,增加了更多的功能,并完善了接口性能,在省电、稳定性、抗干扰以及灵活性方面也考虑得更加周全和完善,所以,ATmega8l单片机的系统结构相对于其他AVR单片机结构来说复杂一些。
ATmega8l单片机是基于AVRRISC结构的8位低功耗CMOS微处理器。
其内核具有丰富的指令集和32个通用工作寄存器。
所有的寄存器都直接与算术逻辑单元(ALU)相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。
这种结构大大提高了代码的效率,并且具有比普通的复杂指令集微处理器高10倍的数据吞吐率[9]。
ATmega8l单片机的内部资源有先进的RISC指令集、非易失性程序和数据存储器、JTAG接口、特殊功能接口。
其中,RISC指令集有32个8位通用工作寄存器,支持全静态工作,工作于16MHz时性能高达16MIPS,内部含有RC振荡电路,并且还有只需两个时钟周期的硬件乘法器。
单片机内部还含有32KB系统内可编程Flash,其可擦写周期达到10,000次,独立的锁定位,可对芯片进行软件加密以及1KB的EEPROM和2KB的片内SRAM。
最值得一提的是,ATmega8l单片机内部含有8通道的10位ADC电路,4路PWM通道,可编程串口和支持主机/从机工作模式的SPI接口。
其中,SPI接口通信速度可达到2MB/s,由于本次设计的SD卡及解码芯片均含有SPI接口,因此,这种接口给设计带来了很大方便。
而且,其内部含有RC振荡电路,无须提供外部时钟仍然能够正常工作。
2.2AVR单片机性能接口分析
因为ATmega8l单片机在工作在16MHz时能达到16MIPS(即16百万条指令每秒)的速度,即,它每执行一条指令的时间为0.0625μs,这种速度是51系列单片机的12倍。
从上面的分析我们知道,MP3所需单片机性能要求约为每微秒执行1.6条指令。
故,ATmega8l单片机符合设计MP3的系统要求,能够通过它实现MP3的设计。
另外,SD卡含有集成的SPI接口。
使用专门的SPI接口比使用位操作模拟接口时序的方法操作更简单,效率也更加高。
其工作速度与振动器频率的关系如表2-1所示。
从上表我们可以知道:
当ATmega8l工作于16MHz时,其最大传输速率可以达到16MHz/2=8MHz。
这个速度完全可以满足MP3的播放要求。
2.3基于SD卡的MP3接口设计
2.3.1ATmega8l引脚介绍
在进行单片机的接口设计以前,我们首先来了解并分析一下ATmega32单片机的引脚。
其具体结构如图2-2所示。
图2-2ATmega8l引脚图
引脚说明:
VCC:
数字电路的电源。
GND:
地。
端口B(PB7..PB0)XTAL1/XTAL2/TOSC1/TOSC2:
端口B为8位双向I/O口,具有可编程的内部上拉电阻。
其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。
作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。
在复位过程中,即使系统时钟还未起振,端口B处于高阻状态。
通过时钟选择熔丝位的设置,PB6可作为反向振荡放大器或时钟操作电路的输入端。
通过时钟选择熔丝位的设置PB7可作为反向振荡放大器的输出端。
若将片内标定RC振荡器作为芯片时钟源,且ASSR寄存器的AS2位设置,PB7..6作为异步T/C2的TOSC2..1输入端。
端口C(PC5..PC0):
端口C为7位双向I/O口,具有可编程的内部上拉电阻。
其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。
作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。
在复位过程中,即使系统时钟还未起振,端口C处于高阻状态。
PC6/RESET若RSTDISBL熔丝位编程,PC6作为I/O引脚使用。
注意PC6的气特性与端口C的其他引脚不同若RSTDISBL熔丝位未编程,PC6作为复位输入引脚。
持续时间超过最小门限时间的低电平将引起系统复位。
门限时间见P35Table15。
持续时间小于门限时间的脉冲不能保证可靠复位。
端口D(PD7..PD0):
端口D为8位双向I/O口,具有可编程的内部上拉电阻。
其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。
作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。
在复位过程中,即使系统时钟还未起振,端口D处于高阻状态。
RESET:
复位输入引脚。
持续时间超过最小门限时间的低电平将引起系统复位。
持续时间小于门限时间的脉冲不能保证可靠复位。
AVCC:
AVCC是A/D转换器、端口C(3..0)及ADC(7..6)的电源。
不使用ADC时,该引脚应直接与VCC连接。
使用ADC时应通过一个低通滤波器与VCC连接。
注意,端口C(5..4)为数字电源,VCC。
AREF:
A/D的模拟基准输入引脚。
2.3.2ATmega8l接口介绍与设计
首先,介绍一下时钟和复位电路的设计。
1.时钟电路的设计。
ATmega32单片机时钟电路可以采用三种设计方式。
方式一,采用内部RC振荡电路。
采用此种设计时要保持XTAL1和XTAL2为空,这样可以减少MP3体积大小,但是,这种方式下,不能对CK-OPT进行编程,且频率受温度影响较大。
方式二,采用外部RC振荡电路。
这种电路可以减少晶体振荡器的使用,但是,会要增加一个电阻和电容。
而且,这两种器件一般情况下精度有限且抗干扰能力不足,延时不够精确。
因此,这种方式只适用于对时间不敏感场合,在本次设计中不能使用。
方式三,采用石英晶体振荡器。
石英晶体频率较稳定,抗干扰能力较强。
只是,启动时频率稳定性较差。
但是,可以通过软件延时的方法消除这个问题。
综上,本次设计中可以采用方式三。
而在实际大批量生产时可以采用方式一。
具体电路如图2-3所示。
图2-3时钟电路
2.复位电路的设计。
ATmega8l单片机与51单片机不同,它使用的是低电平复位,其连接方法比较固定,本次设计中我们采用一般接法。
如图2-4所示。
图2-4复位电路
刚上电时,由于电容C5的作用,REST引脚会保持一段时间的低电平,使电路复位,然后,缓慢变高,使电路进入正常工作状态。
当按键按下时,REST与地接通变低电平,电路发生复位。
3,按键电路。
按键电路如图2-5所示。
图2-5按键电路
4,电源电路。
由于SD卡的供电及接口标准电压均为3.3V。
因此使用AMS1117进行降压,电源电路如图2-6所示。
图2-6电源电路
最后,介绍一下SPI接口及其电路设计。
这是本次设计的最重要的接口,它工作性能的好坏直接影响到本次设计的成败。
SPI系统的发送方向只有一个缓冲器,而在接受方向有两个缓冲器。
即是说,在发送时一定要等到移位过程全部结束后,才能对SPI数据寄存器执行写操作。
而在接收数据时,需要在下一个字符移位过程全部结束前,通过访问SPI数据寄存器读取当前接受到的字符;否则第一个字节将会丢失。
其数据传递过程如图2-7所示。
图2-7SPI主从机的连接[10]
从图中可以看出:
SPI接口内部数据全由寄存器控制,在进行数据移出的同时也在进行数据的移入。
其中,还有一个SPI接口使能端口SS,通过这个端口,我们可以控制SPI的使用。
同时,我们可以通过设计模拟其工作特性的硬件引脚,从而达到节约端口、操作方便的目的。
在本次设计中,我们采用SD卡作为数据存储介质。
因此,我们现在来分析一下其接口及数据传输模式。
SD卡有9个引脚,它们分别是:
VCC、GND、DAT0-DAT3、CLK、CMD。
其中,它们在不同的模式下有不同的定义。
其具体定义如表2-2所示。
表2-2SD卡引脚定义
针脚
名称
类型1
描述
1
CS/DAT3
I/O/PP
卡监测/数据位3
2
CMD/MOSI
PP
命令/回复
3
Vss
S
地
4
Vcc
S
供电电压
5
CLK
I
时钟
6
Vss2
S
地
7
DAT0/MISO
I/O/PP
数据位0
8
DAT1/IRQ
I/O/PP
数据位1
9
DAT2
I/O/PP
数据位2
1:
S:
电源供电,I:
输入O:
输出I/O:
双向PP:
I/O使用推挽驱动SD卡的总线概念
SD卡数据传输分为SPI模式和SD模式。
在SD模式下速度较快,但是,由于使用引脚过多,而且,在SPI模式下速度已经足够,因此,本次设计中采用SPI模式。
在SPI模式下,SD卡只需要接MISO、MOSI、CLK、CS、CLK、Vss、Vcc这7个引脚就可以了。
而ATmega32单片机也提供了相应的接口。
但是,由于AVR单片机的接口标准电压为5V,SD卡的供电及接口标准电压均为3.3V。
因此在ISP借口处接入5V工作电压。
如图2-7所示。
图2-7SD卡接口电路
解码作为MP3必不可少的部分,它的设计也关系着整个设计的成败。
下面这种介绍一下这部分的设计步骤。
第一步,我们必须选择一款解码芯片。
这款芯片应该尽可能包含解码、放大电路。
其次,要求价格实惠、外围电路简单等。
在本次设计中,采用了VS1003B。
这是一款专用音频解码芯片。
芯片内部包含MP3、wma等硬件解码,还包含放大电路。
其体积较小,外围电路也比较简单。
第二步,管脚分析。
其引脚如图2-8所示。
它的模拟、数字及I/O口电源是分开的,其也含有SPI接口,支持2.5V电源供电,接口电源采用3.3V,可以进行串行通信,硬件复位等。
图2-8VS1003B引脚图[12]
根据数据手册中提供的信息,要成功运用VS1003B这款芯片,还必须注意:
当不使用RX引脚时应接到IOVDD上。
TEST为测试保留,也应该连接到IOVDD上。
GPIO0需要使用100K欧下拉电阻。
其它引脚可以根据其定义进行连接。
未使用功能可不进行连接。
第三步,接口设计。
根据第二步中管脚分析结果。
我们仍然需要对芯片输入引脚进行电平转换。
这里我们仍然采用电阻分压的方式。
主要输入引脚为数据选择、命令选择、复位、时钟、查询忙、数据输入。
具体电路如图2-9所示。
图2-9vs1003电平转换电路
另外,还有第二步中介绍的时钟、电源以及特殊引脚的连接。
由于使用的是成熟的音频解码芯片,硬件连接方式比较固定,且其数据手册给出了示例,不需要太多自行设计部分,只要根据时序设计好软件,便可以实现各种功能。
图2-10vs1003b连接电路
自此,基于SD卡的MP3播放器硬件部分设计全部完成。
在设计中充分考虑了以后的升级扩展等问题。
但是,在电平转换时使用了较多的电阻实现,对系统模型最终大小有一定影响。
在实际生产中可以用贴片电阻代替,这样就可以大大减小电路板的体积。
第三章软件设计
3.1软件设计流程
前一章介绍了硬件电路的设计,本章就要根据相应的硬件,进行软件设计。
软件设计可以分为自底向上或自顶向下的设计方法,这里我们采用后者。
首先,我们分别对键盘、SD卡、FAT、vs1003b进行驱动程序设计,然后,对这些驱动程序加以排列、组合,做到最优启动顺序,最后进行高层人机接口程序的设计。
为了能够明确我们具体所需的驱动程序设计,下面我们先将设计的总体程序流程图确定下来。
如图3-1所示。
在完成程序流程图之后,我们需要分别对各个部分进行程序设计,下面就分别介绍各种驱动程序的编写方法。
3.2键盘程序设计
键盘部分:
由于键盘在设计中使用的是2*3的矩阵键盘,所以在编写程序时相对较为麻烦。
必须先将其中的2个设置为输出低电平,另外3个引脚设置为输入。
当检测到3输入引脚有低电平输入时,为了防止是干扰,使用软件延时10ms再次检测,若仍然为低电平,则说明有键按下,读出键值;然后,再将另外3个引脚设置为输出低电平,原来的2个引脚设置为输入,使用同样的办法可以读出按键值。
这样得到的两组按键值可以组合成唯一的一个按键值。
在扫描按键时,不用进行过多的处理,处理越多,耗时越多,对输出的声音影响也就越大,所以,在扫描程序中,只需要将按键值返回即可,不需要进行太多处理。
对于键盘接口的设置,可以利用一初始化程序,将接口进行一种定义,这样,在扫描过程中程序可以节约更多的时间进行数据的读写。
3.3SD卡驱动程序设计
SD卡使用的是SPI模式,这种总线接口在AVR单片机中可以直接使用其寄存器加以控制。
因此,在编写SD卡驱动程序之前,必须先将单片机的SPI总线初始化。
其具体代码如图3-2所示
图3-2SPI总线初始化代码段
在初始化SPI总线时,一般总线设置为低速模式,因为大多数器件在其初始化过程中,都不能有太高的速度,否则,很容易造成部分指令不能被接收,导致初始化失败。
在MP3播放过程中,用单片机作为控制中心,所以,在设置时还应该将单片机设为主机,其它模块作为从机。
在单片机SPI总线初始化完成后,就要对SD卡进行初始化。
初始化SD卡,必须先对SD卡进行激活,其激活步骤如图3-3所示。
在SD卡被激活后,就可以进行初始化操作。
初始化时,我们必须进行一下设置:
1.设置一次读写SD卡数据块的长度;2.开启或关闭校验位,这里我们选择关闭校验位,因为在SD卡使用过程中会有数据起始标志位等,而且SD卡在低速模式下,本身读写出错的可能性不大。
另外,SD卡的数据、指令长度为32位,而SPI总线为8位,在使用过程中还需要编写一些接口函数以便编写SD卡控制函数,操作SD卡。
在开始激活时序时,至少需要先发送108个初始时钟,才能够进行后面的步骤。
在我们平常使用的mini卡中,还包含很多MMC卡。
这两种卡的使用指令基本相同,唯一的差别是激活时的最后几条指令。
因此,我们可以在本次设计中加入几条关键性指令,判断并激活两种微型存储卡。
在不知道使用的是什么类型的存储卡时,可以用一般办法判断存储卡的类型。
即,在写入55H返回01H且写入41H返回00H,则说明是SD卡;否则,写入01H返回00H,则为MMC卡。
图3-3SD卡激活步骤[15]
在初始化SD卡完成后,需要对本次设计中需要使用的一些特殊功能进行设计,如是否需要校验位,一次读写的数据