lxa0 发表于 2016-9-14 19:17:16

[原创diy]试验基于51单片机驱动57步进电机

找到一对拆机的57步进电机
是为以后的遥控小车做准备
于是先做了一个驱动试验
试验结果尚可


lxa0 发表于 2016-9-14 19:18:08

驱动板与驱动电路图



lxa0 发表于 2016-9-14 19:19:27

相关参考资料














lxa0 发表于 2016-9-14 19:21:32

我写的驱动代码
仅仅供坛友做参考

;试验57步进电机驱动汇编代码
;11.0592MHz晶振+AT89C2051/4051
;Lxa0最后修改于2016-9-17--V2.0
;t0备用,t1产生9600波特率
;p10p11p12p13分别对应步进电机ABCD,低电平有效
;步进角为1.8度,一圈360度,需要200个脉冲完成
;A组线圈   P1.0
;B组线圈   P1.1
;C组线圈   P1.2
;D组线圈   P1.3

org 0000h
ajmp mm               ;转主程序
org 0023h
ajmp qz               ;转串口读取指令


;主程序*******************************************************
org 0100h
mm:nop
mov p1,#0ffh         ;关闭全部
mov r0,#00h            ;读dptr首址用
mov r1,#00h            ;存放正反转脉冲数据(1圈200个脉冲,16制为c8h)
mov r2,#00h            ;存放改变转速的数据
mov r3,#00h            ;备用
mov r4,#00h            ;r4和r5短延时用
mov r5,#00h
mov r6,#00h            ;r6和r7长延时用
mov r7,#00h
mov 20h,#00h         ;20h设置wifi标志
mov 21h,#00h         ;21h设置动作标志
mov 22h,#00h         ;动作代码存放单元
mov sp,#4fh            ;设堆栈入口50h
mov scon,#50h          ;设置串口方式1,允许串口接收
mov pcon,#00h          ;设置波特率9600
mov tmod,#21h          ;T0设方式1,T1方式2(自动重装)
mov th1,#0fdh          ;T1设初始值
mov tl1,#0fdh          ;TH1=TL1=#0fdh(波特率9600)
clr et1                ;禁止T1中断
clr ri
clr ti
setb tr1               ;开T1定时器
setb es                ;开串口中断
setb ea                ;开总中断
mm1:nop
acall ssd            ;双闪沟?
acall ssd
acall ssd
acall zz               ;调用正转
acall ssd            ;双光灯
acall ssd
acall ssd
acall fz               ;调用反转
sjmp mm1


;正转子程序***********************************************************************
ORG 0200H
zz:push acc
MOV R1,#0c8h         ;正转1圈发200个脉冲,单八拍
zz1:MOV R0,#00h
zz2:mov p1,0ffh
mov p1,#0ffh
MOV A,R0
MOV DPTR,#0380h
MOVC A,@A+DPTR
JZ zz1               ;当A=0时转完1圈完毕
MOV P1,A
LCALL ys               ;这个时间是调速的,时间越长速度越慢
INC R0
DJNZ R1,zz2
MOV P1,#0ffh
mov p1,#0ffh
pop acc
ret

;反转子程序***********************************************************************
org 0280h
fz:push acc
MOV R1,#0c8h         ;反转1圈发200个脉冲,单八拍
fz1:MOV R0,#00H
fz2:MOV P1,#0ffh
mov p1,#0ffh
MOV A,R0
MOV DPTR,#03c0h
MOVC A,@A+DPTR
JZ fz1               ;当A=0时反转1圈完毕
MOV P1,A
CALL ys
INC R0
DJNZ R1,fz2
MOV P1,#0ffh
mov p1,#0ffh
pop acc
ret

;转速控制子程序***********************************************************************
org 0300h
ys:djnz r2,ys         ;步进电机的转速
RET

org 0380h
TABLE1:
DB 0feh,0fcH,0fdh,0f9H,0fbh,0f3H,0f7h,0f6H   ;正转表
DB 00h                                       ;正传结束

org 03c0h
TABLE2:
DB 0feh,0f6h,0f7h,0f3h,0fbh,0f9h,0fdh,0fch   ;反转表
DB 00h                                       ;反转结束


;接收并取出串口接收到的数据指令*******************************
org 0400h
qz:nop
clr ri               ;先清零串口接收中断位
qz00:reti


;闪光灯代码***************************************************
org 0500h
ssd:clr p3.7         ;Gled闪烁发光
acall dys
setb p3.7
acall dys
acall cys
clr p3.7
acall dys
setb p3.7
acall cys
acall cys
acall cys
acall cys
acall cys
ret

dys:mov r4,#0ffh       ;短延时
mov r5,#10h
dys1:djnz r4,dys1
dys2:djnz r5,dys1
ret

cys:mov r6,#0ffh       ;长延时
mov r7,#0ffh
cys1:djnz r6,cys1
cys2:djnz r7,cys1
ret

end

;四相八拍步进电机顺序
;正转:A-AB-B-BC-C-CD-D-DA----------0feh,0fcH,0fdh,0f9H,0fbh,0f3H,0f7h,0f6h
;反转:A-AD-D-DC-C-CB-B-BA----------0feh,0f6h,0f7h,0f3h,0fbh,0f9h,0fdh,0fch

wiser803 发表于 2016-9-14 19:56:11

好久没看到用汇编写的程序了,短小精悍,不错。
不过用步进马达驱动的小车,最快速度不会太快吧。{:lol:}

kelos3000 发表于 2016-9-14 22:05:25

+1{:smile:}

21006091 发表于 2016-9-14 23:37:59

汇编基本上忘光了,呵呵。

时光黑白 发表于 2016-9-14 23:44:21

不建议自己折腾,找个项目做比这有用多了。

lxa0 发表于 2016-9-15 22:07:10

wiser803 发表于 2016-9-14 19:56
好久没看到用汇编写的程序了,短小精悍,不错。
不过用步进马达驱动的小车,最快速度不会太快吧。 ...

我是为这个做准备的
所以速度不是问题


lxa0 发表于 2016-9-15 22:08:01

时光黑白 发表于 2016-9-14 23:44
不建议自己折腾,找个项目做比这有用多了。

谢谢关注
我不是做项目的
我是为未来做准备的

wiser803 发表于 2016-9-16 00:57:43

lxa0 发表于 2016-9-15 22:07
我是为这个做准备的
所以速度不是问题

呵呵,有意思....... {:lol:}

mkliop 发表于 2016-9-16 09:09:03

那个车得用油动吧

潘河霖 发表于 2016-9-16 11:16:19

用汇编写的都是大神啊,膜拜。{:loveliness:}

qq开始学单片机 发表于 2016-9-21 10:31:50

lxa0 发表于 2016-9-15 22:08
谢谢关注
我不是做项目的
我是为未来做准备的

楼主这车子很帅气啊,不过还是建议楼主在车子的锋利、边角处叫保护措施,否则很容易弄伤小孩子!

饭桶 发表于 2016-9-21 11:08:20

汇编的查表表格一般放在代码最后。

lxa0 发表于 2016-9-21 18:50:12

qq开始学单片机 发表于 2016-9-21 10:31
楼主这车子很帅气啊,不过还是建议楼主在车子的锋利、边角处叫保护措施,否则很容易弄伤小孩子! ...

你说的对
我设想的小车车头车厢不用金属
改用木材或塑料
这样对小孩就安全多了
谢谢关注
页: [1]
查看完整版本: [原创diy]试验基于51单片机驱动57步进电机