《智能小車聲音引導(dǎo)系統(tǒng)設(shè)計(jì)與制作報(bào)告.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《智能小車聲音引導(dǎo)系統(tǒng)設(shè)計(jì)與制作報(bào)告.doc(20頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
聲音引導(dǎo)系統(tǒng)設(shè)計(jì)與制作報(bào)告
一、方案選擇與論證
1、整體方案選擇
方案一:本方案采用音頻收發(fā)的方式,由核心控制模塊80C51F020發(fā)出一個(gè)特定頻率的音頻脈沖信號(hào),前置音頻接收模塊接收并識(shí)別這個(gè)脈沖信號(hào)。將其轉(zhuǎn)變成TTL電平。采用FPGA對(duì)接受的信號(hào)進(jìn)行處理,經(jīng)過無線收發(fā)模塊通訊,將小車的定點(diǎn)位置傳至核心模塊單片機(jī)處理并控制小車在特定的范圍內(nèi)運(yùn)動(dòng)。
方案二:本方案采用語音收發(fā)的方式來控制小車的運(yùn)動(dòng),由核心控制模塊控制語音芯片,發(fā)送特定的語音信號(hào),再由語音識(shí)別模塊對(duì)語音進(jìn)行采集和數(shù)字化。采用FPGA對(duì)接受的信號(hào)進(jìn)行處理,經(jīng)過無線收發(fā)模塊通訊,將小車的定點(diǎn)位置傳至核心模塊單片機(jī)處理并控制小車在特定的范圍內(nèi)運(yùn)動(dòng)。
方案比較:方案一的核心控制算法由80C51F020完成。單片機(jī)的算法控制比較簡(jiǎn)單,容易實(shí)現(xiàn)。而FPGA的算法較復(fù)雜,但其對(duì)邊沿信號(hào)反應(yīng)時(shí)間快,所以利用FPGA處理接受音頻信號(hào)。方案二用到語音收發(fā)的方式,由于識(shí)別語音的收發(fā)模塊實(shí)現(xiàn)困難,所以本設(shè)計(jì)采用方案一。
2、控制理論計(jì)算方案選擇
方案一:可移動(dòng)聲源在運(yùn)動(dòng)前發(fā)出音頻信號(hào),根據(jù)三個(gè)接收器接收音頻的時(shí)間不同,可以算出聲源到接收器間的距離和聲源到中線OX的距離,即可移動(dòng)聲源起始位置定位。然后控制小車做垂直中線OX運(yùn)動(dòng),到達(dá)中線OX。再第二次發(fā)音頻信號(hào),定位此時(shí)可移動(dòng)聲源的位置,得出與中心點(diǎn)W的距離,使小車轉(zhuǎn)動(dòng)90度,運(yùn)動(dòng)至W點(diǎn)。
方案二:可移動(dòng)聲源發(fā)出音頻信號(hào)后,得到定位。根據(jù)弧度的計(jì)算,控制小車做弧線運(yùn)動(dòng)。到達(dá)至中線OX??梢苿?dòng)聲源第二次發(fā)出音頻信號(hào),得到與中心點(diǎn)W的距離,控制小車到達(dá)W點(diǎn)。
方案比較:方案一直接利用走垂直線的方法,算法簡(jiǎn)單。方案二用到弧長(zhǎng)和角度的算法,控制困難,且調(diào)試繁瑣。為了滿足方案的要求,所以本設(shè)計(jì)選擇方案一。
二、硬件設(shè)計(jì)與實(shí)現(xiàn)
硬件系統(tǒng)的框圖如圖1所示。單片機(jī)與FPGA通過無線的方式通訊。
單片機(jī)
FPGA
電機(jī)控制
音頻發(fā)送
無線收發(fā)
音頻接受
無線收發(fā)
紅外對(duì)管測(cè)速
液晶顯示
圖1、硬件系統(tǒng)框圖
主要模塊電路如下:
1、 控制器模塊
實(shí)現(xiàn)音頻的接受和無線收發(fā)功能。FPGA模塊電路如圖2所示。接收經(jīng)過鎖相環(huán)選頻后的信號(hào)和單片機(jī)控制發(fā)送的同步無線信號(hào),通過處理后利用無線通訊將命令發(fā)會(huì)單片機(jī)。
圖2、FPGA控制模塊
2、 音頻接收模塊
該模塊通過駐極體話筒采集音頻信號(hào),駐極體話筒具有結(jié)構(gòu)簡(jiǎn)單、重量輕、體積小、無方向性、頻率響應(yīng)寬、保真度好等優(yōu)點(diǎn)。音頻信號(hào)通過前置放大、濾波。再將放大信號(hào)通過LM567鎖相環(huán)音頻譯碼芯片,構(gòu)建選頻電路,當(dāng)輸入信號(hào)的頻率落在其內(nèi)部壓控振蕩器中心頻率時(shí),輸出端將由原來的高電平變?yōu)榈碗娖健fi相環(huán)內(nèi)部壓控振蕩器中心頻率(f=1/1.1RC)由5、6腳外接的電阻與電容決定。所以在5腳接入10K的滑動(dòng)變阻器調(diào)節(jié),可確定被選定的頻率。經(jīng)過多次計(jì)算與驗(yàn)證,前置放大電路用TL082集成運(yùn)放。當(dāng)麥克風(fēng)接收到6k赫茲左右的頻率時(shí),輸出會(huì)有很明顯的電平跳變。電路原理如圖3。
圖3、音頻接收模塊原理圖
3、 電機(jī)控制模塊
根據(jù)大賽要求,電機(jī)控制采用MMC-ASSP作為電機(jī)驅(qū)動(dòng)的主控芯片。采用串口通信UART模式。該芯片提供三個(gè)通道控制電機(jī),即可同時(shí)控制三個(gè)電機(jī)運(yùn)轉(zhuǎn)。每一路直流電機(jī)需要CHnDCPWM和CHnDCDIR兩個(gè)引腳,CHnDCPWM用于PWM波輸出,CHnDCDIR用于指定電機(jī)轉(zhuǎn)向,外接一個(gè)全橋驅(qū)動(dòng)芯片控制直流電機(jī)工作。通過調(diào)節(jié)占空比控制電機(jī)的轉(zhuǎn)速。數(shù)據(jù)的輸入輸出端口(TXD和RXD)與主控MCU相連。如圖4所示。采用了H橋驅(qū)動(dòng)元件L298,避免了使用分立元件帶來的電路板復(fù)雜的問題,電路簡(jiǎn)潔。且可以提供最大為4A的電流。MMC-ASSP控制電路如圖4所示,L298驅(qū)動(dòng)電路如圖5所示。
雙H橋驅(qū)動(dòng)IC
雙H橋驅(qū)動(dòng)IC
雙H橋驅(qū)動(dòng)IC
CH1DCPWM
CH1DCDIR
CH1DCPWM
CH1DCDIR
CH1DCPWM
CH1DCDIR
Vdd
UART/SPI
RESET
SLEEP
RXD/SI
TXD/SO
REGC
Vss
I/O
TXD
RXD
Vdd
GND
電機(jī)1
電機(jī)2
電機(jī)3
主控MCU
MMC-1
圖4、UART模式下直流電機(jī)控制模塊
圖5、電機(jī)驅(qū)動(dòng)模塊原理圖
4、 紅外對(duì)管測(cè)速模塊
用黑線將小車車輪圓盤平均15等分,采用光電傳感器RCRT5000檢測(cè)黑線,在一定時(shí)間內(nèi)計(jì)數(shù)檢測(cè)到的黑線條數(shù),計(jì)算出車速,由80C51F020控制液晶顯示。紅外對(duì)管模塊如圖6。
圖6、紅外對(duì)管測(cè)速原理圖
5、顯示模塊
顯示模塊主要由80C51F020的開發(fā)板作為控制核心,另外顯示電路作為外圍電路。主要功能:紅外對(duì)管采集車輪轉(zhuǎn)動(dòng)的數(shù)據(jù),由單片機(jī)處理后經(jīng)過1602液晶顯示小車的車速。
三、軟件系統(tǒng)設(shè)計(jì)
1、80C51F020和FPGA總體程序流程
初始化
定時(shí)器開 計(jì)數(shù)
等待接收到無線命令
音頻結(jié)束
關(guān)定時(shí)器
換算距離
延時(shí)
無線發(fā)送
初始化
發(fā)送無線信號(hào)
發(fā)送6kHZ音頻信號(hào)
延時(shí)
是
否
否
是
定位聲源
接收無線信號(hào)
(幾乎同時(shí)發(fā)送)
控制電機(jī)
圖7、程序流程圖
2、MMC-1 ASSP電機(jī)控制程序流程
電機(jī)驅(qū)動(dòng)需要配置相對(duì)應(yīng)的寄存器,占空比給定寄存器(chnDuty)在用于直流電機(jī)驅(qū)動(dòng)時(shí)需要配置,主要是通過設(shè)定該寄存器選擇不同占空比,進(jìn)而調(diào)節(jié)電機(jī)轉(zhuǎn)速。另外,在配置完chnDuty寄存器后,還要設(shè)置工作模式寄存器(chnMode)選擇驅(qū)動(dòng)電機(jī)的類型。本方案選擇的是直流電機(jī)。具體程序流程如圖8所示。
延時(shí)50us,初始化結(jié)束
MMC-1上電
初始化
設(shè)置chnDuty
寄存器
設(shè)置chnMode寄存器
是
否
結(jié)束
圖8、MMC-1電機(jī)控制程序流程
四、硬件與軟件調(diào)試
本方案所用到的硬件電路不多,主要是音頻接收模塊、電機(jī)驅(qū)動(dòng)模塊和核心板電路。有關(guān)的硬件模塊調(diào)試主要就是音頻的接收。該操作比較簡(jiǎn)單。難度較大的是軟件調(diào)試,本方案軟件控制是核心。通過對(duì)音頻的控制和無線接受模塊控制小車在特定要求下運(yùn)動(dòng)。主要用到核心控制器80C51F020和FPGA進(jìn)行協(xié)同控制。調(diào)試在控制時(shí)序方面較困難,對(duì)音頻的采集處理有難度。
五、性能與指標(biāo)測(cè)試
1、測(cè)試儀器
數(shù)字示波器 DS1102C 功率函數(shù)信號(hào)發(fā)生器 YB1605P
直流穩(wěn)壓電源 YB1732A2A 秒表、2米卷尺
2、測(cè)試分析
本次設(shè)計(jì)用到聲音的引導(dǎo),會(huì)受到較大的干擾,前置的音頻接受與轉(zhuǎn)換的硬件也存在一定的誤差,導(dǎo)致FPGA測(cè)得的時(shí)序浮度比較大,所測(cè)得的數(shù)據(jù)穩(wěn)定性不高。不過對(duì)小車的控制比較到位。
六、總結(jié)
經(jīng)過4天3夜的努力,我們終于完成了本題的制作,在參數(shù)和功能上盡量完成要求。在理論設(shè)計(jì)計(jì)算方面,我們充分運(yùn)用了我們所掌握的知識(shí),力爭(zhēng)做到更好。在實(shí)際過程中,關(guān)于音頻信號(hào)的處理和相關(guān)時(shí)序處理遇到的問題較大。這一方面成為本設(shè)計(jì)的關(guān)鍵所在。說明了我們還是缺少相關(guān)知識(shí)技術(shù)和實(shí)際的工程經(jīng)驗(yàn)。通過此次大賽,我們隊(duì)的每個(gè)成員都獲益非淺。
參考文獻(xiàn)
[1] 綜合電子設(shè)計(jì)與實(shí)踐.田良.南京:東南大學(xué)出版社,2002.3.
[2] FPGA設(shè)計(jì)與應(yīng)用.劉皖,何道君,譚明.北京:清華大學(xué)出版社,2006.
[3] C8051F單片機(jī)原理及應(yīng)用. 鮑可進(jìn). 北京:中國(guó)電力出版社,2006.
[4] FPGA原理與實(shí)踐.張慶玲, 楊勇.北京:北京航空航天大學(xué)出版社,2006.
附 錄
附錄1. 單片機(jī)源程序
//020 串口UART0發(fā)送程序模塊
#include
unsigned int count,count1,count2;
unsigned char lcd[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
unsigned int cnt; //用于控制發(fā)6KHz的方波的個(gè)數(shù)
unsigned int a,b,c;
bit flag_sound; //標(biāo)志位,用于控制發(fā)送方波的個(gè)數(shù)
bit flag,flag1,flag2;
bit key_flag;
sbit key1=P0^5;
sbit key2=P0^6;
sbit sound=P0^7;
sbit RS=P2^5;//液晶
sbit RW=P2^6;
sbit EN=P2^7;
sbit P30=P3^0;//EN_1,EN_2
sbit P31=P3^1;
sbit P33=P2^3;
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)//延時(shí)子程序
{
while(i--);
}
void Timer_INT() interrupt 1 using 1
{
if (cnt==b) //發(fā)10個(gè)周期的6KHz的方波
{
TL0=0x69; //6KHz的頻率產(chǎn)生的定時(shí)器的值
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)時(shí)鐘初始化**********/
{
unsigned int Q=0; /*******外部時(shí)鐘的配置*********/
OSCXCN=0x67;
for(Q=0;Q<255;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 /*****計(jì)時(shí)對(duì)數(shù)據(jù)進(jìn)行處理*****/
{ 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ā)送0X57
SBUF0=0X57;
while(~TI0);
TI0=0;
Delay(10000);
TB80=0;//發(fā)送0XCc
SBUF0=0Xf8;
while(~TI0);
TI0=0;
Delay(10000);
//***********************//通道1,2不同步的同步模式寄存器synmode的設(shè)置
TB80=1;//發(fā)送0X5C
SBUF0=0X5C;
while(~TI0);
TI0=0;
Delay(10000);
TB80=1;//發(fā)送0X00
SBUF0=0X00;
while(~TI0);
TI0=0;
Delay(10000);
//***********************//通道1chnmode的配置
TB80=1;//發(fā)送0X50
SBUF0=0X50;
while(~TI0);
TI0=0;
Delay(10000);
TB80=1;//發(fā)送0Xc0
SBUF0=0Xc0;
while(~TI0);
TI0=0;
Delay(10000);
//***********************//通道2chnmode的配置
TB80=0;//發(fā)送0X54
SBUF0=0X54;
while(~TI0);
TI0=0;
Delay(10000);
TB80=1;//發(fā)送0Xc0
SBUF0=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ā)送0X53
SBUF0=0X53;
while(~TI0);
TI0=0;
Delay(10000);
TB80=1;//發(fā)送0X33
SBUF0=0XB4;
//SBUF0=0Xf6;
while(~TI0);
TI0=0;
Delay(10000);
//***********************///通道2PWMchnfreq的配置
TB80=0;//發(fā)送0X57
SBUF0=0X57;
while(~TI0);
TI0=0;
Delay(10000);
TB80=1;//發(fā)送0X33
SBUF0=0XB4;
//SBUF0=0Xf7;
while(~TI0);
TI0=0;
Delay(10000);
//***********************///通道1,2不同步的同步模式寄存器synmode的設(shè)置
TB80=1;//發(fā)送0X5C
SBUF0=0X5C;
while(~TI0);
TI0=0;
Delay(10000);
TB80=1;//發(fā)送0X00
SBUF0=0X00;
while(~TI0);
TI0=0;
Delay(10000);
//***********************///通道1chnmode的配置
TB80=1;//發(fā)送0X50
SBUF0=0X50;
while(~TI0);
TI0=0;
Delay(10000);
TB80=1;//發(fā)送0Xe0
SBUF0=0XC0;
while(~TI0);
TI0=0;
Delay(10000);
//***********************///通道2chnmode的配置
TB80=0;//發(fā)送0X54
SBUF0=0X54;
while(~TI0);
TI0=0;
Delay(10000);
TB80=0;//發(fā)送0Xe0
SBUF0=0XE0;
while(~TI0);//發(fā)送0X80
TI0=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ā)送0X53
SBUF0=0X53;
while(~TI0);
TI0=0;
Delay(10000);
TB80=1;//發(fā)送0X33
SBUF0=0XB4;
//SBUF0=0Xf6;
while(~TI0);
TI0=0;
Delay(10000);
//***********************///通道2PWMchnfreq的配置
TB80=0;//發(fā)送0X57
SBUF0=0X57;
while(~TI0);
TI0=0;
Delay(10000);
TB80=1;//發(fā)送0X33
SBUF0=0XB4;
//SBUF0=0Xf7;
while(~TI0);
TI0=0;
Delay(10000);
//***********************///通道1,2不同步的同步模式寄存器synmode的設(shè)置
TB80=1;//發(fā)送0X5C
SBUF0=0X5C;
while(~TI0);
TI0=0;
Delay(10000);
TB80=1;//發(fā)送0X00
SBUF0=0X00;
while(~TI0);
TI0=0;
Delay(10000);
//***********************///通道1chnmode的配置
TB80=1;//發(fā)送0X50
SBUF0=0X50;
while(~TI0);
TI0=0;
Delay(10000);
TB80=0;//發(fā)送0Xe0
SBUF0=0Xe0;
while(~TI0);
TI0=0;
Delay(10000);
//***********************///通道2chnmode的配置
TB80=0;//發(fā)送0X54
SBUF0=0X54;
while(~TI0);
TI0=0;
Delay(10000);
TB80=1;//發(fā)送0Xe0
SBUF0=0Xc0;
while(~TI0);//發(fā)送0X80
TI0=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è)置波特率(定時(shí)器2作為波特率發(fā)生器)
RCAP2H=0xff;
RCAP4L=0x0b8; //設(shè)置波特率(定時(shí)器4作為波特率發(fā)生器)
RCAP4H=0xff;
EA=1;
TR2=1;
T4CON|=0x04; //開定時(shí)器4
TI0=0;
IT0=1;
EX0=1;
CKCON=0x00; /*****定時(shí)器0,1用的時(shí)鐘為系統(tǒng)時(shí)鐘的12分頻*****/
TMOD=0x11; /*****定時(shí)器1用來定時(shí),定時(shí)器0用來計(jì)被測(cè)脈沖******/
TH1=0x6f;TL1=0xff; /*****定時(shí)器1的初值*****/
ET1=1;
TR1=0;
/**********配置定時(shí)器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;//開定時(shí)器0,6Khz方波
while(~flag_sound);
flag2=0;
a=30;
TR1=1;
while(~flag2);
Delay(100);//主控MCU延時(shí)50US
c=50;
stright();
stop_8s();
if (key_flag==0)
{
zhuanwan_left(); }
else
{
zhuanwan_right();
}
stop();
EA=1;
b=1500;//音量
TR0=1;//開定時(shí)器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);
附錄2. VHDL源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY TOP IS
PORT(
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 IS
signal R_data_done:std_logic_vector(7 downto 0);
signal data1,data2,data3:std_logic_vector(7 downto 0);
component rec is
PORT(
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 is
PORT(
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 is
port(
irst_n : in std_logic; --復(fù)位信號(hào)
iCLK_50M : in std_logic; --50M時(shí)鐘輸入端
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_CS<=1;
u1:rec
port map(iCLK_50M=>iCLK_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 電機(jī)驅(qū)動(dòng)模塊電路圖
附錄3.4 紅外對(duì)管測(cè)速原理圖
附錄3.5電源電路模塊電路
鏈接地址:http://appdesigncorp.com/p-8963659.html