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

下載本文檔

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

文檔簡介

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

2、法。3掌握 基于LD3320的語音單元的編程、語音處理及與單片機間的通信。二、系統總體方案本次設計的小車采用STC89C52單片機作為主控芯片,通過LD3320語音單元接單片機控制小車行駛狀態(包括前進、后退、左轉、右轉及停車);小車行駛過程中遇到障礙物,如果沒有接收到語音信號而超聲波檢測模塊檢測周圍障礙物小于安全距離40cm,小車自動轉向,距離通過LCD1602液晶顯示出來;采用L298作為電機驅動芯片驅動小車行駛。系統總體框圖如圖2.1:圖2.1 系統總體框圖三、硬件設計3.1 主控系統本次設計采用STC89C52單片機作為控制芯片,STC89C52RC是STC公司生產的一種低功耗、高性能

3、CMOS8位微控制器,具有 8K字節系統可編程Flash存儲器。單片機系統電路圖2:圖3.1 單片機最小系統原理圖復位電路:手動復位,按下復位按鈕,復位腳得到VCC的高電平,單片機復位,按鈕松開后,單片機開始工作。如圖3.2(1):時鐘電路:在52單片機片內有一個高增益的反相放大器,反相放大器的輸入端為XTAL1,輸出端為XTAL2,由該放大器構成的振蕩電路和時鐘電路一起構成了單片機的內部時鐘方式。如圖3.2(2): (1)復位電路: (2) 時鐘電路: 圖3.2 (1)復位電路 (2)時鐘電路3.2 超聲波模塊超聲波模塊(HC-SR04)是小車測距和避障的重要模塊。該模塊可提供2cm-400

4、cm的非接觸式距離感測功能,測距精度可達高到3mm;模塊包括超聲波發射器、接收器與控制電路。基本工作原理:(1)采用IO口TRIG觸發測距,給至少10us的高電平信號;(2)模塊自動發送8個40khz的方波,自動檢測是否有信號返回;(3)有信號返回,通過IO口ECHO輸出一個高電平,高電平持續的時間就是超聲波從發射到返回的時間。測試距離=(高電平時間*聲速(340M/S)/2;超聲波時序圖3.3:圖3.3 超聲波時序圖由時序圖表明你只需要提供一個10uS以上脈沖觸發信號,該模塊內部將發出8個40kHz周期電平并檢測回波。一旦檢測到有回波信號則輸出回響信號。回響信號的脈沖寬度與所測的距離成正比。

5、由此通過發射信號到收到的回響信號時間間隔可以計算得到距離。公式:uS/58=厘米或者uS/148=英寸;或是:距離=高電平時間*聲速(340M/S)/2;建議測量周期為60ms以上,以防止發射信號對回響信號的影響。超聲波電路如圖3.4:圖3.4 超聲波電路3.3 LD3320語音識別單元語音識別作為信息技術中一種人機接口的關鍵技術,具有重要的研究意義和廣泛的應用價值。語音識別技術的應用范圍極為廣泛,不僅涉及到日常生活的方方面面,在軍事領域也發揮著極其重要的作用。它是信息社會朝著智能化和自動化發展的關鍵技術,使人們對信息的處理和獲取更加便捷,從而提高人們的工作效率。 語音識別是將人類的聲音信號轉

6、化為文字或者指令的過程。語音識別以語音為研究對象,它是語音信號處理的一個重要研究方向,是模式識別的一個分支。根據在不同限制條件下的研究任務,產生了不同的研究領域。這些領域包括:根據對說話人說話方式的要求,可分為孤立字(詞)、連接詞和連續語音識別系統;根據對說話人的依賴程度,可分為特定人和非特定人語音識別系統;根據詞匯量的大小,可分為小詞匯量、中等詞匯量、大詞匯量以及無限詞匯量語音識別系統。 從語音識別模型的角度講,主流的語音識別系統理論是建立在統計模式識別基礎之上的。語音識別系統本質上是一種多維模式識別系統,對于不同的語音識別系統,人們所采用的具體識別方法及技術不同,但其基本原理都是相同的,即

7、將采集到的語音信號送到特征提取模塊處理,將所得到的語音特征參數送入模型庫模塊,由聲音模式匹配模塊根據模型庫對該段語音進行識別,最后得出識別結果。語音識別系統基本原理框圖如圖3.5所示,其中:預處理模塊濾除原始語音信號中的次要信息及背景噪音等,包括抗混疊濾波、預加重、模數轉換、自動增益控制等處理過程,將語音信號數字化;特征提取模塊對語音的聲學參數進行分析后提取出語音特征參數,形成特征矢量序列。圖3.5 語音識別系統框圖3.4 電機驅動小車輪子驅動采用直流減速電機,驅動芯片使用恒壓恒流橋式2A驅動芯片L298N。L298是ST公司的產品,比較常見的是15腳Multiwatt封裝的L298N,內部同

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

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

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

11、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,通過語音控制小車前進、左轉、右轉、后退、停止;

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

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

14、確率92.5%87.5%87.5%77.5%72.5%67.5%表2 語音模塊誤差測試4.3 單片機下位機軟件設計單片機下位機軟件設計采用模塊化結構,由主程序定時子程序、定時器中斷子程序、電機驅動子程序串口中斷子程序、顯示子程序超聲波避障子程序算法子程序構成。其中:避障中斷服務子程序完成對超聲波探測器產生的外部中斷進行處理,如果超出預定的危險距離就進行避障。遙控中斷服務子程序完成對遙控信號產生的串口中斷進行處理,對不同的遙控信號產生相應的控制信號。超聲波程序設計流程圖4.3: 圖4.3 超聲波程序流程圖語音串口通信:由于語音單元和單片機通信的方式是串口,為了小車能迅速響應語音單元發送來的信號,

15、單片機使用串口中斷的方式,在中斷函數里面主要就是處理中斷接收到的數據,并控制電機的轉向,處理函數見附錄二。五、個人總結本次設計是智能語音控制小車兼有避障功能,主控制芯片采用STC89C52單片機,開發LD3320語音芯片,成功實現了語音控制小車和小車的自動避障的功能。設計內容包括小車硬件、軟件、LD3320語音單元編程、調試等。在此期間主要完成的工作包括以下幾個方面:(1)設計初期收集電機驅動、單片機等相關資料,對智能小車的實現原理有比較清晰的了解。(2)確定系統框圖,對電源模塊、單片機最小系統模塊、LD3320語音單元和電機及其驅動電路模塊等的實施方案進行比較,確定最終的智能小車控制的設計方

16、案。(3)根據智能小車控制的設計方案畫原理圖、PCB圖,轉印PCB圖,手工制作PCB板。(4)根據設計電路,購買元器件,焊接電路,完成硬件組裝和調試。(5)根據系統要實現前進、后退、左轉、右轉、停車、避障等功能編寫出小車端的軟件程序。(6)軟硬件分別調試通過后進行整體聯合調試,并查找該系統存在的缺陷,并逐步完善。(8)最終小車能夠實現前進、后退、左轉、右轉、避障等功能,達到設計的基本要求。 通過此次實驗設計,使我對單片機編程和設計都有了進一步的了解,對軟硬件的應用更加熟悉,在電路設計、PCB制板等方面都有所加強。軟件設計方面,語音單元的可視化編程,在可視化編程設計方面也還有許多問題需要解決,這

17、些都是自己以后要努力學習的地方。小車雖然基本功能實現,但仍存在一些問題,避障的穩定性并不高,仍需要不斷完善。六、致謝 首先要感謝XX老師給了我們這樣一個動手實踐的機會,讓我們有機會可以針對自己的興趣進行一些自主課外動手實踐。本實驗設計是在XX老師的指導下和XXXX同學的幫助下修改完成的。在設計過程中,XX老師給予了悉心的指導,最重要的是給我們提供了解決問題的思路和方法,在此,我對XX老師的細心幫助和指導表示最真摯的感謝!同時感謝所有幫助過我的老師和同學們!參考文獻:1 郭天祥,新概念51單片機C語言教程.北京:電子工程出版社,2009.1:98-1032 符強,任風華.基于手機藍牙的遙控小車的

18、設計J.廣西桂林電子科技大學信息與通信學院;廣西桂林電子科技大學電子工程與自動化學院,2010.3 譚思良等。VisualC+串口通信工程開發實例導航M.人民郵電出版社.2034 宋戈,黃鶴松,員玉良,蔣海峰.51單片機應用開發范例大全.北京:人民郵電出版社,20105 池保忠. 基于單片機的電動車控制系統設計J.機械與電子,2011,(4):51-53.6 王曉侃 蘇全衛 基于單片機控制的多功能電動車自行車智能保護儀的設計與實現 電子設計工程2005,7,107-110.7 王立欣,靳剛,程樹康.混合電動車用PWM整流器控制方法的研究J.電機與控制學報, 2005, 9(2): 199-20

19、2.8 尹洪波 基于單片機的電動車控制系統設計J.中國新技術新產品,2013,3(上):21-22附錄:附錄一主控板和小車整體實物圖:附錄二單片機程序:24#include "reg52.h"#include <intrins.h>/*宏定義*/#define uchar unsigned char /宏定義無符號字符型#define uint unsigned int /宏定義無符號整型#define LCD_Data P0#define Busy 0x80 /檢測LCD狀態字中的Busy標識/*IO引腳定義*/sbit LCD_E =P27;sbit LCD

20、_RW=P26;sbit LCD_RS=P25;/定義引腳sbit RX =P16;/模塊超聲波模塊ECH0 接 P13sbit TX =P17;/超聲波模塊Trig 接 P14sbit IN1=P10;sbit IN2=P11;sbit IN3=P12;sbit IN4=P13;sbit EN1=P14;sbit EN2=P15;unsigned char code net = " ZTAI JLCM "unsigned char code forward = " ford "unsigned char code back = " back

21、"unsigned char code left = " left "unsigned char code right = " righ "unsigned char code stop = " stop "unsigned char code Clef = " 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 re

22、c,startmove=0;uchar x,speed=100,speed2;uchar ii;uchar sudu;uint mm,mmm;void delayms(unsigned int timer) /毫秒延時int x,y;for(x=timer;x>0;x-)for(y=120;y>0;y-);/*讀狀態*/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 & Bus

23、y); /檢測忙信號 return(LCD_Data);/*寫數據*/void WriteDataLCD(unsigned char WDLCD) ReadStatusLCD(); /檢測忙 LCD_Data = WDLCD; LCD_RS = 1; LCD_RW = 0; LCD_E = 0; /若晶振速度太高可以在這后加小的延時 LCD_E = 0; /延時 LCD_E = 1;/*寫指令*/void WriteCommandLCD(unsigned char WCLCD,BuysC) /BuysC為0時忽略忙檢測 if (BuysC) ReadStatusLCD(); /根據需要檢測忙

24、LCD_Data = WCLCD; LCD_RS = 0; LCD_RW = 0; LCD_E = 0; LCD_E = 0;LCD_E = 1; /*初始化*/void LCDInit(void) LCD_Data = 0; WriteCommandLCD(0x38,0); /三次模式設置,不檢測忙信號 delayms(5); WriteCommandLCD(0x38,0); delayms(5); WriteCommandLCD(0x38,0); delayms(5); WriteCommandLCD(0x38,1); /顯示模式設置,開始要求每次檢測忙信號 WriteCommandLCD

25、(0x08,1); /關閉顯示 WriteCommandLCD(0x01,1); /顯示清屏 WriteCommandLCD(0x06,1); /顯示光標移動設置 WriteCommandLCD(0x0C,1); /顯示開及光標設置/*按指定位置顯示一個字符*/void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) Y &= 0x1; X &= 0xF; /限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; /當要顯示第二行時地址碼+0x40; X |= 0x80;

26、/算出指令碼 WriteCommandLCD(X, 0); /這里不檢測忙信號,發送地址碼 WriteDataLCD(DData);/*按指定位置顯示一串字符*/void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) unsigned char ListLength;ListLength = 0; Y &= 0x1; X &= 0xF; /限制X不大于15,Y不大于1 while (DDataListLength>=0x20) /若到達字串尾則退出 if (X &l

27、t;= 0xF) /X坐標應小于0xF DisplayOneChar(X, Y, DDataListLength); /顯示單個字符 ListLength+; X+; void Conut(void) time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.7)/100; /算出來是CM if(S>=100)|flag=1) /超出測量范圍顯示“-” flag=0; DisplayOneChar(7, 1,'-'); DisplayOneChar(8, 1,'.'); DisplayOneChar(9, 1,'-'

28、;); DisplayOneChar(10, 1,'-'); DisplayOneChar(11, 1,'m'); else l_disbuff0=S%1000/100+0x30;/加上0X30是將數字轉為ASCII碼l_disbuff1=S%1000%100/10+0x30;l_disbuff2=S%1000%10 %10+0x30;DisplayOneChar(7, 1,l_disbuff0);DisplayOneChar(8, 1,'.'); DisplayOneChar(9, 1,l_disbuff1); DisplayOneChar(1

29、0, 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;EN2=1; DisplayListChar(1, 1,Clef); delayms(800); IN1=0;IN2=1;IN3=0;IN4=1;delayms(10); EN1=1;E

30、N2=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=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中斷E

溫馨提示

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

評論

0/150

提交評論