版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 課程設(shè)計說明書(論文)</p><p> 課程名稱: </p><p> 設(shè)計題目: </p><p> 院 系: </p><p> 班 級:
2、 </p><p> 設(shè) 計 者: </p><p> 學(xué) 號: </p><p> 指導(dǎo)教師: </p><p> 設(shè)計時間: </p><p&
3、gt;<b> 課程設(shè)計任務(wù)書</b></p><p> *注:此任務(wù)書由課程設(shè)計指導(dǎo)教師填寫</p><p><b> 摘要:</b></p><p> 本文對聲控小車概況做了闡述。在硬件設(shè)計方面,本文以凌陽科技公司的SPCE061A單片機為控制核心,以語音小車控制電路板為輔,設(shè)計小車的動作。在軟件方面,利用C語
4、言進行編程,進行語音的“訓(xùn)練”和“識別”。設(shè)計出具有如下功能的語音識別聲控小車:能夠根據(jù)錄制的語音命令來控制小車的前進、后退、左拐和右拐。</p><p> 關(guān)鍵詞:SPCE061A 語音識別 聲控小車</p><p><b> 引言</b></p><p> 所謂聲控技術(shù)其實也就是利用語音識別技術(shù)來達到控制或者操作的一種技術(shù)
5、,而語音識別技術(shù)這近五年來已經(jīng)有很大的進步,最新的語音識別技術(shù)可以辨識90%以上的人類說出的字。聲控技術(shù)雖然是一項比較先進的技術(shù),但不可否認(rèn)的是,聲控技術(shù)在無線傳輸時的合成的質(zhì)量不是很好,它尚需進一步提高,因為無線環(huán)境中的背景噪聲太大了,當(dāng)然還有其他方面的因素影響著聲控功能的發(fā)揮。</p><p> 然而隨著微電機技術(shù)、計算機技術(shù)及傳感器技術(shù)的迅速發(fā)展,現(xiàn)今聲控技術(shù)應(yīng)用廣泛,這種嶄露頭角的聲控技術(shù),給嚴(yán)重傷殘人
6、士的生活帶來了極大的方便。傷殘人士用聲音就可以打開門窗、窗簾、電視機、電燈等。本次試驗我們就采用了凌陽SPCE061A單片機設(shè)計并制作了一套基于語音識別技術(shù)的聲控小車。</p><p><b> 課設(shè)實驗介紹</b></p><p> 聲控智能玩具車電路是一種裝載到普通的玩具車上對玩具車進行控制的電路。該電路可利用聲控口令使玩具車前進,并發(fā)出閃爍燈光。</p
7、><p> 設(shè)計目的:通過對聲控智能玩具車的設(shè)計與調(diào)試,使學(xué)生掌握電子系統(tǒng)的設(shè)計方法、調(diào)試過程,學(xué)會對電機、單片機、揚聲器、驅(qū)動電路的使用方法。</p><p><b> 設(shè)計要求及技術(shù)指標(biāo)</b></p><p> 設(shè)計一個玩具車控制電路,要求通過口令聲或猝發(fā)聲音信號轉(zhuǎn)換成相應(yīng)的電信號,控制玩具車啟動、前進,通過一段延遲時間后,玩具車自動停
8、止。</p><p><b> 基本部分:</b></p><p> 電路由聲/電轉(zhuǎn)換電路、聲控開關(guān)、單穩(wěn)態(tài)觸發(fā)電路、功率驅(qū)動電路和發(fā)聲電路等組成;</p><p> 采用電容話筒或錄音用的微型話筒接收音響;</p><p> 汽車發(fā)聲可選擇發(fā)出警車聲、救護車聲、消防車聲等。</p><p&g
9、t;<b> 綜合設(shè)計方法</b></p><p> 聲控式智能玩具車控制電路如圖1所示,主要由三個部分組成。第一部分聲音接收和轉(zhuǎn)換電路主要用于接收口令或猝發(fā)聲音,并將其轉(zhuǎn)換成相應(yīng)的電信號,經(jīng)過放大整形驅(qū)動后級電路進行控制;第二部分控制電路接收信號后,發(fā)出控制信號啟動電機,同時啟動發(fā)聲電路,并對玩具車行駛時間進行計時;第三部分主要由發(fā)聲電路和計時電路組成,發(fā)聲電路可發(fā)出任意一種或多種報警
10、聲音,計時電路是對玩具車開動到自動停止的時間段進行計時,時間長短可通過調(diào)節(jié)控制電路中相應(yīng)部分來進行。</p><p><b> 設(shè)計方案:</b></p><p><b> 設(shè)計思路及工作原理</b></p><p> 采用凌陽SPCE061A單片機,利用它的高度集成性,完成對小車的控制。結(jié)構(gòu)如圖:</p>
11、;<p> 凌陽SPCE061A單片機</p><p> 選擇凌陽單片機的原因:凌陽SPCE061A單片機內(nèi)部集成了ICE,FLASH,SRAM,通用I/O接口,定時器/計數(shù)器,中斷控制,CPU時鐘鎖相環(huán),ADC,DAC輸出,UART,SIO,低電壓監(jiān)測/低電壓復(fù)位等模塊。它將電路大大簡化,節(jié)省小車空間,大大減小了系統(tǒng)復(fù)雜度。</p><p> 選擇L298的原因:由于
12、單片機的IO口驅(qū)動能力明顯不足以驅(qū)動電機轉(zhuǎn)動,所以采用L298做一個過渡,一邊是單片機,一邊是電機,很好的解決了驅(qū)動問題。</p><p> 下面是L298的使用電路圖。</p><p><b> 4.3車體介紹</b></p><p> 主要是對I/O口的讀寫控制。I./O數(shù)據(jù)與功能對應(yīng)如下:</p><p>
13、 我們用IOB的0-3位控制電機,用8-11位控制燈。這是因為進過測試高位的驅(qū)動能力要更強,可以直接點亮LED燈。</p><p><b> 系統(tǒng)軟件設(shè)計</b></p><p><b> 具體的主程序:</b></p><p> //=========================================
14、===============</p><p> #include "s480.h"</p><p> #include "bsrsd.h"</p><p> #defineP_IOA_Data (volatile unsigned int *)0x7000 </p><p> #d
15、efine P_IOA_Dir (volatile unsigned int *)0x7002</p><p> #define P_IOA_Attrib (volatile unsigned int *)0x7003</p><p> #define P_IOB_Data(volatile unsigned int *)0x7005 </p><
16、p> #define P_IOB_Dir(volatile unsigned int *)0x7007 </p><p> #define P_IOB_Attrib(volatile unsigned int *)0x7008 </p><p> #define P_TimerA_Data(volatile unsigned int *)0x700A
17、</p><p> #define P_TimerA_Ctrl(volatile unsigned int *)0x700B </p><p> #define P_TimerB_Data(volatile unsigned int *)0x700C </p><p> #define P_TimerB_Ctrl(volatile unsi
18、gned int *)0x700D </p><p> #define P_Watchdog_Clear(volatile unsigned int *)0x7012 </p><p> #define NAME_ID 0x100</p><p> #define COMMAND_GO_ID 0x101</p><p&g
19、t; #define COMMAND_BACK_ID 0x102</p><p> #define COMMAND_LEFT_ID 0x103</p><p> #define COMMAND_RIGHT_ID 0x104</p><p> #define S_NAME0//取名</p><p> #def
20、ine S_ACT11//前進</p><p> #define S_ACT22//倒車,請注意</p><p> #define S_ACT33//左拐</p><p> #define S_ACT44//右拐</p><p> #define S_R
21、DY 5//Yeah</p><p> #define S_AGAIN6//請再說一遍</p><p> #define S_NOVOICE7//沒有聽到任何聲音</p><p> #define S_CMDDIFF8//說什么暗語呀</p><p>
22、#define S_NOISY8//說什么暗語呀</p><p> #define S_START9//準(zhǔn)備就緒,開始辨識</p><p> #define S_GJG 10//拐就拐</p><p> extern unsigned int BSR_SDModel[100];//外部變
23、量BSR_SDModel[100],辨識器自帶</p><p> extern void F_FlashWrite1Word(unsigned int addr,unsigned int Value);</p><p> extern void F_FlashErase(unsigned int sector);</p><p> //============
24、============================================</p><p> // 語法格式:void Delay();</p><p> // 實現(xiàn)功能:延時</p><p><b> // 參數(shù):無</b></p><p> // 返回值:無</p>&
25、lt;p> //========================================================</p><p> void Delay()</p><p><b> {</b></p><p> unsigned int i;</p><p> for(i=
26、0;i<0x3Fff;i++)</p><p><b> {</b></p><p> *P_Watchdog_Clear=0x0001;</p><p><b> }</b></p><p><b> }</b></p><p> //
27、========================================================</p><p> // 語法格式:void PlaySnd(unsigned SndIndex,unsigned DAC_Channel);</p><p> // 實現(xiàn)功能:語音播放函數(shù)</p><p> // 參數(shù):SndIndex-播
28、放語音資源索引號</p><p> //DAC_Channel-播放聲道選擇</p><p> // 返回值:無</p><p> //========================================================</p><p> void PlaySnd(unsigned SndInd
29、ex,unsigned DAC_Channel)</p><p><b> {</b></p><p> BSR_StopRecognizer();//停止識別器</p><p> SACM_S480_Initial(1);//初始化為自動播放</p><p> SACM_S480
30、_Play(SndIndex, DAC_Channel, 3);//開始播放一段語音</p><p> while((SACM_S480_Status()&0x0001)!= 0)//是否播放完畢?</p><p><b> {</b></p><p> SACM_S480_ServiceLoop();//
31、解碼并填充隊列</p><p> *P_Watchdog_Clear=0x0001;//清看門狗</p><p><b> }</b></p><p> SACM_S480_Stop();//停止播放</p><p> BSR_InitRecognizer(BSR_MIC);
32、//初始化識別器</p><p><b> }</b></p><p> //============================================================</p><p> // 語法格式:int TrainWord(int WordID,int SndID);</p>&l
33、t;p> // 實現(xiàn)功能:訓(xùn)練一條指令</p><p> // 參數(shù):WordID-指令編碼</p><p> //SndID-指令提示音索引號</p><p> // 返回值:無</p><p> //=====================================================
34、=======</p><p> int TrainWord(unsigned int WordID,unsigned int SndID)</p><p><b> {</b></p><p> int Result;</p><p> PlaySnd(SndID,3);//引導(dǎo)訓(xùn)練,播放指令
35、對應(yīng)動作</p><p><b> while(1)</b></p><p><b> {</b></p><p> Result = BSR_Train(WordID,BSR_TRAIN_TWICE);//訓(xùn)練兩次,獲得訓(xùn)練結(jié)果</p><p> if(Result==0)break;
36、</p><p> switch(Result)</p><p><b> {</b></p><p> case -1://沒有檢測出聲音</p><p> PlaySnd(S_NOVOICE,3);</p><p> return -1;</p>&
37、lt;p> case -2: //需要訓(xùn)練第二次</p><p> PlaySnd(S_AGAIN,3);</p><p><b> break;</b></p><p> case -3://環(huán)境太吵</p><p> PlaySnd(S_NOISY,3);<
38、;/p><p> return -3;</p><p> case -4://數(shù)據(jù)庫滿</p><p> return -4;</p><p> case -5: //檢測出聲音不同</p><p> PlaySnd(S_CMDDIFF,3);<
39、/p><p> return -5;</p><p> case -6: //序號錯誤</p><p> return -6;</p><p><b> default:</b></p><p><b> break;</b><
40、;/p><p><b> }</b></p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> //==================
41、==========================================</p><p> // 語法格式:void TrainSD();</p><p> // 實現(xiàn)功能:訓(xùn)練函數(shù)</p><p><b> // 參數(shù):無</b></p><p> // 返回值:無</p>
42、<p> //============================================================</p><p> void TrainSD()</p><p><b> {</b></p><p> while(TrainWord(NAME_ID,S_NAME) != 0) ;
43、//訓(xùn)練名稱</p><p> while(TrainWord(COMMAND_GO_ID,S_ACT1) != 0) ; //訓(xùn)練第1個動作</p><p> while(TrainWord(COMMAND_BACK_ID,S_ACT2) != 0) ; //訓(xùn)練第2個動作</p><p> while(TrainWord(COMMAND_LEFT_I
44、D,S_ACT3) != 0) ; //訓(xùn)練第3個動作</p><p> while(TrainWord(COMMAND_RIGHT_ID,S_ACT4) != 0) ;//訓(xùn)練第4個動作</p><p><b> }</b></p><p> //============================================
45、================</p><p> // 語法格式:void StoreSD();</p><p> // 實現(xiàn)功能:存儲語音模型函數(shù)</p><p><b> // 參數(shù):無</b></p><p> // 返回值:無</p><p> //========
46、====================================================</p><p> void StoreSD() </p><p> {unsigned int ulAddr,i,commandID,g_Ret;</p><p> F_FlashErase(0x
47、e000);</p><p> F_FlashErase(0xe100);</p><p> ulAddr=0xe000;//********</p><p> for(commandID=0x100;commandID<0x105;commandID++)</p><p><b> {</b></p
48、><p> g_Ret=BSR_ExportSDWord(commandID);</p><p> while(g_Ret!=0)//模型導(dǎo)出成功?</p><p> g_Ret=BSR_ExportSDWord(commandID);</p><p> for(i=0;i<100;i++)
49、//保存語音模型SD1(0xe000---0xe063)</p><p><b> {</b></p><p> F_FlashWrite1Word(ulAddr,BSR_SDModel[i]);</p><p> ulAddr+=1;</p><p><b> }</b
50、></p><p><b> }</b></p><p><b> }</b></p><p> //============================================================</p><p> // 語法格式:void StoreSD(
51、);</p><p> // 實現(xiàn)功能:裝載語音模型函數(shù)</p><p><b> // 參數(shù):無</b></p><p> // 返回值:無</p><p> //============================================================</p>
52、;<p> void LoadSD() </p><p> {unsigned int *p,k,jk,Ret,g_Ret;</p><p> p=(int *)0xe000;</p><p> for(jk=0;jk<5;jk++)&l
53、t;/p><p><b> {</b></p><p> for(k=0;k<100;k++)</p><p><b> {</b></p><p> Ret=*p;</p><p> BSR_SDModel[k]=Ret;//裝載語音模型
54、</p><p> p+=1;</p><p><b> }</b></p><p> g_Ret=BSR_ImportSDWord();</p><p> while(g_Ret!=0)//模型裝載成功?</p><p&g
55、t; g_Ret=BSR_ImportSDWord();</p><p><b> }</b></p><p><b> }</b></p><p> //============================================================</p>
56、<p> // 語法格式:void GoAhead();</p><p> // 實現(xiàn)功能:前進子函數(shù)</p><p><b> // 參數(shù):無</b></p><p> // 返回值:無</p><p> //=======================================
57、=====================</p><p> void GoAhead() //前進</p><p><b> { </b></p><p> unsigned int j;</p><p> PlaySnd(S_ACT1,3);</
58、p><p> *P_IOB_Data=0x0102;</p><p> for(j=0;j<50;j++)//延時</p><p><b> Delay();</b></p><p> *P_IOB_Data=0x0000;</p><p><b> }&
59、lt;/b></p><p> //============================================================</p><p> // 語法格式:void BackUp();</p><p> // 實現(xiàn)功能:后退子函數(shù)</p><p><b> // 參數(shù):無&l
60、t;/b></p><p> // 返回值:無</p><p> //============================================================</p><p> void BackUp() //倒退</p><p><
61、b> {</b></p><p> unsigned int j;</p><p> PlaySnd(S_ACT2,3);</p><p> *P_IOB_Data=0x0201;//延時</p><p> for(j=0;j<50;j++)</p><p>&
62、lt;b> Delay();</b></p><p> *P_IOB_Data=0x0000;</p><p><b> }</b></p><p> //============================================================</p><p>
63、 // 語法格式:void TurnLeft();</p><p> // 實現(xiàn)功能:左轉(zhuǎn)子函數(shù)</p><p><b> // 參數(shù):無</b></p><p> // 返回值:無</p><p> //================================================
64、============</p><p> void TurnLeft() //左轉(zhuǎn)</p><p><b> {</b></p><p> unsigned int j;</p><p> PlaySnd(S_GJG,3);</p><
65、p> *P_IOB_Data=0x080A;</p><p> for(j=0;j<30;j++)//延時</p><p><b> Delay();</b></p><p> *P_IOB_Data=0x0802;</p><p> for(j=0;j<20;j++)
66、//延時</p><p><b> Delay();</b></p><p> *P_IOB_Data=0x0000;</p><p><b> }</b></p><p> //================================================
67、============</p><p> // 語法格式:void TurnRight();</p><p> // 實現(xiàn)功能:右轉(zhuǎn)子函數(shù)</p><p><b> // 參數(shù):無</b></p><p> // 返回值:無</p><p> //=============
68、===============================================</p><p> void TurnRight() //右轉(zhuǎn)</p><p><b> {</b></p><p> unsigned int j;</p><p
69、> PlaySnd(S_GJG,3);//延時</p><p> *P_IOB_Data=0x0406;</p><p> for(j=0;j<30;j++)//延時</p><p><b> Delay();</b></p><p> *P_IOB_Data=
70、0x0402;</p><p> for(j=0;j<20;j++)//延時</p><p><b> Delay();</b></p><p> *P_IOB_Data=0x0000;</p><p><b> }</b></p><p>
71、 //============================================================</p><p> // 語法格式:int main(void);</p><p> // 實現(xiàn)功能:主函數(shù)</p><p><b> // 參數(shù):無</b></p><p>
72、// 返回值:無</p><p> //============================================================</p><p> int main(void)</p><p> {int Result; //辨識結(jié)果寄存</p><p> unsigned
73、int Ready=0;//待命標(biāo)志位</p><p> unsigned int BS_Flag;//Train標(biāo)志位</p><p> *P_IOA_Dir=0xff00;//初始化IOA,IOA0~7下拉輸入</p><p> *P_IOA_Attrib=0xff00;</p><p>
74、; *P_IOA_Data=0x0000;</p><p> *P_IOB_Dir=0x0f00;//初始化IOB,IOB8~11同向輸出</p><p> *P_IOB_Attrib=0x0f00;</p><p> *P_IOB_Data=0x0000;</p><p> BSR_DeleteSDGroup(0);
75、//初始化存儲器RAM</p><p> BS_Flag=*(unsigned int *)0xe000;//讀存儲單元0xe000</p><p> if(BS_Flag==0xffff)//沒有經(jīng)過訓(xùn)練(0xe000內(nèi)容為0xffff)</p><p><b> {</b></p><
76、;p> TrainSD();//訓(xùn)練</p><p> StoreSD();//存儲訓(xùn)練結(jié)果(語音模型)</p><p><b> }</b></p><p> else //經(jīng)過訓(xùn)練(0xe000內(nèi)容為0x0055)</p><p><b>
77、 {</b></p><p> LoadSD();//語音模型載入識別器</p><p><b> }</b></p><p> PlaySnd(S_START,3);//開始識別提示</p><p> BSR_InitRecognizer(BSR_MIC);
78、//初始化識別器</p><p><b> while(1)</b></p><p><b> {</b></p><p> Result = BSR_GetResult();//獲得識別結(jié)果</p><p> if(Result>0)//有識
79、別結(jié)果?</p><p><b> {</b></p><p> if(Result==NAME_ID) //名稱</p><p><b> {</b></p><p> PlaySnd(S_RDY,3);//播放待命提示音</p><p>
80、 Ready=1;//進入待命狀態(tài)</p><p><b> }</b></p><p> if(Ready==1)//待命狀態(tài)?</p><p><b> {</b></p><p> switch(Result)</p><p>
81、<b> {</b></p><p> case COMMAND_GO_ID://識別出第一條命令</p><p> GoAhead();//執(zhí)行動作一:直走</p><p><b> Ready=0;</b></p><p><b> break;<
82、/b></p><p> case COMMAND_BACK_ID://識別出第二條命令</p><p> BackUp();//執(zhí)行動作二:倒車</p><p><b> Ready=0;</b></p><p><b> break;</b></p>
83、;<p> case COMMAND_LEFT_ID://識別出第三條命令</p><p> TurnLeft();//執(zhí)行動作三:左轉(zhuǎn)</p><p><b> Ready=0;</b></p><p><b> break;</b></p><p>
84、 case COMMAND_RIGHT_ID://識別出第四條命令</p><p> TurnRight();//執(zhí)行動作四:右轉(zhuǎn)</p><p><b> Ready=0;</b></p><p><b> break;</b></p><p><b> de
85、fault:</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if((
86、*P_IOA_Data)&0x0004)//是否重新訓(xùn)練</p><p><b> {</b></p><p> F_FlashErase(0xe000);</p><p> while(1)//等待中斷</p><p><b> {</b></
87、p><p> *P_Watchdog_Clear=0x0001;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>
88、;</p><p><b> 參考文獻</b></p><p> [1]謝自美. 集成電路測試.北京:高等教育出版社,2002.</p><p> [2]張雙慶等. 使用電子電路200例.北京:機械工業(yè)出版社,2003.</p><p> [3]陳永浦. 電子電路智能化設(shè)計實例與應(yīng)用.北京:電子工業(yè)出版社,2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于凌陽SPCE061A單片機的智能小車的設(shè)計.pdf
- 基于凌陽spce061a單片機的語音存儲與回放系統(tǒng)設(shè)計
- 0544、spce061a單片機實驗指導(dǎo)書
- SPCE061A單片機實驗指導(dǎo)書.pdf
- 0544、spce061a單片機實驗指導(dǎo)書
- SPCE061A單片機實驗指導(dǎo)書.pdf
- 基于凌陽SPCE061A的嵌入式語音系統(tǒng).pdf
- 基于spce061a單片機設(shè)計的綜述【文獻綜述】
- 基于SPCE061A單片機的家居智能機器人設(shè)計.pdf
- 基于單片機 spce061a的數(shù)字電子鐘畢業(yè)設(shè)計
- 基于spce061a單片機實現(xiàn)的步進電機控制系統(tǒng)設(shè)計
- 基于spce061a單片機數(shù)字式多路溫度采集系統(tǒng)
- 基于spce061a單片機實現(xiàn)的步進電機控制系統(tǒng)設(shè)計
- 畢業(yè)設(shè)計---基于spce061a單片機的智能電動車設(shè)計
- 凌陽單片機課程設(shè)計驅(qū)動數(shù)碼管
- 0543、spce061a單片機教材書及開發(fā)板資料光盤
- 基于SPCE061A單片機的語音識別系統(tǒng)的研究.pdf
- 0543、spce061a單片機教材書及開發(fā)板資料光盤
- 基于16位單片機spce061a的圖形液晶模塊的驅(qū)動設(shè)計
- 基于單片機SPCE061A的汽車空調(diào)控制系統(tǒng).pdf
評論
0/150
提交評論