具有語(yǔ)音辨識(shí)能力的聲控小汽車的實(shí)現(xiàn)
摘 要:本文主要論述了如何用SPCE061A實(shí)現(xiàn)對(duì)非特定人語(yǔ)音的辨識(shí),如何用SPC81A實(shí)現(xiàn)對(duì)汽車的驅(qū)動(dòng)控制,以及兩款單片機(jī)之間無(wú)線通信的實(shí)現(xiàn)。
關(guān)鍵詞:單片機(jī);SPCE061A;SPC81A;語(yǔ)音辨識(shí);非特定發(fā)音人
方案設(shè)計(jì)與論證
本系統(tǒng)為典型的實(shí)時(shí)控制系統(tǒng),下面對(duì)系統(tǒng)的實(shí)現(xiàn)方案進(jìn)行論證。
語(yǔ)音辨識(shí)方案:本設(shè)計(jì)中采用具有DSP處理功能的凌陽(yáng)16位單片機(jī)SPCE061A實(shí)現(xiàn)語(yǔ)音辨識(shí)功能。由于SPCE061A具有A/D、D/A轉(zhuǎn)換接口,可以方便用于各種數(shù)據(jù)的采集、處理和控制輸出。A/D、D/A轉(zhuǎn)換接口與SPCE061A的DSP運(yùn)算功能結(jié)合在一起,可實(shí)現(xiàn)語(yǔ)音辨識(shí)功能。
通信方案:通信方式可用無(wú)線或紅外光方式,紅外光方式適合于近距離通信,電路較簡(jiǎn)單;無(wú)線方式通信距離較遠(yuǎn),但電路復(fù)雜。考慮到汽車處于被控中(距離較遠(yuǎn)),選擇無(wú)線作為載波來(lái)傳送信息。
電機(jī)驅(qū)動(dòng)方案:本系統(tǒng)在電機(jī)的驅(qū)動(dòng)部分利用8050、8550等不同三極管的組合,構(gòu)造一座“橋”。該橋的優(yōu)點(diǎn)是原理簡(jiǎn)單、易控制、帶負(fù)載能力強(qiáng)。在單片機(jī)的配合下,通過(guò)PWM的方法,實(shí)現(xiàn)了對(duì)驅(qū)動(dòng)電機(jī)的輕松控速。
電源供電方案:采用雙電源供電消除電機(jī)運(yùn)轉(zhuǎn)產(chǎn)生的干擾,保證單片機(jī)正常工作。在電機(jī)驅(qū)動(dòng)部分,為了保證兩組驅(qū)動(dòng)電路都有較大的驅(qū)動(dòng)電流,采用兩組電池并聯(lián)供電。
系統(tǒng)框圖及工作原理
系統(tǒng)的組成框圖如圖1所示, 通過(guò)麥克風(fēng)輸入口輸入。SPCE061A的自動(dòng)增益放大器把信號(hào)轉(zhuǎn)換為適合單片機(jī)處理的信號(hào)范圍。然后單片機(jī)對(duì)送來(lái)的信號(hào)進(jìn)行分析、運(yùn)算、處理、比較,識(shí)別出相應(yīng)的命令。按照編碼,把控制碼序列從PA.0端口通過(guò)RF發(fā)送模塊串行發(fā)送出去,并有相應(yīng)的語(yǔ)音播報(bào)。SPC81A從PB.0接收到信號(hào),通過(guò)檢測(cè)比較判斷出相應(yīng)的命令。然后從C端口的低四位發(fā)出相應(yīng)的控制信號(hào),控制電機(jī)轉(zhuǎn)動(dòng)并有相應(yīng)的音效輸出。
系統(tǒng)硬件設(shè)計(jì)及原理分析
語(yǔ)音辨識(shí)部分
該部分也即為SPCE061A的外接電路部分。語(yǔ)音辨識(shí)主要是通過(guò)軟件來(lái)實(shí)現(xiàn),所以硬件電路主要是使SPCE061A芯片能正常工作所必需的電源、晶振以及麥克風(fēng)和音頻驅(qū)動(dòng)電路。控制碼序列的發(fā)送是通過(guò)IOA0串行發(fā)送(外接RF發(fā)送模塊)。
電機(jī)驅(qū)動(dòng)控制部分
本系統(tǒng)的小車電機(jī)驅(qū)動(dòng)控制部分利用8050、8550等不同的三極管組合成橋式電路,實(shí)現(xiàn)對(duì)驅(qū)動(dòng)電機(jī)的控制,具體電路如圖2所示。控制過(guò)程如下:
當(dāng)PC.0/PC.2為高電平,PC.1/PC.3為低電平時(shí),則Q1、Q2、Q3導(dǎo)通,Q4、Q5、Q6截止。其中Q1為激勵(lì)級(jí),Q2、Q3為功放級(jí)。電流從VCC經(jīng)Q2到電機(jī)“+”端,再到“-”端,最后經(jīng)Q3入地,電機(jī)正轉(zhuǎn);當(dāng) PC.0/PC.2為低電平,PC.1/PC.3為高電平時(shí),則電機(jī)反轉(zhuǎn);當(dāng)都為低電平時(shí),電機(jī)停轉(zhuǎn)。注意:不能讓兩個(gè)輸出口都為高電平,這樣會(huì)使Q1、Q2、Q3、Q4、Q5、Q6都處于導(dǎo)通狀態(tài)。會(huì)在功放級(jí)產(chǎn)生大電流致使三級(jí)管超過(guò)額定功率,從而導(dǎo)致發(fā)熱甚至燒壞。
在速度控制方面,一般是通過(guò)改變加在電機(jī)兩端的電壓來(lái)實(shí)現(xiàn)的??梢赃B續(xù)改變(加直流電壓),也可以是斷續(xù)改變(加脈沖電壓)。為了簡(jiǎn)單實(shí)用,本設(shè)計(jì)采用了脈寬調(diào)速,軟件調(diào)整。
脈沖頻率對(duì)電機(jī)轉(zhuǎn)速也有影響,脈沖頻率高則連續(xù)性好,但帶負(fù)載能力差,頻率低則反之。經(jīng)實(shí)驗(yàn)發(fā)現(xiàn),脈沖頻率在15~20Hz效果最佳。
脈寬調(diào)速實(shí)質(zhì)上是調(diào)節(jié)加在電機(jī)兩端的平均功率,通過(guò)計(jì)算可發(fā)現(xiàn)小車的速度與脈寬成正比。
車載部分
該部分也即SPC81A的外接電路部分,將SPC81A的時(shí)鐘振蕩源設(shè)置為RC振蕩,通過(guò)外接電阻實(shí)現(xiàn)。由其IOC的低四位端口輸出信號(hào)來(lái)控制驅(qū)動(dòng)電路。注意將I/O口設(shè)置為緩沖式輸出,可以直接輸出高/低電平。接收RF信號(hào)主要是通過(guò)IOB0口外接一個(gè)RF接收模塊電路實(shí)現(xiàn)。
語(yǔ)音功能
凌陽(yáng)單片機(jī)自帶雙通道DAC音頻輸出,DAC1、DAC2轉(zhuǎn)換輸出的模擬量電流信號(hào)分別通過(guò)AUD1和AUD2管腳輸出。DAC輸出為電流型輸出,經(jīng)三極管音頻放大,即可驅(qū)動(dòng)喇叭放音。
系統(tǒng)軟件設(shè)計(jì)
本系統(tǒng)軟件分為兩個(gè)部分,包括手持語(yǔ)音辨識(shí)遙控系統(tǒng)的軟件部分和車載驅(qū)動(dòng)控制系統(tǒng)的軟件部分。
手持語(yǔ)音辨識(shí)遙控系統(tǒng)的軟件設(shè)計(jì)
此部分是在SPCE061A的平臺(tái)上實(shí)現(xiàn)的。本系統(tǒng)軟件分為主模塊、2048(2K)時(shí)基中斷、FIQ_TIM的定時(shí)中斷、播放語(yǔ)音子程序以及數(shù)據(jù)發(fā)送子程序。此部分主要是完成非特定人語(yǔ)音辨識(shí)功能。辨識(shí)的流程圖如圖3所示,本設(shè)計(jì)主要是通過(guò)調(diào)用API函數(shù)實(shí)現(xiàn)。
主模塊
主模塊主要是控制整個(gè)系統(tǒng)程序的流程。系統(tǒng)上電后進(jìn)行一系列的初始化,然后發(fā)出提示音“anybody here”,這時(shí)辨識(shí)可以開始,根據(jù)不同的辨識(shí)結(jié)果執(zhí)行不同的動(dòng)作。主模塊的流程圖如圖4所示。
數(shù)據(jù)發(fā)送子程序
本設(shè)計(jì)的數(shù)據(jù)發(fā)送采用串行發(fā)送機(jī)制,從端口IOA0口發(fā)送(外接RF發(fā)送模塊)。每個(gè)語(yǔ)音命令用八位碼元表示,在發(fā)送時(shí),還要外加一位起始位和一位結(jié)束位。起始位用8ms的低電平表示;結(jié)束位用8ms的高電平表示。碼元“1”用占空比為1/4的高低電平表示;碼元“0”用占空比為1/2的高低電平表示。為保證數(shù)據(jù)被正確的收發(fā),將每個(gè)語(yǔ)音命令連續(xù)發(fā)送10次。數(shù)據(jù)發(fā)送程序包括數(shù)據(jù)發(fā)送主程序、開始/結(jié)束位發(fā)送子程序、數(shù)據(jù)位發(fā)送子程序、碼元“1”發(fā)送子程序、碼元“0”發(fā)送子程序。
車載驅(qū)動(dòng)控制系統(tǒng)的軟件設(shè)計(jì)
此部分的軟件系統(tǒng)主要是通過(guò)RF接收模塊接收相應(yīng)的控制信號(hào),根據(jù)相應(yīng)的控制碼序列通過(guò)IOC口的低四位口,對(duì)電機(jī)發(fā)出相應(yīng)的驅(qū)動(dòng)信號(hào),并同時(shí)帶有相應(yīng)的音效輸出。此部分系統(tǒng)的軟件設(shè)計(jì)包括主控程序設(shè)計(jì)、數(shù)據(jù)接收程序設(shè)計(jì)等。
主控程序設(shè)計(jì)
主控部分主要是判斷數(shù)據(jù)接收是否完成,如果接收完成,就判斷此命令是哪一個(gè)命令,根據(jù)相應(yīng)的命令執(zhí)行相應(yīng)的操作和音效輸出。
中斷服務(wù)主程序
中斷服務(wù)主程序主要判斷是哪一個(gè)中斷,然后完成相應(yīng)的中斷服務(wù),最后返回。
數(shù)據(jù)接收程序
數(shù)據(jù)接收主要是通過(guò)4KHz的中斷不斷地檢測(cè)輸入端口的狀態(tài),然后根據(jù)相應(yīng)的狀態(tài)值執(zhí)行相應(yīng)的操作。為保證能接收到數(shù)據(jù),將每一電平長(zhǎng)度的持續(xù)時(shí)間規(guī)定在一定范圍內(nèi)。
結(jié)語(yǔ)
本設(shè)計(jì)中也存在著一些不足,在通信部分,由于只有8個(gè)命令,所以可以只用三個(gè)碼元表示,這樣可以提高傳輸效率,如果采用糾錯(cuò)編碼機(jī)制進(jìn)行收發(fā),就可以提高正確性。這些都是可以改進(jìn)的地方?!?/p>
參考文獻(xiàn)
1 SPCE061A PROGRAMMING GUIDE v1.0. sunplus technology co.,ltd 11/01/2002
評(píng)論