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