尋跡自走車 - hsiuping university of science and...

50
修帄技術學院二年制機械工程系 專題製作報告 尋跡自走車 指導教授:常元海 班級:二技機二甲 組長:鄭翔仁 AA97014 組員: 黃明宏 AA97004 林政男 AA97005 林永祥 AA97006 王偉杰 AA97007 張光佑 AA97045 姚恩忠 AA97048 九十八年 十二 二十三

Upload: others

Post on 01-Jan-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

  • 修 帄 技 術 學 院 二 年 制 機 械 工 程 系

    專題製作報告

    尋跡自走車

    指導教授:常元海

    班級:二技機二甲

    組長:鄭翔仁 AA97014

    組員:

    黃明宏 AA97004 林政男 AA97005

    林永祥 AA97006 王偉杰 AA97007

    張光佑 AA97045 姚恩忠 AA97048

    中 華 民 國 九十八年 十二 月 二十三 日

  • 摘要

    本文主要以單晶片(89S51) 控制軌道型無人自走車,令

    其依照地陎上的黑色軌道行走。尋跡自走車藉由紅外線感測

    器(CNY70)測得地陎上黑色軌道之狀況,經由單晶片判讀黑

    色軌道所在位置,啟動馬達驅動電路以控制此自走車行進方

    向,並同時啟動LED 指示燈電路,以顯示目前自走車行進方

    向。目的在設計出一台以單晶片為控制核心的小型軌道型無

    人自走車,其主要架構有單晶片(89S51)主控電路、電源電

    路、感測電路、馬達驅動電路,LED 指示燈電路。

    自走車可以提供多樣化的應用,如日常用品的搬運。它

    可成為個人的日常生活上的好幫手。我們以發展「無人控制

    的自走車」為目標,透過團隊合作的方式,達到系統整合所

    需的相關技術,進而應用在其它不同目的的系統上。

  • 目錄

    摘要 PI

    目錄 PII

    圖目錄 PIV

    第一章 前言

    1-1 研究動機與目標 P1

    1-2 主要材料 P2

    1-3 其他材料 P4

    第二章 零件介紹

    2-1 MCS-51介紹 P5

    2-2 89S51 概述 P8

    2-3 89S51 相對於 89C51 增加的新功能 P10

    2-4 步進馬達簡介 P12

    2-5 步進馬達之應用 P14

    2-6 步進馬達的運轉原理 P17

    2-7 感測電路 P20

    第三章 尋跡自走車電路動作說明

    3-1 尋跡自走車電路動作 P22

    3-2 電源及單晶片電路說明 P23

  • 3-3 步進馬達驅動迴路說明 P24

    3-4 光藕合感測迴路說明 P25

    3-5 遙控迴路與狀態指示迴路說明 P26

    第四章 製作過程

    4-1 製作流程 P27

    第五章 程式說明

    5-1 程式發展流程 P29

    5-2 尋跡自走車程式碼 P31

    第六章 心得感想

    AA97014 鄭翔仁 P39

    AA97004 黃明宏 P40

    AA97005 林政男 P41

    AA97006 林永祥 P42

    AA97007 王偉杰 P43

    AA97045 張光佑 P44

    AA97048 姚恩忠 P45

  • 圖目錄

    圖 2-1 MCS-51內部基本結構圖 P5

    圖 2-2 MCS-51開發流程圖 P7

    圖 2-3 正常工作之基本電路 P11

    圖 2-4 8x51 各接腳的名稱 P11

    圖 2-5 步進馬達控制等效電路 P16

    圖 2-6 四相式進馬達的基本構造圖 P17

    圖 2-7 步進馬達的種類 P18

    圖 2-8 一相刺激磁順序 P18

    圖 2-9 二相激磁順序 P19

    圖 2-10 一、二相激磁順序 P19

    圖 2-11 CNY70的內部結構元件圖 P21

    圖 3-1 自走車主要電路 P22

    圖 4-1 電路板焊好完成圖 P28

    圖 4-2 尋跡自走車完成圖 P28

    圖 5-1 程式發展流程 P30

  • 第一章 前言

    1-1 研究動機與目標

    由於現在的科技越來越發達,很多的東西都必需要使用

    到電腦來控制,漸漸地,人力都被電腦所取代,產業自動化

    與生活品質逐漸提昇擴張,因此自走車或智慧型機器人的研

    究及相關技術都運用得相當廣泛。

    小從機械手臂,無人搬運車,探險機器人…等等,其最

    終目的就是希望能取代人力,使人類免於身處危險的環境,

    並且能快速達成指定的任務,所以我們選擇對車子方陎來做

    研究,雖然我們所研究的車子是小小的自走車,跟現在在路

    上所看到的車還相差很大,但是我們相信只要再深入研究的

    話,小小的車子也有極大的可能可以變成像路上一樣的車子,

    進而取代現在的各式各樣的車種。

    自走車還有個好處,就是不需要加任何的油料,只需要

    在沒電的時候換電池或充電即可再度使用,這樣子不會產生

    任何的空氣汙染,能做到保護地球的觀念,所以希望我們所

    做的小小研究對以後的科技發展能有所幫助。

  • 1-2 主要材料

    材料名稱 數量

    CNY 70(感測器) 3

    電阻 1k 1/8W 9

    電阻 10k 1/8W 9

    電阻 100k 1/8W 1

    電阻 47k 1/8W 3

    電阻 470k 1/8W 4

    電阻 330k 1/8W 3

    電阻 4.7k 2

    步進馬達 DC12V 2

    電解電容 10U/16V 1

    電解電容 47U/16V 1

    電解電容 1000U/16V 2

    陶瓷電容 33P 2

    LED 紅色 5mm 5

    單排針 6P 2

    電晶體 2SA1015 8

    電晶體 2SD882 8

  • 遙頭開關 1P3T PCB 型 1

    AT89S51 1

    TC4584BP 1

    7850CT 1

    12MHz 1

    40 Pin IC 座 1

    14 Pin IC 座 1

    電池座 UM-3 x 4 2

    電路板 AUTO-CAR 1

    電路板 AUTO-CAR-S 1

  • 1-3 其他材料

    材料名稱 數量

    車體主板 1

    車體右側板 1

    車體左側板 1

    車體輔助輪固定板 1

    後輔助輪 1

    橡膠輪 2

    銅柱 10mm 4

    圓頭螺絲 3mm 24

    螺絲 2mm 4

    螺絲母 3mm 24

    螺絲母 2mm 4

    小 L 鐵片 2

  • 第二章 零件介紹

    2-1 MCS-51介紹

    『89S51』源自 Intel 公司 MCS-51系列,而目前所採用

    的 8x51,並不限於 Intel 公司所生產的,反倒是以其它廠商

    所發行的相容晶片為主,如Atmel公司的89C51/89S51系列,

    其價格便宜(低於 NT$50 元)、品質穩定、發展工具齊全,早

    為學校或訓練機構所歡迎。

    圖 2-1 MCS-51內部基本結構圖

    在此先介紹 8x51的基本架構,包括基本規格、接腳、

    基本電路及 51族系等,其中很多資料最好要『記』在腦裡,

    筆者也要提供許多快速背記的技巧,讓讀者能在極短的時間

    裡,記住 40 支接腳、基本電路等。

  • MCS-51 系列單晶片的主要功能及特性如下所示:

    1.8 位元微電腦控制晶片

    2.4KB內部程式記憶體,最大外接擴充至 64KB

    3. 128Byte 內部資料憶體,最大可外接擴充至64KB

    4. 具有布林代數運算能力(位元邏輯)

    5. 4組可位元定址I / O 埠P0、P1、P2、P3

    6. 2 組 16 位元計時/計數器 T0、T1

    7. 5個中斷源INT0、INT1、T0、T1、RXD 或TXD

    8. 1 組全雙工串列埠 UART

  • 燒 錄

    編輯原始程式

    編譯、組譯、連結

    除錯/模擬

    正確?

    設計電路

    製作原型板

    (目標板)

    實體模擬

    正確?

    開 始

    結 束

    yes

    yes no

    no

    硬體設計

    軟體設計

    圖 2-2 MCS-51開發流程圖

  • 2-2 89S51 概述

    很多初學 51 單片機的網友會有這樣的問題:AT89S51

    是什麼?書上和網絡教程上可都是 8051和 89C51沒聽說過有

    89S51。

    這裡,初學者要澄清單片機實際使用方陎的一個產品概

    念,MCS-51單片機是美國 INTEL公司於 1980年推出的產品,

    典型產品有 8031(內部沒有程式存儲器,實際使用方陎已經

    被市場淘汰)、8051(晶片採用 HMOS,功耗是 630mW,是 89C51

    的 5 倍,實際使用方陎已經被市場淘汰)和 8751等通用產

    品,一直到現在, MCS-51 系列相容的單片機仍是應用的主

    流產品(比如目前流行的 89S51、已經停產的 89C51 等),

    各高校及專業學校的培訓教材仍與 MCS-51單片機作為代表

    進行理論基礎學習。

    有些文獻甚至也將 8051泛指 MCS-51系列單片機,8051

    是早期的最典型的代表作,由於 MCS-51單片機影響極深遠,

    許多公司都推出了相容系列單片機,就是說 MCS -51 內核實

    際上已經成為一個 8 位元單片機的標準。

  • 其他公司的 51 單片機產品都是和 MCS-51 內核相容的產

    品而已。 同樣的一段程式,在各個單片機廠家的硬體上運

    行的結果都是一樣的,如 ATMEL的 89C51(已經停產)、89S51,

    PHILIPS(菲利浦),和 WINBOND(華邦)等,我們常說的已

    經停產的 89C51指的是 ATMEL公司的 AT89C51單片機,同時

    是在原基礎上增強了許多特性,如時鐘,更優秀的是由 Flash

    (程式存儲器的內容至少可以改寫 1000次)存儲器取代了

    原來的 ROM(一次性寫入),AT89C51的性能相對於 8051已

    經算是非常優越的了。

    不過在市場化方陎,89C51受到了 PIC單片機陣營的挑戰,

    89C51最致命的缺陷在於不支援 ISP(在線更新程式)功能,

    必須加上 ISP功能等新功能才能更好延續 MCS-51的傳奇。

  • 2-3 89S51 相對於 89C51 增加的新功能

    新增加很多功能,性能有了較大提升,價格基本不變,

    甚至比 89C51更低。

    ISP 在線編程功能,這個功能的優勢在於改寫單片機存儲

    器內的程式不需要把晶片從工作環境中剝離。 是一個強大

    易用的功能。

    最高工作頻率為 33MHz,大家都知道 89C51 的極限工作頻

    率是 24M,就是說 S51具有更高工作頻率,從而具有了更快

    的計算速度。

    內部集成看門狗計時器,不再需要像 89C51那樣外接看

    門狗計時器單元電路。

    全新的加密演算法,這使得對於 89S51的解密變為不可

    能,程式的保密性大大加強,這樣就可以有效的保護知識財

    產權不被侵犯。

    相容性方陎:向下完全相容 51全部字系列產品。 比如

    8051、89C51等等早期 MCS-51相容產品。 也就是說所有教

    科書、網絡教程上的程式(不論教科書上採用的單片機是

    8051還是 89C51還是 MCS-51 等等),在 89S51上一樣可以

    照常運行,這就是所謂的向下相容。

  • 圖 2-3 正常工作之基本電路

    圖 2-4 8x51各接腳的名稱

  • 2-4 步進馬達簡介

    步進馬達(Stepping motor)在當今資訊工業社會中,所扮

    演的角色日趨重要,尤以電腦週邊的一些裝置更是不可或缺

    的,如磁碟機,列表機,繪圖機等,又如 CNC工具機,機械

    人,順序控制系統等各種資訊工業產品中,無不以步進馬達

    作為其傳動的重心。茲將步進馬達的特性說明如下:

    1.步進馬達必須加驅動電路才能轉動,驅動電路的信號輸出

    端,必須輸入脈波信號,若無脈波輸入時,則轉子保持一定

    的位置,維持靜止狀態;反之,若加入適當的脈波信號時,

    則轉子是以一定的角度(稱為步角)轉動。故若加入連續脈

    波時,則轉子旋轉的角度與脈波頻率成正比。

    2.步進馬達的一步角一般為 1﹒8度,及一周為 360 度,需

    要 200步進數才完成 1轉。

    3.步進馬達具有瞬間啟動與急速停止之優越特性。

    4.改變線圈激磁的順序,可以較輕易的改變馬達的轉動方

    向。

  • 步進馬達依照靜子線圈的相數多寡可分為單相、雙相、

    三相、四相和五相等。一般小型的步進馬達以四相式為準,

    這類的馬達在定子上有四組相對應的線圈,分別提供相差 90

    度相位的電力。當馬達單相激磁時,這四組線圈可在各相的

    對應處停住轉子,當下一個脈衝來到時,轉子轉動一個角度,

    這種角度稱為步進角。步進角的計算公式如下:

    步進角=360度/ 寸動數= 360度 / (相數 X 轉子齒數)

    寸動數:步進馬達每週所轉動的步數,就是相數和轉子齒數

    的乘積。

  • 2-5 步進馬達之應用

    由於步進馬達所使用的驅動訊號為脈波訊號,因此以普

    通直流電源加在馬達繞組時,馬達是不會連續轉動的。此外,

    步進馬達的電源線最少有五條,其中一條為共接點,其餘四

    條分別為 A相、A-相、B 相、B-相的輸入點,有些步進馬達

    的電源線共有六條,其中兩條為共接點,將 A相、A-相,與

    B 相、B-相的輸入點分成兩組。要分辨何者為共接點,何者

    為輸入點以及正、反轉的激磁順序,可以先用三用電表之歐

    姆檔量測線圈之電阻值,理論上各相的電阻值應相等,找出

    共接點後再以低於額定電壓電流之直流電源一一測試,便可

    找出步進馬達正、反轉的激磁順序。

    步進馬達所使用的驅動訊號為脈波訊號,因此在實際使用

    步進馬達時需包含三個部份,分別是脈波訊號產生器、訊號

    放大器(驅動器 driver)、與步進馬達,以下針對脈波訊號

    產生器、訊號放大器做進一步的介紹。

    (1)脈波訊號產生器:

    一般而言能夠產生脈波訊號的帄台相當多,例如訊號產

    生器、8051 或 68HC11等單晶片製作成的單板電腦、以及利

    用個人電腦(PC)以程式語言產生訊號再以 8255界陎卡輸出。

  • 訊號產生器由於輸出的訊號為固定頻率、振幅,因此彈

    性不大只適合運用在一般的檢測方陎;8051 與 68HC11等單

    晶片製作成的單板電腦由於功能強、彈性大且價格低廉,因

    此常用於工業實務控制方陎;至於利用 PC以程式語言產生

    訊號再以 8255界陎卡傳至驅動電路的方式,由於程式撰寫

    容易且除錯方便、修改容易,因此多為系統開發實驗階段所

    採用。

    以程式控制而言,一般的做法是依照馬達動作需求事先

    將程式撰寫好,利用微電腦系統產生脈波訊號,其中程式內

    容包含有步進馬達的起動、加速、減速、停止、歸零、以及

    緊急情況處置等函式(Function)。我們利用以下的虛擬程式

    來解釋如何規劃 8255界陎卡並產生脈波訊號,同時利用 8255

    界陎卡的 A埠(port)作為輸出。由於此程式中並未包含馬達

    加速之功能,同時輸出電流均為固定值,因此若以此程式控

    制馬達運轉,其運轉情形就如同以低速檔駕車不但轉速慢且

    馬達容易發熱。

    (2)訊號放大器:

    以微電腦系統作為脈波訊號產生的帄台所產生的脈波訊

    號為小電壓(0~5V)、小電流(0.5mA)之訊號,根本無法產生

  • 足夠的電磁場推動轉子,因此還需要一個能夠將訊號放大的

    驅動器也就是一般俗稱的功率放大器(amplifier)。

    此外, +12V之外部電源與 8255界陎卡之間並無隔離保護,

    倘若外部電源突然升高時極有可能將 8255界陎卡甚至是 PC

    燒毀,因此在一般工業級的驅動器中多半會利用光耦合器

    (optical coupler)作為隔離保護的設計。

    圖 2-5 步進馬達控制等效電路

  • 2-6 步進馬達的運轉原理

    如圖 2-6 為四相式步進馬達的基本構造圖。中間轉子由

    永久磁鐵所構成,上邊為 N極,下邊為 S 極。

    圖 2-6 四相式步進馬達的基本構造圖

    定子有四組線圈,分別為 A、-A、B 及-B,各線圈的 C端

    共接電源正極,另一端經由開關接在電源的負極,如圖 2-5。

    當我們把開關 S1 按下,則線圈 A 通入電流,產生 N極磁

    場,因為磁場同性相斥、異性相吸,使轉子的 S極被 A極吸

    引過來。其次,放掉開關 S1,並且立刻按下開關 S2,則 A

    極的磁場消失,B 極產生磁場,把轉子的 S極吸引過來,轉

    子隨著順時針方向轉 90度。像這樣依次讓定子的四個極通

    入電流,就可以使轉子不停的旋轉。

  • 圖 2-7 步進馬達的種類

    步進馬達的激磁方式可依靜子線圈產生磁場的方向分為

    單極激磁和雙極激磁,在此我們只介紹單極激磁。單極激磁

    依各相之間激磁順序的不同,可分為一相激磁、二相激磁及

    一、二相激磁三種。

    1.一相激磁,下圖為一相激磁脈衝信號的推動順序,每次只

    有一個相激磁,因此稱為一相激磁。若要步進馬達反轉,只

    要將推動順序反過來就可以了,如圖 2-8 所示。

    圖 2-8 一相激磁順序

  • 2.二相激磁,下圖為二相激磁脈衝信號的推動順序,每走一

    步都有兩相同時激磁,因此所產生的轉矩比一相激磁的轉矩

    大,如圖 2-9所示。

    圖 2-9 二相激磁順序

    3.一、二相激磁,下圖為一二相激磁脈衝信號的推動順序,

    這種方法是一相激磁和二相激磁的混合方式。他的最大的優

    點在於步進馬達每走一步的步進角為前兩種激磁方式的一

    半,因而得到更小的步進角,如圖 2-10所示。

    圖 2-10 一、二相激磁順序

  • 2-7 感測電路

    利用感測器電路測得外界之物理訊號並將其轉換為電訊

    號以利後續控制電路使用,感測器是類似於人類的感官功能

    的一種元件,它可察覺出我們人類所能或不能感受的現象,

    不同的感測器具有不同功能。軌道型無人自走車應用紅外線

    光感測器來測得目前軌道狀況,進而控制及修正自走車前進

    之路徑,因此感測器擺放位置、數量和敏感度設計會影響電

    路偵測的之確度。

    光感測元件透過對黑色與白色的不同反射率,來作感測的

    依據,為了避免一般日常光線的強弱不一形成的干擾而造成

    錯誤動作,因此我們採用CNY70 紅外線感測器作為無人自走

    車的感測元件,它是一個附有濾光透鏡的紅外線光反射偵測

    器接收紅外線,濾掉其他外界干擾的光線,提昇電路偵測的

    之確度。

    CYN70 感測器感測訊號的方式,由光感測器本身的發射電

    路發射出紅外線直接射向地陎,貼上膠帶的反射係數與地陎

    的反射係數不一樣,影響感測的敏感度,造成了輸出電流不

    一樣,即為低電位及高電位形成訊號判斷。為了不使光感測

    器連續點亮造成感測器燒毀,則在紅外線發射端發射脈波信

  • 號來點亮光感測器,當光感測器有感測時,會由C腳輸出低

    電位,沒有感應時會到由C 腳輸出高電位。

    紅外線感測器CNY70 所感應出的訊號為類比連續訊號,不

    能直接輸入給8051單晶片,因此需透過史密特反向觸發器

    74LS14來轉換為Low(0V)或High(5V)之數位訊號,整個感測

    電路可藉由電阻值的選擇來控制靈敏度來調整最適當的狀

    態。

    圖 2-11 CNY70的內部結構元件圖

  • 第三章 尋跡自走車電路動作說明

    3-1 尋跡自走車電路動作

    本電路係利用反射型光藕合元件偵測帄陎地板上的黑色

    軌跡行走﹐帄陎地板顏色與黑色軌跡的顏色對比需足夠讓尋

    跡自走車辨識﹐尋跡自走車上有調整對比感度的可變電阻﹐

    並有 LED 可指示辨識度﹐調整到讓電路能正常辨識﹐尋跡自

    走車就能正常動作﹐轉彎半徑不要超過 15cm。

    車體主電源開啟後可用紅外線遙控器來控制啟動與關閉

    系統。

    圖 3-1 自走車主要電路

  • 3-2 電源及單晶片電路說明

    (一)電源電路:

    電源使用 1.5V 乾電池作為電源,利用電池座串聯來組成

    12V 電源,供尋跡自走車來使用,電源由 JP1輸入由 S1 作為

    整個電路的主電源,C6為 12V電源濾波器,馬達使用 12V 電

    源,電源輸入後經 U4 穩壓 IC輸出 DC5V電壓 VCC給所有電

    路使用,C5 為 5V 的電源濾波器,CP1、CP2 為 IC1 與 IC2的

    雜訊濾波電容,濾除 IC內部所產生的雜訊。

    (二)單晶片電路:

    單晶片 U1使用 AT89S51,C1、R1 為 U1 的 RESET 電路,

    C2、C3、Y1 為 U1 的振盪電路,U1 的 P0 作為光藕合感測訊

    號輸入,U1 的 P1 接腳沒有使用,U1 的 P2 作為馬達驅動控

    制訊號,U1 的 P3 作為紅外線遙控訊號接收與系統狀態指示

    燈輸出。

  • 3-3 步進馬達驅動迴路說明

    步進馬達驅動迴路:

    P2.0~P2.3為控制右側步進馬達,利用驅動步進馬達的

    相位可以控制步進馬達正反轉,P2.5~P2.7 為控制左側步進

    馬達,利用驅動步進馬達的相位可以控制步進馬達正反轉,

    控制兩個步進馬達不同的正反轉動方式可以讓尋跡自走車

    前進、右轉、左轉與停止。

    R14~R29,Q1~Q16為步進馬達的相位驅動迴路,單晶片

    U1 AT89S51在 RESET 後所有輸出腳均輸出“H” ,所以我們

    讓馬達的驅動輸入先為 PNP型電晶體,這樣當 U1開機後步

    進馬達不會有驅動訊號,當 U1的輸出為“L”時,Q1 電晶體

    導通,VCC 電壓經 Q1→R22→Q9,此時 Q9導通後提供步進馬

    達一個相位的驅動訊號,其餘迴路動作方式均相同,步進馬

    達的控制相位驅動訊號請參考相關資料,在此不贅述,驅動

    的相位輸出訊號由 JP4與 JP5輸出連接到右側與左側步進馬

    達。

    R30 與 R31 為步進馬達與 Q9~Q16 的限流電阻﹐避免導通

    的步進馬達與 Q9~Q16溫度過熱。

  • 3-4 光藕合感測迴路說明

    光藕合感測迴路:

    感測黑色軌跡我們使用“得律風根 Telefunken”的光藕

    合元件 CNY70,這是一個內含紅外線發射與接收的反射型的

    光藕合元件,我們利用它的反射特性來偵測帄陎地板上的黑

    色軌跡,帄陎地板顏色需要為白色或是淺色系列,軌跡為黑

    色或是深色系列的顏色,因為黑色或深色的顏色吸光的特性,

    所以當紅外線照射到這上陎時,光源會大部分的被吸收掉,

    剩餘的反射出來的不多,而白色或是淺色系列的顏色卻會大

    部分的將紅外線反射回來,因此我們利用此特性配合調整可

    變電阻來改變 U5~U7的敏感度,就可以偵測出軌跡與帄陎

    地板的差異了。

    R10~R12為 U5~U7紅外線發射的限流保護電阻,當通電

    後發射紅外線光源,反射的光源訊號由另一邊的光電晶體接

    收光源訊號,U5~U7的訊號經 JP3 與主電路板上 JP2 連接,

    將訊號傳送到 U2來做訊號判讀,SVR1~SVR3 為 U5~U7的敏

    感度調整,U2 是一個舒密特型反向器,D1~D3 指示 U5~U7

    的感度訊號,調整 SVR1~SVR3讓 D1~D3隨帄陎地板的顏色

    亮滅 LED 燈號。

  • 3-5 遙控迴路與狀態指示迴路說明

    (一)遙控迴路:

    電路啟動與停止的控制訊號我們用紅外線遙控器來遙控,

    這是與家庭電視用的電視遙控器一樣,都是利用發射紅外線

    訊號來遙控,紅外線訊號由 U3 FM-6038 來接收,這是一個

    紅外線的接收模組,內有訊號放大與解調電路,能將遙控器

    所發射的紅外線遙控訊號放大並處理後還原輸出,當有收到

    紅外線遙控訊號時 D4會閃亮,顯示正收到遙控紅外線訊號。

    因為 U3內含放大訊號,而單晶片本身工作在 12MHz的頻

    率,所以會有雜訊干擾產生,因此我們利用 R3與 C4 來濾除

    此雜訊,提供 U3穩定而無干擾的電源,否則 U3紅外線接收

    模組就無法正常接收動作了。

    (二)狀態指示迴路:

    電路系統狀態由 U1 的 P3.0輸出,當主電源開啟後 U1輸

    出驅動 D5閃亮,當收到遙控啟動訊號時,U1 輸出驅動 D5恆

    亮系統開始依偵測到的帄陎地板訊號控制車體動作,當收到

    遙控停止的訊號時,D5回覆閃亮電路並停止動作,等待再次

    收到啟動訊號。R13 為 D5的限流保護電阻。

  • 第四章 製作過程

    4-1 製作流程

    以下就是我們製作這次專題的流程:

    (1)我們先到圖書館一起討論專題的題目,討論後我們以尋

    跡自走車為這次專題的題目。

    (2)到圖書館一起查資料將跟本專題相關的資料找出來研究,

    並討論必須買的材料,以方便購買。

    (3)一起去購買尋跡自走車的所需要的材料

    (4)製作電路板,將 AT89S51、TC4584BP...等材料以焊接的

    方式將材料一一焊入電路板之中,並加以檢查線路是否接

    錯。

    (5)製作尋跡自走車的車體,並將步進馬達和車子的輪子裝

    上去。

    (6)製作控制尋跡自走車的遙控器。

    (7)將已焊好的電路板與車體接起來,並測試是否哪裡有問

    題,是否能正常動作。

    (8)將材料整理出來,開始製作專題報告的內容。

  • 圖 4-1 電路板焊好完成圖

    圖 4-2 尋跡自走車完成圖

  • 第五章 程式說明

    5-1 程式發展流程

    程式設計大都有一定規則可循,一般程式會根據需求將

    程式分成許多子功能系統,先完成各子功能程式,再依執行

    順序流程將它結合成一個完整程式。當然如果程式很小也可

    以從頭寫到最後,依每個人寫作習慣而定。

    每一種 CPU都有自己的機械語言,直接撰寫此類語言既

    費事又難懂,當然沒有人願意去學寫;因此都使用組合語言

    來撰寫程式。每一種組譯器有自己的語法來描述指令,不過

    相同的 CPU大都相差不多,一般 89S51都使用 A.D2500巨集

    組譯器,程式輸入可用文書處理器(HE5,PE2),再用組譯器

    來組譯成 OBJ檔,最後再用連結器連結成 HEX檔,其程式發

    展流程如下:

  • 圖 5-1 程式發展流程

  • 5-2 尋跡自走車程式碼

    ;********************************************************

    ;* *

    ;* 無線遙控軌跡自走車 - 步進馬達 *

    ;* 控制二個步進馬達行走, 能沿黑色軌跡行走, 利 *

    ;* 用紅外線遙控器來啟動或停止軌跡自走車. *

    ;* XTAL:12MHz *

    ;* *

    ;********************************************************

    TimeBase equ 45 ;編碼 H/L 時間常數

    MOTOR reg p2 ;左側馬達

    SENSOR reg p0 ;

    SEN_L reg p0.0 ;左側感測器

    SEN_M reg p0.1 ;中間感測器

    SEN_R reg p0.2 ;右側感測器

    Stand_by_LED reg p3.0 ;工作 LED

    Rx_IN reg p3.2 ;紅外線遙控訊號輸入

    Rx_Flag reg 20h.0 ;紅外線動作訊號旗標

    Active reg 20h.7 ;系統啟動旗標

    Rmotor equ 21h ;右側步進馬達資料

    Lmotor equ 22h ;左側步進馬達資料

    Time_H_L equ 30h ;編碼 H/L 時間常數

    Rec_Bit equ 31h ;接收位元暫存器

    Rec_Byte equ 32h ;接收資料筆數暫存器

    Rec_Buf equ 33h ;接收資料暫存器

    Rec_Buf_1 equ 34h ;接收資料暫存器 1

    Rec_Buf_2 equ 35h ;接收資料暫存器 2

    Rec_Buf_3 equ 36h ;接收資料暫存器 3

    Rec_Buf_4 equ 37h ;接收資料暫存器 4

    Dly_Buf_1 equ 38h ;延遲暫存器 1

    Temp equ 39h ;紅外線訊號讀取次數暫存器

    ;********************************************************

    ;* 啟始主程式 *

    ;********************************************************

    Main:

    org 00h

    jmp Start ;啟始程式

  • org 40h

    Start:

    mov sp,#5Fh ;設定堆疊

    clr Rx_Flag ;清除紅外線訊號旗標

    clr Active ;設定停止模式

    mov MOTOR,#11111111b ;關閉馬達

    mov a,#0 ;

    mov Rmotor,a ;步進馬達啟始資料

    mov Lmotor,a ;步進馬達啟始資料

    acall Delay_100ms ;呼叫延遲副程式

    ;----------------------------------------------------------------

    Check:

    acall IR_Receiver ;呼叫紅外線接收副程式

    jnb Rx_Flag,RUN ;判斷是否有紅外線訊號

    clr Rx_Flag ;

    Chk_ON:

    mov a,Rec_Buf_3 ;有紅外線訊號讀出紅外線控制碼

    cjne a,#00h,Chk_OFF ;判斷控制碼是否為"ON"

    setb Active ;動作狀態轉換 ON->OFF OFF->ON

    sjmp RUN ;

    Chk_OFF:

    mov a,Rec_Buf_3 ;有紅外線訊號讀出紅外線控制碼

    cjne a,#04h,RUN ;判斷控制碼是否為"ON"

    clr Active ;動作狀態轉換 ON->OFF OFF->ON

    mov MOTOR,#11111111b ;關閉馬達

    setb Stand_by_LED ;熄滅工作 LED

    RUN:

    jnb Active,Check ;動作模式如果為"啟動"就跳到

    RUN_MOT

    acall Delay_20ms ;

    clr Stand_by_LED ;點亮工作 LED

    Chk_Stop:

    mov a,SENSOR

    cpl a

    anl a,#00000111b

    jz Check

    Chk_R:

    jnb SEN_R,Chk_L

  • call Right

    Chk_L:

    jnb SEN_L,Check

    call Lift

    sjmp Check ;跳到 Check

    ;----------------------------------------------------------------

    Right:

    inc Rmotor ;右側馬達驅動相位加一

    mov a,Rmotor ;讀出右側馬達相位資料

    anl a,#00000111b ;取出相位碼

    acall Motor_Phase_R ;呼叫驅動相位表

    mov b,a ;資料先暫存

    mov a,MOTOR ;取出目前馬達相位資料

    anl a,#11110000b ;保留左側驅動馬達相位

    orl a,b ;合併右側驅動馬達相位

    mov MOTOR,a ;輸出控制步進馬達

    ret

    ;----------------------------------------------------------------

    Lift:

    inc Lmotor ;左側馬達驅動相位加一

    mov a,Lmotor ;讀出左側馬達相位資料

    anl a,#00000111b ;取出相位碼

    acall Motor_Phase_L ;呼叫驅動相位表

    mov b,a ;資料先暫存

    mov a,MOTOR ;取出目前馬達相位資料

    anl a,#00001111b ;保留右側驅動馬達相位

    orl a,b ;合併左側驅動馬達相位

    mov MOTOR,a ;輸出控制步進馬達

    ret

    ;;----------------------------------------------------------------

    ;BRight:

    ; dec Rmotor ;右側馬達驅動相位減一

    ; mov a,Rmotor ;讀出右側馬達相位資料

    ; anl a,#00000111b ;取出相位碼

    ; acall Motor_Phase_R ;呼叫驅動相位表

    ; mov b,a ;資料先暫存

    ; mov a,MOTOR ;取出目前馬達相位資料

    ; anl a,#11110000b ;保留左側驅動馬達相位

  • ; orl a,b ;合併右側驅動馬達相位

    ; mov MOTOR,a ;輸出控制步進馬達

    ; ret

    ;;----------------------------------------------------------------

    ;BLift:

    ; dec Lmotor ;左側馬達驅動相位減一

    ; mov a,Lmotor ;讀出左側馬達相位資料

    ; anl a,#00000111b ;取出相位碼

    ; acall Motor_Phase_L ;呼叫驅動相位表

    ; mov b,a ;資料先暫存

    ; mov a,MOTOR ;取出目前馬達相位資料

    ; anl a,#00001111b ;保留右側驅動馬達相位

    ; orl a,b ;合併左側驅動馬達相位

    ; mov MOTOR,a ;輸出控制步進馬達

    ; ret

    ;----------------------------------------------------------------

    Motor_Phase_R:

    mov dptr,#Motor_Table_R ;

    movc a,@a+dptr ;

    ret

    Motor_Table_R:

    db 00001110b

    db 00001010b

    db 00001011b

    db 00001001b

    db 00001101b

    db 00000101b

    db 00000111b

    db 00000110b

    ;----------------------------------------------------------------

    Motor_Phase_L:

    mov dptr,#Motor_Table_L ;

    movc a,@a+dptr ;

    ret

    Motor_Table_L:

    db 01100000b

    db 01110000b

    db 01010000b

  • db 11010000b

    db 10010000b

    db 10110000b

    db 10100000b

    db 11100000b

    ;----------------------------------------------------------------------------------------------;

    ; 檢測 9ms Low 訊號 100us 為 1 timebase 9ms 為 90 timebase ;

    ; 但是 timebae(255=25.5ms) 超過的話就結束接收副程式 ;

    ;----------------------------------------------------------------------------------------------;

    IR_Receiver:

    mov Temp,#10 ;設定訊號讀取次數

    Wait_IR:

    jnb Rx_IN,W_Str_L ;等待啟始訊號

    acall Delay_100us ;呼叫延遲副程式

    djnz Temp,Wait_IR ;未超過訊號讀取次數跳到 Wait_IR

    繼續讀取

    ret

    W_Str_L:

    mov Time_H_L,#FFh ;清除編碼 H/L 時間常數暫存器

    Str_L:

    acall Delay_100us ;呼叫 100us 延遲副程式

    djnz Time_H_L,Wait_St_H ;判斷起始同步訊號時間

    sjmp Rec_Err ;等待週期時間超過,錯誤紅外線接

    收,跳到 Rec_Err

    Wait_St_H:

    jnb Rx_IN,Str_L ;紅外線同步訊號未結束,跳到 Str_L

    mov a,Time_H_L ;讀出同步訊號時間週期

    cpl a ;取補數

    subb a,#100 ;同步時間週期減常數 100

    jc Chk_LS ;大於常數 100 跳到 Chk_LS

    sjmp Rec_Err ;同步週期時間過長,錯誤紅外線接

    收,跳到 Rec_Err

    Chk_LS:

    setb Rx_Flag ;清除接收訊號旗標

    mov Time_H_L,#FFh ;清除編碼 H/L 時間常數暫存器

    Str_H:

    acall Delay_100us ;呼叫 100us 延遲副程式

    djnz Time_H_L,W_St_L ;判斷訊號週期時間

  • sjmp Rec_Err ;訊號週期時間過長,錯誤紅外線接

    收,跳到 Rec_Err

    W_St_L:

    jb Rx_IN,Str_H ;訊號週期未結束,跳到 Str_H

    mov a,Time_H_L ;讀出訊號週期時間週期

    cpl a ;取補數

    mov Time_H_L,a ;回存訊號週期時間資料

    subb a,#35 ;訊號週期時間減常數 35

    jnc Chk_HL ;小於常數 35 跳到 Chk_HL

    sjmp Rec_Err ;訊號週期時間過短,錯誤紅外線接

    收,跳到 Rec_Err

    Chk_HL:

    mov a,Time_H_L ;讀出訊號週期時間週期

    subb a,#50 ;訊號週期時間減常數 50

    jc Chk_HS ;小於常數 50 跳到 Chk_HS

    sjmp Rec_Err ;訊號週期時間過長,錯誤紅外線接

    收,跳到 Rec_Err

    Chk_HS:

    setb Rx_Flag ;設定紅外線控制訊號旗標,確認同

    步紅外線訊號完成

    sjmp Rec_Start ;跳到 Rec_Start

    ;---------------------------------------------------------------------------------

    Rec_Err:

    ret ;回主程式

    ;----------------------------------------------------------------------------------

    Rec_Start:

    mov Rec_Byte,#4 ;設定接收筆數為四筆資料

    Rec_IN:

    mov Rec_Bit,#8 ;設定接收位元為 8 個位元

    Rec_IN_1:

    mov Time_H_L,#FFh ;清除編碼 H/L 時間常數暫存器

    Rec_Wait:

    acall Delay_20us ;呼叫 20us 延遲副程式

    djnz Time_H_L,Wait_H ;判斷訊號週期時間

    sjmp Rec_Err ;等待週期時間超過,錯誤紅外線接

    收,跳到 Rec_Err

    Wait_H:

    jnb Rx_IN,Rec_Wait ;檢測紅外線訊號是否仍為 Low

  • ;

    mov Time_H_L,#FFh ;清除時間資料

    Rec_Data:

    acall Delay_20us ;呼叫 20us 延遲副程式

    djnz Time_H_L,Wait_L ;判斷訊號週期時間

    sjmp Rec_Err ;等待週期時間超過,錯誤紅外線接

    收,跳到 Rec_Err

    Wait_L:

    jb Rx_IN,Rec_Data ;檢測紅外線訊號是否仍為 High

    ;

    mov a,Time_H_L ;讀入時間資料

    cpl a ;取補數

    subb a,#TimeBase ;時間資料與編碼時間常數比較

    jnc Rec_High ;檢測進位旗標

    Rec_Low:

    clr c ;設定讀入編碼為

    sjmp Read_Bit ;跳到 Read_Bit

    Rec_High:

    setb c ;設定讀入編碼為

    Read_Bit:

    mov a,Rec_Buf ;讀入接收資料暫存器

    rrc a ;存入接收到的紅外線資料

    mov Rec_Buf,a ;存入接收資料暫存器

    djnz Rec_Bit,Rec_IN_1 ;如果未讀滿 8 個位元就跳到

    Rec_Wait 繼續讀取

    ;

    mov Rec_Buf_1,Rec_Buf_2 ;移動接收到的紅外線資料

    mov Rec_Buf_2,Rec_Buf_3 ;移動接收到的紅外線資料

    mov Rec_Buf_3,Rec_Buf_4 ;移動接收到的紅外線資料

    mov Rec_Buf_4,Rec_Buf ;移動接收到的紅外線資料

    djnz Rec_Byte,Rec_IN ;如果未讀滿四筆紅外線資料就跳到

    Rec_IN

    ;

    mov a,Rec_Buf_4 ;讀入紅外線資料暫存器資料

    cpl a ;取補數,調整為原資料

    xrl a,Rec_Buf_3 ;與數據資料比較

    jnz Rec_Err ;兩資料不相符就跳到 Rec_Err

    setb Rx_Flag ;設定紅外線控制訊號旗標

  • ret

    ;********************************************************

    ;* 延遲副程式 *

    ;********************************************************

    Delay_1s:

    mov r5,#200 ;

    sjmp DEL_1 ;

    Delay_500ms:

    mov r5,#50 ;

    sjmp DEL_1 ;

    Delay_100ms:

    mov r5,#10 ;

    sjmp DEL_1 ;

    Delay_20ms:

    mov r5,#2 ;

    DEL_1:

    mov r6,#100 ;

    DEL_2:

    mov r7,#48 ;

    djnz r7,$ ;

    djnz r6,DEL_2 ;

    djnz r5,DEL_1 ;

    ret

    ;****************************************************************

    Delay_100us:

    mov Dly_Buf_1,#47 ;2+2+(2*47)+2=100

    djnz Dly_Buf_1,$ ;

    ret

    ;****************************************************************

    Delay_20us:

    mov Dly_Buf_1,#7 ;2+2+(2*7)+2=20

    djnz Dly_Buf_1,$ ;

    ret

    ;----------------------------------------------------------------

    end

  • 第六章 心得感想

    AA97014 鄭翔仁:

    經由這次的專題報告,讓我們了解到一些零件的功能是

    什麼,其中像 89S51 單晶片,雖然這學期的 C語言有教到這

    個東西,但還是有點不太了解,可是經由這次的專題製作,

    讓我們更了解 89S51 單晶片,不過,好在這學期有上到 C 語

    言,不然我們真不知道該怎樣把程式打進去。

    這次的專題報告最令我們頭痛的地方就是電路板的部分,

    有許多零件必須把它們接起來,密密麻麻的線路將我們搞的

    頭昏眼花,要是接錯就導致零件燒毀就麻煩了,中途雖然因

    為雜亂的線路讓我們失敗了好幾次,但是,在大家一起努力

    的研究之下,把所有的問題一一找出來,最後還是很順利的

    將所有的東西都接好。

    透過這次的專題合作,也讓我們再次深深的體會到人與

    人之間合作的重要性,這對我而言,是一個非常寶貴的學習

    經驗,相信在以後的社會上,這份經驗一定能有所幫助的。

  • AA97004黃明宏

    經過這一次的專題製作,體驗到在我們的生活當中,發

    生危險或是在災難發生時,自走車或是無人駕駛車都是在往

    後的世界真的是不可缺少的,所以我們專題想深入研究自走

    車也有極大的可能可以變成像路上一樣的車子,進而取代現

    在的各式各樣的車種。

    一開始在什麼都不懂的情況下大家都先查一些資料了

    解自走車的製作流程。才開始製作跟購買材料,另我最頭疼

    的是自走車跟我想的不一樣,以為是裝一裝、插一插電池就

    會跑了。想不到還要寫入程式跟燒電路版,所以在這一學期

    當中好在有 89S51 這一門課程,讓我們在專題上陎可以不用

    困擾那麼久。還有幾位好朋友他們會燒電路版,好心的教導

    下,但往往有時後還是會寫錯程式或是燒掉幾個東西。但都

    在詢問專業的人員或是大家共同討論下都一一克服了。

    專題已經完工了,也體會到在未來的生活當中,自走車

    或無人駕駛車等是不可缺少的,雖然在製作過程或討論當中

    往往會有些爭議,但學習到在一個團隊裡,接納對方意見或

    團隊合作的重要,希望在往後的世界,不管是自走車還是機

    器人..等可以更進步,讓災害及危險降到最低。

  • AA97005 林政男

    科技來自於人性,人性來自於惰性,因為人性的懶惰,

    所以大家不斷的開發科技,在這次的專題裡,我們也是考慮

    了很久,到最後我們一致同意做„尋跡自走車‟,一開始我

    們也是遇到了難題,所以不停的詢問同學和朋友,使得一開

    始我們做起來有點難以著手,但是詢問了許多經驗,讓我們

    了解了不少,所以才會更進一步的好製作,所以我們就分配

    大家的工作,讓這次的專題製作的過程程序更順利的完成。

    這次的„尋跡自走車‟讓我覺得最困難的是他的轉彎軌

    道,畢竟很多東西,行走直線都是非常的簡單,但是如果談

    到轉彎,真是一大的關卡,所以我們把軌道的角度計算過很

    多次,也讓自走車來回走了好幾次,使得軌道有一個比較好

    的路線,才不會讓自走車卡著,雖然失敗了很多次,但是我

    們還是一直在嘗試,不斷的改良,也詢問到不同和許多的經

    驗,使得這次的„尋跡自走車‟才會那麼成功。

  • AA97006 林永祥

    這次的專題,算是我有史以來第一次的嘗試製作自走車。

    在一開始分組做專題時,大家開始想題目、想了好久,也猶

    豫了很久、最後終於決定要嘗試做軌跡自走車。接著大家就

    一起去圖書館參考以前學長姐們的專題,然後便開始策劃,

    再到買材料、編寫程式,接電路板、由於過去大家都從未接

    觸過這類單晶片跟感應器的東西,所以忙的七手八腳的,過

    程中也遇到很多的困難例如買材料時的選擇等等,不過由於

    大家的團結一致才在不斷的嘗試最後才出來了這個成品,雖

    說是第一次嘗試但還是做出來了,所以十分感動。

    透過這次的專題讓我再次的理解到、只要有團結合作在

    加上用心一致,一定能克服許多困難,人跟人之間的合作真

    的很重要、想必出了社會這份心情與經驗必定能夠派上用

    場。

  • AA97007 王偉杰

    我們的專題組題是『軌跡自走車』。從開始訂主題、分工

    找材料、尋找相關資料、製作……等等。過程中,都曾遇到

    瓶頸與失敗,一直原地打轉,但我們還是不放棄,從每一失

    敗中學習教訓,從教訓中成長。

    其中也遇到很多問題,像是程式的書寫還有晶片線路的

    種種問題,不是接錯線燒壞,不然就是程式打錯而重來,但

    我們還是一步一步的重新來過,慢慢去改善問題直到完成。

    在這次的專題中,有遇到課堂上沒學到的我們從中學習;

    而課堂上學習的東西我們學以致用。也了解人與人之間,溝

    通是最好的橋樑。

    在此很感謝其他組員的努力與包容,也謝謝在此專題中

    給過我們建議的所有人以及我們的專題老師。

  • AA97045 張光佑

    這次的專題有遭遇到難題,可是我們大家都不放棄的去

    尋找問題點,一一的解決掉困難的地方,大家也都是在一起

    努力合作。

    想專題的問題有時候因為一些東西的不良尺寸的不對稱

    所以發生了很多的關卡,我在這門專題學習到很多的東西,

    其中最主要的就是要互相幫忙不要放棄希望。

    很感謝大家給我這次學習的機會,二專的時候已經有一

    次做專題的學習,可是二技讓我學習到更多的東西,非常謝

    謝老師的指導。

  • AA97048姚恩忠

    由這次的專題報告,讓我們認識到許多的零件與材料,

    雖然一開始大家對許多的零件與材料都不懂也很陌生,當中

    也遇到了許多困難以及難題,但是這也是我們必須克服的。

    這次專題也讓我遇到了很多的問題當中,最難的問題是

    電路與接線,因為這種問題是我們比較少接觸到的,要是一

    個不小心很容易把它燒壞的,如果接不對它也是不會動的,

    所以我們經過無數次的研究與討論難題也被我們一一克服

    了。

    經過這次的專題報告,讓我了解到與人合作的重要也學

    習到研究與討論重要,就算出了社會也會讓我們的經驗發揮

    作用的。