吳浩然 萬民凱 徐卓凡 南京郵電大學海外教育學院
微處理器實驗設計:超聲波測距及顯示系統
吳浩然 萬民凱 徐卓凡 南京郵電大學海外教育學院
本次實驗設計,我們希望通過編程在模塊組件HYSRF05上實現超聲波測距并在LCD1602屏幕上顯示結果。
在行動之前,我們進行了一些構思。首先,我們設置了LCD1602的模式和顯示的靜態字,以便實現動態顯示結果。其次,我們從說明書中了解到,我們需要一個10us或以上的脈沖來啟動HY-SRF05模塊組件,然后模塊組件自己接收到一個脈沖和高電平經過周期(P)的數量,其中高電平經過的周期和模塊組件與它所面對物體間的距離是成比例的。接著,我們使用TimerA的捕獲寄存器來確定高電平經過周期(P)的數量,并將它儲存在另一個寄存器之中。在試驗中,我們用D = P ? 340 / (100000?2) m來代表距離。最后,我們用10000,1000,100,10取模,來將二進制數D換成十進制數,并且通過ASCII碼表轉換,將D顯示在LCD1602上。
構思之后,我就開始了設計與實驗。我們的MSP430界面圖如下

首先,我們將 P4 的全部 8個管腳和 P5.5,P5.6,P5.7用來控制LCD1602。
MOV.B #00H, &P4SEL
MOV.B #0FFh, &P4DIR
MOV.B #00H, &P5SEL
MOV.B #BIT5+BIT6+BIT7, &P5DIR
我們設置P6通過燈來檢測我們的程序
MOV.B #00H, &P6SEL
MOV.B #0FFh, &P6DIR
其次,如下是1602序列圖

通過圖表我們得知,如果我們想在LCD1602中寫入指令或數據,我們需要重置R/W,設置或重置RS然后讓E從高電平變為低電平從而寫入指令或數據。
然后,我們使用HY-SRF05模塊組件

這是HY-SRF05的測試模式序列圖。它需要一個10us 5V的脈沖來激活,然后它就會自動接收一個長度與距離成比例的脈沖。
它 的 鏈 接 方 式:1.VCC 2.trig(T) 3.echo(R) 4.OUT 5.GND
我們用CCR1的捕獲輸入P1.2來測量echo,然后我們用P1.4 來發出 10us脈沖。所以我們先設置 P1.2 和 P1.4.
BIC.B #BIT4 , &P1SEL BIS.B #BIT2 , &P1SEL
BIS.B #BIT4, &P1DIR
BIC.B #BIT2, &P1DIR
BIC.B #BIT4 , &P1OUT
在主要的功能中,我們向trig接口發送10us脈沖并添加延時以確保下一個trig在至少30ms之后。
BIS.B #BIT4, &P1OUT
MOV #2,R15
loop31: dec R15
JNZ loop31
BIC.B #BIT4, &P1OUT
MOV #20000,R15
loop32: dec R15
JNZ loop32
我們設置TimerA和CCR1來捕獲echo接口的信號
MOV #02E6H, &TACTL
MOV #4910H, &TACCTL1
接著,我們編寫中斷處理程序。我們首先確定了是CCR1產生了中斷,因為我們只使用了CCR1和TimerA,而且我們沒有啟動TimerA的中斷。然后我們確定了echo在上升沿還是下降沿到來,假設是上升沿,我們將&TACCR1儲存在R6中,當echo在下一個下降沿到來時,我們用R5儲存&TACCR1然后計算R5-R6。關鍵點在于,我們需要先捕獲上升沿信號再轉而捕獲下降沿信號。

最后是取模10000,1000,100,10。這一部分就是做除法,一個思路就是取模1000的余數就是取模100的被除數,以此類推。我們將得到的結果通過ASCII碼表轉化,再將數字動態的顯示在LCD1602上。
完成設計之后,我們根據設置連接管腳和HY-SRF05,并在LCD602上看到了想要的結果。
我們雖然實現了測距,但仍有不足和需要改進的地方。比如,我們儀器的精度還需要提高。我們假設這是由于兩個10us脈沖間的間隔造成的,在未來的實驗中我們會證明我們假設。再比如,我們的程序中沒有設定&TAR在大于65536時重置為0,這可能會產生一些問題,我們在未來的改進中將會加入相應字段。但是,我們的首要問題還是要確保有更好的精度。