国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于LPC1768定時捕獲功能的障礙探測系統(tǒng)的設(shè)計(jì)

2015-07-13 21:45張燕
電腦知識與技術(shù) 2015年13期

張燕

摘要:本設(shè)計(jì)介紹了LPC1768的的定時器捕獲功能在移動機(jī)器人障礙探測中的使用。設(shè)計(jì)了移動機(jī)器人探測周圍環(huán)境障礙的軟硬件,應(yīng)用超聲傳感器獲取周圍的障礙物信息,通過算法計(jì)算出障礙物與移動機(jī)器人的位置信息,從而獲取移動機(jī)器人前方障礙信息,為了更好的顯示障礙物距離,使用LCD1602實(shí)時顯示障礙物距離。

關(guān)鍵詞:超聲傳感器;LPC1768;捕獲

中圖分類號:TP751 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)13-0189-03

Abstract: This paper introduces the match function of mocrocontroller LPC1768 and its application to detect obstacles in the mobile robot .both hardware and software of the mobile robot obstacle detection are designed. ultrasonic sensor are used to get around obstacles information. the algorithm is used to calculated the position information between obstacle and mobile robot. in order to better display of obstacle distance, LCD1602 is used to show obstacle distance real-time.

Key words :ultrasonic sensor;LPC1768;capture

隨著移動機(jī)器人的不斷發(fā)展, 其應(yīng)用領(lǐng)域也越來越廣泛。由于移動機(jī)器人周圍環(huán)境往往是不可預(yù)測的, 對于自主移動機(jī)器人,能否感知周圍環(huán)境的信息直接 決定了移動機(jī)器人是否可以自主運(yùn)行[1]。

目前移動機(jī)器人常用的測距方法有超聲測距、激光測距、紅外測距、微波測距等。其中超聲波測距就是利用壓電效應(yīng)將電脈沖與機(jī)械諧振產(chǎn)生的超聲波相互轉(zhuǎn)化而構(gòu)成的發(fā)射與接收裝置,也成為超聲波換能器或超聲波探頭,它包括發(fā)送探頭和接收探頭兩部分。通過發(fā)射探頭將40kHz的電脈沖信號轉(zhuǎn)換為機(jī)械諧振而產(chǎn)生超聲波,實(shí)現(xiàn)將電能轉(zhuǎn)換為機(jī)械能的轉(zhuǎn)換,而接收探頭則是將超聲波引起的機(jī)械振動再轉(zhuǎn)換成電脈沖信號[2]。

1 系統(tǒng)組成和結(jié)構(gòu)

本系統(tǒng)主要由LPC1768,超聲收發(fā)模塊,LCD顯示模塊構(gòu)成。

LPC1768[3]是NXP 公司推出的基于ARM Cortex-M3 內(nèi)核的微控制器LPC17XX 系列中的一員。操作頻率可達(dá)100MHz, 外設(shè)組件包含高達(dá)512KB 的flash 存儲器、4個UART、3個IIC 接口、4個通用定時器等,獨(dú)立電池供電的超低功耗RTC 和多達(dá)70個的通用IO 管腳。

超聲收發(fā)模塊的四根線分別為VCC,GND,

TRIG,Echo,其中VCC接電源,GND 接地,信號線TRIG為控制端,Echo接GPIO口。

LCD顯示模塊采取IIC串行總線的方式。其中LCD1602的背光電源和供電電源相連接,而后連接至LPC1768的VCC上,由于LCD1602 VCC電源為3.3V,因此只需要連接至LPC1768的3.3V電源即可。LCD的SDA以及 SCL分別連接LPC1768 IIC0的SDA及SCL。為了更好的顯

示數(shù)據(jù),同時還將超聲獲取的距離信息通過串口控制臺顯示在PC的終端上。

2 系統(tǒng)軟件的設(shè)計(jì)

2.1系統(tǒng)總體設(shè)計(jì)流程

本設(shè)計(jì)采取P0.0與超聲模塊控制口trig相連,定期給此端口一個10us以上的高電平來使能超聲模塊。利用定時器timer0以及捕獲的p2.0端口的上升以及下降沿的定時器計(jì)數(shù)值,獲取echo口高電平持續(xù)的時間,在中斷服務(wù)程序中計(jì)算出障礙物距離。計(jì)算出來的障礙物距離通過LCD1602以及超級終端均可以顯示。

2.2 超聲傳感器模塊軟件設(shè)計(jì)

信號線TRIG為控制端,每當(dāng)我們通過此信號線發(fā)送10us以上的高電平,系統(tǒng)便可發(fā)出8個40KHZ的超聲波脈沖,然后Echo檢測回波信號[4]。Echo 端輸出一高電平, 可根據(jù)此高電平的持續(xù)時間來計(jì)算距離值,具體時序如圖4所示。

本設(shè)計(jì)采取一個GPIO端口P0.0發(fā)送10us的高電平信息由于我們需要通過捕獲echo端口有無高電平信息 ,以及高電平信息的持續(xù)時間,在LPC1768上中斷有外部中斷以及GPIO中斷。由于需要捕獲高電平信息,所以考慮采用GPIO中斷捕獲,LPC1768的GPIO0以及GPIO2允許GPIO中斷,本設(shè)計(jì)采取GPIO2。且高電平信息有一個上升沿以及一個下降沿。因此通過兩者的時間差就可以獲取高電平時間,而后利用公式:

distance =(th*340)/2

獲取距離,其中distance表示的是超聲傳感器與障礙物之間的距離,th表示的是高電平持續(xù)的時間。340m/s為空氣中的聲速,超聲傳感器的速度與溫度會有一定關(guān)系,具體如下表1所示。由表格可見在常溫下速度變化不大,因此本設(shè)計(jì)直接取340m/s。

對于GPIO中斷需要捕獲上升沿以及下降沿信息,因此需要設(shè)置邊沿寄存器。設(shè)置部分代碼如下所示。FIODIR表示方向寄存器,IO2IntEnF為下降沿使能寄存器,而IO2IntEnR上升沿使能寄存器。所有LPC1768的GPIO中斷使用的是EINT3外部接口,所以最后使能中斷。

LPC_GPIO2->FIODIR&=~(1<<0);

LPC_GPIOINT->IO2IntEnF|=(1<<0);

LPC_GPIOINT->IO2IntEnR|=(1<<0);

NVIC_EnableIRQ(EINT3_IRQn);

對于超聲傳感器的時間我們采取定時器0計(jì)時。通過設(shè)置預(yù)分頻寄存器PR設(shè)置定時器計(jì)數(shù)寄存器TC 計(jì)數(shù)的時間。而后再每次上升沿以及下降沿的時候去獲取一下TC的值,通過兩次的TC的值之差以及定時器的時鐘計(jì)算出高電平的時間。

定時器初始化核心代碼為:

LPC_TIM0->CTCR=0; LPC_TIM0->PR=(25000000/20000)-1;

CTCR設(shè)置為定時器模式,設(shè)置每0.05ms計(jì)數(shù)一個TC。回波高電平時間點(diǎn)獲取。

if(LPC_GPIOINT->IO2IntStatR&(1<<0))

{Rise_time=LPC_TIM0->TC;}

else if(LPC_GPIOINT->IO2IntStatF&(1<<0))

{Fall_time=LPC_TIM0->TC;}

如果p2.0有上升沿的時候,記錄此時的定時器的計(jì)數(shù)值Rise_time,如果P2.0有下降沿的時候記錄此時的定時器的計(jì)數(shù)值Fall_time。

超聲傳感器探測的障礙與移動機(jī)器人的距離為

distance = (( Rise_time-Fall_time)*0.05)*340/2;

2.3 LCD顯示模塊

本設(shè)計(jì)使用LPC1768上的IIC0接口,通過串行總線傳輸數(shù)據(jù)。首先需要設(shè)置IIC的傳輸模式,中斷模式以及時鐘頻率。對于LPC1768 IIC0的時鐘頻率有標(biāo)準(zhǔn)模式速率為100M/s,快速模式 400Kbit/s,高速模式3.4Mbit/s.本設(shè)計(jì)采取標(biāo)準(zhǔn)模式100M/s,實(shí)驗(yàn)證明顯示數(shù)據(jù)沒有任何問題。而后初始化IIC,初始化LCD,由于我們計(jì)算的超聲距離為整形數(shù)據(jù),需要通過sprintf將其轉(zhuǎn)化為字符類型,再通過LCD1602_DispStr顯示距離。其部分代碼如下所示。

I2C_InitTypeDef I2C_InitStruct;

I2C_InitStruct.Mode = I2C_MASTER;

I2C_InitStruct.ClockRate = 100000;

I2C_InitStruct.InterruptMode 、

I2C_INTERRUPT_MODE;

I2C0_Init( &I2C_InitStruct );

Init_LCD1602();

sprintf(str,"%d",distance);

LCD1602_DispStr(0,6,str,16);

2.4 串口控制臺顯示模塊

本設(shè)計(jì)使用LPC1768的uart2作為與PC的超級終端連接的串口。首先初始化串口,設(shè)置波特率為115200,8位數(shù)據(jù)位,1位停止位。輸出和輸入使用函數(shù)指針指向uart2。

UART2_Init(UART_BAUD_115200);

xfunc_out=UART2_SendByte;

xfunc_in=UART2_GetByte;

xfunc_out是一個指向串口2的發(fā)送函數(shù)的函數(shù)指針,xfunc_in一個指向串口2的接收函數(shù)的函數(shù)指針。使用函數(shù)xprintf將超聲傳感器測出的距離獲取的數(shù)據(jù)顯示在超級終端上。

3 上位機(jī)串口通信終端軟件設(shè)計(jì)

上位機(jī)設(shè)計(jì)了一款自己的串口通信軟件而不是使用超級終端或SecureCRT。軟件采取的是Labwindows CVI軟件實(shí)現(xiàn)串口通信。

1)打開通信串口;2)串口初始化,串口設(shè)置串口通信。包括選擇串口、波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)參數(shù)的設(shè)置;3)實(shí)現(xiàn)和安裝串口通信的回調(diào)函數(shù);4)讀/寫串口的操作;5)關(guān)閉通信串口。

本文中使用GetCtrlVal函數(shù)獲取下拉框中選中的串口,波特率,奇偶校驗(yàn)等信息。使用函數(shù)OpenComConfig打開串口端口,使用SetCTSMode禁止硬件握手,使用FlushInQ,F(xiàn)lushOutQ清空接收和發(fā)送隊(duì)列。調(diào)用ComRd函數(shù)讀取LPC1768發(fā)過來的串口數(shù)據(jù)。調(diào)用SetCtrlVal函數(shù)將數(shù)據(jù)顯示在文本框中。

串口通信界面如下所示。

圖5中接收字符串可以接收來自LPC1768發(fā)往串口的數(shù)據(jù)。清空接收框則可以實(shí)時清除文本框中顯示得超聲傳感器的數(shù)據(jù)。數(shù)據(jù)顯示主要是會彈出另一個界面,該界面主要用于超聲傳感器獲取數(shù)據(jù)的處理,點(diǎn)擊退出則終止串口通訊。

4 實(shí)驗(yàn)數(shù)據(jù)結(jié)論

4.1 使用LCD1602顯示超聲傳感器數(shù)據(jù)

實(shí)驗(yàn)表明,使用LCD1602能夠很好的顯示獲取的數(shù)據(jù)。本設(shè)計(jì)設(shè)置超聲傳感器的測量距離為10cm到2m,超過范圍會顯示”out of range”。

4.2 使用串口控制臺顯示超聲傳感器數(shù)據(jù)

圖7實(shí)驗(yàn)為在移動機(jī)器人前方有一個固定的障礙物,開始的時候障礙物距離移動機(jī)器人為70cm,在機(jī)器人前進(jìn)的過程中距離信息基本能夠測出。

5 實(shí)驗(yàn)數(shù)據(jù)小結(jié)

本設(shè)計(jì)設(shè)計(jì)了使用超聲傳感器獲取了移動機(jī)器人前方障礙物信息,試驗(yàn)結(jié)果表明一般情況下可以獲取障礙物信息。但是超聲傳感器有其弱點(diǎn),譬如說鏡面反射等情況,未來會考慮使用多傳感器結(jié)合以更好的獲取移動機(jī)器人周圍的環(huán)境信息。

參考文獻(xiàn):

[1] 劉喜昂, 周志宇. 基于多超聲傳感器的機(jī)器人安全避障技術(shù)[J]. 測控技術(shù), 2003,23(2):71-73.

[2] 張永楓. 單片機(jī)應(yīng)用實(shí)訓(xùn)教程[M]. 北京:清華大學(xué)出版社, 2008.

[3] 周立功. ARM 嵌入式系統(tǒng)基礎(chǔ)教程[M]. 北京:北京航空航天大學(xué)出版社, 2005.

[4] 苗玲玉. 傳感器應(yīng)用基礎(chǔ)[M]. 北京:北京機(jī)械工業(yè)出版社, 2008.