版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 附: </p><p><b> 湘潭市技師學(xué)院</b></p><p><b> 畢業(yè)論文(設(shè)計(jì))</b></p><p> 題 目 關(guān)于單片機(jī)控制語(yǔ)音小車的系統(tǒng)設(shè)計(jì)</p><p> 專 業(yè) 機(jī)電一體化 &l
2、t;/p><p> 班級(jí): 姓 名 </p><p><b> 指導(dǎo)教師</b></p><p> 關(guān)于單片機(jī)控制語(yǔ)音小車的系統(tǒng)設(shè)計(jì)</p><p><b> 目錄</b></p><p> 1、 引
3、言------------------------------------------(p4)</p><p> 2、 語(yǔ)音控制小車設(shè)計(jì)要求------------------------------------------(p5)</p><p><b> 2.1 功能要求</b></p><p><b> 2.2 參數(shù)說(shuō)明&
4、lt;/b></p><p> 3. SPCE061A特性簡(jiǎn)介------------------------------------------(p6-p7)</p><p> 4、系統(tǒng)總體方案介紹------------------------------------------(p8)</p><p> 5、系統(tǒng)硬件設(shè)計(jì)-------------
5、-----------------------------(p8-p12)</p><p><b> 5.1 車體介紹</b></p><p> 5.2 小車的行走原理</p><p> 5.3 控制板原理圖</p><p> 6、系統(tǒng)軟件設(shè)計(jì)-----------------------------------
6、-------(p13-p23)</p><p> 6.1 系統(tǒng)的主程序設(shè)計(jì)</p><p> 6.2主控制源程序:</p><p> 6.3 語(yǔ)音識(shí)別的原理簡(jiǎn)介</p><p> 7、總結(jié)------------------------------------------(p24)</p><p> 8、
7、結(jié)束語(yǔ)------------------------------------------(p25)</p><p> 基于單片機(jī)技術(shù)的語(yǔ)音控制小車設(shè)計(jì)</p><p><b> 1、 引言</b></p><p> 語(yǔ)音處理技術(shù)是一門新興的技術(shù),它不僅包括語(yǔ)音的錄制和播放,還涉及語(yǔ)音的壓縮編碼和解碼,語(yǔ)音的識(shí)別等各種處理技術(shù)。以往做這方
8、面的設(shè)計(jì),一般有兩個(gè)途徑:一種方案是單片機(jī)擴(kuò)展設(shè)計(jì),另一種就是借助于專門的語(yǔ)音處理芯片。普通的單片機(jī)往往不能實(shí)現(xiàn)這么復(fù)雜的過(guò)程和算法,即使勉強(qiáng)實(shí)現(xiàn)也要加很多的外圍器件。專門的語(yǔ)音處理芯片也比較多,如ISD 系列、PM50 系列等,但是專門的語(yǔ)音處理芯片功能比較單一,想在語(yǔ)音之外的其他方面應(yīng)用基本是不可能的。 </p><p> SPCE061A 是一款 16 位μ'nSP結(jié)構(gòu)的微控制器。該芯片帶有硬件乘
9、法器,能夠?qū)崿F(xiàn)乘法運(yùn)算、內(nèi)積運(yùn)算等復(fù)雜的運(yùn)算。它不僅運(yùn)算能力強(qiáng),而且處理速度快,單周期最高可以達(dá)到 49MHz。 </p><p> SPCE061A 內(nèi)嵌 32K 字的 FLASH 程序存儲(chǔ)器以及 2K 的SRAM。同時(shí)該 SOC 芯片具有 ADC 和 DAC 功能,其 MIC_ADC 通道帶有AGC自動(dòng)增益環(huán)節(jié),能夠很輕松的將語(yǔ)音信號(hào)采集到芯片內(nèi)部,兩路 10 位的電流輸出型DAC,只要外接一個(gè)功放就可以完
10、成聲音的播放。以上介紹的這些硬件資源使得該SPCE061A 能夠單芯片實(shí)現(xiàn)語(yǔ)音處理功能。 </p><p> 借助于 SPCE061A 的語(yǔ)音特色,“基于單片機(jī)技術(shù)的語(yǔ)音控制小車設(shè)計(jì)”實(shí)現(xiàn)了對(duì)小車前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、停車等語(yǔ)音控制功能.</p><p> 2、 語(yǔ)音控制小車設(shè)計(jì)要求</p><p><b> 2.1 功能要求:</b>
11、</p><p> 1.可以通過(guò)簡(jiǎn)單的 I/O 操作實(shí)現(xiàn)小車的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)功能; </p><p> 2.配合 SPCE061A 的語(yǔ)音特色,利用系統(tǒng)的語(yǔ)音播放和語(yǔ)音識(shí)別資源,實(shí)現(xiàn)語(yǔ)音控制的功能; </p><p> 3.可以在行走過(guò)程中聲控改變小車運(yùn)動(dòng)狀態(tài); </p><p> 4.在超出語(yǔ)音控制范圍時(shí)能夠自動(dòng)停車。<
12、;/p><p><b> 2.2 參數(shù)說(shuō)明</b></p><p> 車體:雙電機(jī)兩輪驅(qū)動(dòng) </p><p> 供電:電池(四節(jié) AA:1.2V×4 或 1.5V×4) </p><p> 工作電壓:DC 4V~6V </p><p> 工作電流:運(yùn)動(dòng)時(shí)約 200mA&l
13、t;/p><p> 3. SPCE061A特性簡(jiǎn)介</p><p> SPCE061A是一款性價(jià)比很高的十六位單片機(jī),使用它可以非常方便靈活的實(shí)現(xiàn)語(yǔ)音的錄放,該芯片擁有8路10位精度的 ADC,其中一路為音頻轉(zhuǎn)換通道,并且內(nèi)置有自動(dòng)增益電路。這為實(shí)現(xiàn)語(yǔ)音錄入提供了方便的硬件條件。兩路10位精度的DAC,只需要外接功放(SPY0030A)即可完成語(yǔ)音的播放。該單片機(jī)具有一套易學(xué)易用的指令系
14、統(tǒng)和集成開發(fā)環(huán)境,在此環(huán)境中,它支持標(biāo)準(zhǔn) C 語(yǔ)言編程,也支持 C 語(yǔ)言與匯編語(yǔ)言的互相調(diào)用。另外還提供了語(yǔ)音錄放的庫(kù)函數(shù),只要了解庫(kù)函數(shù)的使用,就可以很容易的完成語(yǔ)音的錄放、識(shí)別等功能,這些都為軟件開發(fā)提供了方便的條件。 </p><p> SPCE061A特性:</p><p> 16位μ’nSP微處理器;</p><p> 工作電壓:內(nèi)核工作電壓VDD為
15、 3.0V~3.6V(CPU),I/O口工作電壓VDDH為VDD~5.5V(I/O);</p><p> CPU時(shí)鐘:0.32MHz~49.152MHz; </p><p> 內(nèi)置2K 字 SRAM; </p><p> 內(nèi)置32K 閃存 ROM; </p><p><b> 可編程音頻處理; </b></
16、p><p><b> 晶體振蕩器; </b></p><p> 系統(tǒng)處于備用狀態(tài)下(時(shí)鐘處于停止?fàn)顟B(tài)),耗電小于 2μA@3.6V; </p><p> 2 個(gè) 16 位可編程定時(shí)器/計(jì)數(shù)器(可自動(dòng)預(yù)置初始計(jì)數(shù)值); </p><p> 2 個(gè) 10 位 DAC(數(shù)-模轉(zhuǎn)換)輸出通道; </p><
17、;p> 32 位通用可編程輸入/輸出端口; </p><p> 14 個(gè)中斷源可來(lái)自定時(shí)器 A / B,時(shí)基,2 個(gè)外部時(shí)鐘源輸入,鍵喚醒; </p><p> 具備觸鍵喚醒的功能; </p><p> 使用音頻編碼 SACM_S240 方式(2.4K 位/秒),能容納 210 秒的語(yǔ)音數(shù)據(jù); </p><p> 鎖相環(huán) PL
18、L 振蕩器提供系統(tǒng)時(shí)鐘信號(hào); </p><p> 32768Hz 實(shí)時(shí)時(shí)鐘; </p><p> 7 通道 10 位電壓模-數(shù)轉(zhuǎn)換器(ADC)和單通道聲音模-數(shù)轉(zhuǎn)換器; </p><p> 聲音模-數(shù)轉(zhuǎn)換器輸入通道內(nèi)置麥克風(fēng)放大器和自動(dòng)增益控制(AGC)功能; </p><p> 具備串行設(shè)備接口; </p><p
19、> 低電壓復(fù)位(LVR)功和低電壓監(jiān)測(cè)(LVD)功能; </p><p> 內(nèi)置在線仿真板(IC E,In-C ircuitEm ulator)接口。</p><p> 4、系統(tǒng)總體方案介紹</p><p> 小車的運(yùn)動(dòng)控制采用語(yǔ)音控制和中斷定時(shí)控制相結(jié)合,通過(guò)語(yǔ)音觸發(fā)小車動(dòng)作,小車動(dòng)作之后,隨時(shí)可以通過(guò)語(yǔ)音指令改變小車的運(yùn)動(dòng)狀態(tài)。在每一次動(dòng)作觸發(fā)的同
20、時(shí)啟動(dòng)定時(shí)器,如果小車由于某些原因不能正常的接收語(yǔ)音指令,則只要定時(shí)時(shí)間一到,中斷服務(wù)程序就會(huì)發(fā)出指令讓小車停下來(lái)。 </p><p> 圖1 控制系統(tǒng)所需硬件</p><p><b> 5、系統(tǒng)硬件設(shè)計(jì)</b></p><p> 系統(tǒng)的硬件方面,由于大部分的功能實(shí)現(xiàn)都是在61板上完成的,只有電機(jī)控制部分電路另外設(shè)計(jì)在一塊獨(dú)立的電路板上
21、,我們稱之為控制板。下面詳細(xì)的介紹小車的結(jié)構(gòu)和運(yùn)行原理以及控制電路板的結(jié)構(gòu)和功能實(shí)現(xiàn)。</p><p> 圖2 系統(tǒng)硬件框圖</p><p> 圖3 系統(tǒng)硬件組裝效果圖</p><p><b> 5.1 車體介紹</b></p><p> 語(yǔ)音控制小車為四輪結(jié)構(gòu)。其中前面兩個(gè)車輪由前輪電機(jī)控制,在連桿和支點(diǎn)作
22、用下控制前輪左右擺動(dòng),來(lái)調(diào)節(jié)小車的前進(jìn)方向。在自然狀態(tài)下,前輪在彈簧作用下保持中間位置。后面兩個(gè)車輪由后輪電機(jī)驅(qū)動(dòng),為整個(gè)小車提供動(dòng)力。所以又稱前面的輪子為方向輪,后面的兩個(gè)輪子為驅(qū)動(dòng)輪。</p><p> 5.2 小車的行走原理.</p><p> 直走:由小車的結(jié)構(gòu)分析,在自然狀態(tài)下,前輪在彈簧作用下保持中間狀態(tài),這是只要后輪電機(jī)正轉(zhuǎn)小車就會(huì)前進(jìn)。</p><p
23、> 倒車:倒車動(dòng)作和前進(jìn)動(dòng)作剛好相反,前輪電機(jī)仍然保持中間狀態(tài),后輪電機(jī)反轉(zhuǎn),小車就會(huì)向后運(yùn)動(dòng)。</p><p> 圖4 小車前進(jìn)、后退示意圖</p><p> 左轉(zhuǎn):前輪電機(jī)逆時(shí)針旋轉(zhuǎn)(規(guī)定為正轉(zhuǎn)),后輪電機(jī)正轉(zhuǎn),這時(shí)小車就會(huì)在前后輪共同作用下朝左側(cè)前進(jìn)。</p><p> 右轉(zhuǎn):前輪電機(jī)反轉(zhuǎn),后輪電機(jī)正轉(zhuǎn),這時(shí)小車就是會(huì)在前后輪共同作用下朝右側(cè)前
24、進(jìn)。</p><p> 圖5 小車轉(zhuǎn)向示意圖</p><p> 5.3 控制板原理圖</p><p> 控制板主要包括:接口電路、電源電路和兩路電機(jī)的驅(qū)動(dòng)電路,控制板原理圖如下。 </p><p> 接口電路:接口電路負(fù)責(zé)將61板的I/O接口信號(hào)傳送給控制電路板,I/O信號(hào)主要為控制電機(jī)需要的IOB8~IOB11這四路信號(hào),同時(shí)為了
25、方便后續(xù)的開發(fā)和完善,預(yù)留了IOB12~IOB15 以及IOA8~IOA15接口,可以在這些接口上添加一些傳感器。</p><p> 電源部分:整個(gè)小車有4個(gè)電源信號(hào):電池電源,控制板工作電源,61板工作電源,61板的I/O輸出電源。系統(tǒng)供電由電池提供,控制板直接采用電池供電(VCC),然后經(jīng)二極管D1后產(chǎn)生61板電源SPCE061A 在語(yǔ)音控制小車中的應(yīng)用(VCC_61),通過(guò)61板的Vio跳線產(chǎn)生61板的端
26、口電源(V1)。 </p><p> 圖6 小車控制電路圖</p><p><b> 6、系統(tǒng)軟件設(shè)計(jì)</b></p><p> 6.1 系統(tǒng)的主程序設(shè)計(jì)</p><p> 系統(tǒng)的主程序流程如下圖所示:</p><p> 圖7 主程序流程圖</p><p>
27、共分為四大部分:初始化部分、訓(xùn)練部分、識(shí)別部分、重訓(xùn)操作。 </p><p> 初始化部分:初始化操作將 IOB8~IOB11 設(shè)置為輸出端,用以控制電機(jī)。必要時(shí)還要有對(duì)應(yīng)的輸入端設(shè)置和 PWM 端口設(shè)置等。 </p><p> 訓(xùn)練部分:訓(xùn)練部分完成的工作就是建立語(yǔ)音模型。程序一開始判斷小車是否被訓(xùn)練過(guò),如果沒(méi)有訓(xùn)練過(guò)則要求對(duì)其進(jìn)行訓(xùn)練,并且會(huì)在訓(xùn)練成功之后將訓(xùn)練的模型存儲(chǔ)到 Fla
28、sh,在以后使用時(shí)不需要重新訓(xùn)練;如果已經(jīng)訓(xùn)練過(guò)會(huì)把存儲(chǔ)在 Flash 中的模型調(diào)出來(lái)裝載到辨識(shí)器中。 </p><p> 識(shí)別部分:在識(shí)別環(huán)節(jié)當(dāng)中,如果辨識(shí)結(jié)果是名字,停止當(dāng)前的動(dòng)作并進(jìn)入待命狀態(tài),然后等待動(dòng)作命令。如果辨識(shí)結(jié)果為動(dòng)作指令小車會(huì)語(yǔ)音告知相應(yīng)動(dòng)作并執(zhí)行該動(dòng)作,在運(yùn)動(dòng)過(guò)程中可以通過(guò)呼叫小車SPCE061A在語(yǔ)音控制小車中的應(yīng)用的名字使小車停下來(lái)。</p><p> 重訓(xùn)操
29、作:考慮到有重新訓(xùn)練的需求,設(shè)置了重新訓(xùn)練的按鍵(61 板的 KEY3),循環(huán)掃描該按鍵,一旦檢測(cè)到此鍵按下,則將擦除訓(xùn)練標(biāo)志位(0xe000 單元),并等待復(fù)位。復(fù)位后,程序重新執(zhí)行,當(dāng)檢測(cè)到訓(xùn)練標(biāo)志位為 0xffff 時(shí)會(huì)要求重新對(duì)其進(jìn)行訓(xùn)練。 </p><p> 6.2主控制源程序:</p><p> //=====================================
30、=================</p><p> // The information contained herein is the exclusive property of</p><p> // Sunnnorth Technology Co. And shall not be distributed, reproduced,</p><p>
31、 // or disclosed in whole in part without prior written permission.</p><p> // (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.</p><p> // ALL RIGHTS RESERVED</p><p> // The entir
32、e notice above must be reproduced on all authorized copies.</p><p> //========================================================</p><p> //=======================================================
33、=</p><p> // 工程名稱:Car_Demo</p><p> // 功能描述:實(shí)現(xiàn)小車的語(yǔ)音控制</p><p> // 涉及的庫(kù):CMacro1016.lib</p><p> // bsrv222SDL.lib</p><p> //sacmv26e
34、.lib</p><p> // 組成文件:main.c</p><p> //Flash.asm, hardware.asm,ISR.asm </p><p> // hardware.h,s480.h, hardware.inc</p><p> //硬件連接:IOA0-----KEY1</p&
35、gt;<p> //IOA1-----KEY2</p><p> //IOA2-----KEY3</p><p> //IOB8-----前進(jìn)</p><p> //IOB9-----倒車</p><p> //IOB10----左拐</p><p>
36、//IOB11----右拐</p><p> //維護(hù)記錄:2005-12-12 v1.0</p><p> //========================================================</p><p> #include "s480.h"</p><p> #i
37、nclude "bsrsd.h"</p><p> #defineP_IOA_Data (volatile unsigned int *)0x7000 </p><p> #define P_IOA_Dir (volatile unsigned int *)0x7002</p><p> #define P_IOA_Att
38、rib (volatile unsigned int *)0x7003</p><p> #define P_IOB_Data(volatile unsigned int *)0x7005 </p><p> #define P_IOB_Dir(volatile unsigned int *)0x7007 </p><p> #defin
39、e P_IOB_Attrib(volatile unsigned int *)0x7008 </p><p> #define P_TimerA_Data(volatile unsigned int *)0x700A </p><p> #define P_TimerA_Ctrl(volatile unsigned int *)0x700B </p>
40、<p> #define P_TimerB_Data(volatile unsigned int *)0x700C </p><p> #define P_TimerB_Ctrl(volatile unsigned int *)0x700D </p><p> #define P_Watchdog_Clear(volatile unsigned int
41、 *)0x7012 </p><p> #define P_INT_Mask(volatile unsigned int *)0x702D </p><p> #define P_INT_Clear(volatile unsigned int *)0x7011 </p><p> #define NAME_ID 0x100<
42、/p><p> #define COMMAND_GO_ID 0x101</p><p> #define COMMAND_BACK_ID 0x102</p><p> #define COMMAND_LEFT_ID 0x103</p><p> #define COMMAND_RIGHT_ID 0x104</p>
43、<p> #define S_NAME0//給我取個(gè)名字吧</p><p> #define S_ACT11//前進(jìn)</p><p> #define S_ACT22//倒車,請(qǐng)注意</p><p> #define S_ACT33//左拐</p>
44、<p> #define S_ACT44//右拐</p><p> #define S_RDY5//Yeah</p><p> #define S_AGAIN6//請(qǐng)?jiān)僬f(shuō)一遍</p><p> #define S_NOVOICE7//沒(méi)有聽到任何聲音</
45、p><p> #define S_CMDDIFF8//說(shuō)什么暗語(yǔ)呀</p><p> #define S_NOISY8//說(shuō)什么暗語(yǔ)呀</p><p> #define S_START9//準(zhǔn)備就緒,開始辨識(shí)</p><p> #define S_GJG10
46、//拐就拐</p><p> #define S_DCZY11//倒車,請(qǐng)注意</p><p> extern unsigned int BSR_SDModel[100];//外部變量BSR_SDModel[100],辨識(shí)器自帶</p><p> extern void F_FlashWrite1Word(unsigne
47、d int addr,unsigned int Value);</p><p> extern void F_FlashErase(unsigned int sector);</p><p> unsigned int uiTimeset = 3;//運(yùn)行時(shí)間定時(shí),調(diào)整該參數(shù)控制運(yùn)行時(shí)間</p><p> unsigned int uiTime
48、cont; //運(yùn)行時(shí)間計(jì)時(shí)</p><p> //=============================================================</p><p> // 語(yǔ)法格式:void Delay();</p><p> // 實(shí)現(xiàn)功能:延時(shí)</p><p><b> /
49、/ 參數(shù):無(wú)</b></p><p> // 返回值:無(wú)</p><p> //=============================================================</p><p> void Delay()</p><p><b> {</b&g
50、t;</p><p> unsigned int i;</p><p> for(i=0;i<0x3Fff;i++)</p><p><b> {</b></p><p> *P_Watchdog_Clear=0x0001;</p><p><b> }</b>
51、;</p><p><b> }</b></p><p> //=============================================================</p><p> // 語(yǔ)法格式:void PlaySnd(unsigned SndIndex,unsigned DAC_Channel);</
52、p><p> // 實(shí)現(xiàn)功能:語(yǔ)音播放函數(shù)</p><p> // 參數(shù):SndIndex-播放語(yǔ)音資源索引號(hào)</p><p> //DAC_Channel-播放聲道選擇</p><p> // 返回值:無(wú)</p><p> //=================================
53、============================</p><p> void PlaySnd(unsigned SndIndex,unsigned DAC_Channel)</p><p><b> {</b></p><p> BSR_StopRecognizer();//停止識(shí)別器</p><
54、;p> SACM_S480_Initial(1);//初始化為自動(dòng)播放</p><p> SACM_S480_Play(SndIndex, DAC_Channel, 3);//開始播放一段語(yǔ)音</p><p> while((SACM_S480_Status()&0x0001)!= 0)//是否播放完畢?</p><p&
55、gt;<b> {</b></p><p> SACM_S480_ServiceLoop();//解碼并填充隊(duì)列</p><p> *P_Watchdog_Clear=0x0001;//清看門狗</p><p><b> }</b></p><p> SACM_S4
56、80_Stop();//停止播放</p><p> BSR_InitRecognizer(BSR_MIC);//初始化識(shí)別器</p><p><b> }</b></p><p> //=============================================================&
57、lt;/p><p> // 語(yǔ)法格式:int TrainWord(int WordID,int SndID);</p><p> // 實(shí)現(xiàn)功能:訓(xùn)練一條指令</p><p> // 參數(shù):WordID-指令編碼</p><p> //SndID-指令提示音索引號(hào)</p><p> // 返回值:
58、無(wú)</p><p> //=============================================================</p><p> int TrainWord(unsigned int WordID,unsigned int SndID)</p><p><b> {</b></p>
59、<p> int Result;</p><p> PlaySnd(SndID,3);//引導(dǎo)訓(xùn)練,播放指令對(duì)應(yīng)動(dòng)作</p><p><b> while(1)</b></p><p><b> {</b></p><p> Result = BSR_Train
60、(WordID,BSR_TRAIN_TWICE);//訓(xùn)練兩次,獲得訓(xùn)練結(jié)果</p><p> if(Result==0)break;</p><p> switch(Result)</p><p><b> {</b></p><p> case -1://沒(méi)有檢測(cè)出聲音</p&g
61、t;<p> PlaySnd(S_NOVOICE,3);</p><p> return -1;</p><p> case -2: //需要訓(xùn)練第二次</p><p> PlaySnd(S_AGAIN,3);</p><p><b> break;</b></p>
62、<p> case -3://環(huán)境太吵</p><p> PlaySnd(S_NOISY,3);</p><p> return -3;</p><p> case -4://數(shù)據(jù)庫(kù)滿</p><p> return -4;</p><p> cas
63、e -5: //檢測(cè)出聲音不同</p><p> PlaySnd(S_CMDDIFF,3);</p><p> return -5;</p><p> case -6: //序號(hào)錯(cuò)誤</p><p> return -6;</p><p&g
64、t;<b> default:</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> return 0;</b><
65、/p><p><b> }</b></p><p> //=============================================================</p><p> // 語(yǔ)法格式:void TrainSD();</p><p> // 實(shí)現(xiàn)功能:訓(xùn)練函數(shù)</p>
66、<p><b> // 參數(shù):無(wú)</b></p><p> // 返回值:無(wú)</p><p> //=============================================================</p><p> void TrainSD()</p><p><
67、b> {</b></p><p> while(TrainWord(NAME_ID,S_NAME) != 0) ; //訓(xùn)練名稱</p><p> while(TrainWord(COMMAND_GO_ID,S_ACT1) != 0) ; //訓(xùn)練第1個(gè)動(dòng)作</p><p> while(TrainWord(COMMAND_B
68、ACK_ID,S_ACT2) != 0) ; //訓(xùn)練第2個(gè)動(dòng)作</p><p> while(TrainWord(COMMAND_LEFT_ID,S_ACT3) != 0) ; //訓(xùn)練第3個(gè)動(dòng)作</p><p> while(TrainWord(COMMAND_RIGHT_ID,S_ACT4) != 0) ;//訓(xùn)練第4個(gè)動(dòng)作</p><p>&l
69、t;b> }</b></p><p> //=============================================================</p><p> // 語(yǔ)法格式:void StoreSD();</p><p> // 實(shí)現(xiàn)功能:存儲(chǔ)語(yǔ)音模型函數(shù)</p><p><b&
70、gt; // 參數(shù):無(wú)</b></p><p> // 返回值:無(wú)</p><p> //=============================================================</p><p> void StoreSD() </p>
71、<p> {unsigned int ulAddr,i,commandID,g_Ret;</p><p> F_FlashWrite1Word(0xef00,0xaaaa);</p><p> F_FlashErase(0xe000);</p><p> F_FlashErase(0xe100);</p><p>
72、F_FlashErase(0xe200);</p><p> ulAddr=0xe000;//********</p><p> for(commandID=0x100;commandID<0x105;commandID++)</p><p><b> {</b></p><p> g_Ret=BSR_Ex
73、portSDWord(commandID);</p><p> while(g_Ret!=0)//模型導(dǎo)出成功?</p><p> g_Ret=BSR_ExportSDWord(commandID);</p><p> for(i=0;i<100;i++)//保存語(yǔ)音模型SD1(0xe000---0xe063)
74、</p><p><b> {</b></p><p> F_FlashWrite1Word(ulAddr,BSR_SDModel[i]);</p><p> ulAddr+=1;</p><p><b> }</b></p><p><
75、b> }</b></p><p><b> }</b></p><p> //=============================================================</p><p> // 語(yǔ)法格式:void StoreSD();</p><p> //
76、實(shí)現(xiàn)功能:裝載語(yǔ)音模型函數(shù)</p><p><b> // 參數(shù):無(wú)</b></p><p> // 返回值:無(wú)</p><p> //=============================================================</p><p> void LoadSD()
77、 </p><p> {unsigned int *p,k,jk,Ret,g_Ret;</p><p> p=(int *)0xe000;</p><p> for(jk=0;jk<5;jk++)</p><p><b>
78、; {</b></p><p> for(k=0;k<100;k++)</p><p><b> {</b></p><p> Ret=*p;</p><p> BSR_SDModel[k]=Ret;//裝載語(yǔ)音模型</p><p> p
79、+=1;</p><p><b> }</b></p><p> g_Ret=BSR_ImportSDWord();</p><p> while(g_Ret!=0)//模型裝載成功?</p><p> g_Ret=BSR_ImportSDWord();
80、</p><p><b> }</b></p><p><b> }</b></p><p> //=============================================================</p><p> // 語(yǔ)法格式:void GoAh
81、ead();</p><p> // 實(shí)現(xiàn)功能:前進(jìn)子函數(shù)</p><p><b> // 參數(shù):無(wú)</b></p><p> // 返回值:無(wú)</p><p> //=============================================================</p&
82、gt;<p> void GoAhead() //前進(jìn)</p><p><b> { </b></p><p> PlaySnd(S_ACT1,3);//提示</p><p> *P_IOB_Data=0x0100;//前進(jìn)</p>
83、<p> *P_INT_Mask |= 0x0004;//以下為中斷定時(shí)操作</p><p> __asm("int fiq,irq");</p><p> uiTimecont = 0;</p><p><b> }</b></p><p> //=========
84、====================================================</p><p> // 語(yǔ)法格式:void BackUp();</p><p> // 實(shí)現(xiàn)功能:后退子函數(shù)</p><p><b> // 參數(shù):無(wú)</b></p><p> // 返回值:無(wú)&
85、lt;/p><p> //=============================================================</p><p> void BackUp() //倒退</p><p><b> {</b></p><p> P
86、laySnd(S_DCZY,3);//提示</p><p> *P_IOB_Data=0x0200;//倒退</p><p> *P_INT_Mask |= 0x0004;//以下為中斷定時(shí)操作</p><p> __asm("int fiq,irq");</p><p>
87、uiTimecont = 0;</p><p><b> }</b></p><p> //=============================================================</p><p> // 語(yǔ)法格式:void TurnLeft();</p><p> // 實(shí)現(xiàn)
88、功能:左轉(zhuǎn)子函數(shù)</p><p><b> // 參數(shù):無(wú)</b></p><p> // 返回值:無(wú)</p><p> //=============================================================</p><p> void TurnLeft()
89、 //左轉(zhuǎn)</p><p><b> {</b></p><p> PlaySnd(S_GJG,3);</p><p> *P_IOB_Data=0x0900;//右轉(zhuǎn)</p><p> Delay();//延時(shí)</p>
90、<p> *P_IOB_Data=0x0500;//左轉(zhuǎn)</p><p> *P_INT_Mask |= 0x0004;//以下為中斷定時(shí)操作</p><p> __asm("int fiq,irq");</p><p> uiTimecont = 0;</p><p><
91、b> }</b></p><p> //=============================================================</p><p> // 語(yǔ)法格式:void TurnRight();</p><p> // 實(shí)現(xiàn)功能:右轉(zhuǎn)子函數(shù)</p><p><b>
92、 // 參數(shù):無(wú)</b></p><p> // 返回值:無(wú)</p><p> //=============================================================</p><p> void TurnRight() //右轉(zhuǎn)</p&g
93、t;<p><b> {</b></p><p> PlaySnd(S_GJG,3);//語(yǔ)音提示</p><p> *P_IOB_Data=0x0500;//左轉(zhuǎn)</p><p> Delay();//延時(shí)</p><p> *P_IOB_Data=
94、0x0900;//右轉(zhuǎn)</p><p> *P_INT_Mask |= 0x0004;//以下為中斷定時(shí)操作</p><p> __asm("int fiq,irq");</p><p> uiTimecont = 0;</p><p><b> }</b></
95、p><p> //=============================================================</p><p> // 語(yǔ)法格式:void Stop();</p><p> // 實(shí)現(xiàn)功能:停車子函數(shù)</p><p><b> // 參數(shù):無(wú)</b></p&
96、gt;<p> // 返回值:無(wú)</p><p> //=============================================================</p><p> void Stop() //停車</p><p><b> {</b&
97、gt;</p><p> *P_IOB_Data=0x0000;//停車</p><p> PlaySnd(S_RDY,3);//語(yǔ)音提示</p><p><b> }</b></p><p> //===========================================
98、==================</p><p> // 語(yǔ)法格式:void BSR(void);</p><p> // 實(shí)現(xiàn)功能:辨識(shí)子函數(shù)</p><p><b> // 參數(shù):無(wú)</b></p><p> // 返回值:無(wú)</p><p> //=========
99、====================================================</p><p> void BSR(void)</p><p><b> {</b></p><p> int Result;//辨識(shí)結(jié)果寄存</p><p> Result = BSR_
100、GetResult();//獲得識(shí)別結(jié)果</p><p> if(Result>0)//有語(yǔ)音觸發(fā)?</p><p><b> {</b></p><p> *P_IOB_Data=0x0000;//臨時(shí)停車</p><p> switch(Result)</p
101、><p><b> {</b></p><p> case NAME_ID://識(shí)別出名稱命令</p><p> Stop();//停車待命</p><p><b> break;</b></p><p> case COMMAND_GO_
102、ID://識(shí)別出第一條命令</p><p> GoAhead();//執(zhí)行動(dòng)作一:直走</p><p><b> break;</b></p><p> case COMMAND_BACK_ID://識(shí)別出第二條命令</p><p> BackUp();//執(zhí)行動(dòng)
103、作二:倒車</p><p><b> break;</b></p><p> case COMMAND_LEFT_ID://識(shí)別出第三條命令</p><p> TurnLeft();//執(zhí)行動(dòng)作三:左轉(zhuǎn)</p><p><b> break;</b></p>
104、;<p> case COMMAND_RIGHT_ID://識(shí)別出第四條命令</p><p> TurnRight();//執(zhí)行動(dòng)作四:右轉(zhuǎn)</p><p><b> break;</b></p><p><b> default:</b></p><p>
105、;<b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //======================================
106、=======================</p><p> // 語(yǔ)法格式:void IRQ5(void);</p><p> // 實(shí)現(xiàn)功能:中斷服務(wù)子函數(shù)</p><p><b> // 參數(shù):無(wú)</b></p><p> // 返回值:無(wú)</p><p> //=
107、============================================================</p><p> void IRQ5(void)__attribute__((ISR));//運(yùn)動(dòng)定時(shí)控制</p><p> void IRQ5(void)</p><p><b> { </b></p&g
108、t;<p> if(uiTimecont++ == uiTimeset)</p><p><b> {</b></p><p> *P_IOB_Data = 0x0000;</p><p><b> }</b></p><p> *P_INT_Clear = 0x0004;&
109、lt;/p><p><b> }</b></p><p> //=============================================================</p><p> // 語(yǔ)法格式:int main(void);</p><p> // 實(shí)現(xiàn)功能:主函數(shù)</p>
110、<p><b> // 參數(shù):無(wú)</b></p><p> // 返回值:無(wú)</p><p> //=============================================================</p><p> int main(void)</p><p>
111、{unsigned int BS_Flag;//Train標(biāo)志位</p><p> *P_IOA_Dir=0xff00;//初始化IOA,IOA0~7下拉輸入</p><p> *P_IOA_Attrib=0xff00;</p><p> *P_IOA_Data=0x0000;</p><p> *P_IO
112、B_Dir=0x0f00;//初始化IOB,IOB8~11同向輸出</p><p> *P_IOB_Attrib=0x0f00;</p><p> *P_IOB_Data=0x0000;</p><p> BSR_DeleteSDGroup(0);//初始化存儲(chǔ)器RAM</p><p> BS_Flag=*(
113、unsigned int *)0xe000;//讀存儲(chǔ)單元0xe000</p><p> if(BS_Flag==0xffff)//沒(méi)有經(jīng)過(guò)訓(xùn)練(0xe000內(nèi)容為0xffff)</p><p><b> {</b></p><p> TrainSD();//訓(xùn)練</p><p>
114、; StoreSD();//存儲(chǔ)訓(xùn)練結(jié)果(語(yǔ)音模型)</p><p><b> }</b></p><p> else //經(jīng)過(guò)訓(xùn)練(0xe000內(nèi)容為0x0055)</p><p><b> {</b></p><p> LoadSD();
115、//語(yǔ)音模型載入識(shí)別器</p><p><b> }</b></p><p> PlaySnd(S_START,3);//開始識(shí)別提示</p><p> BSR_InitRecognizer(BSR_MIC);//初始化識(shí)別器</p><p><b> while(1)<
116、/b></p><p><b> {</b></p><p><b> BSR();</b></p><p> if((*P_IOA_Data)&0x0004)//是否重新訓(xùn)練</p><p><b> {</b></p><
117、;p> F_FlashErase(0xe000);</p><p><b> while(1);</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
118、<p> 6.3 語(yǔ)音識(shí)別的原理簡(jiǎn)介</p><p> 語(yǔ)音識(shí)別主要分為“訓(xùn)練”和“識(shí)別”兩個(gè)階段。在訓(xùn)練階段,單片機(jī)對(duì)采集到的語(yǔ)音樣本進(jìn)行分析處理,從中提取出語(yǔ)音特征信息,建立一個(gè)特征模型;在識(shí)別階段,單片機(jī)對(duì)采集到的語(yǔ)音樣本也進(jìn)行類似的分析處理,提取出語(yǔ)音的特征信息,然后將這個(gè)特征信息模型與已有的特征模型進(jìn)行對(duì)比,如果二者達(dá)到了一定的匹配度,則輸入的語(yǔ)音被識(shí)別。語(yǔ)音識(shí)別的具體流程如下圖所示:
119、</p><p> 圖8 語(yǔ)音識(shí)別流程圖</p><p><b> 7、總結(jié)</b></p><p> 本設(shè)計(jì)綜合應(yīng)用了SPCE061A豐富的軟硬件資源,成功的實(shí)現(xiàn)了語(yǔ)音控制功能。在硬件方面,有較高的執(zhí)行速度、內(nèi)置的硬件乘法器、ADC和DAC功能、內(nèi)置的AGC自動(dòng)增益環(huán)節(jié),這些為語(yǔ)音處理提供了強(qiáng)大基礎(chǔ)。在軟件方面,標(biāo)準(zhǔn)的C語(yǔ)言編程,豐富的
120、語(yǔ)音資源函數(shù)為編程提供了很大的方便。該設(shè)計(jì)方案結(jié)構(gòu)簡(jiǎn)單,以單芯片實(shí)現(xiàn)了語(yǔ)音播放與識(shí)別以及電機(jī)控制功能,相當(dāng)于“語(yǔ)音識(shí)別芯片+ 普通單片機(jī)”的功能。但是比“語(yǔ)音識(shí)別芯片+普通單片機(jī)”方案實(shí)現(xiàn)起來(lái)要簡(jiǎn)單很多,而且成本也會(huì)降低很多。該語(yǔ)音控制小車操作比較簡(jiǎn)單,訓(xùn)練和識(shí)別成功的幾率也比較高,是一個(gè)典型的語(yǔ)音識(shí)別應(yīng)用方案。</p><p><b> 8、結(jié)束語(yǔ)</b></p><
121、p> 此次畢業(yè)論文(設(shè)計(jì))撰寫, 從選題到論文終稿完成歷時(shí)二月有余,在這段日子中,我翻閱了大量的參考文獻(xiàn),尋找設(shè)計(jì)依據(jù),確定設(shè)計(jì)方案,對(duì)硬件、軟件進(jìn)行了精心設(shè)計(jì)與調(diào)試?,F(xiàn)在回憶起來(lái)感到確有不小的收獲。經(jīng)過(guò)這次畢業(yè)設(shè)計(jì),又學(xué)到了不少的新知識(shí),比如說(shuō)我們“機(jī)電一體化”專業(yè)是以電方面的知識(shí)為主,很少涉及到機(jī)械方面的知識(shí),而兩者之間結(jié)合方面更是少之又少,通過(guò)此次畢業(yè)設(shè)計(jì),不但很好地復(fù)習(xí)了自己的專業(yè)知識(shí),也了解了單片機(jī)系統(tǒng)等新知識(shí),真正明
122、白了如何實(shí)現(xiàn)機(jī)電一體化。</p><p> 論文的撰寫過(guò)程,得到老師精心指導(dǎo)和點(diǎn)評(píng),基本完成了“基于單片機(jī)技術(shù)的語(yǔ)音控制小車設(shè)計(jì)” 論文終稿。在此我衷心向老師您道一聲:老師您幸苦了,我誠(chéng)摯感謝您! 祝福您身體健康、萬(wàn)事如意。謝謝?。?!</p><p> 袁節(jié)膅薂羄肅蒃薁蚃芀荿薀螆肅芅蕿袈羋膁蚈羀肁蒀蚇蝕襖莆蚇螂肀莂蚆羅袂羋蚅蚄膈膄蚄螇羈蒂蚃衿膆莈螞羈罿芄螁蟻膄膀螁螃羇葿螀裊膃蒅蝿肈羆莁
123、螈螇芁芇莄袀肄膃莄羂艿蒂莃螞肂莈蒂螄羋芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羈莀蒈羃膇芆蕆蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃蠆羆艿薃袁節(jié)膅薂羄肅蒃薁蚃芀荿薀螆肅芅蕿袈羋膁蚈羀肁蒀蚇蝕襖莆蚇螂肀莂蚆羅袂羋蚅蚄膈膄蚄螇羈蒂蚃衿膆莈螞羈罿芄螁蟻膄膀螁螃羇葿螀裊膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃螞肂莈蒂螄羋芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羈莀蒈羃膇芆蕆蚃羀膂蒆螅膅蒁薅袇羈莇襖羋蕆袇螀芇蕿蝕聿芆艿蒃肅芅蒁螈羈芄薃薁袆芃芃螆螂芃蒞蕿肁節(jié)蒈螅羇莁薀薈袃莀艿螃
124、蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈螞螂羂薁袈肀肁芀蟻羆肁莃袆袂肀薅蠆袈聿蚇蒂膇肈莇螇肅肇葿薀罿肆薂螆裊肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羈膂莈蚅袇膁蒀袀螃膀薂蚃肂腿節(jié)衿羈腿莄螞襖羋蕆袇螀芇蕿蝕聿芆艿蒃肅芅蒁螈羈芄薃薁袆芃芃螆螂芃蒞蕿肁節(jié)蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈螞螂羂薁袈肀肁芀蟻羆肁莃袆袂肀薅蠆袈聿蚇蒂膇肈莇螇肅肇葿薀罿肆薂螆裊肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羈膂莈蚅袇膁蒀袀螃膀薂蚃肂腿節(jié)衿羈</p&
125、gt;<p> 芀荿薀螆肅芅蕿袈羋膁蚈羀肁蒀蚇蝕襖莆蚇螂肀莂蚆羅袂羋蚅蚄膈膄蚄螇羈蒂蚃衿膆莈螞羈罿芄螁蟻膄膀螁螃羇葿螀裊膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃螞肂莈蒂螄羋芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羈莀蒈羃膇芆蕆蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃蠆羆艿薃袁節(jié)膅薂羄肅蒃薁蚃芀荿薀螆肅芅蕿袈羋膁蚈羀肁蒀蚇蝕襖莆蚇螂肀莂蚆羅袂羋蚅蚄膈膄蚄螇羈蒂蚃衿膆莈螞羈罿芄螁蟻膄膀螁螃羇葿螀裊膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃螞肂莈蒂螄
126、羋芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羈莀蒈羃膇芆蕆蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃蠆羆艿薃袁節(jié)膅薂羄肅蒃薁蚃芀荿薀螆肅芅蕿袈羋膁蚈羀肁蒀蚇蝕襖莆蚇螂肀莂蚆羅袂羋蚅蚄膈膄蚄螇羈蒂蚃衿膆莈螞羈罿芄螁蟻膄膀螁螃羇葿螀裊膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃螞肂莈蒂螄羋芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羈莀蒈羃膇芆蕆蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃蠆羆艿薃袁節(jié)膅薂羄肅蒃薁蚃芀荿薀螆肅芅蕿袈羋膁蚈羀肁蒀蚇蝕襖莆蚇螂肀莂蚆羅袂羋蚅蚄膈膄蚄螇羈蒂蚃衿膆莈螞羈
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機(jī)技術(shù)的語(yǔ)音控制小車設(shè)計(jì)
- 基于單片機(jī)的語(yǔ)音控制小車畢業(yè)設(shè)計(jì)論文
- 基于單片機(jī)的語(yǔ)音控制小車系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)論文
- 單片機(jī)課程設(shè)計(jì)報(bào)告---語(yǔ)音控制小車
- 基于單片機(jī)的語(yǔ)音控制開關(guān)設(shè)計(jì)
- 基于單片機(jī)的智能小車控制
- 【jl065】基于單片機(jī)的智能語(yǔ)音小車硬件設(shè)計(jì)
- 【jl065】基于單片機(jī)的智能語(yǔ)音小車硬件設(shè)計(jì)
- 基于單片機(jī)循跡小車設(shè)計(jì)
- 基于單片機(jī)的智能小車設(shè)計(jì)
- 【jl066】基于單片機(jī)的智能語(yǔ)音小車軟件設(shè)計(jì)
- 基于單片機(jī)的智能小車設(shè)計(jì)
- 【jl066】基于單片機(jī)的智能語(yǔ)音小車軟件設(shè)計(jì)
- 基于430單片機(jī)控制的智能遙控小車
- 基于arduino單片機(jī)控制的wifi智能小車
- 基于arduino單片機(jī)控制的wifi智能小車
- 基于單片機(jī)控制wifi只能小車畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的智能小車
- 基于單片機(jī)控制wifi只能小車畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)----基于單片機(jī)控制的智能電動(dòng)小車
評(píng)論
0/150
提交評(píng)論