張燕
摘要:本設計介紹了LPC1768的的定時器捕獲功能在移動機器人障礙探測中的使用。設計了移動機器人探測周圍環(huán)境障礙的軟硬件,應用超聲傳感器獲取周圍的障礙物信息,通過算法計算出障礙物與移動機器人的位置信息,從而獲取移動機器人前方障礙信息,為了更好的顯示障礙物距離,使用LCD1602實時顯示障礙物距離。
關鍵詞:超聲傳感器;LPC1768;捕獲
中圖分類號:TP751 文獻標識碼: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
隨著移動機器人的不斷發(fā)展, 其應用領域也越來越廣泛。由于移動機器人周圍環(huán)境往往是不可預測的, 對于自主移動機器人,能否感知周圍環(huán)境的信息直接 決定了移動機器人是否可以自主運行[1]。
目前移動機器人常用的測距方法有超聲測距、激光測距、紅外測距、微波測距等。其中超聲波測距就是利用壓電效應將電脈沖與機械諧振產生的超聲波相互轉化而構成的發(fā)射與接收裝置,也成為超聲波換能器或超聲波探頭,它包括發(fā)送探頭和接收探頭兩部分。通過發(fā)射探頭將40kHz的電脈沖信號轉換為機械諧振而產生超聲波,實現(xiàn)將電能轉換為機械能的轉換,而接收探頭則是將超聲波引起的機械振動再轉換成電脈沖信號[2]。
1 系統(tǒng)組成和結構
本系統(tǒng)主要由LPC1768,超聲收發(fā)模塊,LCD顯示模塊構成。
LPC1768[3]是NXP 公司推出的基于ARM Cortex-M3 內核的微控制器LPC17XX 系列中的一員。操作頻率可達100MHz, 外設組件包含高達512KB 的flash 存儲器、4個UART、3個IIC 接口、4個通用定時器等,獨立電池供電的超低功耗RTC 和多達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。為了更好的顯
示數據,同時還將超聲獲取的距離信息通過串口控制臺顯示在PC的終端上。
2 系統(tǒng)軟件的設計
2.1系統(tǒng)總體設計流程
本設計采取P0.0與超聲模塊控制口trig相連,定期給此端口一個10us以上的高電平來使能超聲模塊。利用定時器timer0以及捕獲的p2.0端口的上升以及下降沿的定時器計數值,獲取echo口高電平持續(xù)的時間,在中斷服務程序中計算出障礙物距離。計算出來的障礙物距離通過LCD1602以及超級終端均可以顯示。
2.2 超聲傳感器模塊軟件設計
信號線TRIG為控制端,每當我們通過此信號線發(fā)送10us以上的高電平,系統(tǒng)便可發(fā)出8個40KHZ的超聲波脈沖,然后Echo檢測回波信號[4]。Echo 端輸出一高電平, 可根據此高電平的持續(xù)時間來計算距離值,具體時序如圖4所示。
本設計采取一個GPIO端口P0.0發(fā)送10us的高電平信息由于我們需要通過捕獲echo端口有無高電平信息 ,以及高電平信息的持續(xù)時間,在LPC1768上中斷有外部中斷以及GPIO中斷。由于需要捕獲高電平信息,所以考慮采用GPIO中斷捕獲,LPC1768的GPIO0以及GPIO2允許GPIO中斷,本設計采取GPIO2。且高電平信息有一個上升沿以及一個下降沿。因此通過兩者的時間差就可以獲取高電平時間,而后利用公式:
distance =(th*340)/2
獲取距離,其中distance表示的是超聲傳感器與障礙物之間的距離,th表示的是高電平持續(xù)的時間。340m/s為空氣中的聲速,超聲傳感器的速度與溫度會有一定關系,具體如下表1所示。由表格可見在常溫下速度變化不大,因此本設計直接取340m/s。
對于GPIO中斷需要捕獲上升沿以及下降沿信息,因此需要設置邊沿寄存器。設置部分代碼如下所示。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計時。通過設置預分頻寄存器PR設置定時器計數寄存器TC 計數的時間。而后再每次上升沿以及下降沿的時候去獲取一下TC的值,通過兩次的TC的值之差以及定時器的時鐘計算出高電平的時間。
定時器初始化核心代碼為:
LPC_TIM0->CTCR=0; LPC_TIM0->PR=(25000000/20000)-1;
CTCR設置為定時器模式,設置每0.05ms計數一個TC?;夭ǜ唠娖綍r間點獲取。
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有上升沿的時候,記錄此時的定時器的計數值Rise_time,如果P2.0有下降沿的時候記錄此時的定時器的計數值Fall_time。
超聲傳感器探測的障礙與移動機器人的距離為
distance = (( Rise_time-Fall_time)*0.05)*340/2;
2.3 LCD顯示模塊
本設計使用LPC1768上的IIC0接口,通過串行總線傳輸數據。首先需要設置IIC的傳輸模式,中斷模式以及時鐘頻率。對于LPC1768 IIC0的時鐘頻率有標準模式速率為100M/s,快速模式 400Kbit/s,高速模式3.4Mbit/s.本設計采取標準模式100M/s,實驗證明顯示數據沒有任何問題。而后初始化IIC,初始化LCD,由于我們計算的超聲距離為整形數據,需要通過sprintf將其轉化為字符類型,再通過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 串口控制臺顯示模塊
本設計使用LPC1768的uart2作為與PC的超級終端連接的串口。首先初始化串口,設置波特率為115200,8位數據位,1位停止位。輸出和輸入使用函數指針指向uart2。
UART2_Init(UART_BAUD_115200);
xfunc_out=UART2_SendByte;
xfunc_in=UART2_GetByte;
xfunc_out是一個指向串口2的發(fā)送函數的函數指針,xfunc_in一個指向串口2的接收函數的函數指針。使用函數xprintf將超聲傳感器測出的距離獲取的數據顯示在超級終端上。
3 上位機串口通信終端軟件設計
上位機設計了一款自己的串口通信軟件而不是使用超級終端或SecureCRT。軟件采取的是Labwindows CVI軟件實現(xiàn)串口通信。
1)打開通信串口;2)串口初始化,串口設置串口通信。包括選擇串口、波特率、數據位、停止位、奇偶校驗參數的設置;3)實現(xiàn)和安裝串口通信的回調函數;4)讀/寫串口的操作;5)關閉通信串口。
本文中使用GetCtrlVal函數獲取下拉框中選中的串口,波特率,奇偶校驗等信息。使用函數OpenComConfig打開串口端口,使用SetCTSMode禁止硬件握手,使用FlushInQ,F(xiàn)lushOutQ清空接收和發(fā)送隊列。調用ComRd函數讀取LPC1768發(fā)過來的串口數據。調用SetCtrlVal函數將數據顯示在文本框中。
串口通信界面如下所示。
圖5中接收字符串可以接收來自LPC1768發(fā)往串口的數據。清空接收框則可以實時清除文本框中顯示得超聲傳感器的數據。數據顯示主要是會彈出另一個界面,該界面主要用于超聲傳感器獲取數據的處理,點擊退出則終止串口通訊。
4 實驗數據結論
4.1 使用LCD1602顯示超聲傳感器數據
實驗表明,使用LCD1602能夠很好的顯示獲取的數據。本設計設置超聲傳感器的測量距離為10cm到2m,超過范圍會顯示”out of range”。
4.2 使用串口控制臺顯示超聲傳感器數據
圖7實驗為在移動機器人前方有一個固定的障礙物,開始的時候障礙物距離移動機器人為70cm,在機器人前進的過程中距離信息基本能夠測出。
5 實驗數據小結
本設計設計了使用超聲傳感器獲取了移動機器人前方障礙物信息,試驗結果表明一般情況下可以獲取障礙物信息。但是超聲傳感器有其弱點,譬如說鏡面反射等情況,未來會考慮使用多傳感器結合以更好的獲取移動機器人周圍的環(huán)境信息。
參考文獻:
[1] 劉喜昂, 周志宇. 基于多超聲傳感器的機器人安全避障技術[J]. 測控技術, 2003,23(2):71-73.
[2] 張永楓. 單片機應用實訓教程[M]. 北京:清華大學出版社, 2008.
[3] 周立功. ARM 嵌入式系統(tǒng)基礎教程[M]. 北京:北京航空航天大學出版社, 2005.
[4] 苗玲玉. 傳感器應用基礎[M]. 北京:北京機械工業(yè)出版社, 2008.