逢 甲 大 學 自動控制工程學系專題製作 專 題 論 無人搬運車 ·...

49
I 自動控制工程學系專題製作 無人搬運車 Automatic Mobile Vehicle 指導教授:蘇文彬 老師 生:陳宏維 許宏士 謝侑融 游子儁 中華民國九十七年一月三十日

Upload: others

Post on 11-Jan-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

  • I

    逢 甲 大 學

    自動控制工程學系專題製作

    專 題 論 文

    無人搬運車

    Automatic Mobile Vehicle

    指導教授:蘇文彬 老師

    學 生:陳宏維 許宏士

    謝侑融 游子儁

    中 華 民 國 九 十 七 年 一 月 三 十 日

  • II

  • III

    中文摘要 本專題旨在設計與製作一部能夠依照黑色膠帶與電腦傳輸的指令訊號行走的

    自走車。其內容包括硬體電路設計、軟體程式撰寫、機械結構探討及機電整合之應

    用。專題中使用伺服馬達、紅外線感測器、MCS-51單晶片、電晶體電路、積體電路

    零件及8051相關語言,以利建構整體架構。

    這次的專題著重在實作的部份,從實作的過程中進而學習一些解決問題的方

    法,也同時對軟體與硬體的整合做應用。

  • IV

    Abstract The purpose of this project is to design and produce a Automatic Mobile

    Vehicle which could follow the black tape and the signal of computer.

    The content includes, hardware circuit design ,software program writing,

    discussion mechanism and the apply of mechatronic engineering.

    We used Servo Motor, Infrared sensor (CNY70), MCS-51..... and 8051

    related language to build the whole structure.

    The project is mainly focus on practical part, to learn how to solve

    problems during the process, and also apply on combining software and

    hardware.

  • V

    目錄 中文摘要------------------------------------------------------------I

    英文摘要-----------------------------------------------------------II

    目錄---------------------------------------------------------------III

    圖目錄-------------------------------------------------------------V

    表目錄------------------------------------------------------------VII

    第一章 導論-------------------------------------------------------1

    1.1 介紹無人自走車、研究目的及動機------------------------------1

    1.2 研究方法與流程---------------------------------------------1

    第二章 MCS-51 單晶片概述------------------------------------------2

    2.1 8051單晶片簡介---------------------------------------------2

    2.2 8051單晶片接腳簡介-----------------------------------------3

    2.3 8051單晶片系統架構-----------------------------------------6

    2.3.1 指令解碼器(Instruction Decoder )-------------------------6

    2.3.2 程式計數器(Program Counter,PC)-------------------------7

    2.3.3 算術與邏輯單元(Arithmetic & Logic Unit,ALU)-------------7

    2.3.4 程式記憶體(Program Memory)---------------------------8

    2.3.5 資料記憶體(Data Memory)-------------------------------9

    2.3.6 特殊功能記憶體---------------------------------------10

    第三章 馬達------------------------------------------------------15

    3.1 電動機的種類與原理-----------------------------------------15

  • VI

    3.2 無刷馬達的構造與原-----------------------------------------17

    3.3 直流馬達控制原理-------------------------------------------18

    3.4 直流馬達之特性曲線與選用方式-------------------------------19

    第四章 感測器之介紹----------------------------------------------21

    4.1 感測器之介紹與用途----------------------------------------21

    4.2 感測器驅動電路與動作原理----------------------------------21

    4.3 晶片 CNY70-----------------------------------------------22

    4.4 感測器電路圖----------------------------------------------22

    第五章 電路&程式-------------------------------------------------24

    5.1 程式設計對策-----------------------------------------------24

    5.2 程式流程圖-------------------------------------------------26

    5.3 電路圖-----------------------------------------------------27

    5.4 實驗過程---------------------------------------------------31

    結論---------------------------------------------------------------32

    參考文獻-----------------------------------------------------------33

    附錄---------------------------------------------------------------34

  • VII

    圖目錄 圖2.1 晶片的編號及特性

    圖2.2 內部結構方塊

    圖2.3 8051單晶片接腳簡介

    圖2.4 內部時脈震盪器輸入接腳

    圖2.5 8051 系列單晶片之內部功能方塊圖

    圖2.6 程式計數器

    圖2.7 內部程式記憶體

    圖2.8 資料記憶體結構圖

    圖3.1 馬達之基本構造

    圖3.2 轉子順時針旋轉

    圖3.3 霍爾元件與直流馬達所構成的無刷馬達

    圖3.4 直流馬達特性曲線圖

    圖4.1 感測器整體電路圖

    圖4.2 感測器電路圖

    圖5.1 程式流程圖

    圖5.2 電源電路

    圖5.2 RESET電路

    圖5.3 感測器電路

  • VIII

    圖5.4 7PIN_Connector 和感測器之間電路

    圖5.5單晶片主電路

    圖5.6伺服馬達控制電路

    圖5.7自走車正反面構造圖

    圖 5.8 自走車感測器亮燈情形

    圖 5.9 實際測試狀態圖

  • IX

    表目錄 表2.1 P3.0 ~ P3.7 接腳其它功能

    表 2.2 特殊功能暫存器名稱與各記體的關係

    表 2.3 暫存器說明

    表 2.4 計時器模式控制暫存器

    表 2.5 計時器動作模式對照表

    表 2.6 計時器暫存器說明

    表 2.7 串列埠暫存器說明

    表 2.8 串列埠動作模式對照表

    表 3.1 馬達比較表

    表 5.1 自走車的導引控制模式對策

  • 1

    第一章 導論

    1.1 介紹無人自走車、研究目的及動機

    無人自走車採用8051晶片做為主要的控制,並使用伺服馬達驅動,延

    著地面上由黑色膠帶所佈置之軌道進行移動,並在脫離軌道路線時會經由紅外

    線感測器發出的信號來修正行進方向。

    在基本的自走車架構完成後,將額外新增其他功能,如下:

    1.倒車雷達:使在自走車能自動判斷牆壁或障礙物的存在以保護自走車。

    2.聲控功能:能對自走車做簡單的語音控制,如控制馬達的轉速或是行

    進方向等功能。

    3.搖控裝置:利用無線搖控器對自走車進行各種功能操做。

    4.承載微電腦系統:在自走車上加裝電腦系統使之能發展出更多功能。

    5.各類機械零件:如機械手臂、小行攝影機的加裝並利用微電腦進行控

    制。

    1.2 研究方法與流程

    綜合運用機電整合之所學,發揮創造力,培養實作經驗和解決問題的能力。

    首先搜尋資料、研讀其他人的paper並跟指導老師討論整體的架構與理想的成

    品,先完成自走車的馬達、驅動電路與感測器的部份。接著再利用程式控制MCS-51

    給與自走車行進的方向,最後在不斷改良系統讓整體更穩定、功能更齊全。

  • 2

    第二章 MCS-51 單晶片概述

    2.1 8051單晶片簡介

    MSC-8051 系列單晶片是美國 INTEL 公司推出 MCS-8048 系列晶片 之後所

    推出的後續晶片,8051 系列單晶片主要是改進 8048 系列單晶片的 硬體架構及

    軟體能力。MCS-8051 系列單晶片依其電路結構又可分為三種版本:(1)晶片內部

    不含 ROM 的版本、(2)晶片內含 ROM 的版本、以及(3) 晶片內含EPROM的版本。

    下圖2.1 表列出各版本晶片的編號及一些特性:

    圖2.1 晶片的編號及特性

    以下將 8051 單晶片的重要特性說明如下:

    ( 1)專為控制應用所設計的8 位元CPU。

    ( 2)4K Bytes 的內部程式記體(ROM)。

    ( 3)128 Bytes 可供讀/寫的內部資料記憶體(RAM)。

    ( 4)內部具有時脈振盪器,最高工作時脈可達12 MHz (最快速度為1us/指令)。

    ( 5)2 組16 位元的計時器/計數器(Timer/Counter)。

    ( 6)4 組8 位元的I/O 並列埠,共32 條可單獨規劃為輸入或輸出的I/O。

    ( 7)可擴充為128K Bytes 的外部記憶體,其中64K Bytes 為程式記憶體。

    ( 8)資料記憶體可在外部擴充至64K 位元組資料記憶體(RAM)。

  • 3

    ( 9)可處理 5 個中斷來源,且具有兩層(高/低)優先全順序之中斷結構。

    (10)含有一完整的布林代數(單位元邏輯)之運算功能。

    圖2.2 內部結構方塊

    2.2 8051單晶片接腳簡介

    圖 2.3 8051 單晶片接腳簡介

  • 4

    以下別對 8051 的 40 支接腳做說明:

    (1) Vcc(40)

    MCS-51 +5V 電源接腳。

    (2) Vss(20)

    MCS-51 電源接地端。

    (3) P0.0 ~ P0.7 (39 ~32)

    此8支腳為MCS-51第0個輸入/輸出埠,簡稱P0。除作為輸入/輸出埠外,又

    可當作外接程式記憶體的較低8位元位址,及資料匯流排,因此具有三重

    多工用途,其主要功能為:

    1. 當存取外部記憶體時,作為較低8位元位址匯流排(A0 ~ A7)和資料

    匯流排(D0 ~ D7)。一般是在每個指令週期中,先送出位址位號,再

    送出資料信號。

    2. P0埠本身是一個開洩極的電路,作為輸出用時,必須加上提升電阻。

    3. P0埠作為入埠時,必須先將1狀態寫到P0,使其成為高阻抗狀態,才能

    成為正常的輸入埠。

    4. 當作輸出時,每個接腳可以驅動 8個 LS TTL 負載。

    (4) P1.0 ~P1.7 (1 ~8)

    此為MCS-51第一個輸入/輸出埠,簡稱為P1。內部本身已有提升電阻。

    1. 要作為輸入埠時,必須先將1狀態寫到P1,使其經由內部提升電阻,提

    升成為高電位狀態,才能正常作為輸入埠。

    2. 作為輸出埠,將1輸出,則接腳為高電位,輸出0到P1,則接腳為低電

    位。每個接腳可以驅4個 LS TTL 負載。

    3. 在8032或8052的晶片,P1.0作為第2個計時/計數器的輸入接腳T2,P1.1

    為第2計時/計數器在捕獲模式下的輸入接腳T2EX。

    (5) 2.0 ~P2.7(21~28)

    為第二個輸入/輸出埠,簡稱P2。內部已有㆒提升電阻。除可作為I/O埠外,

    又作為位址匯流排的較高8位元位址。

    1. 如作為輸入埠,必須先將1寫到P2,才可以正常作為輸入埠。

    2. 作為輸出埠,將1輸出,則接腳為高電位,輸出0到P2,則接腳為低電

    位。每個接腳可以驅動4個 LS TTL 負載。

    3. 當存取外部記憶體時,作為較高 8位元位址匯流排(A8 ~ A15)。

    (6) P3.0 ~ P3.7(10 ~ 17)

    P3.0 ~ P3.7 簡稱P3。內部已有一提升電阻。

    1. 如作為輸入埠,必須先將1寫到P3,才可以正常作為輸入埠。

    2. 作為輸出埠,將1輸出,則接腳為高電位,輸出0到P3,則接腳為低電

    位。每個接腳可以驅動4個 LS TTL 負載。除作一般的I/O埠,每支接

    腳另有其它功能,列舉如下:

  • 5

    表2.1 P3.0 ~ P3.7接腳其它功能

    (7) RST(9)

    為重置(RESET)信號輸入接腳,在此接腳,加上高電位,並且維持兩個

    機械週期以上,晶片內部就會產生重置動作,重置時,內部相關的暫存器

    會被重置為特定的內容值。

    (8) XTAL1(18) XTAL2(19)

    為內部時脈振盪器的輸入接腳。一般在這二接腳,加上一個12MHz 的石英

    振盪器晶體,來產生所須工作頻率。

    圖 2.4 內部時脈震盪器輸入接腳

    (9) PSEN(29)

    PSEN是Program Store Enable,程式儲存致能信號。它是8051晶片讀取外

    部程式記憶體的激發信號,當晶片在讀取外部記憶時,會送出這個信號到

    記憶體上的輸出致能腳,促使記憶體送出程式碼。

    (10)ALE/PROG(30)

    ALE代表Address Latch Enable,位址閂鎖致能信號。因MCS-51的P0具有

    位址和資料匯流的雙工作用,在讀取外部記憶體的資料或程式碼,為分辨

    P0上為位址信號線或是資料信號線,由ALE接腳輸出一負緣信號作為辨別

    P0上的位址信號,此信號一般都接到一閂鎖電路致能腳。

    (11)EA/VPP(31)

    這支接腳是存取外部程式記憶體的致能腳。當8051的EA/VPP加入0電壓,

    表示使用外部程式記憶體。加入5V電壓,則是自內部ROM或EPROM讀取程式

    執行,因8031內部沒有ROM,使用時EA/VPP必須接地。

  • 6

    2.3 8051單晶片系統架構

    圖 2.5 8051 系列單晶片之內部功能方塊圖

    以下將分別介紹幾個重要的功能說明。

    2.3.1 指令解碼器( Instruction Decoder )

    指令解碼器的功能是負責將擷取自程式記憶體中的指令加以解碼,並送出內

    部信號以控制單晶片各單元的動作。這些內部控制信號可控制資料的來源及目的

    地,以及控制算術/邏輯處理單元。

  • 7

    2.3.2 程式計數器( Program Counter,PC )

    程式計數器是用來控制儲存在程式記憶體中指令碼的執行順序的一個 16

    位元暫存器,也就是說,程式計數器的存放內容是下一個執行指令的程式記憶體

    的位址 ( A0~A15 ), 其中低階位址 A0~A7 存放在 8 位元的 PCL 暫在器中,而

    高階位址 A8~A15 則存 放在 8 位元的PCH暫存器中。

    圖2.6 程式計數器

    2.3.3 算術與邏輯單元( Arithmetic & Logic Unit,

    ALU )

    這個單元主要是處理資料的算術及邏輯運算,必須搭配單晶片內部的 PSW

    暫存器及累加器來進行運算。算術運算包括加法、減法、乘法、除法、遞加、遞

    減、大小比較等運算,而邏輯運算則包括 AND、OR、XOR、NOT、左/右旋轉

    ( Rotate )、在/右移位 ( Shift )、位元清除( Clear )、位元設定( Set )等

    運算。運算後的結果 除了存放於累加器或其它記憶體(暫存器)中,亦反應於 PSW

    暫存器中(如是否有進位等)。

  • 8

    2.3.4 程式記憶體( Program Memory )

    8051 及 8071 皆具有 4K Bytes 的內部程式記憶體,並可在外部再擴充

    60K Bytes EPROM,如下圖所示,而 8031 則沒有這些內 部程式記憶體。在程式

    記憶體中所存放的是 8051 所要執行的程式碼,單晶片會主動到這塊記憶體要執

    行的指令碼,而 8051要讀取程式記體時需激發信號PSEN。

    圖2.7 內部程式記憶體

    8051 是如何決定程式記憶體的前面 4K Bytes 要內部或外部程式記憶體去

    讀取指令呢? 這就要靠 8051的 EA 接腳來決定內部程式記憶體是否有效,當

    EA=0,代表內部程式記憶體無效,8051會將前面 4K 移到外部;當EA=1,則內部

    程式記憶體有效。

    8051 到外部讀取一個指令碼時,P0 和 P2 這兩個 I/O 埠就變 成外部 EPROM

    時所需的匯流排,其中 P0 當作位址匯流排和資料匯流排多工使用,當 ALE接腳

    輸出為 High 時,此刻 P0上所輸出的是位址信號( A0~A7 ),因此外部的位址栓

    鎖電路必須在此刻將 P0 上的位址信號捕捉起來,當 ALE降為 LOW,且 PSEN為

    LOW 時,P0 就變成資料匯流( D0~D7 ),8051會在 PSEN的輸出狀態由

    LOW轉態成 High時讀入 P0 上的資料且將它解釋成指令碼;P2 在

    8051 讀取外部程式記憶體時會固定輸出位址匯流排的高位元組

    ( A8~A15 )。

  • 9

    2.3.5 資料記憶體( Data Memory )

    8051 內部有一塊 256 個 Byte 的位址空間,這塊空間是存放

    資料記憶體(RAM)和特殊功能暫存器(SFR)的地方,並可在外部擴充

    64KBytes 的資料記憶體。其資料記憶體的結構圖2.8如下:

    圖 2.8 資料記憶體結構圖

    8051 系列單晶片具有 128 Bytes 的內部資料記憶體,其中位址

    編號為 00H~7FH。這些內部資料記憶體可供使用者的程式自由存 取資

    料,不過,00H~7FH 記憶體的資料可用直接定址法來存取資 料,而

    8052 系列的 80H~FFH 記憶體的資料則必須間接定址法才 可以存

    取。依單晶片的特性又可將這些內部資料記憶體(00H~7FH) 分成三個

    不同的部分:

    (1) 暫存器庫( Register Banks ):

    位址 00H~1FH(共 32Bytes ),可分為 4 個暫存器庫( 0~3 ),

    每一個暫存器庫各有 R0~R7 共 8 個暫存器。當作暫存器用時,使用

    者只能使用其中一組暫存器庫來使用 ,稱之為工作暫存器庫

    ( Working Register Bank ),這是由單晶片內部 PSW 暫存器之 RS0

    及RS1 位元來指定要使用哪一個暫存器庫。

  • 10

    (2) 可位元定址( Bit-addressable )區:

    位址 20H~2FH(共 16 Bytes ),這 16 Bytes 記憶體中的每一個

    位元皆可單獨設定為 0 或 1,因此共有 128 個位元可單獨使用, 其

    位元位址的編號為 00H~7FH( 0~127 ),例如,記憶體位址 20H 的最

    低位元(位元 0)的位元位址編號為 00H,位址 21H 的最高位元 (位

    元 7)的位元位址編號為 0FH。這些記憶體適合於布林運算處理。

    (3) 一般用途區:

    在 8051 中,此位址空間( 30H~7FH )並未加以定義,由使用者自由使用,

    可以存放程式變數用,然而程式執行時,可設定為堆疊區( 執行 CALL、PUSH、

    POP 指令會用到),堆疊區的大小由使用者自行設定,例如,當 SP 值設定為 2FH

    時,則 8051 可用堆疊 區就為 30H~7FH。

    2.3.6 特殊功能記憶體

    8051 系列單晶片單晶片內部有一塊 128 Bytes 可直接定址的

    記憶體區,其直接定址位址為 80H~FFH,它是用來存放週邊元件 控

    制、狀態及資料的暫存器,稱之為特殊功能暫存器( SFR )。

    下圖說明特殊功能暫存器的名稱與各記憶體之間的關係。

    表 2.2 特殊功能暫存器名稱與各記體的關係

  • 11

    SFR 與它們位址的列表

    在這些特殊功能暫存器中,有些是可位元定址(Bit-addressable) 的。位元

    位址範圍 00H~7FH是落在內部資料記憶體 20H~2FH 中,而位元位址範圍

    80H~FFH則落在這些特殊功能暫存器中。

    以下將說明SFR中各暫存器的功能及用途:

    (1) 累加器( Accumulator,ACC ):

    累加器又可稱之為ACC或A暫存器,這是一個使用頻率頗高的一

    個通用暫存器,而有許多指令是以其為操作對象。

    (2) B 暫存器:

    在做乘法指令( MUL )及除法指令( DIV )運算時,必須以B暫

    存器為操作對象之一。也就是說,在做乘法/除法運算之前必須將

    運算資放入A及B暫存器中,而運算之後的結果會放入 A,B暫存器

    中。

    (3) 程式狀態字語( Program Status Word,PSW )暫存

    器:

    PSW 暫存器主要是記錄及控制單晶片之運算。

    如下表所示:

    表 2.3 暫存器說明

    CY(PSW.7):進位旗標。

    AC(PSW.6):輔助進位旗標。

    F0(PSW.5):一般用途旗標。

    RS1(PSW.4):暫存器庫選擇位元 1。

    PS0(PSW.3):暫存器庫選擇位元 0。

    OV(PSW.2):溢位旗標。

    (PSW.1):保留。

    P(PSW.0):同位旗標。

  • 12

    在每個指令週期中,若累積器內的"1"的 位元個數是奇數個則P=1,偶數個則

    P=0。

    (4) 堆疊指標器( Stack Pointer,SP ):

    SP是管理堆疊的一個暫存器,用來指出最近一次資料推入(Push)

    堆疊時的內部資料記憶體位址。每次執行 PUSH 指令時,SP 值自動

    加一,然後再將資料推入堆疊中;反之,執行 POP 指令時,資料先

    彈出(Pop)堆疊後,SP 再自動減一。另外執行副 程式呼叫指令( CALL )

    或中斷時,程式計數器( PC )的值亦會推入堆疊中,而執行副程式返

    回指( RET/RETI )時會將堆疊內的 資料回存到程式計數器中,以正

    確地返回到原程式的呼叫點。

    (5) 資料指標器( Data Pointer,DPTR ):

    DPTR 是一個 16 位元的暫存器,它是由兩個 8 位元的暫存器

    DPH(高位元組)及 DPL(低位元組)所組成。 DPTR 的最主要用 途是用

    來指向程式或資料記憶體的每一個位址,以便存取程式 碼或資料。當

    DPTR 指向程式記憶體時,我們可以用 MOVC 指令來讀取程式記憶體中

    的資料,當 DPTR 指向資料記憶體時,我們可用MOVX指令來存放或讀

    取資料記憶體中的資料。

    (6) P0、P1、P2、P3 埠暫存器:

    這四個埠暫存器可存放 8051 單晶片的 4 個 I/O 埠的輸出閂

    鎖 ( Latch ),主要是存放並保持 I/O 的輸出資料。

    (7) 中斷優先權( Interrupt Priority,IP )暫存器:

    每一個 IP 暫存器位元可用來控制各中斷的優先權階層,當設定為 1 時,表示

    享有較高的中斷優先權,而設定為 0 時其優先權較低。

    (8) 中斷致能( Interrupt Enable,IE ):

    由於所有的中斷皆為可遮罩的( Maskable ),這些中斷就是由 IE 暫存器來加以

    致能/除能( Enable/Disable )的

    (9) TH0~TH2、TL0~TL2 計時器/計數時暫存器:

    這 3 組 16 位元的暫存器是分別用來儲存計時器/計數器的計時

    /計數值。TH0、TH1、TH2 為高位元組,TL0、TL1、TL2 為低位元組。

    TH0 及 TL0 對應於計時器/計數器 0,TH1 及 TL1 對應於計時器/計

  • 13

    數器 1,TH2 及 TL2 對應於計時器/計數器 2 (8052 系列)。

    (10)計時器模式控制(Timer/Counter Mode Control,TMOD)暫存器

    表2.4 計時器模式控制暫存器

    表 2.5 計時器動作模式對照表

    (11) 計時器控制( Timer Control,TCON )暫存器

    表 2.6 計時器暫存器說明

  • 14

    (12) 串列埠控制( Serial Port Control )暫存器:

    表2.7 串列埠暫存器說明

    表 2.8 串列埠動作模式對照表

    (13)串列資料緩衝( Serial Data Buffer,SBUF )暫存器:

    8051 單晶片的串列埠是全雙工的,故實際上 SBUF 暫存器分開為兩個不同

    的暫存器,一個是當作 UART 傳送資料的緩衝區,另一個是當作 UART 接收資料

    的緩衝區。若將資料寫到 SBUF 時,就會將資料放入傳送緩衝區,UART 就會將

    這個資料轉成串列資料透過 TXD 傳出去。若去讀 SBUF,就會讀到接收緩衝區的

    資料。

  • 15

    第三章馬達之簡介

    3.1電動機的種類與原理

    電動機即為工業界俗稱的馬達,種類依照使用電源可分成直流馬達(DC

    Motor)與交流馬達(AC Motor)兩大類,若再以控制方式、啟動方式與繞組方式分

    類則可分成步進馬達(Stepping Motor)、伺服馬達(Servo Motor)、無刷馬達(霍

    爾馬達)、單相交流馬達、三相感應馬達、串激式直流馬達、分激式直流馬達、

    與複激式直流馬達等。

    其中無刷馬達又稱作直流伺服馬達(DC Servo Motor),直流伺服馬達之特性

    與直流馬達相似,兩者的差異在於直流伺服馬達利用角度編碼器(Encoder)與轉

    速發電機(TG)將馬達的轉速、扭矩等物理量檢出,再利用控制器將回授訊號

    作運算,達到控制直流伺服馬達的輸出特性,同時利用霍爾元件取代電刷,因此

    在結構上直流伺服馬達除了感測器部份以外,其餘均與一般的電動機相仿。以下

    分別討論直流馬達與無刷馬達的構造與原理,以及各類馬達性能之比較。

    下圖為馬達之基本構造示意圖,一般的電動機在構造上可以分成五個部份

    圖3.1 馬達之基本構造

  • 16

    1、電樞(Armature)或轉子(Rotor):為馬達旋轉的部份,材質為永久磁鐵、

    線圈(外接電源)、導線(無外接電源)或特殊形狀之導磁材料。

    2、場繞組(Field)或定子(Stator):材質為永久磁鐵或是線圈(外接電源)。

    3、滑環(Slip Ring)或換向器(Commutator,如直流馬達之碳刷):連接轉

    子繞線至外部換向器用於改變電樞繞線之電流方向,使用永久磁鐵為轉

    子材質的馬達則無需滑環或換向器。

    4、軸承(Bearing):可使用滾珠、滾針、滾柱、含油自潤軸承,主要提供轉

    子穩固的支撐。

    5、馬達控制器(Motor Controller):包含控制馬達的輸出扭矩、速度或轉

    角,以及大型馬達起動、停止之順序控制。控制器種類也相當多,如單

    相交流馬達使用的電容分相啟動器,直流馬達使用的功率控制器、變頻

    器、或是伺服馬達控制器等,都是屬於馬達控制器。

    雖然電動機的種類相當多,不過各種電動機的基本操作原理都相同,都是利

    用電流流過定子產生磁場,當轉子也通上電流時由於切割定子所產生的磁力線而

    生成旋轉扭矩造成電動機轉子的轉動。如下圖所示,假設轉子之繞組只有一組線

    圈時,當轉子線圈通上電流時由於切割定子所產生的磁力線而生成旋轉扭矩,致

    使轉子轉動,以下圖而言,定子的磁力線由左至右,而轉子的電流方向為由右方

    流入左方流出,因此生成的旋轉扭矩使得轉子順時針旋轉。

    圖3.2 轉子順時針旋轉

  • 17

    直流馬達之基本構造均與上圖類似,其他種類電動機的基本構造則只是在定

    子部份有所差異,例如交流感應電動機由於交流電源有相角差之緣故,因此定子

    的磁場由固定磁場變成旋轉磁場,此外場繞組(定子)的接線方法也有所謂“Y

    接法"、“Δ接法"、或是“Y-Δ接法"。

    3.2無刷馬達的構造與原理

    電動機構造中滑環由於是採用接觸式通電的方式,所以也稱作電刷。在直流

    電機中常以石墨作為電刷的材質,電刷長期與電動機的轉子摩擦會造成相當程度

    的噪音,同時也會因磨耗而需要考慮維修的問題。在交流電動機中電刷則採用金

    屬材料製作,在長期磨耗下會造成間隙(Gap),容易在運轉時發出火花,諸如此

    類的問題都對電動機的可靠度與安全性有相當程度的影響。

    無刷馬達就是在這樣的需求下產生,無刷馬達在構造上是利用永久磁鐵作為

    轉子,並且利用霍爾效應感應電動機轉子的位置,當轉子之相位為時令定子激

    磁,如此可以達到最高的運轉效率,利用這樣的原理也可以使用在四行程機車引

    擎點火正時上。霍爾效應滿足以下關係式

    由上式可以瞭解霍爾電壓與磁通密度(磁場強度)及霍爾電流成正比,因此

    當轉子之磁軸與霍爾元件不同軸時,磁通較小,為了維持固定的霍爾電壓必須增

    大霍爾電流,如此便能精確的算出定子的激磁順序與時間。霍爾元件與直流馬達

    所構成的無刷馬達如下圖所示。

    圖3.3 霍爾元件與直流馬達所構成的無刷馬達

  • 18

    如上圖所示,當轉子磁軸與霍爾元件同軸時,霍爾元件與S極距離最短,因

    此磁通密度最高,此時造成霍爾元件A端子電壓較大,使得電晶體Q1導通,則線

    圈L1內有i1電流流通,因此線圈L1呈激磁狀態,依據右手定則得知線圈L1右側為

    S極,故轉子反轉。當轉子S極遠離霍爾元件時造成磁通密度下降,因此A、B端不

    再產生霍爾電壓電晶體Q1、Q2呈OFF狀態,轉子因受慣性作用繼續反向旋轉。當

    轉子N極轉至霍爾元件時,造成霍爾元件B端子電壓較大,使得電晶體Q2導通,則

    線圈L2內有i2電流流通,因此線圈L2呈激磁狀態,轉子再度受磁力作用反轉,依

    照如此程序轉子持續轉動。上圖因為有兩組場繞組線圈因此稱作二相無刷直流伺

    服馬達,當控制精度要求更高時,可以增加場繞組線圈數目與霍爾元件數目,因

    此工業上常使用的四相、五相無刷馬達,即是指此類運用霍爾元件製成的無刷直

    流伺服馬達。

    無刷直流伺服馬達由於利用霍爾元件感應激磁順序與時間,因此又稱作「電

    子換相馬達」,利用霍爾元件感應激磁順序與時間可以減少不必要的電能浪費,

    同時也可以適時的提供轉子轉動所需的電磁力,因此大幅提升馬達輸出扭矩與效

    率。

    3.3直流馬達控制原理

    要控制直流馬達的啟動以及停止,可使用圖2-6所示的共射極達靈頓電路來

    完成,當輸入端ML_ONOFF=1時,電晶體Q3、Q8飽和導通,C點約為飽和電壓0.3V,

    因此馬達M2啟動,顯示燈L1亮;反之,當輸入端ML_ONOFF=0時,電晶體Q3、Q8

    截止不通,C點浮接,因此馬達停止,L1不亮。

    當輸入端ML_ONOFF=1馬達轉動時,電源VDD向馬達線圈充電,在線圈上儲存

    了能量,根據楞次定理,當ML_ONOFF=0,C點浮接時,在線圈二端將出現一逆向

    電動勢VR。

    其中N為馬達的線圈匝數。此負電壓加上VDD,將在C點形成極高的電壓,非

    常容易對電晶體Q3、Q8造成破壞打穿,因此,為了保護電晶體免受馬達線圈逆向

    電動勢的破壞,可在M2兩端接二極體D10,當電晶體截止,逆向電動勢出現時可

    予以吸收掉,而達到保護作用。此二極體D10稱為飛輪二極體。

  • 19

    3.4直流馬達之特性曲線與選用方式

    下圖所示為12伏特直流馬達特性曲線圖,橫軸為輸出轉矩,縱軸則分別為轉

    速、電流以及效率與輸出功率。

    圖3.4 直流馬達特性曲線圖

    直流馬達與其他馬達最大的差異在於其“轉速-轉矩"與“電流-轉矩"

    特性均為線性關係,因此在一般需要做到轉速、轉矩控制的場合中,若控制精度

    不需很高的情況下,同常以直流馬達作為致動器是較為經濟的選擇。

    選用動力電動機時必須考量的因素包含輸出負荷大小、馬達輸出扭力、與轉

    速曲線特性,同時也要考慮電源形式與運轉模式。在選用直流馬達時,必須注意

    它的工作電壓,直流馬達電源常見規格為DC12V與DC24V,交流馬達則為AC110V

    與AC220V;另外還要知道輸出扭矩大小(g-cm、kg-cm),以及轉速(rpm),當然 最

    好能有馬達特性曲線,如電流轉矩圖與電流轉速圖等,以方便作為選用馬達時的

    參考。計算扭力需求時,先計算欲旋轉的物體轉動慣量,再參考旋轉速度決定減

    速比,然後決定馬達工作扭力值,即可依照馬達特性選擇適用型式。

  • 20

    以下便以表格的方式列出電動機之分類與驅動控制方法,可比較在不同的使

    用條件下各種電動機的優劣。

    表3.1 馬達比較表

    三相感應馬達 單相感應馬達 直流馬達 伺服馬達 步進馬達

    驅動訊號 交流 交流 直流 直流/交流 脈衝

    控制方式 1、工業電子

    2、變頻器

    1、工業電子

    2、變頻器

    工業電子 1、閉迴路

    2、Encoder

    1、開迴路

    2、步級角

    應答時間 0.15sec 0.2sec

    優點 高速大轉矩 構造簡單 構造簡單 高速高應答 低價位高精度

    缺點 體積龐大 需啟動器 出力較小 複雜、價高 失步、噪音

    運用場合 大動力提供 較小動力提供 小動力提供 高速高精度 低速高精度

  • 21

    第四章 感測器之介紹

    4.1 感測器之介紹與用途

    光感測器可以大分為兩種,其中之一為將發光-受光的元件相對放置,以檢出

    當中是否有間隔物體,稱之為「透過型光感測器」。另一種為將發光-受光之各元

    件並排,受光元件藉由偵測出發光元件所發射後經由障礙物所反射的光,稱為「反

    射型光感測器」。

    自走車利用CNY70感測器偵測路面,藉著黑色膠帶所貼好的行動路線來移

    動,並且在偏移軌道時能發出訊號給8051控制晶片,而8051控制晶片則針對傳來

    的信號,自動效正移動路線至軌道上。

    接收訊息0、1來判斷是否轉彎,由00100、00001、10000、00010、01000、

    11111四種分別為前進、右迴轉、左迴轉、向右修正、向左修正和停止。而感測

    器就是借由用晶CNY70感測地面上的膠帶,做為車子的行走方向,並把訊息傳遞

    給MSC-51。

    4.2 感測器驅動電路與動作原理

    5伏特電源經由330Ω的限流電阻提供給紅外線發射器穩定的電壓,使紅外線

    發射器穩定而持續地發出紅外線。當光電晶體接收到反射回來的紅外線時,則光

    電晶體會依靈敏度的大小而飽和,使射極電壓接近 5V,再經由4584史密特反向

    觸發器,使輸出等於0V。其中使用500K 可變電阻的目的是再調整電路的靈敏度,

    當500K Ω可變電阻調小時,Ie 較大,光電晶體較容易飽和,也就是靈敏度較高,

    相反的,當500K Ω可變電阻調大時,靈敏度較低。

    IC4584 是一個史密特反向觸發器,它兼具有史密特觸發器以及反向閘的功

    能,在這裡使用史密特觸發器的目的就是過濾外界干擾,避免受外界的小變動就

    使輸出狀態改變,發出錯誤的訊息。而當CNY70在電工膠帶所貼的導引道路上時,

    因電工膠帶為黑色會吸光,因此CNY70發光二極體所發射的紅外線無法反射至光

    電晶體,光電晶體幾近截止,射極電壓為低態,而電壓經4584取反相後,輸出為

    高態,LED亮。再將輸出接至控制晶片由8051處理。

  • 22

    4.3 晶片CNY70

    CNY70 紅外線感測器:

    CNY70 是一個紅外線反射光感測器,它只接受紅外線,所以對於其它外界干

    擾的光線使用光濾波器來過濾掉,並透過光電晶體偵測是否有反射回來的紅外線

    光,以瞭解障礙物的存在。

    CNY70內部結構:

    1.紅外線發光二極體: 類似發光二極體(LED燈)的功能,當 PN 兩端加上順向偏壓時可發出波長

    為800nm 的紅外線不可見光。

    2.光電晶體:

    為一個對紅外線波長具敏感反應的光偵測元件,當光電晶體受紅外線光照

    射時為低阻抗,而未受光時呈現高阻抗。

    3.光濾波器:

    唯一僅讓波長為紅外線附近光譜通過的濾光透境,可用來加強光電晶體的

    雜訊對抗能力,降低紅外線光以外的干擾。

    4.4 感測器電路圖

    ISO1

    CNY70

    R24330

    R34500K

    R101K

    VCC

    感測器電路

    12

    U3A4584

    ISO2

    CNY70

    R25330

    R35500K

    R121K

    34

    U3B4584

    ISO3

    CNY70

    R26330

    R36500K

    R131K

    56

    U3C4584

    R27330

    D1LED

    SensorLSensorCSensorR

    R32330

    D2LED

    R33330

    D3LED

     

    圖 4.1 感測器整體電路圖

  • 23

    圖 4.2 感測器電路圖

  • 24

    第五章 電路&功能

    5.1 程式設計對策

    光感測器的放置位置與導引線間的關係是非常重要的,若三個光感測器

    L、C、R的位置排列如圖所示,則因兩個兩個間相距太大,使得自走車行進

    間偏離導引線很大時才修正,造成車子蛇行;若排列如圖(b),則因兩個兩

    個間相距太小,使得自走車時時修正,造成車子抖行,這也是不理想的;適

    當的排列是有助於自走車順利行進的。

    導引線 導引線 導引線

    光感測器放置位置圖(a)距離太寬 (b)太窄 (c)剛好

  • 25

    根據五個光感測器 LL、L、C、R、RR 在導引線上所偵測到的不同狀況,

    以及相對應之左右輪馬達應有的反應,我們可以將其寫出如下表所示的控制

    模式,根據此表,要寫出自走車的自動行走程式即變得非常容易。

    表 5.1 自走車的導引控制模式對策

    感測器狀況 處理情況

    (LCR) 自走車狀況 對策

    左輪 右輪

    11111 LL、L、C、R、RR 皆未感測到線,

    代表車子到達停止區 停止 停止 停止

    00001 RR 感測到線,

    代表車身極偏導引線的左邊 右迴轉 前進 後退

    10000 LL 感測到線,

    代表車身極偏導引線的右邊 左迴轉 後退 前進

    00010 R 感測到線,

    代表車身稍偏導引線的左邊 向右修正 前進 停止

    01000 L 感測到線,

    代表車身稍偏導引線的左邊 向左修正 停止 前進

    00100 C 感測到線,

    代表車子剛好在適當位置上 前進 前進 前進

  • 26

    根據上表自走車的導引控制模式對策,我們可以很輕鬆地將其轉成實體控

    制的控制信號,如下表所示。根據此表,祗要在程式中先行讀入 MCS-51 P3.1~

    P3.5 的 LL、L、C、R、RR 感測訊號,然後利用 CJNE 的比較指令,一個一個比較,

    一個狀態一個狀態處理,即可完成本實驗的自走車控制。

    5.2 程式流程圖

    輸入 P1 資料至 A 並且輸出至 P3 之 LED 顯示

    停止 感應=11111 Yes

    No

    右迴轉 感應=00001 Yes

    No

    左迴轉 感應=10000 Yes

    No

    右修正 感應=00010 Yes

    No

    左修正 感應=01000 Yes

    開始

  • 27

    圖 5.1 程式流程圖

  • 28

    5.3 電路圖

    5.3.1 電源電路

    12D1

    DC_IN

    VCCS1

    SW-ONOFF

    圖 5.2 電源電路

    5.3.2 RESET

    10K

    R7RES400

    10uF

    C1Cap Pol1

    VCC

    RESET

    VCC

    S2SW-PB

    圖 5.2 RESET 電路

  • 29

    5.3.3 紅外線感測

    VCC

    330R3

    VCC VCC

    330R4

    VCC VCC

    330R5

    VCCVCC

    330R2

    VCCVCC

    330R1

    VCC

    11

    22

    33

    44

    55

    66

    77

    *1

    7PIN_Connector

    VCC

    SENSOR1

    CN70

    SENSOR2

    CN70

    SENSOR3

    CN70

    SENSOR4

    CN70

    SENSOR5

    CN70

    圖 5.3 感測器電路

  • 30

    11

    22

    33

    44

    55

    66

    77

    *1

    7PIN_Connector

    VCC

    500KR81KR2500KR91KR3500KR101KR4500KR111KR5500KR121KR6

    Center

    Left2Left1

    Right1Right2

    圖 5.4 7PIN_Connector 和感測器之間電路

    5.3.4 單晶片主電路

  • 31

    12

    X1XTAL

    30pF

    C2

    Cap30P

    30pF

    C3

    Cap30P

    VCC VCC

    VC

    C40

    VSS

    20

    EA

    /VP

    31

    XTAL119

    XTAL218

    RESET 9

    P3.2(INT0) 12P3.3(INT1) 13

    P3.4(T0) 14P3.5(T1) 15

    P1.0 1P1.1 2P1.2 3P1.3 4P1.4 5

    P1.5 6P1.6 7P1.7 8

    P0.0(AD0)39

    P0.1(AD1)38

    P0.2(AD2)37P0.3(AD3)36P0.4(AD4)35P0.5(AD5)34P0.6(AD6)33P0.7(AD7)32

    P2.0(A8)21

    P2.1(A9)22

    P2.2(A10)23

    P2.3(A11)24

    P2.4(A12)25

    P2.5(A13)26

    P2.6(A14)27

    P2.7(A15)28

    P3.7(RD) 17P3.6(WR) 16

    PSEN 29

    ALE/P 30

    P3.1(TXD) 11

    P3.0(RXD) 10

    U1

    89C51-DIP

    RESET

    DS2DS3DS4

    Left WheelRight Wheel

    DS1

    LED0

    Center

    Left2Left1

    Right1Right2

    DS5DS6

    1 1

    2 233445566778899

    RP1

    RP9

    VCC

    VCC

    圖 5.5 單晶片主電路

  • 32

    5.3.5 伺服馬達控制電路

    Left Wheel Right WheelSignal1

    VDD2

    GND3

    Servo1

    S*

    Signal1

    VDD2

    GND3

    Servo2

    S*

    VCC VCC

    圖 5.6 伺服馬達控制電路

    5.4 實驗過程

    這次實驗我們是利用礦泉水瓶裝水量約 1600CC,讓自走車依照設定黑色

    路線行走,過程中發現車子進路彎道靈敏度較為不足,導致無法順暢行走,我們

    利用可變電阻來提高感測元件的靈敏度來解決這個問題,以下是我們實驗過程的

    圖照:

    圖 5.7 自走車正反面構造圖

  • 33

    圖 5.8 自走車感測器亮燈情形

  • 34

    圖 5.9 實際測試狀態圖

    結論:

    在完成這個專題後,我們不難發現自走車它結合了電腦方面的軟

    體設計,電子電機方面的電路佈線與焊接,機械方面的車體製造及整

    合各方面的控制能力,可以說是我們研究與應用最佳的題材,因此當

    自己製造的成品出爐後,心情自然十分喜悅。

    當然在整個專題製作的過程中,我們也遭遇到許多困難,在程式

    設計部分,自己所寫的程式往往不能符合預期的動作,需一再修改;

  • 35

    在整合各種電路時一直出錯,電路板是洗了又洗,焊接焊到手抽筋,

    真的是令人頭大,還好我們最後還是能順利的解決問題,並把專題如

    期完成了。

    不過在這專題製作期間真的讓我們學習到不少東西,加強了我們

    在電機、電子、機械、控制及程式設計等軟硬體的認知與實作能力,

    特別是對8051、馬達和感測器方面的基本概念,有了更深一層的認

    識。這都是製作專題時,所得到的寶貴收穫,如何把自己所學到的東

    西應用在生活中,才是作專題最終的目的。

    參考文獻: 1. 鍾自立、張正賢編,8051 實作與燒錄器製作,宏友書局,

    2000

    2. 李齊維、游國幹編,8051 單晶片微電腦原理與實作,儒林

    圖書,1996

    3.蔡朝洋,單晶片微電腦 8051/8751 原理與應用,全華,2001

    4.黃東正,單晶片微電腦專題製作論壇,儒林,2004

    5.賴麒文,C 與 8051 單晶片韌體設計,文魁,2002

  • 36

    6.賴麒文,8051 單晶片之嵌入式系統,文魁,2002

    7.陳明熒,單晶片 8051 實作入門,文魁,2005

    8.張義和,電腦輔助電路設計快速入門,全華,2003

    9.張義和,電腦輔助電路設計-全紀錄、全華,2004

    10. 楊忠煌、黃博俊、李文昌編,單晶片 8051 實務與應用,

    全華書局,2000

    附錄:

    程式

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

    DEA EQU 3 ;Forward

    DEB EQU 25 ;Backward

    TS EQU 5

    TEMP EQU 30H

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

    PUL REG P2.1 ;Rigth

    PUR REG P2.2 ;Left

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

  • 37

    START:

    CLR PUL ;清除 P2.1

    CLR PUR ;清除 P2.2

    LOOP:

    ; SCAN KEY ON...............

    MOV A,P3 ;輸入 P3 至 A

    RR A ;A 向右旋轉 1位元

    ANL A,#00011111B ;A 與 00011111 進行 AND 邏輯運算

    MOV P1,A ;輸出 A 至 P1

    MOV TEMP,A ;將 A 資料送至 TEMP

    CJNE A,#00011111B,X0 ;A 不等於 00011111 則跳至 X0

    JMP LOOP ;跳至 LOOP

    X0: ANL A,#00000001B ;A 與 00000001 進行 AND 邏輯運算

    CJNE A,#00000001B,X1 ;A 不等於 00000001 則跳至 X1

    CALL GO_RIGHT ;呼叫 GO_RIGHT 副程式

    JMP LOOP ;跳至 LOOP

    X1: MOV A,TEMP ;將 A 資料送至 TEMP

    ANL A,#00010000B ;A 與 00010000 進行 AND 邏輯運算

    CJNE A,#00010000B,X2 ;A 不等於 00010000 則跳至 X2

    CALL GO_LEFT ;呼叫 GO_LEFT 副程式

    JMP LOOP ;跳至 LOOP

    X2: MOV A,TEMP ;將 A 資料送至 TEMP

    ANL A,#00000010B ;A 與 00000010 進行 AND 邏輯運算

    CJNE A,#00000010B,X3 ;A 不等於 00000010 則跳至 X3

    CALL PU_FOR ;呼叫 PU_FOR 副程式

    JMP LOOP ;跳至 LOOP

    X3: MOV A,TEMP ;將 A 資料送至 TEMP

    ANL A,#00001000B ;A 與 00001000 進行 AND 邏輯運算

    CJNE A,#00001000B,X4 ;A 不等於 00001000 則跳至 X4

    CALL PUR_BACK ;呼叫 PUR_BACK 副程式

    JMP LOOP ;跳至 LOOP

    X4: MOV A,TEMP ;將 A 資料送至 TEMP

    ANL A,#00000100B ;A 與 00000100 進行 AND 邏輯運算

  • 38

    CJNE A,#00000100B,X5 ;A 不等於 00000100 則跳至 X5

    CALL GO_FOR

    X5: JMP LOOP ;跳至 LOOP

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

    ; DELAY R5*10 ms

    DELAY:

    MOV R6,#50 ;R6=50

    D1: MOV R7,#100 ;R7=100

    DJNZ R7,$ ;R7 遞減

    DJNZ R6,D1 ;R6 遞減,若是為 0則跳至 D1

    DJNZ R5,DELAY ;R5 遞減,若是為 0則跳至 DELAY

    RET ;返回

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

    PU_BACK: SETB PUL

    MOV R4,#DEA ;R4=DEA

    A1: CALL DEL ;呼叫 DEL 副程式

    DJNZ R4,A1 ;R4 遞減,若是為 0則跳至 A1

    CLR PUL ;清除 PUL

    MOV R4,#(200-DEA) ;R4=200-DEA

    A2: CALL DEL ;呼叫 DEL 副程式

    DJNZ R4,A2 ;R4 遞減,若是為 0則跳至 A2

    RET ;返回

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

    PU_FOR: SETB PUL ;設定 PUL

    MOV R4,#DEB ;R4=DEB

    B1: CALL DEL ;呼叫 DEL 副程式

    DJNZ R4,B1 ;R4 遞減,若是為 0則跳至 B1

    CLR PUL ;清除 PUL

    MOV R4,#(200-DEB) ;R4=200-DEB

    B2: CALL DEL ;呼叫 DEL 副程式

    DJNZ R4,B2 ;R4 遞減,若是為 0則跳至 B2

    RET ;返回

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

    ; DELAY R5*0.1 ms

  • 39

    DEL:

    MOV R5,#1 ;R5=1

    DELAY1:

    MOV R6,#2 ;R6=2

    F1: MOV R7,#17 ;R7=17

    DJNZ R7,$ ;R7 遞減

    DJNZ R6,F1 ;R6 遞減,若是為 0則跳至 F1

    DJNZ R5,DELAY1 ;R5 遞減,若是為 0則跳至 DELAY1

    RET ;返回

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

    PUR_BACK: SETB PUR ;設定 PUR

    MOV R4,#DEA ;R4=DEA

    G1: CALL DEL ;呼叫 DEL 副程式

    DJNZ R4,G1 ;R4 遞減,若是為 0則跳至 G1

    CLR PUR ;清除 PUR

    MOV R4,#(200-DEA) ;R4=200-DEA

    G2: CALL DEL ;呼叫 DEL 副程式

    DJNZ R4,G2

    RET ;返回

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

    PUR_FOR: SETB PUR ;設定 PUR

    MOV R4,#DEB ;R4=DEB

    H1: CALL DEL ;呼叫 DEL 副程式

    DJNZ R4,H1 ;R4 遞減,若是為 0則跳至 H1

    CLR PUR ;清除 PUR

    MOV R4,#(200-DEB) ;R4=200-DEB

    H2: CALL DEL ;呼叫 DEL 副程式

    DJNZ R4,H2 ;R4 遞減,若是為 0則跳至 H2

    RET ;返回

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

    GO_FOR:

    MOV R3,#TS ;R3=TS

    J1: CALL PU_FOR ;呼叫 PU_FOR 副程式

    CALL PUR_BACK ;呼叫 PUR_BACK 副程式

    DJNZ R3,J1 ;R3 遞減,若是為 0則跳至 J1

    RET ;返回

  • 40

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

    GO_BACK:

    MOV R3,#TS ;R3=TS

    S1: CALL PU_BACK ;呼叫 PU_BACK 副程式

    CALL PUR_FOR ;呼叫 PUR_FOR 副程式

    DJNZ R3,S1 ;R3 遞減,若是為 0則跳至 S1

    RET ;返回

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

    GO_LEFT:

    MOV R3,#TS ;R3=TS

    M1: CALL PU_BACK ;呼叫 PU_BACK 副程式

    CALL PUR_BACK ;呼叫 PUR_BACK 副程式

    DJNZ R3,M1 ;R3 遞減,若是為 0則跳至 M1

    RET ;返回

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

    GO_RIGHT:

    MOV R3,#TS ;R3=TS

    Q1: CALL PU_FOR ;呼叫 PU_FOR 副程式

    CALL PUR_FOR ;呼叫 PUR_FOR 副程式

    DJNZ R3,Q1 ;R3 遞減,若是為 0則跳至 Q1

    RET ;返回

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

    END ;程式結束�