刘垣 李外云 赵嘉怡
摘 要:目前市场上便携式的WAVE播放器大部分基于32位处理器,其资源利用率较低,而且价格偏高。针对上述情况,文章充分利用8位STC15系列单片机的串行外围设备SPI接口和脉宽调制PWM输出等功能,结合开源的FatFS文件系统,完成对SD卡上存储的WAVE音频文件进行读取、DAC转换,然后通过有源低通滤波器,实现对WAVE音频文件的播放。实验结果表明本文设计的WAVE播放器不仅硬件电路简单,成本低廉,而且播放效果完全达到CD音质级别。
关键词:STC15单片机;WAVE播放;SD卡;Petit Fat文件系统
引言
随着电子技术的发展,数字音频应用系统在我们现实生活中随处可见,比如电梯、商场、电子玩具、报警器等。数字音频技术的基本原理和处理方法就是采用ADC(Analog-to-Digital Converter)模/数转化,对模拟的音频信号进行采样、量化、编码,然后转换成数字化的音频数据和文件进行保存。在播放时,再将数字化的音频数据经过DAC(Digital-to-Analog Converter)数/模转换,恢复到模拟信号形式由发生器件播放出来。目前市场上便携式的WAVE音乐播放器大部分基于32位处理器,其资源利用率较低,价格偏高。而本设计充分利用8位STC15系列单片机的PWM功能对WAVE文件的采样数据进行DA转化方便得实现了WAVE音频文件的播放。
1 系统硬件
本系统采用STC15F2K60S2型号的单片机,以单片机为核心控制整个系统。利用单片机的SPI接口实现与SD卡物理接口的通信,完成SD卡上WAVE音频文件的读取,再将得到的采样数据通过单片机的PWM功能进行DA转换,经过低通滤波器实现模拟音频数据的输出。
1.1 系统硬件组成
本系统的组成框图如图1所示,硬件结构主要包括单片机最小系统[1]、SD卡接口电路、按键电路、低通滤波电路和耳机接口几部分。其中单片机与SD卡的通信采用SPI接口方式,STC单片机为主机,SD卡为从机;STC单片机PCA模块输出的PWM信号通过低通滤波器最终连接到耳机接口;单片机的I/O口连接4×1独立按键,用于控制和选择音频数据文件的播放。
要实现WAVE音频文件的读取,并且实现高质量播放效果,SD卡接口电路和有源低通滤波电路是最为关键的两部分,下面将对其进行重点介绍。
1.1.1 SD卡接口电路
SD卡具体的接口电路如图2所示。SD卡规范[2]规定了SD卡的工作电压为3.3 V(2.7~3.6V),因此采用电源稳压芯片AMS1117-3.3将5V电源转换到3.3V供SD卡使用。电阻R4~R9组成了3个分压电路,用于将STC的5V引脚输出电平转换成3.3V。此时SD卡才可以正常工作。
硬件设计好之后还需要实现SD卡的接口驱动。接口驱动的实现是通过单片机的SPI总线编程。SPI总线是一个面向字节的全双工4线串行通信接口。SPI总线系统包括一个主机和一个从机,双方之间通过4根信号线相连,分别是:主机输出/从机输入(MOSI),主机的数据传入从机的通道;主机输入/从机输出(MISO),从机的数据传入主机的通道;同步时钟信号(SCLK),同步时钟是由SPI主机产生的,并通过该信号传送给从机,主机与从机之间的数据接收和发送都以该同步时钟信号为基准进行;从机选择(SS),该信号由主机发出,从机只在该信号有效时响应SCLK的时钟信号开始通信。
SPI通信的本质是在同步时钟作用下进行串行移位,其通信的工作模式和时序在SPI总线规范[3]中进行了详细的描述。根据SD卡总线时序[4],并针对STC15F2K60S2型号单片机,本系统实现了以下几个驱动函数,分别为初始化函数、接收字节函数和发送字节函数。
1.1.2 有源低通滤波电路
有源低通滤波电路由集成运放和无源元件电阻和电容构成。它的功能是允许从零到某个截止频率的信号无衰减地通过,而对其他频率的信号有抑制作用。
本系统设计的有源低通滤波电路为二阶低通滤波电路[5],其通带放大倍数与一阶电路相同,可由公式(1)得到。衰减斜率达每十倍频40dB。由于运放电路中的电阻不宜选择过大或过小,一般为几千欧至几十千欧较合适,因此低通滤波电路的电阻值R1=14K?赘,R2=10K?赘,电容值C1=1nF,C2=1nF。将电阻电容值带入公式(2)得到该有源低通滤波器的截止频率约为13kHz。为了减少输入偏置电流及其漂移对电路的影响,应使R1+R2=R3//R4,这里取R3=68K?赘,R4=39.8K?赘。将电阻R3、R4的阻值带入公式(1)可得到通带增益为1.58。
1.2 PWM方式DAC转换
PWM是脉冲宽度调制的简称。一个典型PWM的波形如图3所示,图中T是PWM波的周期,T1是高电平的宽度,VCC是高电平值。当该PWM信号通过一个低通滤波器后,可以得到其输出的平均电压为V,如公式(3)所示
V=VCC×T1/T (3)
公式中:T1/T称为PWM波的占空比。控制T1的宽度,即可改变PWM的占空比,得到不同的平均输出电压。因此,在实际应用中,常利用PWM波的输出实现D/A转换。
STC15系列单片机的PCA模块要想实现PWM模式需要设定相关的寄存器。主要的寄存器有CMOD定时/计数器工作模式寄存器、CCON定时/计数器控制寄存器、CCAPMn比较/捕获模式控制寄存器,每个寄存器的具体定义可参考STC15F2K60S2的官方数据手册。要设置PCA模块的PWM模式,CCAPMn寄存器的PWMn和ECOMn位必须置位,PCA模块的时钟源频率选择11.2896MHz,产生的PWM频率为44.1kHz,其计算公式为
fpwm=Sclk/256 (4)
由于PCA模块产生的PWM频率是恒定的44.1kHz,因此,播放44.1kHz的音频时,每个采样点播放一次。当播放8kHz的音频时,每个采样点则以44.1kHz的频率平均播放了5.5次,这样保证了PWM产生的高频噪声总在44kHz以上,使滤波后的模拟信号更加平滑,以获得更好的音频输出效果。
本设计为了读取不同采样频率的WAVE文件(包括8K、22.1K、44.1K三个频率),还需要一个定时器实现不同采样频率的播放。该定时器设置为16位自动重载模式,其中断间隔是可调整的。在开始读取准备播放的WAVE文件时,程序将读取该文件的采样频率参数,自动调整定时器T0的中断频率与其相同,并在中断服务程序中将下一个音频数据更换到CCAPOH和CCAPOL寄存器中,这样就保证了音频数据的同步播放。
2 系统软件设计
本系统软件设计主要包括三个部分,分别是文件系统移植、SD卡操作命令、上层应用程序控制。
2.1 文件系统移植
PC机上可以直接写入数据文件到SD卡,而嵌入式系统读取数据则必须通过建立文件系统来读取。本设计使用了一个免费的文件系统PetitFatFS(PetitFATFileSystemModule)。它是一位日本嵌入式工程师编写的通用软件模块,它与FAT文件系统兼容。他的个人网站提供了用C语言编写的源代码以及在不同硬件平台上移植与使用的实例。
本系统设计移植了AVR版本的PetitFatFS文件系统到STC15单片机上,由于PetitFatFS文件系统是通用的,所以它不依赖于底层模块。底层I/O模块不是PetitFatFS文件系统的一部分,因此,底层读取物理存储介质的函数必须由用户编写。主要的函数有两个,第一个是disk_intialize函数,用于存储介质的初始化;第二个是disk_readp函数,用于读取SD卡的一个扇区,是磁盘操作的核心函数。
2.2 SD卡操作命令
在建立了SD卡物理接口层SPI的基础上,仅仅可以实现简单的面向字节的数据通道。SD卡规范制定了一组建立在SPI总线上的SD卡操作命令,通过发送不同的操作命令可以实现对SD卡的复位、初始化以及读写操作。其具体的命令格式和命令应答字格式参考SD卡规范。
针对SD卡的操作命令时序,首先要对SD卡实施上电复位操作,复位操作时SCLK的时钟频率应该在400kHz以下。SD卡在上电后默认采用SDIO接口方式,在CS高电平的情况下,先通过SCLK送72个以上的时钟信号到SD卡,等待SD卡内部工作电源稳定,以完成SD卡的时钟与SCLK的同步。然后拉低片选CS,发送复位命令CMD0,此时SD卡自动转换成SPI接口方式。STC单片机开始接收SD卡的应答字,如果收到0x01,表示SD卡上电复位成功。接着进行SD卡的初始化操作,需要使用CMD55+ACMD41两条命令,当单片机收到0x00的应答后,整个SD卡初始化工作完成。完成SD卡的初始化后,就可以通过CMD指令对SD卡进行读写操作了。
2.3 主函数控制
关于主函数部分,包括了STC15单片机定时器与PCA模块的初始化、中断处理函数、按键控制、音频wav的解析和音频数据的读取与播放。
如图4所示为主程序和中断服务程序的流程图,程序运行过程如下:
3 系统测试及结论
通过Keil开发环境对程序进行编译和链接,将生成的hex文件下载到目标硬件平台运行。通过测试发现,该系统能完成8K、22.1K、44.1K三个采样频率WAVE文件的播放,播放效果可以达到CD音质。相比于32位微处理器该WAVE音乐播放器硬件电路简单,成本低廉,具有很大的实用参考价值。
参考文献
[1]李全利.单片机原理及应用技术[M].北京:高等教育出版社,2001.
[2]童诗白,华成英.模拟电子技术基础[M].北京:高等教育出版社,2000.
[3]Elm-chan.PetitFATFileSystemModule[EB/OL].(2014-06-10)[2015-01-04]http://elm-chan.org/fsw/ff/00index_p.html.
[4]STC15F2K60S2MCUUser'smanual[EB/OL].(2014-07-02)[2015-01-04]http://www.stcmcu.com/datasheet/stc/STC-AD-PDF/STC15.pdf
[5]马潮.AVR单片机嵌入式系统原理与应用实践[M].北京:北京航空航天大学出版社,2007.