APP下载

AVR单片机的高音质WAV播放器设计

2017-09-03

单片机与嵌入式系统应用 2017年8期
关键词:音频文件PC机播放器

王 波

(阿坝师范学院 电子信息与自动化学院,汶川623000)

AVR单片机的高音质WAV播放器设计

王 波

(阿坝师范学院 电子信息与自动化学院,汶川623000)

以单片机为控制器,SD卡为存储介质,通过FATFS文件系统管理SD卡,实现SD卡上指定目录WAV音频文件的播放。系统充分利用ATMEGA16单片机的片内资源,利用SPI接口读取SD卡上的数据,PWM波模拟DAC输出。为防止数据断流,使用FIFO对缓冲区数据进行处理,根据WAV文件的采样率,在指定的时间送入音频数据,通过PWM接口滤波输出。经过测试,系统能流畅地播放采样率在8 kHz~48 kHz之间的WAV音频文件。

ATMEGA16MCU;FATFS文件系统;WAV;FIFO;PWM

引 言

随着科技的进步,MP3播放器不仅越来越小,存储空间越来越大,而且音质也越来越高,功能也越来越强大。

MP3的全称是MPEG Audio Layer 3,是一种高效的计算机音频编码方案,它以较大的压缩比将音频文件转换成较小的扩展名为.MP3的文件,基本保持原文件的音质。MP3是 ISO/MPEG标准的一部分,ISO/MPEG标准描述了使用高性能感知编码方案的音频压缩,此标准一直在不断更新以满足“质高量小”的追求,现已形成 MPEG Layer 1、Layer 2、Layer 3三个音频编码解码方案。MPEG Layer 3压缩率可达1:10~1:12,由此可见,MP3是一种经过压缩的音频格式,音质毕竟有所变化。WAVE是录音时用的标准的Windows文件格式,文件的扩展名为“WAV”,数据本身的格式为PCM或压缩型,是无损音乐格式的一种。本文所设计的WAV播放器,是一种无损的音乐播放器,在音质上有很大的提高,可以与CD音质媲美。

1 硬件设计

WAV播放器采用Atmel公司的8位AVR内核的低功耗单片机ATMEGA16。芯片具有16 Kb的片内FLASH、512字节的EEPROM、1 Kb的片内SRAM,通用I/O接口32个,集成了I2C接口、SPI接口、JTAG接口、UART接口及8通道的10为ADC转换接口;具有4个PWM通道、2个8位定时器和1个16位定时器,芯片资源比较丰富,能很好地满足系统的设计要求[1]。串口模块使用南京沁恒公司的CH340作为USB转TTL的核心器件,通过该模块以及PC机上的超级终端,实现单片机与PC机的通信。电源模块采用4节AA电池,经过π型滤波电路,LM7805稳压为ATMEGA16提供5 V电压,5 V电压经过AMS1117-3.3低压差稳压芯片稳压[2],为SD卡模块提供3.3 V电压。MAV播放器总线设计框图如图1所示。

图1 WAV播放器总体设计框图

1.1 SD卡接口电路

SD卡是在MMC卡的基础上发展而来,高效的读写速度使得SD卡成为当前数码产品中应用最广泛的存储卡。在SD模式下,SD卡采用6线制,使用CLK、CMD、DAT0~DAT3进行数据通信。在SPI模式中,使用CLK、CMD、DAT0、DAT3信号线与主机通信。使用单片机对SD卡操作时,一般都采用SPI方式。

ATMEGA16单片机通过硬件SPI接口方式操作SD卡,由于SD卡上电时,默认是处于SD模式。为了使其工作在SPI模式,必须在关闭片选信号下,发送至少74个时钟信号。在初始化过程中,SPI的时钟不能太快,否则会初始化失败。在初始化成功后,应该尽量提高SPI的时钟速率,以便高效地读写SD卡[3]。单片机与SD卡每次通信都采用命令传输和应答的方式完成。每个命令都对应不同的应答格式,命令分为标准的常规命令CMD和应用命令ACMD,每次使用ACMD之前都要首先发送CMD55;应答响应中除响应R2的代码发送长度是136位之外,其余的R1、R1b、R3、R6、R7都是48位[4]。图2是SD卡接口电路图。

图2 SD卡接口电路图

1.2 串口模块电路

串口模块电路采用CH340作为USB转TTL电平的主器件,CH340 是一个 USB 总线的转接芯片,主要用于实现 USB 转串口、USB 转 IrDA 红外或者 USB 转打印口。 在串口方式下,CH340 提供常用的 MODEM 联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到 USB 总线。 在红外方式下,CH340外加红外收发器即可构成 USB 红外线适配器,实现 SIR 红外线通信。串口模块既可以用作STC单片机的下载器,也可以用作单片机与PC机的串口通信使用,以方便调试,串口模块电路图见图3。

图3 串口模块电路图

2 软件设计

2.1 WAV文件格式解析

WAV为微软公司开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,所有的格式为WAV的音频文件都有一个文件头,这个文件头固定为 “RIFF”。数据块的记录方式是little-endian字节顺序,标志符并不是字符串而是单独的符号[5]。“RIFF WAVE FILE”格式解析表见表1。

通过该表,可以从WAV文件中获取必要的信息,比如采样率、通道数、音频文件的实际大小等。WAV文件是由若干个Chunk组成的 ,而每个块由8个字节组成,每次读取8个字节分块信息,存储WAV分块信息中有用信息[6]。

表1 “RIFF WAVE FILE”格式解析表

为了兼容,跳过对“LIST”chunk、“DISP”chunk、“fact”chunk的处理,图4是WAV文件的解析流程图。

图4 WAV文件的解析流程图

2.2 开源的文件系统Petit Fatfs

FAT文件系统发展至今,出现了FAT12、FAT1、FAT32三种类型。根据FAT表中每个FAT项所占长度来分类,即它们的FAT表中每个FAT项占用的位数分别为12、16、32位。由于FAT12不支持中文文件名,并且最多管理8 MB的容量,使得它的淘汰成为必然。虽然FAT16能管理16 MB~2 GB的磁盘空间,但是造成大量的空间浪费,FAT32的出现解决了这一问题。

为了更好地管理SD卡,使用开源的文件系统代码“Petit FatFs”。Petit FatFs是免费开源的通用文件系统模块,用在小型嵌入式系统中实现FAT文件系统,采用ANSI C编写,不依赖硬件平台,用户只需要编写底层的磁盘驱动函数、RTC函数、应用层函数就能快速的完成模块移植。Petit FatFs模块中提供了许多函数,下面就能其中常用函数做简单说明,详细的函数说明见参考文献[7]。

pf_mount:在使用Petit Fatfs时,必须要注册一个工作区域,使用完毕时,需要注销工作区域。

pf_open:打开/创建一个文件,文件打开后,便可对文件进行读写操作。

pf_close:文件读写完成后必须关闭调用此函数关闭打开的文件。

pf_read,pf_write:文件的读写函数。

pf_opendir,pf_readdir:存储卡上指定目录的打开读取函数。

2.3 WAV文件音频数据的提取与消耗

由于WAVE文件有以下4种不同的格式:8bit Mono,8bit Stereo,16bit Mono、16bit Stereo,每个采样样本包含的字节数不一,需进行相应的处理以便存储。FAT文件系统初始化完毕后,发送读取单块命令CMD17,一旦收到响应0xFE,接下来就可以接收数据,并对其进行处理,为了防止数据断流,设计一个256字节的FIFO缓冲区对数据进行存储,一旦数据缓冲区存满,就停止对缓冲区进行写操作,并等待数据取走。在WAV文件头信息进行成功解析后,根据当前文件的采样率,设置定时器的定时时间,并在指定的时间产生中断,将存储在FIFO缓冲区的未读取数据取走,送PWM接口滤波输出[8-9]。假设WAV文件的采样频率是f=44 100 Hz,T=1/f=22 μs,那么定时器每22 μs就产生一次中断,并将FIFO缓冲区中的数据送PWM输出即可。图5是定时器中断流程图。

3 软件设计及调试结果

图5 定时器中断流程图

FAT文件系统管理模块采用Petit FatFs R0.03版本,编译环境采用ATMEL公司的AVR StudioV4配合Windows下的GCC编译器WINAVR一起使用。打开PC机上的超级终端,选择相应端口,设置波特率为9 600 bps,8位无奇偶检验位,1位停止位,将其作为调试平台。将SD卡格式化为FAT32,并拷贝WAV音频文件到SD卡上的WAV目录下,图6是WAV播放器软件设计流程图。

图6 WAV播放器软件设计流程图

系统上电后,初始化相应I/O口、串口、SD卡,利用Petit FatFs文件系统模块挂接SD卡, 读取SD卡扇区大小、根目录所在扇区、SD卡的类型等并通过PC机上的超级终端进行显示。一旦进入目录搜索WAV文件成功时,就播放该文件,此时就听到悦耳的音乐,同时还能在超级终端上看到文件名、采用率,另外通过按键可以切换歌曲。经过实际测试,该WAV播放器能流畅播放采样率在8~48 kHz之间的WAV文件,图7是系统显示效果图。

图7 系统显示效果图

结 语

[1] 彭伟.单片机C语言程序设计实训100例:基于AVR+Proteus仿真[M].北京:北京航空航天大学出版社,2010.

[2] Ams Company. AMS1117 Datasheet[EB/OL].[2017-05].http://www.ams-semitech.com/attachments/File/AMS 1117_20120314.pdf.

[3] 段勇.基于MSP430单片机的SD卡读写[J].生物医学工程研究,2007(4):348-349.

[4] SD Group and SD Association .SD Specification Part 1 Physical Layer Simplified Specification Version 3.01[EB/OL].[2017-05]. http://www.doc88.com/p-6058725096701.html

[5] Multimedia Programming Interface and Data Specifications 1.0(1991-08)[2017-05]. http://elm-chan.org/junk/adpcm/RIFF_MCI.pdf.

[6] 徐济仁,牛纪海,陈家松.对WAV文件格式的实例分析[J].电声技术,2001,11(22):41-46.

[7] Petit FAT File System Module.(2014-10)[2017-05].http://elm-chan.org/fsw/ff/00index_p.html.

[8] 黄玲,吴凌云.PWM结合电阻网络实现16位WAV语音播放[J].单片机与嵌入式系统应用,2014(9):75-76.

[9] 周明华.PWM 语音播放器基于 Stellaris 系列 ARM[J].工程技术笔记,2008,3(2):23-34.

王波(硕士研究生),主要从事单片机与嵌入式应用设计方面的研究。

High-quality WAV Player Design Based on AVR Microcontroller

Wang Bo

(College of Electronic Information and Automation,Aba Teachers’College,Wenchuan 623000,China)

In the paper,the ATMEGA16 microcontroller is used as the controller,SD card is used as the storage medium.The FATFS file system is used to manage the SD card,and plays the WAV audio file in the specified directory of the SD card.The system makes the best use of on-chip resources,such as the timers,the SPI interface,the PWM and so on.The data of SD card is read through the SPI interface,The DAC output is based on PWM.In order to prevent datastream on breakpoint,the data stored in the buffer is handled using FIFO.The audio data is output using PWM at the specified time according to the sampling rate of the WAV files.After a series of tests,the system can smoothly play the WAV audio files that sample rate is between 8 kHz and 48 kHz.

ATMEGA16 MCU;FATFS file system;WAV;FIFO;PWM

TP368.1

A

�迪娜

2017-05-31)

猜你喜欢

音频文件PC机播放器
Walkman诞生40周年 索尼适时发布NW-ZX500和NW-A100系列播放器
基于STM32的MP3播放器设计
Moon ACE播放器/放大器一体机
基于PC机与单片机的多机通信技术及抗干扰方法
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
基于Android手机的音频文件取证技术研究
VC.NET下实现dsPIC单片机与PC机的通信
排除OLT设备登录故障
播放器背板注塑模具设计
提取APP中的音频文件