集成电路该芯片将连续运算法与华邦专有的多层次储存技术相结合,从而实现了真正将“文字转发音”的完整功能。文中介绍了该芯片的原理及典型应用,给出了cygnal f120mpu与wts701的接口电路,并根据相应的芯片指令给出了其控制软件的代码程序。
1 概述
wts701是华邦电子推出的第一颗“文字转发音”(text-to-speech)单芯片处理器。wts701使用真人发音为样本,从而确保了所输出的发音是清晰的真人发音,而不会像计算机合成声音般不自然,因此,通过该芯片将文字转换成的发音更自然、真实、悦耳。
wts701单芯片处理器解决方案将连续运算法(concat enation algorithm) 与华邦专有的多层次储存技术(multi-level storage,mls) 相结合。wts701单芯片处理器内建喇叭驱动功能,不需要微处理器或个人计算机即可运作,因而可广泛应用于无线产品上。举凡电子邮件的阅读、实时简讯、网站、新闻、天气、运动、股价等信息,或是电子商务讯息传递及卫星导航系统的语音说明,皆可使用此款ic将文字转换成为语音,以听觉代替视觉来读取。此外,wts701单芯片处理器还可以运用在学习辅助教材、视障辅助教材、电子书、玩具及其它娱乐产品上。
2 引脚排列及功能
wts701采用56脚tsop封装。其引脚排列如图1所示,各引脚的功能说明如表1所列。
表1 wts701的引脚功能
引脚号 | 引脚名称 | i/o | 功 能 |
2,36,44 | vssa | g | 模拟地 |
3 | vclk | i | codec主频时钟 |
4 | vfs | i | codec同步信号 |
5 | vdx | o | codec数据输出 |
6 | miso | o | spi输出方式,主入从出 |
7 | xtal2 | o | 外接时钟输出 |
8 | xtal1 | i | 外接时钟输入 |
9,10 | vssd | g | 数据地 |
11,12 | vccd | p | 数据电源 |
13 | int | o | 中断输出 |
14 | mosi | i | spi输出方式,主出从入 |
15 | ss | i | spi输出方式,从方选择 |
16 | sclk | i | spi串口时钟输入 |
25 | cs | i | wts701片选 |
26 | r/b | o | 数据传输空闲或忙引脚 |
27 | reset | i | 复位 |
40 | attcap | i/o | 自动静噪,与模拟地之间连接4.7μf电容 |
42 | sp- | o | 差分负极扬声器输出 |
46 | sp+ | o | 差分正极扬声器输出 |
48 | vcca | op | 模拟电源 |
52 | auxin | i | 模拟输入 |
54 | auxout | o | 模拟输出 |
1,17-24,28-35,37-39,41,43,45,47,49-51,53,55-56 | nc | 悬空 |
3 应用特性
3.1 芯片工作参数
●采用2.7v~3.3v工作电压。
●其i/o引脚可耐3v~5v电压。
●功耗低,工作模式时的电流为35μa,等待模式时为1μa。
●工作温度范围:-40℃~+85℃。
●采用模拟音频输出,可外接8ω扬声器。
●发音语速可调。
●可对ascii码或unicode码进行文字转发音。
●支持英语男、女性发音和中文女性发音。
3.2 存储单元和spi传输格式
该芯片内含2组内存数组:其一为语音数据库所用,另一则为处理核心程序所用。有1组模拟/数字转换器负责通过音效pcm输出音效,另有1组扬声器驱动线路可做为模拟输出。wts701支持ascii码的文字输入(国语则需使用unicode编码文字),并可通过串行spi接口输入,然后将其转换为语音并通过模拟端口输出,当然,也可输出至数字codec。wts701芯片的系统工作流程框图如图2所示。
wts701的传输协议采用spi方式,传输格式如图3所示。
4典型应用
图4所示是wts701与cygnal f120微控制器的接口电路。系统的应用软件代码程序见下文。当微处理器cygnal f120与wts701以及相应的外围电路连接完毕后,便可运行该应用软件,扬声器将发出“大家好”的问候语。
#include"c:\cygnaldefiles\c51\inc\c8051f120.h"
#define byte unsigned char
#define uint unsigned int
#define sysclk 22118400 //系统时钟外部晶体
data byte sfrpage_save;
idata byte status[23];
sbit cs =p2^0;
sbit ss =p2^1;
sbit mosi=p2^2;
sbit sclk=p2^3;
sbit miso=p2^4;
sbit rdy =p2^5;
sbit bint=p2^6;
sbit res =p2^7;
void sysclk_init(void)
{ data int i;
// 延时计数器
sfrpage_save=sfrpage;
sfrpage=config_page;
oscxcn=0x67; // 启动外部22.1184mhz晶振
for(i=0;i<255;i++); // 等待振荡器启动
while(!(oscxcn&0x80)); // 等待晶体振荡器稳定
clksel=0x01;
oscicn=0x00; // 选择外部振荡器为系统时钟源并使能丢失时钟检测器 sfrpage=sfrpage_save;
}
void port_init(void)
{ sfrpage_save=sfrpage;
sfrpage=config_page;
xbr0=0x04; // 使能uart0
xbr1=0x14; // 使能int0和int1
xbr2=0x44; // 使能数据交叉开关和弱上拉
p2mdout|=0xff; // 允许为推挽输出
sfrpage=sfrpage_save;
}
void spi_begin()
{ mosi=1;
delay(1);
sclk=1;
delay(1);
ss=1;
delay(1);
ss=0;
}
byte spi_send_byte(byte d)
{ idata byte i;
idata byte result=0;
while(!rdy);
mosi=1; miso=1;
for(i=0;i<8;i++)
{ sclk=0;
delay(5);
mosi=(bit)(d&0x80);
d=d<<1;
delay(5);
sclk=1;
delay5
result*=2
if(miso) result++;
}
return(result);
}
void spi_end()
{ mosi=1;
delay(1);
sclk=0;
delay(1);
ss=0;
delay(1);
ss=1;
}
void delay(uint delx)
{ idata uint i=0;
while(i<delx)
{ i++;}
}
main() { wdtcn=0xde; // 禁止看门狗定时器
wdtcn=0xad;
sysclk_init(); // 初始化振荡器
port_init(); // 初始化数据交叉开关和通用io口
cs=0; res=1; delay(10); res=0; delay(10);
spi_begin();
status[0]=spi_send_byte(0x14);
status[1]=spi_send_byte(0x00);
spi_end();
delay(500); //ready to accept commands but not powered up
spi_begin();
status[2]=spi_send_byte(0x02);
status[3]=spi_send_byte(0x00);
spi_end();
delay(500); //send the power up command
spi_begin();
status[4]=spi_send_byte(0x06); //send read interrupt command
status[5]=spi_send_byte(0x00);
status[6]=spi_send_byte(0x00);
status[7]=spi_send_byte(0x00);
spi_end();
delay(500); //return the status of the wts701,now be ready for conversion
spi_begin();
spi_send_byte(0x51);
spi_send_byte(0x00);
spi_end();
delay(500); //svol set vol register command
spi_begin
spi_send_byte(0x52);
spi_send_byte(0x07);
spi_end();
delay(500);//svol set vol register command
spi_begin();
status[8]=spi_send_byte(0x81);
status[9]=spi_send_byte(0x00);
status[10]=spi_send_byte(0x10); //^p
status[11]=spi_send_byte('d'); //“大”的拼音
status[12]=spi_send_byte('a'
status[13]=spi_send_byte('4');
status[14]=spi_send_byte('j'); //“家”的拼音
status[15]=spi_send_byte('i');
status[16]=spi_send_byte('a');
status[17]=spi_send_byte('1');
status[18]=spi_send_byte('h'); //“好”的拼音
status[19]=spi_send_byte('a');
status[20]=spi_send_byte('0');
status[21]=spi_send_byte('3');
status[22]=spi_send_byte(' '); //结束符
spi_end();
while(1);
}
5结束语
实际使用时,可利用华邦wts701语音芯片的预录人声方式来让文字转换后的语音更具有人情味。现今市场上的tts产品多半采用计算机合成的语音模式,wts701的问世则可把一般文字转化为真人发音的语音输出,从而创造一个更具人性化的语音环境。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』