12
生機三 老師讓我 PA B90611010 許友嘉 B90611024 黃思博 B90611036 廖珮妤 B90611045 周靖棠 2004/6/18

超音波測距 自 動 轉 車 - 國立臺灣大學nova.bime.ntu.edu.tw/~ttlin/Course15/PROJECT_2004/P2004... · 2004-07-10 · 結果 • 測試超音波發射與接收電路,參照圖1圖2:這部分的電路大致上是參考

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 超音波測距 自 動 轉 車 - 國立臺灣大學nova.bime.ntu.edu.tw/~ttlin/Course15/PROJECT_2004/P2004... · 2004-07-10 · 結果 • 測試超音波發射與接收電路,參照圖1圖2:這部分的電路大致上是參考

超超音音波波測測距距

自自 動動 轉轉 彎彎 車車

生機三

老師讓我 PA 隊

B90611010 許友嘉

B90611024 黃思博

B90611036 廖珮妤

B90611045 周靖棠

2004/6/18

Page 2: 超音波測距 自 動 轉 車 - 國立臺灣大學nova.bime.ntu.edu.tw/~ttlin/Course15/PROJECT_2004/P2004... · 2004-07-10 · 結果 • 測試超音波發射與接收電路,參照圖1圖2:這部分的電路大致上是參考

摘要 利用超音波測量距離,使自走車能感測前方障礙物的距離,自動轉彎達到閃

避效果。

前言

經過這學期的微處理機課程後, 我們學習了如何使用微處理晶片來控制和數學

運算的機制,在這次的計畫裡, 我們準備運用 89C51 這個功能強大的晶片來執

行測距、控制轉彎的功能。整個計畫中用到感測原理和微處理器原理,讓我們獲

得一次將課堂理論用來實做的機會。 背景資料 1. 使用現成的遙控車,拆掉遙控電路,只用外殼、輪子跟馬達 2. 用超音波發射器、接收器,及其匹配 89C51 的電路作為感測器 3. 使用 89C51 作為計算機 4. 使用 Keil C 寫程式、模擬 準備工作 1. 閱讀 89C51 的書,了解 89C51 的基礎知識及使用方法 2. 了解超音波電路的運作方法 3. 大略了解如何用 Keil C 模擬程式執行 研究方法 1. 先利用麵包板、電源供應器、示波器,測試超音波電路是否能運作 2. 熟悉 89C51 的使用方法、Keil C 使用方法,熟悉燒錄方法, 3. 寫程式 4. 將程式燒入 89C51,測試是否能依據我們的設計正常運作 5. 將電路移植到一般的電路板上,並測試是否正確 6. 連接馬達與電路板,並修改原本遙控車的電池裝置 7. 做最後的校正及外部包裝

Page 3: 超音波測距 自 動 轉 車 - 國立臺灣大學nova.bime.ntu.edu.tw/~ttlin/Course15/PROJECT_2004/P2004... · 2004-07-10 · 結果 • 測試超音波發射與接收電路,參照圖1圖2:這部分的電路大致上是參考

結果 • 測試超音波發射與接收電路,參照圖 1 圖 2:這部分的電路大致上是參考

眾益科技股份有限公司的超音波測距的套件裡的電路,我們有將電阻 R5 由

12K 改為 2K 歐姆,將 IC5 由 1010 改為 PC817,其餘大致相同。我們先將

超音波發射接收電路接在麵包板上,調整可變電阻 VR1,使其發射的超音

波為 40K Hz,利用示波器來測試結果。

圖 1 發射端電路

Page 4: 超音波測距 自 動 轉 車 - 國立臺灣大學nova.bime.ntu.edu.tw/~ttlin/Course15/PROJECT_2004/P2004... · 2004-07-10 · 結果 • 測試超音波發射與接收電路,參照圖1圖2:這部分的電路大致上是參考

圖 2 接收端電路

• 接上 89C51 電路:我們將超音波電路完成後,再接上 89C51 的 P3.6(WR,

active low)及 P3.7(RD,active low),由 89C51 來控制震盪電路作動,使送波

器發出超音波。如圖 3 收波器則是處於持續作動的狀態,不停地偵測是否

有訊號傳入。這部分的電路較不複雜,主要工作是確定 pin 腳是否有控制

訊號出入,我們在測試這部分時,是以外接一個 LED 的方式,並利用程

式設定當有訊號輸入時 LED 燈亮與否來判定。(有訊號時 LED 亮)

Page 5: 超音波測距 自 動 轉 車 - 國立臺灣大學nova.bime.ntu.edu.tw/~ttlin/Course15/PROJECT_2004/P2004... · 2004-07-10 · 結果 • 測試超音波發射與接收電路,參照圖1圖2:這部分的電路大致上是參考

圖 3 89C51 接腳圖

• 撰寫 Keil C 程式:由於之前有學長用 Keil C 寫過關於超音波測距的程式,

我們就參考學長的程式再予以修改,圖 4 為程式流程及原理。Keil C 跟組

合語言的差異是語法簡單,且容易除錯,在數學運算及訊號控制的使用上

都方便許多,是一種高階語言。撰寫程式完成後,我們將程式以電子是燒

錄方式來寫入 89C51 晶片,並再次測試到目前為止的電路的正確性。

Page 6: 超音波測距 自 動 轉 車 - 國立臺灣大學nova.bime.ntu.edu.tw/~ttlin/Course15/PROJECT_2004/P2004... · 2004-07-10 · 結果 • 測試超音波發射與接收電路,參照圖1圖2:這部分的電路大致上是參考

主程式

DELAY(延遲時間)

TEST_DISCOUNT(測距迴圈)

OSC_ON(震盪器ON)

LABLE(判斷是否接收到訊號)

TR0=1(打開計時器)

YES

DELAY(延遲時間)

OSC_OFF(震盪器OFF)

SIGNAL_IN=0 SIGNAL_IN=1

TR0=0(關掉TIMER)

DIS<=50(距離小於50cm)

NO

OUTLED=1MORTORR=0BUZZER=1

OUTLED=1MORTORR=0BUZZER=1

SET_IO

SET_TIMER

判斷溢位旗標是否溢位(TF0)

TF0=0

TF0=1

OUTLED=0MORTORR=1BUZZER=0

溢位旗標設回初值(TF0=0)

TR0=0(關掉TIMER)

圖 4 程式方塊流程圖

• 加入馬達控制電路:以上步驟完成後,我們再加入兩顆繼電器連接兩顆直

流馬達,繼電器由 89C51 控制切換,當電路偵測到距離小於 50cm 時,89C51

會切斷 ON 的訊號控制右輪馬達停止轉動,使車子往右轉。由於馬達為直

流,車子是以等速前進。

• 將電路焊接在 IC 板上:以上電路部份全部完成後,我們獎所有元件組裝、

Page 7: 超音波測距 自 動 轉 車 - 國立臺灣大學nova.bime.ntu.edu.tw/~ttlin/Course15/PROJECT_2004/P2004... · 2004-07-10 · 結果 • 測試超音波發射與接收電路,參照圖1圖2:這部分的電路大致上是參考

排列,並焊接在 IC 板上,並重新確認焊接是否有短路問題。

• 修改車體電源:經由先前測試過程,我們發現若使用同一電源來驅動

89C51 和馬達,馬達會產稱電磁感應而干擾控制訊號,所以我們稍微將車

體的電池座作修改,將原本的電源分為一個 3V(兩個 1.5V 串聯)驅動馬達,

和一個 9V(4 個 1.5V 串聯)驅動 89C51。我們為了不讓馬達轉速過高,因此

以較小的電壓來驅動馬達,而 89C51 具有一個 5V 穩壓器,我們提供高一

點的電壓,經穩壓器後產生一個相當穩定的電源來驅動晶片。穩壓器會產

生大量熱能,需外加一片散熱片。 • 外部包裝:將電路板放進車體後,我們將車蓋加上去(車體是戰車),並將

LED 拉線致車體外部。我們將車前燈蓋拔除,將送收波器震動子接線致車

前燈前方。所有硬體和軟體部分到此全部完成。

結論

1. 由實驗結果,發現超音波接收端的接收仍有死點,當行進方向與障礙物面

成 30 度到 45 度時,發射出的超音波容易因反射而無法接收,理論上,可

以裝設多個不同角度的接收端(與原接收端成 30 度到 45 度),以接收大角

度反射回來的音波。 2. 由於時間較短,此專案為了簡化電路,只設計遇到障礙物時向固定之方向

(右邊)轉彎,改進方法可安裝 SWITCH 以切換轉換方向。 3. 原本要加裝蜂鳴器,但因為 CPU 供應之功率太小,導致聲響極小,幾乎

聽不到,故將之拆除。改進方法為將 CPU 之訊號視為蜂鳴器電路之

SWITCH,另外供給蜂鳴器功率即可順利驅動,如 RELAY 電路。 4. 8051 及其他各個 IC 的最適供應電壓為 5V,但由電池和提供之電壓為

4.5V、6V 或 7.5V,故裝設 7805 穩壓電路,將電壓固定在 5V,且不亦隨

其他元件而漂變,以穩定 IC 之電源。

參考文獻

1. 益眾公司,超音波模組設計電路,http://www.icci.com.tw。 2. 博士班胡建威學長,RELAY 電路。 3. 學士班郭志彬學長,超音波程式。

Page 8: 超音波測距 自 動 轉 車 - 國立臺灣大學nova.bime.ntu.edu.tw/~ttlin/Course15/PROJECT_2004/P2004... · 2004-07-10 · 結果 • 測試超音波發射與接收電路,參照圖1圖2:這部分的電路大致上是參考

4. 7805 datasheet,http://www.eckhard-gosch.de/download/7805.pdf。 5. TLC555datasheet

http://neptune.lisa.univparis12.fr/Electronik/DataSheets/TLC-555.pdf。 6. 鄧錦城。1995。8051 單晶片實作寶典。

附錄 超音波原理::超音波在氣體、液體中為縱波,在固體則為橫波,在行進時遇到

不同性質的物質就會引起反射。其波常特性可歸納如下:

由於波長短,指向性強,能量集中,能增加方向分解能。 震動速高,可得巨大加速度。 大部分音響功率碰到音響阻抗不同的物質介面將被反射------利用此性質可

進行物質探知和距離量測。

超音波元件:空中超音波送受波器是用來量測距離的一組配件,其使用頻率一般

為 20~40K Hz,適用距離為 2~5m。形式多為高音用揚聲器、圓形筒、瓷質振動子

等,但我們這裡使用的是感度高且便宜的雙型態瓷質振動子和單一型態振動子

的。

超音波發射及接收電路:我們利用一個適用 40K Hz 的震盪電路來產生超音波,

再由送波器將波發射出;和一組濾波放大電路來接收由受波器接收反射回來的波

所產生的訊號,如下圖所示:

89C51 電路:我們所使用的 Microprocessor 為 89C51,利用其運算功能和輸出入埠

的應用來計算距離和控制 on,off 訊號。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 超音波量測 1cm 的時間: 58 us // // 震盪器為 11.0592 KHZ // // 脈波週期為 12/11.0592kHz=1.085 us // // MODE1 最長計時時間: 1.085*65536=71106.56 us // // 最長量測距離:71106.56/58 = 1225cm // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include<AT89X51.h> sbit OUTLED = P1^0; //控制 LED 燈 sbit MOTORL = P1^1; //控制左馬達 sbit MOTORR = P1^2; //控制右馬達 sbit BUZZER = P1^3; //控制蜂鳴器 sbit OSC_CONT = P3^6; //控制震盪器

Page 9: 超音波測距 自 動 轉 車 - 國立臺灣大學nova.bime.ntu.edu.tw/~ttlin/Course15/PROJECT_2004/P2004... · 2004-07-10 · 結果 • 測試超音波發射與接收電路,參照圖1圖2:這部分的電路大致上是參考

sbit SIGNAL_IN = P3^7; //超音波訊號從這裡進入 unsigned char data TH_BUF; unsigned char data TL_BUF; unsigned long DIS; //---------------------------------------------------- // delay 迴圈 ( delay time= i * 20 us ) //---------------------------------------------------- void delay(int i) { TH1=(256-17); TL1=(256-17);

TR1=1; while(i!=0) { while(TF1!=1); { TF1=0; } i--; } TR1=0;

} //---------------------------------------------------- //設定 T0 為 MODE1 //---------------------------------------------------- void SET_T0() { TMOD=0x21; //TIMER0 是 MODE1,TIMER1 是 MODE2 TH0=0x00; TL0=0x00; } //---------------------------------------------------- // 555 輸出 40KHZ 方波

Page 10: 超音波測距 自 動 轉 車 - 國立臺灣大學nova.bime.ntu.edu.tw/~ttlin/Course15/PROJECT_2004/P2004... · 2004-07-10 · 結果 • 測試超音波發射與接收電路,參照圖1圖2:這部分的電路大致上是參考

//---------------------------------------------------- void OSC_ON() { OSC_CONT=1; // 開啟 555 震盪器 } //----------------------------------------------------- // 555 輸出 OFF //----------------------------------------------------- void OSC_OFF() { OSC_CONT=0; // 關掉 555 震盪器 } //----------------------------------------------------- // I/O PORT 初值設定 //----------------------------------------------------- void SET_IO() { OSC_OFF(); SIGNAL_IN=1; OUTLED=0 ; MOTORR=1 ; MOTORL=1 ; BUZZER=0 ; } //--------------------------------------------------- //計算距離 //--------------------------------------------------- void CONV_TO_RAM() { TH_BUF=TH0; TL_BUF=TL0; DIS= TH_BUF*256+TL_BUF; DIS=DIS*1.085/58;

Page 11: 超音波測距 自 動 轉 車 - 國立臺灣大學nova.bime.ntu.edu.tw/~ttlin/Course15/PROJECT_2004/P2004... · 2004-07-10 · 結果 • 測試超音波發射與接收電路,參照圖1圖2:這部分的電路大致上是參考

if ( DIS <= 50 ) //若距離小於 50cm { OUTLED = 1 ;

MOTORR = 0 ; BUZZER = 1 ; } else { OUTLED = 0 ;

MOTORR = 1 ; BUZZER = 0 ; } } //----------------------------------------------------- // 超音波測距 //----------------------------------------------------- void TEST_DISCONT() { OSC_ON(); TR0=1; //Timer0 啟動,用來算距離 delay(12); OSC_OFF(); delay(120); label1: if(SIGNAL_IN==0) //SINGAL_IN==0 表示接收到訊號 { TR0=0 ; CONV_TO_RAM(); // 算出距離,決定馬達動作 } else { if(TF0==0) //TF==1 超過暫存器容量

Page 12: 超音波測距 自 動 轉 車 - 國立臺灣大學nova.bime.ntu.edu.tw/~ttlin/Course15/PROJECT_2004/P2004... · 2004-07-10 · 結果 • 測試超音波發射與接收電路,參照圖1圖2:這部分的電路大致上是參考

{ goto label1; } MOTORR = 1 ; OUTLED = 0 ; BUZZER = 0 ; TF0=0; TR0=0; //關掉 Timer0 delay(40); } TH0=0x00; //計時器歸零 TL0=0x00; } //----------------------------------------------------- // 主程式 //----------------------------------------------------- void main() { SET_IO(); SET_T0();

while(1)

{ delay(20000); TEST_DISCONT(); } }