文字轉(zhuǎn)發(fā)音單片處理器WTS701的原理及應(yīng)用
摘要:WTS702是華邦公司推出的內(nèi)建喇叭驅(qū)動(dòng)功能的“文字轉(zhuǎn)發(fā)音”單芯片集成電路。該芯片將連續(xù)運(yùn)算法與華邦專有的多層次儲(chǔ)存技術(shù)相結(jié)合,從而實(shí)現(xiàn)了真正將“文字轉(zhuǎn)發(fā)音”的完整功能。文中介紹了該芯片的原理及典型應(yīng)用,給出了Cygnal F120MPU與WTS701的接口電路,并根據(jù)相應(yīng)的芯片指令給出了其控制軟件的代碼程序。
關(guān)鍵詞:文字轉(zhuǎn)發(fā)音;WTS701;C51語(yǔ)言;
1 概述
WTS701是華邦電子推出的第一顆“文字轉(zhuǎn)發(fā)音”(text-to-speech)單芯片處理器。WTS701使用真人發(fā)音為樣本,從而確保了所輸出的發(fā)音是清晰的真人發(fā)音,而不會(huì)像計(jì)算機(jī)合成聲音般不自然,因此,通過(guò)該芯片將文字轉(zhuǎn)換成的發(fā)音更自然、真實(shí)、悅耳。
WTS701單芯片處理器解決方案將連續(xù)運(yùn)算法(concat enation algorithm) 與華邦專有的多層次儲(chǔ)存技術(shù)(Multi-Level Storage,MLS) 相結(jié)合。WTS701單芯片處理器內(nèi)建喇叭驅(qū)動(dòng)功能,不需要微處理器或個(gè)人計(jì)算機(jī)即可運(yùn)作,因而可廣泛應(yīng)用于無(wú)線產(chǎn)品上。舉凡電子郵件的閱讀、實(shí)時(shí)簡(jiǎn)訊、網(wǎng)站、新聞、天氣、運(yùn)動(dòng)、股價(jià)等信息,或是電子商務(wù)訊息傳遞及衛(wèi)星導(dǎo)航系統(tǒng)的語(yǔ)音說(shuō)明,皆可使用此款IC將文字轉(zhuǎn)換成為語(yǔ)音,以聽(tīng)覺(jué)代替視覺(jué)來(lái)讀取。此外,WTS701單芯片處理器還可以運(yùn)用在學(xué)習(xí)輔助教材、視障輔助教材、電子書(shū)、玩具及其它娛樂(lè)產(chǎn)品上。
2 引腳排列及功能
WTS701采用56腳TSOP封裝。其引腳排列如圖1所示,各引腳的功能說(shuō)明如表1所列。
表1 WTS701的引腳功能
引腳號(hào) | 引腳名稱 | I/O |
功 能 |
2,36,44 | VSSA | G | 模擬地 |
3 | VCLK | I | CODEC主頻時(shí)鐘 |
4 | VFS | I | CODEC同步信號(hào) |
5 | VDX | O | CODEC數(shù)據(jù)輸出 |
6 | MISO | O | SPI輸出方式,主入從出 |
7 | XTAL2 | O | 外接時(shí)鐘輸出 |
8 | XTAL1 | I | 外接時(shí)鐘輸入 |
9,10 | VSSD | G | 數(shù)據(jù)地 |
11,12 | VCCD | P | 數(shù)據(jù)電源 |
13 | INT | O | 中斷輸出 |
14 | MOSI | I | SPI輸出方式,主出從入 |
15 | SS | I | SPI輸出方式,從方選擇 |
16 | SCLK | I | SPI串口時(shí)鐘輸入 |
25 | CS | I | WTS701片選 |
26 | R/B | O | 數(shù)據(jù)傳輸空閑或忙引腳 |
27 | RESET | I | 復(fù)位 |
40 | ATTCAP | I/O | 自動(dòng)靜噪,與模擬地之間連接4.7μF電容 |
42 | SP- | O | 差分負(fù)極揚(yáng)聲器輸出 |
46 | SP+ | O | 差分正極揚(yáng)聲器輸出 |
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 應(yīng)用特性
3.1 芯片工作參數(shù)
●采用2.7V~3.3V工作電壓。
●其I/O引腳可耐3V~5V電壓。
●功耗低,工作模式時(shí)的電流為35μA,等待模式時(shí)為1μA。
●工作溫度范圍:-40℃~+85℃。
●采用模擬音頻輸出,可外接8Ω揚(yáng)聲器。
●發(fā)音語(yǔ)速可調(diào)。
●可對(duì)ASCII碼或Unicode碼進(jìn)行文字轉(zhuǎn)發(fā)音。
●支持英語(yǔ)男、女性發(fā)音和中文女性發(fā)音。
3.2 存儲(chǔ)單元和SPI傳輸格式
該芯片內(nèi)含2組內(nèi)存數(shù)組:其一為語(yǔ)音數(shù)據(jù)庫(kù)所用,另一則為處理核心程序所用。有1組模擬/數(shù)字轉(zhuǎn)換器負(fù)責(zé)通過(guò)音效PCM輸出音效,另有1組揚(yáng)聲器驅(qū)動(dòng)線路可做為模擬輸出。WTS701支持ASCII碼的文字輸入(國(guó)語(yǔ)則需使用Unicode編碼文字),并可通過(guò)串行SPI接口輸入,然后將其轉(zhuǎn)換為語(yǔ)音并通過(guò)模擬端口輸出,當(dāng)然,也可輸出至數(shù)字CODEC。WTS701芯片的系統(tǒng)工作流程框圖如圖2所示。
WTS701的傳輸協(xié)議采用SPI方式,傳輸格式如圖3所示。
4 典型應(yīng)用
圖4所示是WTS701與Cygnal F120微控制器的接口電路。系統(tǒng)的應(yīng)用軟件代碼程序見(jiàn)下文。當(dāng)微處理器Cygnal F120與WTS701以及相應(yīng)的外圍電路連接完畢后,便可運(yùn)行該應(yīng)用軟件,揚(yáng)聲器將發(fā)出“大家好”的問(wèn)候語(yǔ)。
#include"c:\cygnaldefiles\c51\inc\c8051f120.h"
#define byte unsigned char
#define uint unsigned int
#define SYSCLK 22118400 //系統(tǒng)時(shí)鐘外部晶體
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;
// 延時(shí)計(jì)數(shù)器
SFRPAGE_(tái)SAVE=SFRPAGE;
SFRPAGE=CONFIG_PAGE;
OSCXCN=0x67; // 啟動(dòng)外部22.1184MHz晶振
for(i=0;i<255;i++); ? // 等待振蕩器啟動(dòng)
while(!(OSCXCN&0x80?)); // 等待晶體振蕩器穩(wěn)定
CLKSEL=0x01;
OSCICN=0x00; // 選擇外部振蕩器為系統(tǒng)時(shí)鐘源并使能丟失時(shí)鐘檢測(cè)器
SFRPAGE=SFRPAGE_(tái)SAVE;
}
void PORT_Init(void)
{ SFRPAGE_(tái)SAVE=SFRPAGE;
SFRPAGE=CONFIG_PAGE;
XBR0=0x04; // 使能UART0
XBR1=0x14; // 使能INT0和INT1
XBR2=0x44; // 使能數(shù)據(jù)交叉開(kāi)關(guān)和弱上拉
P2MDOUT|=0xff; // 允許為推挽輸出
SFRPAGE=SFRPAGE_(tái)SAVE;
}
void spi_(kāi)begin()
{ mosi=1;
delay(1);
sclk=1;
delay(1);?
ss=1;
delay(1);?
ss=0;
}
byte spi_(kāi)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;
delay?5??
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; // 禁止看門(mén)狗定時(shí)器
WDTCN=0xad;
SYSCLK_Init();? // 初始化振蕩器
PORT_Init(); // 初始化數(shù)據(jù)交叉開(kāi)關(guān)和通用IO口
cs=0; res=1; delay(10); res=0; delay(10);?
spi_(kāi)begin();
status[0]=spi_(kāi)send_byte(0x14);
status[1]=spi_(kāi)send_byte(0x00);?
spi_(kāi)end();??
delay(500); //ready to accept commands but not powered up
spi_(kāi)begin();
status[2]=spi_(kāi)send_byte(0x02);
status[3]=spi_(kāi)send_byte(0x00);?
spi_(kāi)end();
delay(500); //send the power up command
spi_(kāi)begin();
status[4]=spi_(kāi)send_byte(0x06); //send read interrupt command
status[5]=spi_(kāi)send_byte(0x00);
status[6]=spi_(kāi)send_byte(0x00);?
status[7]=spi_(kāi)send_byte(0x00);?
spi_(kāi)end();?
delay(500); //return the status of the wts701,now be ready for conversion
spi_(kāi)begin();?
spi_(kāi)send_byte(0x51);
spi_(kāi)send_byte(0x00);?
spi_(kāi)end();
delay(500); //svol set vol register command
spi_(kāi)begin???
spi_(kāi)send_byte(0x52);?
spi_(kāi)send_byte(0x07);?
spi_(kāi)end();
delay(500);//svol set vol register command
spi_(kāi)begin();
status[8]=spi_(kāi)send_byte(0x81);?
status[9]=spi_(kāi)send_byte(0x00);?
status[10]=spi_(kāi)send_byte(0x10);? //^P
status[11]=spi_(kāi)send_byte('D'); //“大”的拼音
status[12]=spi_(kāi)send_byte('A'??
status[13]=spi_(kāi)send_byte('4');?
status[14]=spi_(kāi)send_byte('J');? //“家”的拼音
status[15]=spi_(kāi)send_byte('I');?
status[16]=spi_(kāi)send_byte('A');?
status[17]=spi_(kāi)send_byte('1');?
status[18]=spi_(kāi)send_byte('H');? //“好”的拼音
status[19]=spi_(kāi)send_byte('A');?
status[20]=spi_(kāi)send_byte('0');?
status[21]=spi_(kāi)send_byte('3');?
status[22]=spi_(kāi)send_byte(' '); //結(jié)束符
spi_(kāi)end();?
while(1); ?
}
5 結(jié)束語(yǔ)
實(shí)際使用時(shí),可利用華邦WTS701語(yǔ)音芯片的預(yù)錄人聲方式來(lái)讓文字轉(zhuǎn)換后的語(yǔ)音更具有人情味。現(xiàn)今市場(chǎng)上的TTS產(chǎn)品多半采用計(jì)算機(jī)合成的語(yǔ)音模式,WTS701的問(wèn)世則可把一般文字轉(zhuǎn)化為真人發(fā)音的語(yǔ)音輸出,從而創(chuàng)造一個(gè)更具人性化的語(yǔ)音環(huán)境。