打印

步进电机如想设成一步一步反转,程序应怎样修改 (续集)

[复制链接]
2495|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yangguon|  楼主 | 2007-9-6 08:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用89C51控制2相步进电机,按一次仿真器按键"运行",电机反向进两步,按6次就转360度,如想设成转动一步,程序应怎样修改?


loop:

mov p0,#0f9h
call delay

mov p0,#0fCh
call delay


mov p0,#0f6h
call delay


mov p0,#0f3h
call delay

;----------------------------------------------
mov p0,#0f3h
call delay

mov p0,#0f6h
call delay


mov p0,#0fCh
call delay


mov p0,#0f9h
call delay



ajmp loop

DELAY: MOV R7,#100
D1: MOV R6,#250
D2: DJNZ R6,D2
DJNZ R7,D1
RET

end



相关帖子

沙发
yangguon|  楼主 | 2007-9-8 10:49 | 只看该作者

步进电机如想设成一步一步反转,程序应怎样修改 (续集)

有些楼主说程序没办法看出你的控制细节,本人修改了程序,现在按照同样的电路原理图

在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

使用特权

评论回复
板凳
懒人| | 2007-9-8 15:50 | 只看该作者

我认为

你的程序仅是按键一次,前进一步
在主控制子程序ACTION退出时,将21H清零,能实现
按正转或反按键时电动机一步一步转动,可以转360度

使用特权

评论回复
地板
yangguon|  楼主 | 2007-9-10 09:36 | 只看该作者

步进电机如想设成一步一步反转,程序应怎样修改 (续集)

本人再详细说一次,从仿真器调试过程序,当第一次按下CCW键,步进电机反转一步,再按CCW键,电机再反转进一步,第三次按CCW键,电机后退一步,第四次按CCW键,电机又后退一步回到初始位置。
CW键的操和CCW键情况相同,电动机都是向前向后步进,请大家给点指示,本人认为是主控制子程序ACTION程序问世题,作天改了一个下午都不行,我想按正转或反按键时电动机一步一步转动,可以转360度.

使用特权

评论回复
5
呆头呆脑| | 2007-9-10 11:22 | 只看该作者

那么长的程序,相信没人去看。

那么长的程序,相信没人去看。

不过,从你发的图来看,你可能用1相驱动。你按完按键后,在没按按键的时间内,相位有保持么?

你试试用1-2相驱动。用1相驱动,如果保持没做好,或者电机状态有点问题,在那么慢速的过程中,电机的一个步进就是有可能不是按照你设定的方向转,而是方向反转。

使用特权

评论回复
6
呆头呆脑| | 2007-9-10 11:25 | 只看该作者

--

另外,贴出来的论文哪里来的?

这个论文也就只是可以用来做作业了,除了应付作业其他一点用也没有。20Hz的频率,1相的驱动,这个我相信没有一个实用中会应用到。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

30

帖子

0

粉丝