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