本帖最后由 goyuqinghua 于 2014-10-9 17:53 编辑
一、概述 该简易WAV播放器基于Arduino UNO结合自制的低通滤波器制作完成,该WAV播放器通过UNO产生PWM信号然后经过低通滤波器使存储在UNO内部flash中的PCM数据发声的过程,其实该播放器不能纯粹的说是一个WAV播放,因为笔者通过工具将WAV文件中的PCM数据提取出来以数组的形式存储在UNO的内部flash中,该DIY教程只是给读者一个启示,读者可以根据这个思路制作更加强大的基于SD卡的WAV播放器,该播放器制作简单、方便DIY,只要弄懂了发声原理就可以很方便的在不同的平台上制作功能强大的WAV播放器,该播放器可运用在简单的语音播报系统、 电子琴中。 二、原理讲解 2.1、数字音频基础 2.1.1、数字音频基础知识介绍 数字音频技术的基本原理和处理方法,就是采用ADC模数转换器,对模拟的音频信号进行采样、量化、编码后转换成数字化的音频数据和文件进行保存,当然,在播放的时候,还需要将数字化的音频数据经过DAC数模转换器,恢复到模拟信号形式由发声器件播放出来。 根据音频信号的应用范围的不同,模拟音频数字化ADC过程中采用的采样频率和量化精度也是不同的,通常的标准如下表所示。 从上表中可以看到,根据采样定理,针对不同音质的音频信号,数字音频ADC的采样频率都是模拟信号最高频率的2倍,另外音质要求越高,ADC量化位数也越高,实际上人的耳朵对1/256级(8位)精度的变化基本上已经分辨不出了,但对于CD音质,还是采用了16位的量化位数,精度达到1/65536,很明显,音质越高的数字音频,数据量也越大,对于1秒钟的音频信号,如果是电话质量的数字音频,其数据量是8K字节,
一个字节存放一个采样点的电平值,而要获得CD音质,1秒钟的采样数据就需要88.2k个字节存放,如果是双声道立体声,数据量就是176.4K字节/秒。 最典型的数字音频数据文件就是WAV类型的文件,它通常采用最原始的PCM编码方式存放每个采样点的原始数据,没有经过任何的压缩处理,现在配有声卡(不管是集成或独立)都有麦克风插口,在WINDOWS平台的支持下,可以进行录音,把声音变成数字音频文件保存在电脑中,这个文件就是将一个一个原始采样按顺序记录保存的WAV格式文件,因此,只要按照采样频率的速度,把这些音频数据一个一个的读出后,通过DAC转换成模拟信号,就可以得到还原的声音了。 2.1.2、WAVE数字音频文件格式简介 WAVE格式的文件(扩展名为wav)是多媒体数字音频中使用的基本音频格式之一,它是以RIFF格式为标准的,RIFF是英文ResourceInterchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”。 WAVE文件是由若干个Chunk(块)组成的,按照在文件中通常出现的位置包括有:RIFF WAVE Chunk,Format Chunk,Fact Chunk(可选),DataChunk,LIST Chunk(可选)等,其中除了RIFFWAVE Chunk,Format Chunk,Data Chunk是必须的以外,其它是可选的。 2.1.3、从WAV文件中获取PCM音频数据 PC机中有许多WAV格式文件,其实WINDOWS的提示音都是采用WAV格式的文件,我们也可以自己利用PC机和相关软件来制作自己需要的音频文件,在我们提供的资料中有一个读者制作好的WAV文件“会说话的 单片机.wav”,使用WINHEX软件可以直接以二进制的格式(显示为16进制方式)查看文件具体内容,下图是使用WINHEX软件打开该文件的显示内容。
2.2.1、什么是PWM 脉冲宽度调制(PWM),是英文“Pulse Width Modula tion”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟 电路进行控制的一种非常有效的技术,广泛应用在
2.2.2、PWM产生过程 最常见的微控制器的功能是一个定时器。这是一个简单的内部时钟,然后递增到某个值,然后返回到零。通过这些定时器产生PWM,通过外部引脚输出高电平当计时器到达零,然后输出低电平当计数到另一个值时,你可以改变。在这种方式中,可以使输出引脚在一个特定时间中保持高电平,而不必手动切换它的代码。如果你输出管脚通过低通滤波器你可以得到平均值。
2.2.3、PWM实现ADC功能 在pwm输出引脚上通过由电阻R和电容C构成的简单积分电路,滤掉高频进行平滑后,在音频输出口上就可以得到模拟音频输出,这里以我们提供的wav文件为例,由于生成的pwm的频率为8KHz,因此PWM的输出信号中包含许多大于8K的高频信号成分,所以由电阻R和电容C构成的低通滤波器的截止频率应该在6KHz左右,以能够把8K以上的高频信号给滤掉,保留4KHz一下的模拟信号。 电阻电容构成的低通滤波器截止频率的计算公式为F=1/2∏RC,将数据代入计算得: 1/(2*3.1415*2700*0.00000001)=5897.6Hz,因此由R=2.7k,C=0.01uF构成的低通滤波器的截止频率大约为5.9KHz.
三、制作准备
硬件: 软件: 1、USB小音响 AVR studio 4.19 2、数字按键 Winavr-2010 3、Freduino UNO 4、4x6cm万能板 5、杜邦线 6、耳机插口 注意:因为笔者觉得有些代码在AVR studio编写比在Arduino IDE中更加的方便所以提供的例程是AVR studio的例程,读者想要在ArduinoIDE中使用这个代码只要稍微修改一下就可以了。 四、制作过程 1、用烙铁按照下图电路图所以将低通滤波器焊接在4x6cm的万能板上
2、将上图焊接的低通滤波的输入信号接入UNO的D6引脚,并将滤波器与UNO共地
3、将数字按键插入UNO中的A1中如下图所示
4、将USB音响的耳机口插入低通滤波器的输出端的耳机插口中
以上步骤完成后,将UNO上电,并将代码下入UNO中,按下数字按键就会听到USB音响有声音发出。
|