實驗四 步進電機原理及應用

1、實驗目的和要求編程

     瞭解步進電機的工做原理,學習用單片機的步進電機控制系統的硬件設計方法,掌握定時器和中斷系統的應用,熟悉單片機應用系統的設計與調試方法。編程語言

 

2、實驗設備函數

     1.單片機測控實驗系統工具

     2.步進電機控制實驗模塊學習

     3.Keil開發環境spa

     4.STC-ISP程序下載工具設計

3、實驗內容調試

 

     1.編制MCS-51程序使步進電機按照規定的轉速和方向進行旋轉,並將已轉動的步數顯示在數碼管上。內存

     2.步進電機的轉速分爲兩檔,當按下S1開關時,進行快速旋轉,速度爲60轉/分。當鬆開開關時,進行慢速旋轉,速度爲10轉/分。當按下S2開關時,按照順時針旋轉;當鬆開         時,按照逆時針旋轉。開發

     3.本程序要求使用定時器中斷來實現,不許使用程序延時的方式。

4、實驗步驟

    1.預習       參考輔助材料,學習C51編程語言使用和步進電機原理。

    2.簡單程序錄入和調試

      本程序須要使用定時器定時,並使用中斷來同步。

      中斷程序的典型例子以下:

       格式:void 函數名()interrupt 中斷號 using 工做組  

    {   

           中斷服務程序內容   

       }  

    注意:中斷不能返回任何值,因此前面是 void 後面是函數名,名字能夠本身起,但不要與c語言的關鍵字相同;中斷函數不帶任何參數,因此 函數名後面的()內是 空的,中       斷號是指單片機的幾個中斷源的序號。這個序號是單片機識別不一樣中斷的惟一標誌。因此必定要寫正確。 後面的using 工做組 是指這個這個中斷使用單片機內存中 4 個工做寄      存器的哪一組,c51 編譯後會自動分配工做組,所以最後這句話咱們一般省略不寫。

      c51 中斷寫法實例  

      void T1-time() interrupt 3   

       {   

              TH1=(65536-50000)/256;  

            TL1=(65536-50000)%256;   

       }

       上面的意思是定時器 1 的中斷服務程序,定時器 1 的中斷服務序號是 3 ,所以咱們要寫成 interrupt 3 ,服務程序的內容是給 兩個初值寄存器裝入新值。。   

       寫中斷前的準備:

       2.1. TMOD 賦值 肯定工做方式。T0 仍是T1 的工做方式。  

     2.2.計算初值 裝入 TH0 TL0 或者 TH1 TL1   

       2.3.中斷方式時 ,對 IE 賦值,開放中斷。   

       2.4. 使 TR0 和 TR1 置位,啓動定時器/計數器 定時/計數。

 

   3.程序調試及現象觀測

      用單步、斷點、連續方式調試程序,觀察狀態指示燈及電機狀態,檢查運行結果。若是須要,能夠將四個輸出信號的狀態同時輸出到P0口的某些位上,便於觀察。

5、實驗原理

      1. 定時器中斷

       使用定時器時,首先應由外部條件獲得要定時的時間長度t,如本實驗中,就是根據要求的速度計算出的每一步之間的間隔。而後選擇適當的定時器工做方式,去計算想要設定        的計數器初值s,使用以下方程。

     (2定時器最大位數 - s)× 定時週期 =t    (2的多少次方)

       定時週期 = 12/CPU晶振頻率

注意#1. 獲得的s須要分紅高8位和低8位,分別放入計數器THx和TLx中(x爲0或1)。若是s爲負數,說明須要的定時時間太長,即便定時器的最大時間也沒法知足要求。這                    種狀況下,須要加入軟件循環才能實現。咱們能夠將須要的定時時間分紅n份,利用定時器達到t/n的時間長度,而後在定時器處理程序中,累計某一變量,若是到達                    n,說明總的時間t已經達到。

      #2.要想使用定時器中斷,除了上面的定時器初值設定外,還須要將其餘相關的特殊功能寄存器也都設置好。若是使用方式0和方式1,不要忘記在計數結束後從新恢復計數器初           值。

   2.咱們使用的單片機系統的頻率是12M;步進電機轉動一週須要24步。

      本步進電機實驗板,使用FAN8200做爲驅動芯片。CPU經過以下4個引腳與FAN8200相連。

cpu FAN8200

P1.1

CE1
P1.4 CE2
P3.2 IN1
P1.0 IN2

       本實驗使用簡單的雙四拍工做模式便可,這也是FAN8200比較方便的工做方式。只要將CE1和CE2分別置爲高,而後IN1和IN2按照預約的脈衝輸出,即01->11->10->00-        >01這個循環構成一個方向旋轉的輸出脈衝,將此序列翻轉,就是相反方向的輸出脈衝。

 

6、思考題

      1. 如採用單四拍工做模式,每次步進角度是多少,程序要如何修改?

      2. 如採用單雙八拍工做模式,每次步進角度是多少,程序要如何修改?

      3. 步進電機的轉速取決於那些因素?有沒有上、下限?

      4. 如何改變步進電機的轉向?

      5. 步進電機有那些規格參數,如何根據須要選擇型號?

如下是彙編程序:

ORG 0000H ;復位起始地址
LJMP START
ORG 000BH ;中間地址保留給中斷向量表
LJMP EINT0 ;定時器0中斷程序入口地址
ORG 0040H ;程序實際起始地址
START:
P4 EQU 0C0H
P4SW EQU 0BBH
CLK EQU P4.4 ;時鐘線
DAT EQU P4.5 ;數據線
SW EQU P3.6

MOV P4SW,#70H
MOV DPTR,#TAB ;s = 23869 --5D3E

LP:
MOV R3,#0 ;計數
MOV R4,#0
MOV R5,#0
I1: MOV TMOD,#01H ; 選擇工做方式,即對TMOD 賦初值。T0都工做在方式1,16位的計數器 GATE(GATE -門控位,控制定時器的兩種啓動方式,)等於0,不受外部控制

MOV IE,#82H ;全局中斷,T0中斷容許 中斷控制字;直接對中斷容許寄存器IE 和 優先級寄存器 IP 設置
;ORL IP,#2H ;邏輯或,T0中斷優先級高

SETB P1.1 ;CE1置高
SETB P1.4 ;CE2置高



NEXT:
JB P3.7,OPP ;若是P3.7等於1則轉移
MOV R0,#00101101B ;按下,順時針
MOV 20H,R0

LJMP SS1
OPP: MOV R0,#01111000B ;鬆開,逆時針
MOV 20H,R0
SS1:
JB P3.6,SPD
MOV R2,#0H ;按下,快速 ;23870 5D3E
LJMP L0
SPD: MOV R2,#1H ;鬆開,慢速


L0: MOV R1,#4
MOV R0,20H
L1: MOV A,R0
RLC A ;循環左移操做
MOV P3.2,C ;IN1
RLC A
MOV P1.0,C ;IN2
MOV R0,A
LCALL NUM
LCALL TIME
DJNZ R1,L1


LJMP NEXT

TIME:
CJNE R2,#1,QUICK
MOV R6,#6 ;慢速 ;分6次來記時
TIM2: MOV TH0,#5DH
MOV TL0,#3EH
SETB TR0
MOV R7,#0H
TIM3: CJNE R7,#1H,TIM3
DJNZ R6,TIM2
LJMP OUT

QUICK: MOV TH0,#5DH ;定時器0啓動;;快速,60轉/分
MOV TL0,#3EH
SETB TR0
MOV R7,#0H
TIM1: CJNE R7,#1H,TIM1
OUT:
RET
EINT0:
MOV R7,#1
RETI
NUM: ;顯示已轉動的步數,每轉動一次顯示一個數
S0: MOV A,R3
CALL EXP
MOV A,R4
CALL EXP
MOV A,R5
CALL EXP

CJNE R3,#10,S1
MOV R3,#0
CJNE R4,#10,S2
MOV R4,#0
CJNE R5,#10,S3
MOV R5,#0

S1: INC R3
LJMP STOP
S2: INC R4
LJMP STOP
S3: INC R5
LJMP STOP
STOP:
RET


EXP:
MOV 21H,R0
MOVC A,@A+DPTR
MOV R0,#8
CLY: CLR CLK ;P4.4 ;時鐘線低電平
RLC A ;累加器A 的邏輯操做指令
MOV DAT,C
SETB CLK ;P4.4 ;時鐘線高電平

DJNZ R0,CLY
MOV R0,21H
RET

TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HEND

相關文章
相關標籤/搜索