基于 51 单片机的两相四线步进电机控制系统(汇编版)
关于步进电机的工作原理大家可以在网上查查,这里主要介绍的是两相四线
的步进电机控制,采用的是四拍方式。
要求如下:
1、有开机停止键。按第奇数次时为开机,第偶数次为停止。此例选择 P3.3
口。
2、有加速键。加速范围为 1~9 档。
3、有减速键。减速范围为 1~9 档。
具体实施方案:
采用 L298N 驱动板驱动步进电机,采用如下相序:
表 1:正转环形脉冲分配表
步数
P0.0
P0.1
A
1
0
0
1
B
1
1
0
0
1
2
3
4
P0.2
/A
0
1
1
0
P0.3
/B
0
0
1
1
源程序如下:
ENA EQU P1.0
ENB EQU P1.1
IN1 EQU P1.2
IN2 EQU P1.3
IN3 EQU P1.4
IN4 EQU P1.5
SWITCH EQU P3.3
FAST EQU P3.6
SLOW EQU P3.5
CYCLENUM EQU 50H
TEMP EQU 53H
;存放对应定时循环次数
;存放按键次数。初值为 5,每按加速叠加 1,按减
速递减
;启动停止标识
MARK EQU 56H
LEDBUF EQU 57H
ORG 0
AJMP START
;*****************检测是否开启启动电机键***************************
START:
MOV P0,#0
;清显示
SETB MARK
;预启动电机工作,标识为 1
MOV TEMP,#5
;开始工作于 5Hz
MOV CYCLENUM,#01H ;循环 1 次
JNB SWITCH,NEXT
;按键按下?
SJMP START
;没有返回继续检测
NEXT:
CALL DELAY
JNB SWITCH,MAIN ;再次确认按键,不为 1 说明按键按下
SJMP START
;没有按下,继续检测
;消抖确认
;*****************开始运行电机***************************************
MAIN:
MOV A,TEMP
MOV DPTR,#TAB4
MOVC A,@A+DPTR
MOV LEDBUF,A
CALL DISPLAY
LOOP:
;送显示
JB MARK,WORK
;检测运行标识是否为 1,为 1 则继续运行,为 0 则
停止运行
NOTWORK:
CLR ENA
CLR ENB
SJMP START
P1,#000010111B
WORK:
MOV
CALL TIMER
CALL TESTSTOP
MOV
CALL TIMER
CALL TESTSTOP
P1,#000011011B
;步进电机运行方式为两相四拍
;第二拍
;第三拍
;第四拍
P1,#000100111B
P1,#000101011B
MOV
CALL TIMER
CALL TESTSTOP
MOV
CALL TIMER
CALL TESTSTOP
CALL TESTKEY
SJMP MAIN
;***************************检测是否有按键按下************************
TESTKEY:
;都没有键按下,则返回
;FAST 按下,若此时 temp 等于 9,则保持速度不
SETB FAST
SETB SLOW
NEXT1:
JNB FAST,YES2
NEXT2:
JNB SLOW,YES3
SJMP RETURN
YES2:
MOV A,TEMP
变,若小于则加 1
CJNE A,#9,CANFAST
DEC A
CANFAST:
INC A
MOV TEMP,A
SJMP RETURN
YES3:
MOV A,TEMP
CJNE A,#1,CANSLOW
INC A
CANSLOW:
DEC A
MOV TEMP,A
RETURN:
RET
TESTSTOP:
SETB SWITCH
JNB
SWITCH,GO
SJMP ENND
GO:
CALL DELAY
JNB
SJMP ENND
SWITCH,YESSTOP
YESSTOP:
CPL MARK
ENND:
RET
;***********************定时器设置*******************
TIMER:
;T1 工作于定时方式 1
MOV TMOD,#10H
CALL TIMERSET
SETB TR1
SETB EA
SETB ET1
;启动定时器工作
WAIT:
JBC TF1,HERE
SJMP WAIT
HERE:
;定时未到继续等待
DJNZ CYCLENUM,TIMER ;循环次数未满继续定时
MOV A,TEMP
MOV DPTR,#TAB3
MOVC A,@A+DPTR
MOV CYCLENUM,A
RET
TIMERSET:
MOV A,TEMP
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV TH1,A
MOV A,TEMP
MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV TL1,A
;获取定时器高位
;存放至定时器高位
;获取定时器定位
;存放至定时器低位
RET
;***********************50ms 延时**********************
DELAY:
MOV R0,#100
DL1:
MOV R1,#10
DJNZ R1,$
DJNZ R0,DL1
RET
;************显示子程序****************************
DISPLAY:
CLR P2.7
CLR P2.6
CLR P2.5
SETB P2.4
MOV P0,LEDBUF
RET
TAB1: DB 15H,0AH,07H,05H,04H,03H,03H,02H,02H
;关闭高三位,保留个位
H1
;定时器高位 T
TAB2: DB 0B3H,0D9H,3BH,6CH,57H,0A5H,19H,0B6H,69H
;定时器
地位 TL1
TAB3: DB 01H,01H,01H,01H,01H,01H,01H,01H,01H
;循环次数 CY
CLENUM
TAB4: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;数码显
示 0~9