基于WT588D模块的语音播报系统设计

基于WT588D模块的语音播报系统设计

摘 要: 基于WT588D模块设计了语音播报系统,并详细叙述了语音文件的制作、下载、硬件电路设计和编程设计过程。本系统整体结构简单,音质优美,成本低廉,功能扩展方便,可以作为一个基于WT588D模块设计的模板应用到多个相关领域中。关键词: WT588D模块;语音播报;MPC82G516单片机
语音播报系统在儿童玩具、计算器、学习机、迎宾器、公交报站以及智能仪器仪表等设备中得到广泛应用。以往的语音播报系统中通常采用ISD系列的语音模块,其缺点是价格较高,电路设计较复杂,控制方式不够灵活,且常常因为在线录音会引入很强的噪声,严重影响放音效果。而本文使用的WT588D模块性价比较高,存储容量大,使用专用下载软件能够在线烧写音频文件,操作极其方便,并支持6 kS/s~20 kS/s采样率的音频加载,可以无损展现音频信息。1 WT588D模块简介 WT588D模块是广州创科有限公司与台湾华邦公司共同研发的集单片机、语音电路、SPI-Flash存储器于一体的可编程语音系统。该语音系统支持6 kS/s~22 kS/s采样频率的音频,具有220个可控制的语音地址,且每个地址还可以分成128段管理。配合WT-APP上位机操作系统软件和专用的USB下载器,可以随意设置系统的控制方式、语音地址和分段信息,支持语音信息在线烧录。 WT588D模块支持MP3控制模式、按键控制模式、并口模式、一线串口模式及三线SPI模式。模块内部集成了DSP高速音频处理器,内置13 bit数模转换器以及12 bit PWM输出方式,可以无损地展现音频信息。PWM输出方式可以直接驱动0.5 W/8 Ω扬声器,无需额外的驱动电路[1]。2 语音播报系统设计2.1 语音文件的提取 语音文件的提取有2种常用方法:(1)从录制的文件中提取;(2)利用文字转语音软件提取。 从录制的文件中提取语音的步骤为:首先通过录音软件或通过手机录制wav格式的音频文件(例如包括0~9、时、分、秒等信息),然后打开GoldWave音频编辑软件,在原始wav格式文件中找到要截取的语音段,通过鼠标选择复制粘贴到新文件中即可。在该软件中还可以对音频进行合并、降噪、滤波等特效处理。 利用SoundToWav文字转语音软件,使得音频文件提取更方便。该软件利用TTS(Text To Speech)即语音合成技术,可以将任意文字转换成语音文件。为了得到较好的音质,采用了ChineseMandarinVoice语音引擎,该引擎的中文女声音色较好,基本接近真人发声水平。在SoundToWav软件中选择该语音引擎并选中按行分割文件方式,输入要转换的文字信息,点击转换即可生成音频文件。 以上两种方法中,第一种方法的真人录制语音更自然

生动更具有感染力,但容易引入噪声干扰,音效相对较差些。而文字转语音噪声低、语音清晰、音质好、操作方便,但是由于采用的是TTS语音合成方式,声音缺少饱满,缺乏真人的朗读效果。2.2 系统硬件设计 本文选择了WT588D模块的SPI三线连接方式。为说明对语音模块的控制过程,以完成播报当前按键次数的功能为例。图1为系统框图,包括单片机最小系统、一个独立按键、WT588D语音模块和与其配套使用的下载接口。在设计中,需要先通过WT588D VoiceChip上位机软件,将已经提取的音频文件下载到SPI-Flash存储器的相应地址段,并记录好地址与语音的对照表,方便放音时进行地址调用。图2为系统电路图,由于语音模块供电的特殊要求,通过AMS1117模块完成5 V~3 V的电压转换;通过PWM直接驱动方式连接0.5 W/8 Ω扬声器;通过发光二极管观察语音芯片的忙信号状态;单片机采用独立按键方式。


2.3 系统软件设计 三线串口控制模式由片选CS、时钟SCK和数据DATA组成,时序仿照标准SPI通信方式[2],具体时序。

采用上位机软件对SPI-Flash存储器25PXX烧写语音程序时,选择三线串口控制模式。语音模块的P01口被定义为DATA数据口,P02为CS片选口,P03为CLK时钟口,单片机通过3个控制口对WT588D语音模块进行控制。三线串口控制模式下其他的I/O口均无效。P17端为BUSY忙信号输出端,可设置为播放状态LED点亮和播放状态LED熄灭。SPI-Flash存储器25PXX的电压范围要保证在2.8 V~3. 5 V之间,VDD-SIM为WT588D语音芯片的串口电源管理输入端,将25PXX的VCC连接到此端,可自动平衡WT588D与25PXX之间的串口电压。PWM输出端禁止接电容到地或直接接地,系统工作为VDD=5 V,VCC=3.3 V。 基于SPI通信时序[3-4]编写如下通信子函数,根据参数address的值可以播放对应的语音段(注意传数时低位在前)。void send_adr(unsigned char address){ unsigned char i; RESET=0; delay1ms(3); RESET=1; delay1ms(17); /* 17ms*/ CS=0; delay1ms(2); for(i=0;i<8;i++) { SCLK=0; If(address&1) /* low post before high*/ DATA=1; else DATA=0; address >>=1; delay1us(50); SCLK=1; delay1us(50); } CS=1;} 主函数完成对独立按键的扫描过程,其中delay1ms(10)的作用为延时去抖动,key_mark为键标志,可以实现按键的一次响应[5]。
void main(void){ while(1) { if(!set&&!key_mark) { delay1ms(10); if(!set) { key(); key_mark=1; } } else if(set

) key_mark=0;} 按键响应函数key()可实现,每次有键按下后,计数变量n++一次,通过对n值判断进行语音播报。当n为10以内数字时,直接播放n号段的语音;当n介于10~20之间时,先播放‘10’的语音再播放个位的语音;当n介于20~100之间时,先播放十位数字的语音,再播放‘10’的语音,最后播放个位的语音。 void key() { n++; //Number keys if(n<11) send_adr(n); else if(n>10&n<20) { send_adr(10); //the voice of ten while(!BUSY); //waiting for BUSY=1 if(n%10) send_adr(n%10); // units′digit } else { send_adr(n/10); // tens′digit while(!BUSY); send_adr(10); while(!BUSY); if(n%10) send_adr(n%10); } while(!BUSY); } 本文以单片机为控制核心,详细描述了使用WT588D模块播报语音信息的具体实现过程,包括语音文件提取、硬件电路设计、通信协议分析、按键扫描、语音播报地址拆分等部分。与采用ISD系列语音芯片相比,WT588D模块的性价比较高,音质较好,易于分段管理,能够提供丰富的工作方式,给系统设计带来了较大的灵活性。本系统整体结构简单、音质优美、成本低廉、功能扩展方便,可以作为基于WT588D模块设计的模板应用到多个相关领域,并依据本文稍加修改即可进行功能扩展。

相关文档
最新文档