智能小車聲音引導(dǎo)系統(tǒng)設(shè)計與制作報告.doc
《智能小車聲音引導(dǎo)系統(tǒng)設(shè)計與制作報告.doc》由會員分享,可在線閱讀,更多相關(guān)《智能小車聲音引導(dǎo)系統(tǒng)設(shè)計與制作報告.doc(20頁珍藏版)》請在裝配圖網(wǎng)上搜索。
聲音引導(dǎo)系統(tǒng)設(shè)計與制作報告一、方案選擇與論證 1、整體方案選擇方案一:本方案采用音頻收發(fā)的方式,由核心控制模塊80C51F020發(fā)出一個特定頻率的音頻脈沖信號,前置音頻接收模塊接收并識別這個脈沖信號。將其轉(zhuǎn)變成TTL電平。采用FPGA對接受的信號進行處理,經(jīng)過無線收發(fā)模塊通訊,將小車的定點位置傳至核心模塊單片機處理并控制小車在特定的范圍內(nèi)運動。 方案二:本方案采用語音收發(fā)的方式來控制小車的運動,由核心控制模塊控制語音芯片,發(fā)送特定的語音信號,再由語音識別模塊對語音進行采集和數(shù)字化。采用FPGA對接受的信號進行處理,經(jīng)過無線收發(fā)模塊通訊,將小車的定點位置傳至核心模塊單片機處理并控制小車在特定的范圍內(nèi)運動。方案比較:方案一的核心控制算法由80C51F020完成。單片機的算法控制比較簡單,容易實現(xiàn)。而FPGA的算法較復(fù)雜,但其對邊沿信號反應(yīng)時間快,所以利用FPGA處理接受音頻信號。方案二用到語音收發(fā)的方式,由于識別語音的收發(fā)模塊實現(xiàn)困難,所以本設(shè)計采用方案一。2、控制理論計算方案選擇方案一:可移動聲源在運動前發(fā)出音頻信號,根據(jù)三個接收器接收音頻的時間不同,可以算出聲源到接收器間的距離和聲源到中線OX的距離,即可移動聲源起始位置定位。然后控制小車做垂直中線OX運動,到達中線OX。再第二次發(fā)音頻信號,定位此時可移動聲源的位置,得出與中心點W的距離,使小車轉(zhuǎn)動90度,運動至W點。方案二:可移動聲源發(fā)出音頻信號后,得到定位。根據(jù)弧度的計算,控制小車做弧線運動。到達至中線OX??梢苿勇曉吹诙伟l(fā)出音頻信號,得到與中心點W的距離,控制小車到達W點。方案比較:方案一直接利用走垂直線的方法,算法簡單。方案二用到弧長和角度的算法,控制困難,且調(diào)試繁瑣。為了滿足方案的要求,所以本設(shè)計選擇方案一。二、硬件設(shè)計與實現(xiàn)硬件系統(tǒng)的框圖如圖1所示。單片機與FPGA通過無線的方式通訊。單片機FPGA電機控制音頻發(fā)送無線收發(fā)音頻接受無線收發(fā)紅外對管測速液晶顯示圖1、硬件系統(tǒng)框圖主要模塊電路如下:1、 控制器模塊實現(xiàn)音頻的接受和無線收發(fā)功能。FPGA模塊電路如圖2所示。接收經(jīng)過鎖相環(huán)選頻后的信號和單片機控制發(fā)送的同步無線信號,通過處理后利用無線通訊將命令發(fā)會單片機。圖2、FPGA控制模塊2、 音頻接收模塊 該模塊通過駐極體話筒采集音頻信號,駐極體話筒具有結(jié)構(gòu)簡單、重量輕、體積小、無方向性、頻率響應(yīng)寬、保真度好等優(yōu)點。音頻信號通過前置放大、濾波。再將放大信號通過LM567鎖相環(huán)音頻譯碼芯片,構(gòu)建選頻電路,當(dāng)輸入信號的頻率落在其內(nèi)部壓控振蕩器中心頻率時,輸出端將由原來的高電平變?yōu)榈碗娖?。鎖相環(huán)內(nèi)部壓控振蕩器中心頻率(f=1/1.1RC)由5、6腳外接的電阻與電容決定。所以在5腳接入10K的滑動變阻器調(diào)節(jié),可確定被選定的頻率。經(jīng)過多次計算與驗證,前置放大電路用TL082集成運放。當(dāng)麥克風(fēng)接收到6k赫茲左右的頻率時,輸出會有很明顯的電平跳變。電路原理如圖3。圖3、音頻接收模塊原理圖3、 電機控制模塊根據(jù)大賽要求,電機控制采用MMC-ASSP作為電機驅(qū)動的主控芯片。采用串口通信UART模式。該芯片提供三個通道控制電機,即可同時控制三個電機運轉(zhuǎn)。每一路直流電機需要CHnDCPWM和CHnDCDIR兩個引腳,CHnDCPWM用于PWM波輸出,CHnDCDIR用于指定電機轉(zhuǎn)向,外接一個全橋驅(qū)動芯片控制直流電機工作。通過調(diào)節(jié)占空比控制電機的轉(zhuǎn)速。數(shù)據(jù)的輸入輸出端口(TXD和RXD)與主控MCU相連。如圖4所示。采用了H橋驅(qū)動元件L298,避免了使用分立元件帶來的電路板復(fù)雜的問題,電路簡潔。且可以提供最大為4A的電流。MMC-ASSP控制電路如圖4所示,L298驅(qū)動電路如圖5所示。雙H橋驅(qū)動IC雙H橋驅(qū)動IC雙H橋驅(qū)動ICCH1DCPWMCH1DCDIRCH1DCPWMCH1DCDIRCH1DCPWMCH1DCDIRVddUART/SPIRESETSLEEPRXD/SITXD/SOREGCVssI/OTXDRXDVddGND電機1電機2電機3主控MCUMMC-1圖4、UART模式下直流電機控制模塊圖5、電機驅(qū)動模塊原理圖4、 紅外對管測速模塊用黑線將小車車輪圓盤平均15等分,采用光電傳感器RCRT5000檢測黑線,在一定時間內(nèi)計數(shù)檢測到的黑線條數(shù),計算出車速,由80C51F020控制液晶顯示。紅外對管模塊如圖6。 圖6、紅外對管測速原理圖5、顯示模塊顯示模塊主要由80C51F020的開發(fā)板作為控制核心,另外顯示電路作為外圍電路。主要功能:紅外對管采集車輪轉(zhuǎn)動的數(shù)據(jù),由單片機處理后經(jīng)過1602液晶顯示小車的車速。三、軟件系統(tǒng)設(shè)計1、80C51F020和FPGA總體程序流程初始化定時器開 計數(shù)等待接收到無線命令音頻結(jié)束關(guān)定時器換算距離延時無線發(fā)送初始化發(fā)送無線信號發(fā)送6kHZ音頻信號延時是否否是定位聲源接收無線信號(幾乎同時發(fā)送)控制電機圖7、程序流程圖2、MMC-1 ASSP電機控制程序流程電機驅(qū)動需要配置相對應(yīng)的寄存器,占空比給定寄存器(chnDuty)在用于直流電機驅(qū)動時需要配置,主要是通過設(shè)定該寄存器選擇不同占空比,進而調(diào)節(jié)電機轉(zhuǎn)速。另外,在配置完chnDuty寄存器后,還要設(shè)置工作模式寄存器(chnMode)選擇驅(qū)動電機的類型。本方案選擇的是直流電機。具體程序流程如圖8所示。延時50us,初始化結(jié)束MMC-1上電初始化設(shè)置chnDuty寄存器設(shè)置chnMode寄存器是否結(jié)束圖8、MMC-1電機控制程序流程四、硬件與軟件調(diào)試本方案所用到的硬件電路不多,主要是音頻接收模塊、電機驅(qū)動模塊和核心板電路。有關(guān)的硬件模塊調(diào)試主要就是音頻的接收。該操作比較簡單。難度較大的是軟件調(diào)試,本方案軟件控制是核心。通過對音頻的控制和無線接受模塊控制小車在特定要求下運動。主要用到核心控制器80C51F020和FPGA進行協(xié)同控制。調(diào)試在控制時序方面較困難,對音頻的采集處理有難度。五、性能與指標(biāo)測試1、測試儀器數(shù)字示波器 DS1102C 功率函數(shù)信號發(fā)生器 YB1605P直流穩(wěn)壓電源 YB1732A2A 秒表、2米卷尺2、測試分析本次設(shè)計用到聲音的引導(dǎo),會受到較大的干擾,前置的音頻接受與轉(zhuǎn)換的硬件也存在一定的誤差,導(dǎo)致FPGA測得的時序浮度比較大,所測得的數(shù)據(jù)穩(wěn)定性不高。不過對小車的控制比較到位。六、總結(jié)經(jīng)過4天3夜的努力,我們終于完成了本題的制作,在參數(shù)和功能上盡量完成要求。在理論設(shè)計計算方面,我們充分運用了我們所掌握的知識,力爭做到更好。在實際過程中,關(guān)于音頻信號的處理和相關(guān)時序處理遇到的問題較大。這一方面成為本設(shè)計的關(guān)鍵所在。說明了我們還是缺少相關(guān)知識技術(shù)和實際的工程經(jīng)驗。通過此次大賽,我們隊的每個成員都獲益非淺。 參考文獻1 綜合電子設(shè)計與實踐田良南京:東南大學(xué)出版社,2002.32 FPGA設(shè)計與應(yīng)用劉皖,何道君,譚明北京:清華大學(xué)出版社,20063 C8051F單片機原理及應(yīng)用. 鮑可進. 北京:中國電力出版社,2006.4 FPGA原理與實踐張慶玲, 楊勇北京:北京航空航天大學(xué)出版社,2006附錄附錄單片機源程序/020 串口UART0發(fā)送程序模塊#includeunsigned int count,count1,count2;unsigned char lcd=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39;unsigned int cnt; /用于控制發(fā)6KHz的方波的個數(shù)unsigned int a,b,c;bit flag_sound; /標(biāo)志位,用于控制發(fā)送方波的個數(shù)bit flag,flag1,flag2;bit key_flag;sbit key1=P05;sbit key2=P06; sbit sound=P07;sbit RS=P25;/液晶sbit RW=P26;sbit EN=P27;sbit P30=P30;/EN_1,EN_2sbit P31=P31;sbit P33=P23;void Delay(unsigned int i);void PORT_Init(void);void SYSCLK_Init(void);void UART0_INT();void UART1_INT();void E_int(void);void Wait_Busy(void);void Write_Data(unsigned char data_in);void Write_Code(unsigned char code_in);void Lcd_Init(void);void stright(void);void zhuanwan_left(void);void zhuanwan_right(void);void stop_8s(void);void delay_long(void);void stop();void key_puanduan();void Timer_INT();void Delay(unsigned int i)/延時子程序 while(i-);void Timer_INT() interrupt 1 using 1 if (cnt=b) /發(fā)10個周期的6KHz的方波 TL0=0x69; /6KHz的頻率產(chǎn)生的定時器的值 TH0=0xff; flag_sound=1; TR0=0; cnt=0; else TL0=0x69; TH0=0xff; sound=sound; cnt+; flag_sound=0; TR0=1; void PORT_Init(void) /*端口的初始化*/ XBR0=0x04; /使UART0的TXD和RXD分別連接到P0.0,P0.1 XBR1=0x04; XBR2=0x44; P0MDOUT=0x60; /*P口輸出方式的設(shè)置*/ P1MDOUT=0X00; P2MDOUT&=0x00; P3MDOUT&=0x00;void SYSCLK_Init(void) /*系統(tǒng)時鐘初始化*/ unsigned int Q=0; /*外部時鐘的配置*/ OSCXCN=0x67; for(Q=0;Q255;Q+); while(OSCXCN&0xe7)!=0xe7); OSCICN=0x88;void wait_busy(void) P1|=0x80; RS=0; RW=1; EN=1; Delay(10); while(P1&0x80); EN=0; void Write_Data(unsigned char data_in) /*發(fā)送數(shù)據(jù)函數(shù)*/ Wait_Busy(); RS=1; RW=0; EN=1; P1=data_in; Delay(100); EN=0;void Write_Code(unsigned char code_in) /*發(fā)送指令函數(shù)*/ Wait_Busy(); RS=0; RW=0; EN=1; P1=code_in; Delay(100); EN=0;void LCD_Init(void) /*液晶初始化*/ Write_Code(0x01); Delay(100); Write_Code(0x38); Delay(100); Write_Code(0x0c); Delay(100); Write_Code(0x06); Delay(100);void T1_inter() interrupt 3 /*計時對數(shù)據(jù)進行處理*/ if (count2=a) TR1=0; TL1=0xFF; TH1=0x6f; flag2=1;count2=0; else TL1=0xff; TH1=0x6f; TR1=1; flag2=0; count2+;void E_int() interrupt 0/外部中斷函數(shù) if (count1=c) flag=1; count1=0; P30=0; P31=0; else count1=count1+1; count=count+1;void stright(void)/直走50cm/直走/*/通道1PWMchnfreq的配置TB80=1; /發(fā)送0X53-5-寫命令字,3-通道1占空比給定寄存器SBUF0=0X53;while(TI0);TI0=0;Delay(10000);TB80=1;/發(fā)送0Xcc-占空比(控制轉(zhuǎn)速)SBUF0=0Xf6;while(TI0);TI0=0;Delay(10000);/*/通道2PWMchnfreq的配置TB80=0;/發(fā)送0X57SBUF0=0X57;while(TI0);TI0=0;Delay(10000);TB80=0;/發(fā)送0XCcSBUF0=0Xf8;while(TI0);TI0=0;Delay(10000);/*/通道1,2不同步的同步模式寄存器synmode的設(shè)置TB80=1;/發(fā)送0X5CSBUF0=0X5C;while(TI0);TI0=0;Delay(10000);TB80=1;/發(fā)送0X00SBUF0=0X00;while(TI0);TI0=0;Delay(10000);/*/通道1chnmode的配置TB80=1;/發(fā)送0X50SBUF0=0X50;while(TI0);TI0=0;Delay(10000);TB80=1;/發(fā)送0Xc0SBUF0=0Xc0;while(TI0);TI0=0;Delay(10000);/*/通道2chnmode的配置TB80=0;/發(fā)送0X54SBUF0=0X54;while(TI0);TI0=0;Delay(10000);TB80=1;/發(fā)送0Xc0SBUF0=0XC0;while(TI0);TI0=0;P30=1; P31=1;void stop_8s(void) while(flag); flag=0; SCON1&=0xfd;SBUF1=0x0d; /發(fā)送13cm/s while(SCON1&0x02=0x00); Write_Code(0x80); Write_Data(0x31); Write_Data(0x33); Write_Data(0x63); Write_Data(0x6d); Write_Data(0x2f); Write_Data(0x73);/停止/ a=400; TR1=1; flag2=0; while(flag2) Delay(10000); P33=P33; flag2=0; count2=0; P33=0;void zhuanwan_left(void)/右轉(zhuǎn)EA=0;EX0=0;/轉(zhuǎn)90度/*/通道1PWMchnfreq的配置TB80=1; /發(fā)送0X53SBUF0=0X53;while(TI0);TI0=0;Delay(10000);TB80=1;/發(fā)送0X33SBUF0=0XB4;/SBUF0=0Xf6;while(TI0);TI0=0;Delay(10000);/*/通道2PWMchnfreq的配置TB80=0;/發(fā)送0X57SBUF0=0X57;while(TI0);TI0=0;Delay(10000);TB80=1;/發(fā)送0X33SBUF0=0XB4;/SBUF0=0Xf7;while(TI0);TI0=0;Delay(10000);/*/通道1,2不同步的同步模式寄存器synmode的設(shè)置TB80=1;/發(fā)送0X5CSBUF0=0X5C;while(TI0);TI0=0;Delay(10000);TB80=1;/發(fā)送0X00SBUF0=0X00;while(TI0);TI0=0;Delay(10000);/*/通道1chnmode的配置TB80=1;/發(fā)送0X50SBUF0=0X50;while(TI0);TI0=0;Delay(10000);TB80=1;/發(fā)送0Xe0SBUF0=0XC0;while(TI0);TI0=0;Delay(10000);/*/通道2chnmode的配置TB80=0;/發(fā)送0X54SBUF0=0X54;while(TI0);TI0=0;Delay(10000);TB80=0;/發(fā)送0Xe0SBUF0=0XE0;while(TI0);/發(fā)送0X80TI0=0;P30=1;P31=1;void stop(void)/停止/P30=0;P31=0; Write_Code(0x80); Write_Data(0x20); Write_Data(0x20); Write_Data(0x20); Write_Data(0x20); Write_Data(0x20); Write_Data(0x20);void zhuanwan_right(void)/左轉(zhuǎn)EA=0;EX0=0;/轉(zhuǎn)90度/*/通道1PWMchnfreq的配置TB80=1; /發(fā)送0X53SBUF0=0X53;while(TI0);TI0=0;Delay(10000);TB80=1;/發(fā)送0X33SBUF0=0XB4;/SBUF0=0Xf6;while(TI0);TI0=0;Delay(10000);/*/通道2PWMchnfreq的配置TB80=0;/發(fā)送0X57SBUF0=0X57;while(TI0);TI0=0;Delay(10000);TB80=1;/發(fā)送0X33SBUF0=0XB4;/SBUF0=0Xf7;while(TI0);TI0=0;Delay(10000);/*/通道1,2不同步的同步模式寄存器synmode的設(shè)置TB80=1;/發(fā)送0X5CSBUF0=0X5C;while(TI0);TI0=0;Delay(10000);TB80=1;/發(fā)送0X00SBUF0=0X00;while(TI0);TI0=0;Delay(10000);/*/通道1chnmode的配置TB80=1;/發(fā)送0X50SBUF0=0X50;while(TI0);TI0=0;Delay(10000);TB80=0;/發(fā)送0Xe0SBUF0=0Xe0;while(TI0);TI0=0;Delay(10000);/*/通道2chnmode的配置TB80=0;/發(fā)送0X54SBUF0=0X54;while(TI0);TI0=0;Delay(10000);TB80=1;/發(fā)送0Xe0SBUF0=0Xc0;while(TI0);/發(fā)送0X80TI0=0;P30=1;P31=1;void main(void) c=0; WDTCN=0xde; /*關(guān)看門狗*/ WDTCN=0xad; count=0;count1=0; cnt=0;flag_sound=0; PORT_Init(); SYSCLK_Init(); LCD_Init(); SCON0=0xD0; /UART0工作在方式2,9位UART,可變波特率 SCON1=0x50; /UART1工作在方式1,8位UART,可變波特率 T2CON=0x30; T4CON=0x30; RCAP2L=0xb8; /設(shè)置波特率(定時器2作為波特率發(fā)生器) RCAP2H=0xff; RCAP4L=0x0b8; /設(shè)置波特率(定時器4作為波特率發(fā)生器) RCAP4H=0xff; EA=1; TR2=1; T4CON|=0x04; /開定時器4 TI0=0; IT0=1; EX0=1; CKCON=0x00; /*定時器0,1用的時鐘為系統(tǒng)時鐘的12分頻*/ TMOD=0x11; /*定時器1用來定時,定時器0用來計被測脈沖*/ TH1=0x6f;TL1=0xff; /*定時器1的初值*/ ET1=1; TR1=0; /*配置定時器0*/ TL0=0x69; TH0=0xff; ET0=1; EA=1; TR0=0; flag=0; flag1=0; / P33=1; while(1) P30=0;P31=0;/ P33=1; while(key1&key2); if (key1=0) key_flag=1; if (key2=0) key_flag=0; b=1000; TR0=1;/開定時器0,6Khz方波 while(flag_sound); flag2=0; a=30; TR1=1; while(flag2); Delay(100);/主控MCU延時50US c=50; stright(); stop_8s(); if (key_flag=0) zhuanwan_left(); else zhuanwan_right(); stop();EA=1;b=1500;/音量 TR0=1;/開定時器0,6Khz方波while(flag_sound);a=30;TR1=1;while(flag2);c=33;flag=0;P30=1;P31=1;EA=1;EX0=1;stright();while(flag);P30=0;P31=0; SCON1&=0xfd;SBUF1=0xc;while(SCON1&0x02=0x00);Write_Code(0x80); Write_Data(0x31);Write_Data(0x32);Write_Data(0x63);Write_Data(0x6d);Write_Data(0x2f);Write_Data(0x73);附錄VHDL源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY TOP ISPORT( iCLK_50M : in std_logic; irst_n : in std_logic; iRXD :in std_logic; oRW : out std_logic; oRS : out std_logic; oEN : out std_logic; oLCD_DATA : out std_logic_vector(7 downto 0); F_CS,SD_CS : out std_logic );end;ARCHITECTURE behave OF TOP ISsignal R_data_done:std_logic_vector(7 downto 0);signal data1,data2,data3:std_logic_vector(7 downto 0);component rec isPORT( iCLK_50M : in std_logic; irst_n : in std_logic; iRXD : in std_logic; oR_data : out std_logic_vector(7 downto 0) );end component;component manage isPORT( iCLK_50M : in std_logic; irst_n : in std_logic; iR_data : in std_logic_vector(7 downto 0); odata_1,odata_2,odata_3 : out std_logic_vector(7 downto 0) );end component;component LCD_1602 isport( irst_n : in std_logic; -復(fù)位信號 iCLK_50M : in std_logic; -50M時鐘輸入端 iData_1,iData_2,iData_3 : in std_logic_vector(7 downto 0); -預(yù)置值緩存 oRW : out std_logic; -LCD1602控制端RW oRS : out std_logic; -LCD1602控制端RS oEN : out std_logic; -LCD1602控制端EN oLCD_DATA : out std_logic_vector(7 downto 0) -LCD1602數(shù)據(jù)接口 );end component;BEGIN F_CS=1; SD_CSiCLK_50M, irst_n=irst_n, iRXD=iRXD, oR_data=R_data_done);u2:manage port map(iCLK_50M=iCLK_50M, irst_n=irst_n, iR_data=R_data_done, odata_1=data1, odata_2=data2, odata_3=data3);u3:LCD_1602 port map(irst_n=irst_n, iCLK_50M=iCLK_50M, iData_1=data1, iData_2=data2, iData_3=data3, oRW=oRW, oRS=oRS, oEN=oEN, oLCD_DATA=oLCD_DATA);end;附錄3. 電路圖附錄3.1 FPGA核心板極其配置電路附錄3.2 音頻接受模塊電路附錄3.3 電機驅(qū)動模塊電路圖附錄3.4 紅外對管測速原理圖附錄3.5電源電路模塊電路- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 智能 小車 聲音 引導(dǎo) 系統(tǒng) 設(shè)計 制作 報告
鏈接地址:http://m.italysoccerbets.com/p-8963659.html