freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于單片機(jī)的語音控制小車畢業(yè)設(shè)計(jì)論文(編輯修改稿)

2025-07-24 19:51 本頁面
 

【文章內(nèi)容簡介】 B8控制,這樣就可以通過 IOB8 和 IOB9 控制四個(gè)橋臂的導(dǎo)通與關(guān)斷控制后輪電機(jī)的運(yùn)行狀態(tài),使之正轉(zhuǎn)反轉(zhuǎn)或者停轉(zhuǎn),進(jìn)而控制小車的前進(jìn)和后退。:IOB11IOB10IOB9IOB8后電機(jī)前電機(jī)小車0000停轉(zhuǎn)停轉(zhuǎn)停0001正轉(zhuǎn)停轉(zhuǎn)前進(jìn)0010反轉(zhuǎn)停轉(zhuǎn)倒退0101正轉(zhuǎn)正轉(zhuǎn)左前轉(zhuǎn)1001正轉(zhuǎn)反轉(zhuǎn)右前轉(zhuǎn)另外還有一些不常用的運(yùn)行狀態(tài),比如右后轉(zhuǎn)、左后轉(zhuǎn)等,結(jié)合以上對前輪和后輪的狀態(tài)分析,其端口對照如表 :IOB11IOB10IOB9IOB8后電機(jī)前電機(jī)小車0110正轉(zhuǎn)正轉(zhuǎn)右后轉(zhuǎn)1010正轉(zhuǎn)反轉(zhuǎn)左后轉(zhuǎn)注意:為了小車的安全請不要出現(xiàn)以下兩種組合情況:表 禁止的輸入狀態(tài)列表IOB11IOB10IOB9IOB8后電機(jī)前電機(jī)小車**11停轉(zhuǎn)*停11***停轉(zhuǎn)停 系統(tǒng)總體電路圖 總體電路圖第4章 系統(tǒng)軟件設(shè)計(jì) 系統(tǒng)總體程序設(shè)計(jì) 系統(tǒng)的總體程序流程如圖 所示:YNNY初始化 開始已經(jīng)訓(xùn)練過訓(xùn)練小車保存訓(xùn)練結(jié)果進(jìn)入識別模式語言識別與執(zhí)行重新訓(xùn)練清模型存儲區(qū)等待復(fù)位轉(zhuǎn)載語音模型圖 系統(tǒng)總體程序流程圖,分為四大部分:初始化部分、訓(xùn)練部分、識別部分、重訓(xùn)操作。 初始化部分:初始化操作將 IOB8~IOB11 設(shè)置為輸出端,用以控制電機(jī)。必要時(shí)還要有對應(yīng)的輸入端設(shè)置和PWM 端口設(shè)置等。 訓(xùn)練部分:訓(xùn)練部分完成的工作就是建立語音模型。程序一開始判斷小車是否被訓(xùn)練過,如果沒有訓(xùn)練過則要求對其進(jìn)行訓(xùn)練,并且會在訓(xùn)練成功之后將訓(xùn)練的模型存儲到FLASH,在以后使用時(shí)不需要重新訓(xùn)練;如果已經(jīng)訓(xùn)練過會把存儲在FLASH 中的模型調(diào)出來裝載到辨識器中。 識別部分:在識別環(huán)節(jié)當(dāng)中,如果辨識結(jié)果是名字,停止當(dāng)前的動作并進(jìn)入待命 狀態(tài),然后等待動作命令。如果辨識結(jié)果為動作指令小車會語音告知相應(yīng)動作并執(zhí)行該動作,在運(yùn)動過程中可以通過呼叫小車的名字使小車停下來。 重訓(xùn)操作:考慮到有重新訓(xùn)練的需求,設(shè)置了重新訓(xùn)練的按鍵(61 板的KEY3) ,循環(huán)掃描該按鍵,一旦檢測到此鍵按下,則將擦除訓(xùn)練標(biāo)志位(0xe000 單元) ,并等待復(fù)位。復(fù)位后,程序重新執(zhí)行,當(dāng)檢測到訓(xùn)練標(biāo)志位為0xffff時(shí)會要求重新對其進(jìn)行訓(xùn)練。 下面詳細(xì)介紹以上提到的子程序。 系統(tǒng)各分支設(shè)計(jì)當(dāng)程序檢測到訓(xùn)練標(biāo)志位BS_Flag內(nèi)容為0xffff,就會要求操作者對它進(jìn)行訓(xùn)練操作,訓(xùn)練操作的過程如圖 :訓(xùn)練采用兩次訓(xùn)練獲取結(jié)果的方式,以訓(xùn)練名字為例:小車首先會提示:給我取個(gè)名字吧, 這時(shí)你可以告訴它一個(gè)名字 (比如Jack) ; 然后它會提示: 請?jiān)僬f一遍, 這時(shí)再次告訴它名字 (Jack) ,如果兩次的聲音差別不大,小車就能夠成功的建立模型,名稱訓(xùn)練成功;如果沒能夠成功的建立模型,小車會告知失敗的原因并要求重新訓(xùn)練。成功訓(xùn)練名稱后會給出下一條待訓(xùn)練指令提示音:前進(jìn),參照名稱訓(xùn)練方式訓(xùn)練前進(jìn)指令。依次訓(xùn)練小車的名稱—前進(jìn)指令—倒車指令—左轉(zhuǎn)指令—右轉(zhuǎn)指令,全部訓(xùn)練成功子程序返回,訓(xùn)練結(jié)束。void TrainSD(){ while(TrainWord(NAME_ID,S_NAME) != 0) 。 //訓(xùn)練名稱 while(TrainWord(COMMAND_GO_ID,S_ACT1) != 0) 。 //訓(xùn)練第1個(gè)動作 while(TrainWord(COMMAND_BACK_ID,S_ACT2) != 0) 。 //訓(xùn)練第2個(gè)動作 while(TrainWord(COMMAND_LEFT_ID,S_ACT3) != 0) 。 //訓(xùn)練第3個(gè)動作 while(TrainWord(COMMAND_RIGHT_ID,S_ACT4) != 0) 。 //訓(xùn)練第4個(gè)動作} 語音識別流程如圖 :首先獲取辨識器的辨識結(jié)果,判斷是否有語音觸發(fā),如果有語音觸發(fā)則會返回識別結(jié)果的ID號,ID號對應(yīng)名稱或者對應(yīng)不同的動作。如果ID號為名稱,則結(jié)束運(yùn)動(如果當(dāng)前在運(yùn)動狀態(tài)) ,進(jìn)入待命狀態(tài),等待下一次的指令觸發(fā);如果 ID 號為動作,則語音告知將要執(zhí)行的動作,并執(zhí)行該動作。注:語音識別程序在語音中斷函數(shù)中進(jìn)行。NY語音識別語音觸發(fā)前進(jìn)指令倒車指令左轉(zhuǎn)指令右轉(zhuǎn)指令名字前進(jìn)倒車左轉(zhuǎn)右轉(zhuǎn)停車命令返回void BSR(void){ int Result。 //辨識結(jié)果寄存 Result = BSR_GetResult()。 //獲得識別結(jié)果if(Result0) //有語音觸發(fā)? { *P_IOB_Data=0x0000。 //臨時(shí)停車 switch(Result) { case NAME_ID: //識別出名稱命令 Stop()。 //停車待命 break。 case COMMAND_GO_ID: //識別出第一條命令 GoAhead()。 //執(zhí)行動作一:直走 break。 case COMMAND_BACK_ID://識別出第二條命令 BackUp()。 //執(zhí)行動作二:倒車 break。 case COMMAND_LEFT_ID: //識別出第三條命令 TurnLeft()。 //執(zhí)行動作三:左轉(zhuǎn) break。 case COMMAND_RIGHT_ID: //識別出第四條命令 TurnRight()。 //執(zhí)行動作四:右轉(zhuǎn) break。 default: break。 } }} 動作子程序包括:前進(jìn)、倒車、左拐、右拐、停車子程序。 前進(jìn):由小車的結(jié)構(gòu)原理和驅(qū)動電路分析知:只要IOB8 為高電平,IOB9,IOB10,IOB11 全部為低電平即可實(shí)現(xiàn)小車的前進(jìn)。前進(jìn)子程序包括語音提示、置端口數(shù)據(jù)、啟動定時(shí)器操作。 倒車:由小車的結(jié)構(gòu)原理分析和驅(qū)動電路分析知:只要IOB9 為高電平,IOB8,IOB10,IOB11全部為低電平即可實(shí)現(xiàn)小車的倒退。倒退子程序包括語音提示、置端口數(shù)據(jù)、啟動定時(shí)器操作。 左轉(zhuǎn):由小車的結(jié)構(gòu)原理分析和驅(qū)動電路分析知:小車左轉(zhuǎn)需要兩個(gè)條件:,這時(shí)對應(yīng)的 I/O 狀態(tài)為:IOBIOB10 為高電平,IOBIOB11 為低電平。左轉(zhuǎn)子程序包括語音提示、置端口數(shù)據(jù)、啟動定時(shí)器操作。 右轉(zhuǎn):由小車的結(jié)構(gòu)原理分析和驅(qū)動電路分析知:小車右轉(zhuǎn)需要兩個(gè)條件:,這時(shí)對應(yīng)的 I/O 狀態(tài)為:IOBIOB11 為高電平,IOBIOB10 為低電平。右轉(zhuǎn)子程序包括語音提示、置端口數(shù)據(jù)、啟動定時(shí)器操作。 注:在轉(zhuǎn)彎之前首先讓前輪朝目標(biāo)方向的反方向偏轉(zhuǎn),然后再讓前輪朝目標(biāo)方向偏轉(zhuǎn),這樣前輪的擺動范圍更大,慣性更大,擺幅也最大,能更好實(shí)現(xiàn)轉(zhuǎn)彎。void GoAhead() //前進(jìn){ PlaySnd(S_ACT1,3)。 //提示 *P_IOB_Data=0x0100。 //前進(jìn) *P_INT_Mask |= 0x0004。 //以下為中斷定時(shí)操作 __asm(int fiq,irq)。 uiTimecont = 0。}//=============================================================// 語法格式: void BackUp()。// 實(shí)現(xiàn)功能: 后退子函數(shù)// 參數(shù): 無// 返回值: 無//=============================================================void BackUp() //倒退{(lán) PlaySnd(S_DCZY,3)。 //提示 *P_IOB_Data=0x0200。 //倒退 *P_INT_Mask |= 0x0004。 //以下為中斷定時(shí)操作 __asm(int fiq,irq)。 uiTimecont = 0。}//=============================================================// 語法格式: void TurnLeft()。// 實(shí)現(xiàn)功能: 左轉(zhuǎn)子函數(shù)// 參數(shù): 無// 返回值: 無//=============================================================void TurnLeft() //左轉(zhuǎn){ PlaySnd(S_GJG,3)。 *P_IOB_Data=0x0900。 //右轉(zhuǎn) Delay()。 //延時(shí) *P_IOB_Data=0x0500。 //左轉(zhuǎn) *P_INT_Mask |= 0x0004。 //以下為中斷定時(shí)操作 __asm(int fiq,irq)。 uiTimecont = 0。}//=============================================================// 語法格式: void TurnRight()。// 實(shí)現(xiàn)功能: 右轉(zhuǎn)子函數(shù)// 參數(shù): 無// 返回值: 無//=============================================================void TurnRight() //右轉(zhuǎn){ PlaySnd(S_GJG,3)。 //語音提示 *P_IOB_Data=0x0500。 //左轉(zhuǎn) Delay()。 //延時(shí) *P_IOB_Data=0x0900。 //右轉(zhuǎn) *P_INT_Mask |= 0x0004。 //以下為中斷定時(shí)操作 __asm(int fiq,irq)。 uiTimecont = 0。}//=============================================================// 語法格式: void Stop()。// 實(shí)現(xiàn)功能: 停車子函數(shù)// 參數(shù): 無// 返回值: 無//=============================================================void Stop() //停車{ *P_IOB_Data=0x0000。 //停車 PlaySnd(S_RDY,3)。 //語音提示} 雖然已經(jīng)有了前進(jìn)、后退以及停車(通過直接呼叫小車的名字使其停車)等語音控制指令,但是考慮環(huán)境的干擾因素,小車運(yùn)行時(shí)的噪音影響和有效距離的限制,小車運(yùn)行后可能接收不到語音指令而一直運(yùn)行。為了防止出現(xiàn)這種情況,加入了時(shí)間控制,在啟動小車運(yùn)行的同時(shí)啟動定時(shí)器,定時(shí)器時(shí)間到停止小車的運(yùn)行,該定時(shí)器借助于 2Hz 時(shí)基中斷完成,所示為該程序的流程圖??梢栽诔绦蛑行薷膗 i Time set 參數(shù)來控制運(yùn)行時(shí)間,當(dāng)ui Time set=2 時(shí),運(yùn)行時(shí)間為1s,以此類推。void IRQ5(void)__attribute__((ISR))。 //運(yùn)動定時(shí)控制void IRQ5(void){ if(uiTimecont++ == uiTimeset) { *P_IOB_Data = 0x0000。 } *P_INT_Clear = 0x0004。}程序中需要說明的幾個(gè)問題在程序中可能有幾個(gè)地方不易理解,下面我向大家說明一下: 首先,小車有沒有被訓(xùn)練過是怎么知道的? 在這里利用了一個(gè)特殊的 Flash 單元, 語音模型存儲區(qū)首單元 (該示例程序中為 0xe000單元) 。 當(dāng) Flash在初始化以后,或者在擦除后為 0xffff,在成功訓(xùn)練并存儲后為 0x0055(該值由辨識器自動生成) 。這樣就可以根據(jù)這個(gè)單元的值來判斷是否經(jīng)過訓(xùn)練。 其次,為什么已經(jīng)訓(xùn)練過的系統(tǒng)在重新運(yùn)行時(shí)還要進(jìn)行模型裝載? 在首次訓(xùn)練完成之后,辨識器中保存著訓(xùn)練的模型,但是系統(tǒng)一旦復(fù)位辨識器中的模型就會丟失,所以在重新運(yùn)行時(shí)必須把存儲在 Flash 中的語音模型裝載到辨識器(RAM)中去。 第三,在轉(zhuǎn)彎時(shí)為什么前輪要先做一個(gè)反方向的擺動? 這是為了克服車體的限制,由于前輪電機(jī)的驅(qū)動能力有限,有時(shí)會出現(xiàn)前輪偏轉(zhuǎn)不到位的情況,所以在轉(zhuǎn)彎前首先讓前輪朝反方向擺動,然后再朝目標(biāo)方向擺動。這樣前輪的擺動范圍更大,慣性更大,擺幅也最大,能更好實(shí)現(xiàn)轉(zhuǎn)彎。 第四,關(guān)于語音的一些具體問題,關(guān)于語音的一些具體問題請參看 SPCE061A相關(guān)書籍中關(guān)于語音的詳細(xì)介紹。 57
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1