基于stc單片機的智能語音控制小車_第1頁
基于stc單片機的智能語音控制小車_第2頁
基于stc單片機的智能語音控制小車_第3頁
基于stc單片機的智能語音控制小車_第4頁
基于stc單片機的智能語音控制小車_第5頁
已閱讀5頁,還剩31頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于 STC單片機的智能語音控制小車、實驗目的1. 隨著科技的進步和社會的發展, 汽車技術的發展越來越智能化。 本次接口實驗 設計就是基于簡單智能化的基礎上, 采用 LD3320語音單元和 STC單片機和 L298N 電機驅動, 開發出基于語音無線控制與智能避障的小車, 實現非特定人聲語音控 制小車,以及小車超聲波自動避障行駛的功能, 同時液晶顯示出超聲波前方障礙 物的距離。2掌握用 Altium Designer10 軟件繪制原理圖和 PCB電路,以及電路板的制作 過程(包括轉印、腐蝕,焊接,下載與調試) ,熟練 Keil uVision4 環境以及單 片機 C代碼的編寫、調試和 hex 文

2、件的生成并下載到單片機芯片內, 掌握軟硬聯 調技巧與方法。3掌握 基于 LD3320的語音單元的編程、語音處理及與單片機間的通信。系統總體方案36本次設計的小車采用 STC89C52單片機作為主控芯片, 通過 LD3320語音單元 接單片機控制小車行駛狀態(包括前進、后退、左轉、右轉及停車) ;小車行駛 過程中遇到障礙物, 如果沒有接收到語音信號而超聲波檢測模塊檢測周圍障礙物 小于安全距離 40cm,小車自動轉向,距離通過 LCD1602液晶顯示出來;采用 L298 作為電機驅動芯片驅動小車行駛。系統總體框圖如圖 2.1 :LCD1602液晶顯示揚聲器HC-SR04 超聲波模塊LD3320 語

3、音單元STC89C52 單片機L298N 電機驅動圖 2.1 系統總體框圖三、硬件設計3.1 主控系統的一種低功耗、高性能本次設計采用 STC89C52單片機作為控制芯片, STC89C52R是C STC公司生產CMOS位8 微控制器,具有 8K 字節系統可編程 Flash 存儲器。單片機系統電路圖 2:圖 3.1 單片機最小系統原理圖復位電路:手動復位,按下復位按鈕,復位腳得到 VCC的高電平,單片機復位, 按鈕松開后,單片機開始工作。如圖 3.2 (1):時鐘電路:在 52 單片機片內有一個高增益的反相放大器,反相放大器的輸 入端為 XTAL1,輸出端為 XTAL2,由該放大器構成的振蕩電

4、路和時鐘電路一 起構成了單片機的內部時鐘方式。如圖 3.2 (2):1)復位電路:圖 3.2 ( 1)復位電路 ( 2)時鐘電路3.2 超聲波模塊超聲波模塊( HC-SR04)是小車測距和避障的重要模塊。該模塊可提供 2cm-400cm的非接觸式距離感測功能,測距精度可達高到 3mm;模塊包括超聲波 發射器、接收器與控制電路。基本工作原理:(1) 采用 IO 口 TRIG觸發測距,給至少 10us 的高電平信號;(2) 模塊自動發送 8個 40khz 的方波,自動檢測是否有信號返回;(3) 有信號返回,通過 IO 口 ECHO輸出一個高電平,高電平持續的時間就是超聲 波從發射到返回的時間。測試

5、距離 =(高電平時間 * 聲速(340M/S)/2 ; 超聲波時序圖 3.3 :圖 3.3 超聲波時序圖由時序圖表明你只需要提供一個 10uS 以上脈沖觸發信號,該模塊內部將發 出 8 個 40kHz 周期電平并檢測回波。 一旦檢測到有回波信號則輸出回響信號。 回 響信號的脈沖寬度與所測的距離成正比。 由此通過發射信號到收到的回響信號時 間間隔可以計算得到距離。公式: uS/58= 厘米或者 uS/148=英寸;或是:距離 = 高電平時間 *聲速(340M/S)/2 ;建議測量周期為 60ms以上,以防止發射信號對 回響信號的影響。超聲波電路如圖 3.4 :圖 3.4 超聲波電路3.3 LD3

6、320 語音識別單元語音識別作為信息技術中一種人機接口的關鍵技術, 具有重要的研究意義和 廣泛的應用價值。 語音識別技術的應用范圍極為廣泛, 不僅涉及到日常生活的方 方面面,在軍事領域也發揮著極其重要的作用。 它是信息社會朝著智能化和自動 化發展的關鍵技術, 使人們對信息的處理和獲取更加便捷, 從而提高人們的工作 效率。語音識別是將人類的聲音信號轉化為文字或者指令的過程。語音識別以語音 為研究對象,它是語音信號處理的一個重要研究方向,是模式識別的一個分支。 根據在不同限制條件下的研究任務, 產生了不同的研究領域。 這些領域包括: 根 據對說話人說話方式的要求,可分為孤立字 ( 詞) 、連接詞和

7、連續語音識別系統; 根據對說話人的依賴程度, 可分為特定人和非特定人語音識別系統; 根據詞匯量 的大小,可分為小詞匯量、 中等詞匯量、大詞匯量以及無限詞匯量語音識別系統。從語音識別模型的角度講, 主流的語音識別系統理論是建立在統計模式識別 基礎之上的。 語音識別系統本質上是一種多維模式識別系統, 對于不同的語音識 別系統,人們所采用的具體識別方法及技術不同, 但其基本原理都是相同的, 即 將采集到的語音信號送到特征提取模塊處理, 將所得到的語音特征參數送入模型 庫模塊,由聲音模式匹配模塊根據模型庫對該段語音進行識別, 最后得出識別結 果。語音識別系統基本原理框圖如圖 3.5 所示,其中:預處理

8、模塊濾除原始語音 信號中的次要信息及背景噪音等,包括抗混疊濾波、預加重、模數轉換、自動 增益控制等處理過程, 將語音信號數字化; 特征提取模塊對語音的聲學參數進行分析后提取出語音特征參數,形成特征矢量序列輸入預處理語音特征提取識別相似性度量后處理識別結果訓練參考模式庫圖 3.5 語音識別系統框圖3.4 電機驅動小車輪子驅動采用直流減速電機,驅動芯片使用恒壓恒流橋式2A 驅動芯片L298N。L298是 ST公司的產品,比較常見的是 15 腳 Multiwatt 封裝的 L298N, 內部同樣包含 4 通道邏輯驅動電路。 可以方便的驅動兩個直流電機, 或一個兩相 步進電機。 L298N芯片可以驅動

9、兩個二相電機,也可以驅動一個四相電機,輸出 電壓最高可達 50V,可以直接通過電源來調節輸出電壓; 可以直接用單片機的 IO 口提供信號;而且電路簡單,使用比較方便。L298N可接受標準 TTL邏輯電平信號 VSS,VSS可接 4.57 V電壓。4 腳 VS接電源電壓, VS電壓范圍 VIH 為2.5 46 V。輸出電流可達 2.5 A,可驅 動電感性負載。 L298驅動電路如圖 3.6 :圖 3.6 電機驅動電路L298N電機驅動邏輯控制表 1:ENAIN1IN2運轉狀態0XX停止110正轉101反轉111停止100停止表 1 L298N 電機驅動邏輯控制根據電機驅動邏輯功能表,通過改變單片

10、機 IO 口高低電平變化,可以方便 實現小車前進、后退、左轉、右轉、停止。3.5 LCD1602液晶顯示LCD1602是工業字符型液晶,能夠同時顯示 16x02 即 32 個字符。(16 列 2 行)1602 液晶也叫 1602字符型液晶它是一種專門用來顯示字母、數字、符號等 的點陣型液晶模塊它有若干個 5X7 或者 5X11等點陣字符位組成,每個點陣字符 位都可以顯示一個字符。 每位之間有一個點距的間隔每行之間也有間隔起到了字 符間距和行間距的作用,正因為如此所以他不能顯示圖形。其中 RS為寄存器選擇端,高位時是數據寄存器,低位時是指令寄存器; RW時讀 寫信號線,高位時是讀,低位時是寫;

11、E 為使能控制端。超聲波避障的距離顯示采用 LCD1602液晶實現。當超聲波檢測到前方障礙 物在安全距離內( 40cm),單片機驅使小車自動轉彎,并將超聲波測得的障礙物 的距離送到液晶并顯示出來。液晶與單片機的電路圖如圖 3.7 :圖 3.7 液晶電路圖3.6 電源與穩壓電路由于小車電機的驅動電壓一般選擇 8V,單片機的電壓為 5V,要實現小車供 電和續航,采用 18650 大容量可充電鋰電池,鋰電池可提供 12V供電, 為了不 影響驅動電機的供電電源和單片機供電電源產生信號干擾, 設計中加入了可調降 壓模塊,使 12V18650鋰電池電壓調至 8V 后供給直流減速電機,使 12V18650鋰

12、 電池經 7805 穩壓至 5V后供給 STC單片機、 L298N電機驅動芯片、基于 LD3320 的語音單元和超聲波等使用, L7805的穩壓和電源電路如圖 3.8 :圖 3.8 L7805 穩壓和電源電路3.7 系統整體原理圖與 PCB主控圖系統整體原理圖與 PCB主控圖如圖 3.9:1) 系統整體原理圖2)PCB主控圖圖 3.9 ( 1)系統整體原理圖 (2)PCB主控圖四、軟件設計4.1 系統總體軟件設計軟件設計部分分為兩大類,一類是語音芯片應用程序的開發設計,另一類 是單片機下位機的程序編寫。小車操作流程是: 1,按下開關給單片機和驅動電 路供電,系統初始化,語音啟動小車; 3,通過

13、語音控制小車前進、左轉、右轉、 后退、停止; 4,行駛過程如遇障礙物,小車自動轉彎避障,同時實時顯示障礙 物與車的距離。小車操作流程如下圖 4.1 :開始圖 4.1 小車操作流程圖4.2 語音識別開發圖 4.2 語音編程界面語音單元測試 語音單元測試主要是語音識別參數進行測試,測試參數有麥克風靈敏度設 置,語音端點檢測,語音信號起始確認時間,語音信號結束時間,語音信號最長 持續時間。 參數測試主要是麥克風靈敏度和語音端點檢測。 通過控制變量法, 在 保持麥克風靈敏度一定的前提下, 調節端點檢測, 來觀察揚聲器音頻輸出的準確 性,反之,保持端點檢測值至一定的前提下,調節麥克風靈敏度,以此來找到使

14、 語音準確輸出的最優麥克風靈敏度參數和語音端點檢測值, 以保證語音輸出的準 確性。誤差分析:本次作品的相對誤差如表 2,造成相對誤差可從以下幾方面分析。其中,環 境噪聲是造成誤差最重要的因素, 在做系統測試時, 并沒有做到在低分貝理想環 境下進行測試。其次,本次作品是使用了麥克風,所以,麥克風的靈敏度不高也 會造成誤差。在語音識別模塊,語音斷點檢測和語音信息相似度也會造成誤差。 本次作品電源設計設置的語音信息相差太近, 會對識別造成難度。 最后,說話距 離的遠近也會造成誤差, 做測試時并不是每一次都在最佳距離范圍內測試, 所以 會有誤差。語速慢速中速較快聲音(dB)60120601206012

15、0距離( m)3.852.653.152.252.751.95測試次數40正確識別 次數373535312927正確率92.5%87.5%87.5%77.5%72.5%67.5%表 2 語音模塊誤差測試4.3 單片機下位機軟件設計 單片機下位機軟件設計采用模塊化結構, 由主程序定時子程序、 定時器中 斷子程序、 電機驅動子程序串口中斷子程序、 顯示子程序超聲波避障子程序 算法子程序構成。 其中:避障中斷服務子程序完成對超聲波探測器產生的外部 中斷進行處理, 如果超出預定的危險距離就進行避障。 遙控中斷服務子程序完成 對遙控信號產生的串口中斷進行處理,對不同的遙控信號產生相應的控制信號。 超聲波

16、程序設計流程圖 4.3 :避障開始圖 4.3 超聲波程序流程圖語音串口通信:由于語音單元和單片機通信的方式是串口, 為了小車能迅速響應語音單元發 送來的信號, 單片機使用串口中斷的方式, 在中斷函數里面主要就是處理中斷接 收到的數據,并控制電機的轉向,處理函數見附錄二。五、個人總結本次設計是智能語音控制小車兼有避障功能,主控制芯片采用STC89C52單片機,開發 LD3320 語音芯片,成功實現了語音控制小車和小車的自動避障的功 能。設計內容包括小車硬件、軟件、 LD3320語音單元編程、調試等。在此期間主要完成的工作包括以下幾個方面:(1)設計初期收集電機驅動、單片機等相關資料,對智能小車的

17、實現原理有比 較清晰的了解。( 2)確定系統框圖,對電源模塊、單片機最小系統模塊、 LD3320 語音單元和電 機及其驅動電路模塊等的實施方案進行比較, 確定最終的智能小車控制的設計方 案。( 3)根據智能小車控制的設計方案畫原理圖、 PCB圖,轉印 PCB圖,手工制作 PCB板。(4)根據設計電路,購買元器件,焊接電路,完成硬件組裝和調試。(5)根據系統要實現前進、后退、左轉、右轉、停車、避障等功能編寫出小車 端的軟件程序。(6)軟硬件分別調試通過后進行整體聯合調試,并查找該系統存在的缺陷,并 逐步完善。(8)最終小車能夠實現前進、后退、左轉、右轉、避障等功能,達到設計的基 本要求。通過此次

18、實驗設計,使我對單片機編程和設計都有了進一步的了解,對軟 硬件的應用更加熟悉, 在電路設計、 PCB制板等方面都有所加強。 軟件設計方面, 語音單元的可視化編程, 在可視化編程設計方面也還有許多問題需要解決, 這些 都是自己以后要努力學習的地方。小車雖然基本功能實現,但仍存在一些問題, 避障的穩定性并不高,仍需要不斷完善。六、致謝首先要感謝 XX老師給了我們這樣一個動手實踐的機會,讓我們有機會可以 針對自己的興趣進行一些自主課外動手實踐。 本實驗設計是在 XX老師的指導下和 XXXX同學的幫助下修改完成的。 在設計過程中, XX老師給予了悉心的指導, 最重 要的是給我們提供了解決問題的思路和方

19、法, 在此,我對 XX老師的細心幫助和指 導表示最真摯的感謝!同時感謝所有幫助過我的老師和同學們!參考文獻:郭天祥,新概念 單片機 語言教程 北京:電子工程出版社, :2 符強,任風華 .基于手機藍牙的遙控小車的設計 J.廣西桂林電子科技大學信 息與通信學院;廣西桂林電子科技大學電子工程與自動化學院, 2010.3 譚思良等。 VisualC+串口通信工程開發實例導航 M. 人民郵電出版社 .2034 宋戈,黃鶴松,員玉良,蔣海峰 . 51 單片機應用開發范例大全 . 北京:人民 郵電出版社, 20105 池保忠. 基于單片機的電動車控制系統設計 J.機械與電子 ,2011,(4):51-53

20、.6 王曉侃 蘇全衛 基于單片機控制的多功能電動車自行車智能保護儀的設 計與實現 電子設計工程 2005,7,107-110.7 王立欣 ,靳 剛,程樹康 .混合電動車用 PWM整流器控制方法的研究 J.電機與控制學報 , 2005, 9(2): 199-202.8 尹洪波 基于單片機的電動車控制系統設計 J.中國新技術新產品, 2013,3 (上):21-22附錄:附錄一主控板和小車整體實物圖:附錄二 單片機程序:#include "reg52.h"#include <intrins.h>宏定義*/#define uchar unsigned char/ 宏定

21、義無符號字符型#define uint unsigned int/ 宏定義無符號整型#define LCD_Data P0#define Busy 0x80/ 檢測 LCD狀態字中的 Busy標識*IO引腳定義sbit LCD_E =P27;sbit LCD_RW=P26;sbit LCD_RS=P25;/ 定義引腳sbit RX =P16;/ 模塊超聲波模塊 ECH0 接 P13 sbit TX =P17;/ 超聲波模塊 Trig 接 P14sbit IN1=P10;sbit IN2=P11;sbit IN3=P12;sbit IN4=P13;sbit EN1=P14;sbit EN2=P1

22、5;unsigned char code net = " ZTAI JLCM "unsigned char code forward = " ford "unsigned char code back = " back " unsigned char code left = " left "unsigned char code right = " righ " unsigned char code stop = " stop " unsigned char code Clef

23、 = " Clef "unsigned int time=0;unsigned long S=0;bit flag =0,flagg=0;unsigned char l_disbuff4= 0,0,0,0,;/ 顯示緩沖uchar date;uchar rec,startmove=0;uchar x,speed=100,speed2;uchar ii;uchar sudu;uint mm,mmm;void delayms(unsigned int timer)/ 毫秒延時int x,y;/ 若晶振速度太高可以在這后加LCD_E = 0;/ 延時for(x=timer;x&g

24、t;0;x-) for(y=120;y>0;y-);小的延時讀狀態 */LCD_E = 1; unsigned char ReadStatusLCD(void) LCD_Data = 0xFF;LCD_RS = 0;LCD_RW = 1;LCD_E = 0;LCD_E = 0;LCD_E = 1;while (LCD_Data & Busy);/ 檢測忙信號return(LCD_Data);寫指令寫數據*/void WriteCommandLCD(unsigned char WCLCD,BuysC)/BuysC為 0時忽略忙檢測if (BuysC) ReadStatusLCD()

25、;/ 根據需要檢測忙LCD_Data = WCLCD;LCD_RS = 0;LCD_RW = 0;LCD_E = 0;LCD_E = 0;LCD_E = 1;void WriteDataLCD(unsigned char初始化 */WDLCD)ReadStatusLCD(); / 檢測忙LCD_Data = WDLCD;LCD_RS = 1;LCD_RW = 0;LCD_E = 0;void LCDInit(void)LCD_Data = 0; WriteCommandLCD(0x38,0);/ 三次模式設置,不檢測忙信號 delayms(5);WriteCommandLCD(0x38,0);

26、 delayms(5);WriteCommandLCD(0x38,0); delayms(5);WriteCommandLCD(0x38,1);/ 顯示模式設置 ,開始要求每次檢 測忙信號WriteCommandLCD(0x08,1);/ 關閉顯示WriteCommandLCD(0x01,1);/ 顯示清屏WriteCommandLCD(0x06,1);/ 顯示光標移動設置WriteCommandLCD(0x0C,1);/ 顯示開及光標設置/* 按指定位置顯示一個字符 */void DisplayOneChar(unsignedc har X, unsigned char Y, unsigne

27、d char DData)Y &= 0x1;X &= 0xF;/限制X不能大于 15,Y不能大于 1if (Y)X |= 0x40;/ 當要顯示第二行時地址碼 +0x40;X |= 0x80;/ 算出指令碼WriteCommandLCD(X, 0);/ 這里不檢測忙信號,發送地址碼WriteDataLCD(DData);/* 按指定位置顯示一串字符 */void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) unsigned char ListLength;ListLen

28、gth = 0;Y &= 0x1;X &= 0xF;/限制X不大于 15,Y不大于 1 while (DDataListLength>=0x20) / 若到達字串尾則退出if (X <= 0xF)/X 坐標應小于 0xFDisplayOneChar(X, Y, DDataListLength); / 顯示單個字符ListLength+;X+;1,l_disbuff1);void Conut(void)time=TH0*256+TL0;TH0=0;TL0=0;S=(time*1.7)/100;/ 算出來是 CM if(S>=100)|flag=1)/ 超出測量范

29、圍顯示“ -”flag=0;DisplayOneChar(7, 1,'-');DisplayOneChar(8, 1,'.');DisplayOneChar(9, 1,'-');DisplayOneChar(10, 1,'-');DisplayOneChar(11, 1,'m');elsel_disbuff0=S%1000/100+0x30;/ 加上 0X30是將數字轉為 ASCII碼 l_disbuff1=S%1000%100/10+0x30; l_disbuff2=S%1000%10 %10+0x30; Dis

30、playOneChar(7, 1,l_disbuff0);DisplayOneChar(8, 1,'.');DisplayOneChar(9,DisplayOneChar(10,1,l_disbuff2);DisplayOneChar(11, 1,'m');if(S<40|flag=1)&(startmove=1| |startmove=2)IN1=1; IN2=0;IN3=1; IN4=0;delayms(5);EN1=1;EN2=1;delayms(50);IN1=0;IN2=0;IN3=0;IN4=1;delayms(10);EN1=1;EN

31、2=1;DisplayListChar(1, 1,Clef) delayms(800); IN1=0;IN2=1;IN3=0;IN4=1;delayms(10); EN1=1; EN2=1;void StartModule() / 啟動模塊 TX=1; / 啟動一次模塊_nop_();_nop_();_nop_();nop();_nop_();_nop_();_nop_();nop();_nop_();nop();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TX=

32、0;void main()delayms(400);/ 啟動等待,等 LCD講入工作狀態LCDInit(); / 初始化 delayms(5); / /延時片刻 (DisplayListChar(0, 0,net);TMOD=0x21;/ 設 T0為方式 1 11.0592M 晶振 TH1=0xfd;TL1=0xfd;SCON=0x50;/ 串口的工作方式,設置為方式 1TR1=1;/ 打開定時器ES=1;/ 打開串口中斷TH0=0;TL0=0;ET0=1; / 允許 T0 中斷EA=1;/ 開啟總中斷while(1)StartModule();while(!RX); / 當 RX 為零 時等

33、待TR0=1; / 開啟計數 while(RX); / 當 RX 為 1 計數并等待TR0=0; / 關閉計數 Conut(); / 計算delayms(200);EN1=1;void zd0() interrupt 1/T0 中斷來計數器溢出 ,超過測距范圍flagg=1; / 中斷溢出標志/* 中斷服務子函數 */void com_isr(void) interrupt 4if(RI)rec=SBUF;/ 從串口緩沖區取得數據flag=1;RI=0;/ 清除串行接受標志位/* 根據串口指令電機運轉函數 */ delayms(10);if(rec=0x01) / 正轉(前進) startmo

34、ve=1;DisplayListChar(1, 1,forward);IN1=0; IN2=1;IN3=0; IN4=1; delayms(100);EN2=1; flag=0; if(rec=0x02)/反轉(后退) startmove=2;IN1=1;IN2=0;IN3=1;IN4=0;DisplayListChar(1, 1,back); delayms(100); EN1=1;EN2=1; flag=0;if(rec=0x03) / 左轉IN1=0;IN2=0;IN3=0;IN4=1;delayms(10); EN1=1;EN2=1;DisplayListChar(1, 1,left)

35、; delayms(800);IN1=0;IN2=1;IN3=0;N4=1;delayms(10);EN1=1;EN2=1;flag=0;if(rec=0x04) / 右轉IN1=0;IN2=1;IN3=0;IN4=0;delayms(10);EN1=1;EN2=1;DisplayListChar(1, 1,right); delayms(800);IN1=0;IN2=1;IN3=0;IN4=1;delayms(10); EN1=1;EN2=1;flag=0;if(rec=0x05) / 停車startmove=0;DisplayListChar(1, 1,stop)IN1=0;IN2=1;IN3=0;IN4=0;delayms(10); EN1=0;EN2=0;fla

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論