用32定时器让电机缓慢转动_实验三 步进电机原理及应用
本文使用 Zhihu On VSCode 創(chuàng)作并發(fā)布
姓名: 張 政
學(xué)號: 21180615
實(shí)驗(yàn)?zāi)康暮鸵?/strong>
初步學(xué)習(xí)和掌握MCS-51的體系結(jié)構(gòu)和匯編語言,了解Keil編程環(huán)境和程序下載工具的使用方法。
了解步進(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ù)碼管輸出的原理及編程方式。
實(shí)驗(yàn)內(nèi)容
編制MCS-51程序使步進(jìn)電機(jī)按照規(guī)定的轉(zhuǎn)速和方向進(jìn)行旋轉(zhuǎn),并將已轉(zhuǎn)動的步數(shù)顯示在數(shù)碼管上。
步進(jìn)電機(jī)的轉(zhuǎn)速分為兩檔,當(dāng)按下S1開關(guān)時(shí),進(jìn)行快速旋轉(zhuǎn),速度為60轉(zhuǎn)/分。當(dāng)松開開關(guān)時(shí),進(jìn)行慢速旋轉(zhuǎn),速度為10轉(zhuǎn)/分。當(dāng)按下S2開關(guān)時(shí),按照順時(shí)針旋轉(zhuǎn);當(dāng)松開時(shí),按照逆時(shí)針旋轉(zhuǎn)。
本程序要求使用定時(shí)器中斷來實(shí)現(xiàn),不準(zhǔn)使用程序延時(shí)的方式。
實(shí)驗(yàn)原理
1、本實(shí)驗(yàn)采用定時(shí)器中斷實(shí)現(xiàn),使用定時(shí)器時(shí),首先應(yīng)由外部條件得到要定時(shí)的時(shí)間長度t,如本實(shí)驗(yàn)中,就是根據(jù)要求的速度計(jì)算出的每一步之間的間隔。然后選擇適當(dāng)?shù)亩〞r(shí)器工作方式,去計(jì)算想要設(shè)定的計(jì)數(shù)器初值 s,使用如下方程。
定時(shí)周期 = 12/CPU 晶振頻率
得到的 s 需要分成高 8 位和低 8 位,分別放入計(jì)數(shù)器 THx 和 TLx 中(x 為 0 或 1)。如果 s為負(fù)數(shù),說明需要的定時(shí)時(shí)間太長,即使定時(shí)器的最大時(shí)間也無法滿足要求。這種情況下, 需要加入軟件循環(huán)才能實(shí)現(xiàn)。我們可以將需要的定時(shí)時(shí)間分成 n 份,利用定時(shí)器達(dá)到 t/n 的時(shí)間長度,然后在定時(shí)器處理程序中,累計(jì)某一變量,如果到達(dá) n,說明總的時(shí)間 t 已經(jīng)達(dá)到。
要想使用定時(shí)器中斷,除了上面的定時(shí)器初值設(shè)定外,還需要將其他相關(guān)的特殊功能寄存器也都設(shè)置好。如果使用方式 0 和方式 1,不要忘記在計(jì)數(shù)結(jié)束后重新恢復(fù)計(jì)數(shù)器初值。
2、我們使用的單片機(jī)系統(tǒng)的頻率是 12M;步進(jìn)電機(jī)轉(zhuǎn)動一周需要 24 步。
本步進(jìn)電機(jī)實(shí)驗(yàn)板,使用 FAN8200 作為驅(qū)動芯片。CPU 通過如下 4 個(gè)引腳與 FAN8200 相連,即:
3、本實(shí)驗(yàn)使用簡單的雙四拍工作模式即可,這也是 FAN8200 比較方便的工作方式。只要將CE1 和 CE2 分別置為高,然后 IN1 和 IN2 按照預(yù)定的脈沖輸出,即 01->11->10->00->01 這個(gè)循環(huán)構(gòu)成一個(gè)方向旋轉(zhuǎn)的輸出脈沖,將此序列翻轉(zhuǎn),就是相反方向的輸出脈沖。
4、數(shù)碼管顯示:
本開發(fā)平臺有 3 個(gè)數(shù)碼管,使用串行方式連接在一起,具體電路參見實(shí)驗(yàn)原理。要想輸
出一個(gè)字形碼,就需要從高位到低位依次向移位寄存器輸出 8 個(gè)比特。移位寄存器的數(shù)據(jù)線和時(shí)鐘線分別接到單片機(jī)的 P4.5 和 P4.4 管腳,可以使用 MCS-51 里面的位操作指令進(jìn)行輸出。連續(xù)輸出 3 個(gè)字形,24 個(gè) bit 之后,欲顯示的字形將穩(wěn)定地顯示在數(shù)碼管上,程序可以轉(zhuǎn)而執(zhí)行其他工作。
七段字形的編碼方式需要通過實(shí)驗(yàn)獲得。這些編碼作為程序中的常數(shù),使用 DB 命令存放。在程序中,需要將數(shù)值轉(zhuǎn)換為相應(yīng)的字形編碼,可以使用 MOVC 指令來完成。
5、74HC164 是高速 CMOS 器件。74HC164 是 8 位邊沿觸發(fā)式移位寄存器,串行輸入數(shù)據(jù),然后并行輸出。數(shù)據(jù)通過兩個(gè)輸入端(A 或 B)之一串行輸入;任一輸入端可以用作高電平使能端,控制另一輸入端的數(shù)據(jù)輸入。兩個(gè)輸入端或者連接在一起,或者把不用的輸入端接高電平,一定不要懸空。
6、時(shí)鐘 (CLK) 每次由低變高時(shí),數(shù)據(jù)右移一位,輸入到 Q0,Q0 是兩個(gè)數(shù)據(jù)輸入端(A 和
B)的邏輯與,它將上升時(shí)鐘沿之前保持一個(gè)建立時(shí)間的長度。
7、主復(fù)位(CLR)輸入端上的一個(gè)低電平將使其它所有輸入端都無效,同時(shí)非同步地清除寄存器,強(qiáng)制所有的輸出為低電平。
8、采用 3 個(gè) 74HC164 級聯(lián)控制三個(gè)數(shù)碼管的顯示,具體實(shí)驗(yàn)原理如下圖所示。其中使用單片機(jī)P4.5 作為模擬串口數(shù)據(jù),使用P4.4 模擬串口時(shí)鐘,CLR 端接高電平。使用上一個(gè)74HC164的 Q7 作為下一個(gè) 74HC164 的輸入端。
實(shí)驗(yàn)步驟
流程圖
完整業(yè)務(wù)邏輯匯編代碼如下
ORG 0000H ;復(fù)位起始地址LJMP START ORG 000BH ;中間地址保留給中斷向量表LJMP EINT0 ;定時(shí)器0中斷程序入口地址 ORG 0040H ;程序?qū)嶋H起始地址START: ;初始化P4 EQU 0C0H ;P4 地址 P4SW EQU 0BBH ;P4 方式控制字地址MOV P4SW,#70H CLK EQU P4.4 ;時(shí)鐘線 DAT EQU P4.5 ;數(shù)據(jù)線 SW EQU P3.6 MOV DPTR,#TAB ;TAB為--5D3E LP:MOV R3,#0 ;計(jì)數(shù) MOV R4,#0 MOV R5,#0;TMOD 方式寄存器 I1: MOV TMOD,#01H ;選擇工作方式,即對TMOD賦初值.T0工作在方式1,16位的計(jì)數(shù)器;GATE(GATE-門控位,控制定時(shí)器的兩種啟動方式,) 等于0,不受外部控制MOV IE,#82H ;允許中斷,T0中斷允許 中斷控制字;直接對中斷寄存器IE 和優(yōu)先級寄存器 IP設(shè)置ORL IP,#2H ;邏輯或,T0中斷的優(yōu)先級高SETB P1.1 ;CE1 置1SETB P1.4 ;CE2 置1NEXT: ;判斷S2JB P3.7,OPP ;若 P3.7=1,s2沒有按下 ,逆時(shí)針MOV R0,#01111000B ;按下為順時(shí)針 --78MOV 20H,R0 LJMP SS1 OPP:MOV R0,#00101101B ;松開為逆時(shí)針 --2DMOV 20H,R0SS1: ;判斷S1JB P3.6,SPD ;若 P3.6=1,s1沒有按下,慢速M(fèi)OV R2,#0H ;快速,(5D3E #TAB)LJMP L0 SPD:MOV R2,#1H ;慢速L0:MOV R1,#4 ;相位四次變換 MOV R0,20H L1:MOV A,R0 RLC A ;循環(huán)左移 MOV P3.2,C ;INT1 RLC A MOV P1.0,C ;INT2 MOV R0,A LCALL NUM LCALL TIME DJNZ R1,L1 ;R1 -1,結(jié)果不為0繼續(xù)循環(huán)LJMP NEXT TIME:CJNE R2,#1,QUICK MOV R6,#6 ;慢速六次計(jì)時(shí) TIM2:MOV TH0,#5DH MOV TL0,#3EH SETB TR0 ;允許計(jì)數(shù)MOV R7,#0H TIM3:CJNE R7,#1H,TIM3 ;空循環(huán),等待DJNZ R6,TIM2 ;R6 -1,結(jié)果不為0繼續(xù)循環(huán)LJMP OUT QUICK: MOV TH0,#5DH ;定時(shí)器0啟動,快速狀態(tài)60轉(zhuǎn)/分MOV TL0,#3EH SETB TR0 MOV R7,#0H TIM1: CJNE R7,#1H,TIM1 OUT: RETEINT0: ;中斷程序MOV R7,#1 RETI NUM: ;顯示轉(zhuǎn)數(shù),每轉(zhuǎn)一次顯示一個(gè)數(shù) S0: MOV A,R3 CALL EXP MOV A,R4 CALL EXP MOV A,R5 CALL EXPCJNE R3,#9,S1 MOV R3,#0 CJNE R4,#9,S2 MOV R4,#0 CJNE R5,#9,S3 MOV R5,#0 S1:INC R3 LJMP STOP S2:INC R4 LJMP STOP S3:INC R5 LJMP STOP STOP: RETEXP: ;顯示數(shù)碼管MOV 21H,R0 MOVC A,@A+DPTR ;查詢 TAB 表 MOV R0,#8 CLY: CLR CLK ;時(shí)鐘線低電平RLC A ;累加器A的邏輯操作指令MOV DAT,C ;8位數(shù)據(jù)按位輸出SETB CLK ;P4.4 時(shí)鐘線高電平DJNZ R0,CLY MOV R0,21H RETTAB: ;5D3EDB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END思考題
單四拍: A -- B -- ~A -- ~B -- A …
修改相位值即可。
八拍: A -- AB -- B -- BC -- C -- CD -- D -- DA -- A
修改定時(shí)初始值,相位和循環(huán)次數(shù)也要改變。
取決于脈沖頻率和工作模式
步進(jìn)電機(jī)的轉(zhuǎn)速有上下限;受物理因素(摩擦,機(jī)械慣性,響應(yīng)時(shí)間)影響,上限根據(jù)電機(jī)不同而不同,下限為0
改變轉(zhuǎn)動脈沖。
步進(jìn)電機(jī)有那些規(guī)格參數(shù),如何根據(jù)需要選擇型號?
功率,馬力,電流,轉(zhuǎn)速,效率,功率因數(shù),額定轉(zhuǎn)矩,額定電流,重量,空起頻率等
根據(jù)需要
a) 選定需要的額定轉(zhuǎn)矩,通常根據(jù)需要的轉(zhuǎn)矩大小(所要帶動物體的扭力大小),來選擇哪種型號的電機(jī)。大致來說,扭力越大,所需選擇的電機(jī)的額定轉(zhuǎn)矩越大,電機(jī)尺寸越大。
b) 選擇合適的轉(zhuǎn)速,電機(jī)的轉(zhuǎn)速和輸出轉(zhuǎn)矩成反比。步進(jìn)電機(jī)在低速時(shí)輸出轉(zhuǎn)矩較大,高速時(shí)輸出轉(zhuǎn)矩較小。如果高速的時(shí)候希望獲得較大轉(zhuǎn)矩,需要選擇電感稍小的電機(jī),低速大力度時(shí)候,選擇電感和電阻大的電機(jī)。
c) 使用環(huán)境,特種步進(jìn)電機(jī)需要防水,防油,可用于某些特殊場合。比如水下機(jī)器人就需要防水電機(jī)。
d) 空起頻率的選擇,步進(jìn)電機(jī)空載啟動頻率通常稱為“空起頻率”,如果要求頻繁在瞬間啟動,停止,高轉(zhuǎn)速,就要加速啟動。如果需要直接啟動并高速運(yùn)轉(zhuǎn),最好選用永磁電機(jī)。
MCS51中有哪些可存取的單元,存取方式如何?它們之間的區(qū)別和聯(lián)系有哪些?
a. 工作寄存器組(00H——1FH)
內(nèi)部RAM的0-1FH為四組工作寄存器區(qū),每個(gè)區(qū)有 8 個(gè)工作寄存器(R0 -R7)。在同一時(shí)刻,只能使用一組工作寄存器,這是通過程序狀態(tài)字 PSW 的地 3,4 位來控制的。例如當(dāng)此兩位為 00 時(shí),使用第 0 組工作寄存器,對應(yīng)于 00H 到 07H 的內(nèi)部 RAM 空間。也就是說,這時(shí)指令中使用 R0 與直接使用 00 單元是 等價(jià)的,不過使用工作寄存器的指令簡單,且執(zhí)行快。
b. 可定位尋址RAM區(qū)(20H——2FH)
內(nèi)部 RAM 的 20H-2FH 為位尋址區(qū)域,這 16 個(gè)單元的每一位都對應(yīng)一個(gè)位地址,占據(jù)位地址空間的 0-7FH,每一位都可以獨(dú)立置位、清除、取反等操作。
c. 通用的RAM區(qū)(30H——7FH)
在中斷和子程序調(diào)用中都需要堆棧。MCS-51 的堆棧理論上可以設(shè)置在內(nèi)部 RAM 的任意區(qū)域,但由于 0-1FH 和 20-2FH 區(qū)域有上面說的特殊功能,因此一般設(shè)置在 30H 以后。
在內(nèi)部 RAM 中,所有的單元都可以作為通用的數(shù)據(jù)存儲器使用,存放輸入 的數(shù)據(jù)或計(jì)算的中間結(jié)果等,也可以作為條件轉(zhuǎn)移的條件使用。
MOVC是c51單片機(jī)匯編中斷查表指令,在匯編中,MOVC指令是用來表示程序存儲器中的內(nèi)容和別的存儲單元進(jìn)行傳送的。主要是用在累加器A和程序存儲器的數(shù)據(jù)傳送。
以16位程序計(jì)數(shù)器PC或者數(shù)據(jù)指針DPTR作為基寄存器,以8位的累加器A作為變址寄存器,基址寄存器和變址寄存器的內(nèi)容相加為16位的地址訪問程序存儲器。
如MOVC A,@A+PC ; MOVC A.@A+DPTR ;
MCS51的時(shí)序是用定時(shí)單位來描述的,MCS51的時(shí)序單位有四個(gè),分別為節(jié)拍,狀態(tài),機(jī)器周期和指令周期。
乘除法指令執(zhí)行時(shí)間較長
可以,改變刷新頻率即可。
實(shí)驗(yàn)心得
中斷中執(zhí)行的程序太多,但由于使用的是定時(shí)器中斷,不能保證程序在定時(shí)周期內(nèi)執(zhí)行完畢。
總結(jié)
以上是生活随笔為你收集整理的用32定时器让电机缓慢转动_实验三 步进电机原理及应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 石头科技发布两款自清洁扫拖机器人,包括年
- 下一篇: ai背景合成_AI设计制作万圣节夜景插画