最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

51单片机控制两相四线步进电机

IT圈 admin 31浏览 0评论

2024年2月19日发(作者:薄世)

关于步进电机的工作原理大家可以在网上查查,这里主要介绍的是两相四线的步进电机控制,采用的是四拍方式。

要求如下:

1、有开机停止键。按第奇数次时为开机,第偶数次为停止。此例选择P3.3口。

2、有加速键。加速范围为1~9档。

3、有减速键。减速范围为1~9档。

具体实施方案:

采用L298N驱动板驱动步进电机,采用如下相序:

表1:正转环形脉冲分配表

步数

P0.0

P0.1

P0.2

P0.3

/B

A

B

/A

0

1

1

1

1

0

0

2

0

0

1

1

3

0

0

1

1

4

源程序如下:

1

0

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

WORK:

MOV P1,#000010111B ;步进电机运行方式为两相四拍

CALL TIMER

CALL TESTSTOP

MOV P1,#000011011B ;第二拍

CALL TIMER

CALL TESTSTOP

MOV P1,#000101011B ;第三拍

CALL TIMER

CALL TESTSTOP

MOV P1,#000100111B ;第四拍

CALL TIMER

CALL TESTSTOP

CALL TESTKEY

SJMP MAIN

;***************************检测是否有按键按下************************

TESTKEY:

SETB FAST

SETB SLOW

NEXT1:

JNB FAST,YES2

NEXT2:

JNB SLOW,YES3

SJMP RETURN ;都没有键按下,则返回

YES2:

MOV A,TEMP ;FAST按下,若此时temp等于9,则保持速度不变,若小于则加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 SWITCH,YESSTOP

SJMP ENND

YESSTOP:

CPL MARK

ENND:

RET

;***********************定时器设置*******************

TIMER:

MOV TMOD,#10H ;T1工作于定时方式1

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 ;定时器高位TH1

TAB2: DB 0B3H,0D9H,3BH,6CH,57H,0A5H,19H,0B6H,69H ;定时器地位TL1

TAB3: DB 01H,01H,01H,01H,01H,01H,01H,01H,01H ;循环次数CYCLENUM

TAB4: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;数码显示0~9

2024年2月19日发(作者:薄世)

关于步进电机的工作原理大家可以在网上查查,这里主要介绍的是两相四线的步进电机控制,采用的是四拍方式。

要求如下:

1、有开机停止键。按第奇数次时为开机,第偶数次为停止。此例选择P3.3口。

2、有加速键。加速范围为1~9档。

3、有减速键。减速范围为1~9档。

具体实施方案:

采用L298N驱动板驱动步进电机,采用如下相序:

表1:正转环形脉冲分配表

步数

P0.0

P0.1

P0.2

P0.3

/B

A

B

/A

0

1

1

1

1

0

0

2

0

0

1

1

3

0

0

1

1

4

源程序如下:

1

0

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

WORK:

MOV P1,#000010111B ;步进电机运行方式为两相四拍

CALL TIMER

CALL TESTSTOP

MOV P1,#000011011B ;第二拍

CALL TIMER

CALL TESTSTOP

MOV P1,#000101011B ;第三拍

CALL TIMER

CALL TESTSTOP

MOV P1,#000100111B ;第四拍

CALL TIMER

CALL TESTSTOP

CALL TESTKEY

SJMP MAIN

;***************************检测是否有按键按下************************

TESTKEY:

SETB FAST

SETB SLOW

NEXT1:

JNB FAST,YES2

NEXT2:

JNB SLOW,YES3

SJMP RETURN ;都没有键按下,则返回

YES2:

MOV A,TEMP ;FAST按下,若此时temp等于9,则保持速度不变,若小于则加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 SWITCH,YESSTOP

SJMP ENND

YESSTOP:

CPL MARK

ENND:

RET

;***********************定时器设置*******************

TIMER:

MOV TMOD,#10H ;T1工作于定时方式1

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 ;定时器高位TH1

TAB2: DB 0B3H,0D9H,3BH,6CH,57H,0A5H,19H,0B6H,69H ;定时器地位TL1

TAB3: DB 01H,01H,01H,01H,01H,01H,01H,01H,01H ;循环次数CYCLENUM

TAB4: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;数码显示0~9

发布评论

评论列表 (0)

  1. 暂无评论