谢谢分享,正好在用57步进电机 |
非常好支持下 我拿来放在57上同是1.8角却转动一点正反转 不知哪里问题 |
我的这个是2个中心抽头 所以出来6根线 5线的就是把2个抽头合并成一个了 |
太详细了,谢谢楼主分享,果断收藏保存.我以前只驱动过5线的步进电机 |
我写的驱动代码 仅仅供坛友做参考 ;试验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 |