一、實(shí)驗(yàn)?zāi)康暮鸵?/p>
了解步進(jìn)電機(jī)的工作原理,學(xué)習(xí)用單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)的硬件設(shè)計(jì)方法,掌握定時(shí)器和中斷系統(tǒng)的應(yīng)用,熟悉單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)與調(diào)試方法。
二、實(shí)驗(yàn)設(shè)備
1.單片機(jī)測(cè)控實(shí)驗(yàn)系統(tǒng)
2.步進(jìn)電機(jī)控制實(shí)驗(yàn)?zāi)K
3.Keil開(kāi)發(fā)環(huán)境
4.STC-ISP程序下載工具
三、實(shí)驗(yàn)內(nèi)容
1.編制MCS-51程序使步進(jìn)電機(jī)按照規(guī)定的轉(zhuǎn)速和方向進(jìn)行旋轉(zhuǎn),并將已轉(zhuǎn)動(dòng)的步數(shù)顯示在數(shù)碼管上。
2.步進(jìn)電機(jī)的轉(zhuǎn)速分為兩檔,當(dāng)按下S1開(kāi)關(guān)時(shí),進(jìn)行快速旋轉(zhuǎn),速度為60轉(zhuǎn)/分。當(dāng)松開(kāi)開(kāi)關(guān)時(shí),進(jìn)行慢速旋轉(zhuǎn),速度為10轉(zhuǎn)/分。當(dāng)按下S2開(kāi)關(guān)時(shí),按照順時(shí)針旋轉(zhuǎn);當(dāng)松開(kāi) 時(shí),按照逆時(shí)針旋轉(zhuǎn)。
3.本程序要求使用定時(shí)器中斷來(lái)實(shí)現(xiàn),不準(zhǔn)使用程序延時(shí)的方式。
四、實(shí)驗(yàn)步驟
1.預(yù)習(xí) 參考輔助材料,學(xué)習(xí)C51編程語(yǔ)言使用和步進(jìn)電機(jī)原理。
2.簡(jiǎn)單程序錄入和調(diào)試
本程序需要使用定時(shí)器定時(shí),并使用中斷來(lái)同步。
中斷程序的典型例子如下:
格式:void 函數(shù)名()interrupt 中斷號(hào) using 工作組
{
中斷服務(wù)程序內(nèi)容
}
注意:中斷不能返回任何值,所以前面是 void 后面是函數(shù)名,名字可以自己起,但不要與c語(yǔ)言的關(guān)鍵字相同;中斷函數(shù)不帶任何參數(shù),所以 函數(shù)名后面的()內(nèi)是 空的,中 斷號(hào)是指單片機(jī)的幾個(gè)中斷源的序號(hào)。這個(gè)序號(hào)是單片機(jī)識(shí)別不同中斷的唯一標(biāo)志。所以一定要寫(xiě)正確。 后面的using 工作組 是指這個(gè)這個(gè)中斷使用單片機(jī)內(nèi)存中 4 個(gè)工作寄 存器的哪一組,c51 編譯后會(huì)自動(dòng)分配工作組,因此最后這句話我們通常省略不寫(xiě)。
c51 中斷寫(xiě)法實(shí)例
void T1-time() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
}
上面的意思是定時(shí)器 1 的中斷服務(wù)程序,定時(shí)器 1 的中斷服務(wù)序號(hào)是 3 ,因此我們要寫(xiě)成 interrupt 3 ,服務(wù)程序的內(nèi)容是給 兩個(gè)初值寄存器裝入新值。。
寫(xiě)中斷前的準(zhǔn)備:
2.1. TMOD 賦值 確定工作方式。T0 還是T1 的工作方式。
2.2.計(jì)算初值 裝入 TH0 TL0 或者 TH1 TL1
2.3.中斷方式時(shí) ,對(duì) IE 賦值,開(kāi)放中斷。
2.4. 使 TR0 和 TR1 置位,啟動(dòng)定時(shí)器/計(jì)數(shù)器 定時(shí)/計(jì)數(shù)。
3.程序調(diào)試及現(xiàn)象觀測(cè)
用單步、斷點(diǎn)、連續(xù)方式調(diào)試程序,觀察狀態(tài)指示燈及電機(jī)狀態(tài),檢查運(yùn)行結(jié)果。如果需要,可以將四個(gè)輸出信號(hào)的狀態(tài)同時(shí)輸出到P0口的某些位上,便于觀察。
五、實(shí)驗(yàn)原理
1. 定時(shí)器中斷
使用定時(shí)器時(shí),首先應(yīng)由外部條件得到要定時(shí)的時(shí)間長(zhǎng)度t,如本實(shí)驗(yàn)中,就是根據(jù)要求的速度計(jì)算出的每一步之間的間隔。然后選擇適當(dāng)?shù)亩〞r(shí)器工作方式,去計(jì)算想要設(shè)定 的計(jì)數(shù)器初值s,使用如下方程。
(2定時(shí)器最大位數(shù) - s)× 定時(shí)周期 =t (2的多少次方)
定時(shí)周期 = 12/CPU晶振頻率
注意#1. 得到的s需要分成高8位和低8位,分別放入計(jì)數(shù)器THx和TLx中(x為0或1)。如果s為負(fù)數(shù),說(shuō)明需要的定時(shí)時(shí)間太長(zhǎng),即使定時(shí)器的最大時(shí)間也無(wú)法滿足要求。這 種情況下,需要加入軟件循環(huán)才能實(shí)現(xiàn)。我們可以將需要的定時(shí)時(shí)間分成n份,利用定時(shí)器達(dá)到t/n的時(shí)間長(zhǎng)度,然后在定時(shí)器處理程序中,累計(jì)某一變量,如果到達(dá) n,說(shuō)明總的時(shí)間t已經(jīng)達(dá)到。
#2.要想使用定時(shí)器中斷,除了上面的定時(shí)器初值設(shè)定外,還需要將其他相關(guān)的特殊功能寄存器也都設(shè)置好。如果使用方式0和方式1,不要忘記在計(jì)數(shù)結(jié)束后重新恢復(fù)計(jì)數(shù)器初 值。
2.我們使用的單片機(jī)系統(tǒng)的頻率是12M;步進(jìn)電機(jī)轉(zhuǎn)動(dòng)一周需要24步。
本步進(jìn)電機(jī)實(shí)驗(yàn)板,使用FAN8200作為驅(qū)動(dòng)芯片。CPU通過(guò)如下4個(gè)引腳與FAN8200相連。

本實(shí)驗(yàn)使用簡(jiǎn)單的雙四拍工作模式即可,這也是FAN8200比較方便的工作方式。只要將CE1和CE2分別置為高,然后IN1和IN2按照預(yù)定的脈沖輸出,即01->11->10->00- >01這個(gè)循環(huán)構(gòu)成一個(gè)方向旋轉(zhuǎn)的輸出脈沖,將此序列翻轉(zhuǎn),就是相反方向的輸出脈沖。
六、思考題
1. 如采用單四拍工作模式,每次步進(jìn)角度是多少,程序要如何修改?
2. 如采用單雙八拍工作模式,每次步進(jìn)角度是多少,程序要如何修改?
3. 步進(jìn)電機(jī)的轉(zhuǎn)速取決于那些因素?有沒(méi)有上、下限?
4. 如何改變步進(jìn)電機(jī)的轉(zhuǎn)向?
5. 步進(jìn)電機(jī)有那些規(guī)格參數(shù),如何根據(jù)需要選擇型號(hào)?
以下是匯編程序:
ORG 0000H ;復(fù)位起始地址
LJMP START
ORG 000BH ;中間地址保留給中斷向量表
LJMP EINT0 ;定時(shí)器0中斷程序入口地址
ORG 0040H ;程序?qū)嶋H起始地址
START:
P4 EQU 0C0H
P4SW EQU 0BBH
CLK EQU P4.4 ;時(shí)鐘線
DAT EQU P4.5 ;數(shù)據(jù)線
SW EQU P3.6
MOV P4SW,#70H
MOV DPTR,#TAB ;s = 23869 --5D3E
LP:
MOV R3,#0 ;計(jì)數(shù)
MOV R4,#0
MOV R5,#0
I1: MOV TMOD,#01H ; 選擇工作方式,即對(duì)TMOD 賦初值。T0都工作在方式1,16位的計(jì)數(shù)器 GATE(GATE -門控位,控制定時(shí)器的兩種啟動(dòng)方式,)等于0,不受外部控制
MOV IE,#82H ;全局中斷,T0中斷允許 中斷控制字;直接對(duì)中斷允許寄存器IE 和 優(yōu)先級(jí)寄存器 IP 設(shè)置
;ORL IP,#2H ;邏輯或,T0中斷優(yōu)先級(jí)高
SETB P1.1 ;CE1置高
SETB P1.4 ;CE2置高
NEXT:
JB P3.7,OPP ;如果P3.7等于1則轉(zhuǎn)移
MOV R0,#00101101B ;按下,順時(shí)針
MOV 20H,R0
LJMP SS1
OPP: MOV R0,#01111000B ;松開(kāi),逆時(shí)針
MOV 20H,R0
SS1:
JB P3.6,SPD
MOV R2,#0H ;按下,快速 ;23870 5D3E
LJMP L0
SPD: MOV R2,#1H ;松開(kāi),慢速
L0: MOV R1,#4
MOV R0,20H
L1: MOV A,R0
RLC A ;循環(huán)左移操作
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次來(lái)記時(shí)
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 ;定時(shí)器0啟動(dòng);;快速,60轉(zhuǎn)/分
MOV TL0,#3EH
SETB TR0
MOV R7,#0H
TIM1: CJNE R7,#1H,TIM1
OUT:
RET
EINT0:
MOV R7,#1
RETI
NUM: ;顯示已轉(zhuǎn)動(dòng)的步數(shù),每轉(zhuǎn)動(dòng)一次顯示一個(gè)數(shù)
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 ;時(shí)鐘線低電平
RLC A ;累加器A 的邏輯操作指令
MOV DAT,C
SETB CLK ;P4.4 ;時(shí)鐘線高電平
DJNZ R0,CLY
MOV R0,21H
RET
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
電子發(fā)燒友App


























評(píng)論