在这里介绍一下用51单片机驱动步进电机的方法。
这款步进电机的驱动电压12V,步进角为 7.5度 . 一圈 360 度 , 需要 48 个脉冲完成!!!
该步进电机有6根引线,排列次序如下:1:红色、2:红色、3:橙色、4:棕色、5:黄色、6:黑色。
:采用51驱动ULN2003的方法进行驱动。
;*********************************************************************************
;****************************步进电机的驱动***************************************
; DESIGN BY BENLADN911 FOSC = 12MHz 2005.05.19
;---------------------------------------------------------------------------------
; 步进电机的驱动信号必须为 脉冲信号!!! 转动的速度和脉冲的频率成正比!!!
; 本步进电机步进角为 7.5度 . 一圈 360 度 , 需要 48 个脉冲完成!!!
;---------------------------------------------------------------------------------
; A组线圈对应 P2.4
; B组线圈对应 P2.5
; C组线圈对应 P2.6
; D组线圈对应 P2.7
; 正转次序: AB组--BC组--CD组--DA组 (即一个脉冲,正转 7.5 度)
;----------------------------------------------------------------------------------
;----------------------主要的工能 通过按键控制 加减速度 正反转动-------
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT
ORG 0100H
MAIN:
SETB IT0
SETB EX0
SETB EA
MOV R7,#16;速度初值
MOV R2,#0
MOV A,#00H
MOV P1,A
MOV A,#92H
MOV P0,A
MOV R1,#5
MAIN_1:
;JNB P1.0,KEY1
;JNB P1.1,KEY2
;JNB P1.2,KEY3
;JNB P1.3,KEY4
;JMP MAIN
AGAIN:
MOV A,R2
MOV DPTR,#AGAIN_1
JMP @A+DPTR
AGAIN_1:
LCALL FUN1
LJMP AGAIN
LCALL FUN2
LJMP AGAIN
LCALL FUN3
LJMP AGAIN
LCALL FUN4
LJMP AGAIN
INT:
JB P1.0,KEY1
JB P1.1,KEY2
JB P1.2,KEY3
JB P1.3,KEY4
RETI
KEY1:
MOV A,#0C6H ;
MOV P0,A ;
MOV R2,#0
RETI
KEY2:
MOV A,#0F0H
MOV P0,A
MOV R2,#6
RETI
KEY3:
INC R1
MOV DPTR,#REG
MOV A,R1
MOVC A,@A+DPTR
JNZ NNNN0
MOV R1,#5
MOV A,#92H
MOV P0,A
MOV R7,#100
JMP NEXT0
NNNN0:
MOV P0,A
MOV A,R7;加速,R7控制转速时间
MOV B,#2
DIV AB
MOV R7,A
NEXT0:
RETI
KEY4:
DEC R1
MOV DPTR,#REG
MOV A,R1
MOVC A,@A+DPTR
JNZ NNNN1
MOV R1,#5
MOV A,#92H
MOV P0,A
MOV R7,#100
JMP NEXT1
NNNN1:
MOV P0,A
MOV A,R7 ;减速,R7控制转速时间
MOV B,#2
MUL AB
MOV R7,A
NEXT1:
RETI
;----------------------------正转--------------------------
FUN1 :
MOV R3,#96 ;正转 3 圈共 144 脉冲
START1_0:
MOV R0,#00H
MOV P2,#00H
START1_1:
MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
JZ START1_0 ;对 A 的判断,当 A = 0 时则转到 START_0
MOV P2,A
LCALL DELAY
INC R0
DJNZ R3,START1_1
MOV P2,#00H
RET
;-----------------------------反转------------------------
FUN2:
MOV R3,#96 ;反转一圈共 144 个脉冲
MOV P2,#00H
START2_0:
MOV R0,#09
START2_1:
MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
JZ START2_0 ;
MOV P2,A
LCALL DELAY
INC R0
DJNZ R3,START2_1
MOV P2,#00H
RET
FUN3:
MOV A,R7
SUBB A,#20
MOV R7,A
RET
FUN4:
MOV A,R7
ADD A,#20
MOV R7,A
RET
DELAY:
;步进电机的转速200
M3 : MOV R6,#50
DJNZ R6,$
DJNZ R7,M3
RET
DELAY1: MOV R4,#20 ;2S 延时子程序
DEL2: MOV R3,#200
DEL3: MOV R2,#250
DJNZ R2,$
DJNZ R3,DEL3
DJNZ R4,DEL2
TABLE:
;DB 33H,66H,0CCH,99H ;正转表
DB 01FH,09FH,08FH,0CFH,04FH,06FH,02FH,03FH
;DB 1H,8H,4H,2H
DB 00;正转结束
;DB 33H,99H,0CCH,66H;反转表
DB 01FH,03FH,02FH,06FH,04FH,0CFH,08FH,09FH
;DB 2H,4H,8H,1H
DB 00;反转结束
REG:
DB 00H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,00H;,88H,83H,0C6H,0A1H,86H,8EH,0FFH,0FDH,0F7H,0FFH,0A6H,0F0H,89H
END