步进电机如想设成一步一步反转,程序应怎样修改 (续集)
有些楼主说程序没办法看出你的控制细节,本人修改了程序,现在按照同样的电路原理图
在89C51 P2.1 端接按键脚,另一端接地. 按键名为CCW P2.0 端接按键脚,另一脚接地,按键名为CW
此程序的功能为按一下CW开关,马达顺时针转60度,按一下CCW开关,则反时钟循环60度
本程序使用20H.0与20H.1存放CW与CCW两开关新输入的数据,而使用21H.0与21H.1存放旧数据,用于检查是否有按键.
ACTION子程序的前半部做正转控制,后半部则做反转控制.程序首先检查21H.0,若21H.0=0,则表示已按正转开关,所以将R5的低4位取出左循环1位,并自P1输出.而若21H.1=0,则表示已按反转开关,所以将R5的低4位取出右循环1位,并自P1输出.
步进马达数据表 输入 CCW CW 新 20H.1 20H.0 旧 21H.1 21H.0 本人从仿真器调试过程序,当按下CCW键,步进电机反转一步,再按CW电机正转一步,但本人重复按正转或反按键,电动机都是向前向后原地踏步,请大家给点指示,我应怎样修改程序,我想按正转或反按键时电动机一步一步转动,可以转360度
CW EQU P2.0 ;CW=0表示按下正转开关 CCW EQU P2.1 ;CCW=0表示按下反转开关 ;--------R5: P1值暂存用--------------------- MAIN: MOV R5,#0FEH ;设置R5的初值 MOV 20H,#00H ;设置地址20H的初值 MOV 31H,#00H ;设置地址21H的初值 CHEKSW: ACALL SWIN ;输入按键值至20H MOV A,20H ;检查键值至20H XRL A,21H ; JZ CHEKSW ;若无键被按,则跳回CHEKSW ACALL DELAY ;等待抖动时间 ACALL SWIN ;再输入按键值至20H MOV A,20H ;检查键值是否改变 XRL A,21H JZ CHEKSW ;若无按键,则跳回CHEKSW MOV 21H,20H ;更新旧数据 ACALL ACTION ;调用主控制子程序:ACTION SJMP CHEKSW ;--------------输入按键值子程序:SWIN-------------------- SWIN: MOV C,CW ;CW为正转开关 MOV 20H.0,C MOV C,CCW ;CCW为反转开关 MOV 20H.1,C RET ;-------------主控制子程序ACTION--------------------------- ACTION: JB 21H.0,REVERSE ;若未按CW开关,则至REVERSE FORWARD:MOV A,R5 ;取出R5的低4位左循环1位 RL A JB ACC.4,SKIP1 MOV A,#0FEH SKIP1: MOV R5,A MOV P0,A SJMP RETURN REVERSE:JB 21H.1,RETURN ;若未按CCW开关,则至RETURN MOV A,R5 ;取出R5的低4位右循环1位 RR A ;并自P1输出 JB ACC.7,SKIP2 MOV A,#0F7H SKIP2: MOV R5,A MOV P0,A RETURN: RET DELAY: MOV R0,#00H XL2: MOV R1,#00H DL1: NOP DJNZ R1,DL1 DJNZ R0,XL2 RET END |
|