一、實驗目的和要求
了解步進電機的工作原理,學習用單片機的步進電機控制系統的硬件設計方法,掌握定時器和中斷系統的應用,熟悉單片機應用系統的設計與調試方法。
二、實驗設備
1.單片機測控實驗系統
2.步進電機控制實驗模塊
3.Keil開發環境
4.STC-ISP程序下載工具
三、實驗內容
1.編制MCS-51程序使步進電機按照規定的轉速和方向進行旋轉,并將已轉動的步數顯示在數碼管上。
2.步進電機的轉速分為兩檔,當按下S1開關時,進行快速旋轉,速度為60轉/分。當松開開關時,進行慢速旋轉,速度為10轉/分。當按下S2開關時,按照順時針旋轉;當松開 時,按照逆時針旋轉。
3.本程序要求使用定時器中斷來實現,不準使用程序延時的方式。
四、實驗步驟
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口的某些位上,便于觀察。
五、實驗原理
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相連。
本實驗使用簡單的雙四拍工作模式即可,這也是FAN8200比較方便的工作方式。只要將CE1和CE2分別置為高,然后IN1和IN2按照預定的脈沖輸出,即01->11->10->00- >01這個循環構成一個方向旋轉的輸出脈沖,將此序列翻轉,就是相反方向的輸出脈沖。
六、思考題
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,90H
END
評論