打印

步进电机的简单控制

[复制链接]
2495|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
juventus9554|  楼主 | 2010-12-22 19:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己用仿真器做实验,是一个关于步进电机的简单控制,程序如下:


;功能: P1口控制电机产生脉冲,P2.0,P2.1,P2.3口接查询式键盘控制电机的
;       反转,正转,停止控制。

;接线:P1口接步进电机的P1口,最小系统的p2口接查询式键盘的JD13。

;//****************************************************************
        ORG   0000
STOP:   ORL   P1,  #00H    ; 步进电机停止
LOOP:   MOV   P1,  #00H
        JNB   P2.0,FOR2     ; 如果p2.0按下正转
        JNB   P2.1,REV2     ; 如果p2.1按下反转
        JNB   P2.2,STOP1    ; 如果p2.2按下停止
        JMP   LOOP          ;反复监测键盘
FOR:    MOV   R0,  #00H     ;正转到tab取码指针初值
for1:   MOV   A,R0          ;取码
        MOV   DPTR,#TABLE   ;
        MOVC  A,@A+DPTR
        JZ    FOR           ;是否到了结束码00h
        CPL   A             ;把acc反向
        MOV   P1,A          ;输出到p1开始正转
        JNB   P2.2,STOP1    ;如果p2.2按下停止
        JNB   P2.1,REV2     ;如果p2.1按下正转
        JNB   P2.0,FOR2     ;如果p2.0按下反转
        CALL  DELAY         ;转动的速度1
        INC   R0            ;取下一个码
        JMP   FOR1          ;继续正转
rev:    MOV   R0,#05H       ;反转到tab取码指针初值
rev1:   MOV   A,R0
        MOV   DPTR,#TABLE   ;取码
        MOVC  A,@A+DPTR
        JZ    REV           ;是否到了结束码00h
        CPL   A             ;把acc反向
        MOV   P1,A          ;输出到p1开始反转
        JNB   P2.2,STOP1    ;如果p2.2按下停止
        JNB   P2.1,REV2     ;如果p2.1按下正转
        JNB   P2.0,FOR2     ;如果p2.0按下反转
        CALL  DELAY1         ;转动的速度2
        INC   R0            ;取下一个码
        JMP   REV1          ;继续反转
stop1:  CALL  DELAY         ;按p3.4的消除抖动
        JNB   P2.2,$        ;p2.2放开否?
        MOV   P1,  #00H
        CALL  DELAY         ;放开消除抖动
        JMP   STOP
for2:   CALL  DELAY         ;按p2.0的消除抖动
        JNB   P2.0,$        ;p2.0放开否?
        CALL  DELAY         ;放开消除抖动
        JMP   FOR
rev2:   CALL  DELAY         ;按p2.1的消除抖动
        JNB   P2.1,$        ;p3.3放开否?
        CALL  DELAY         ;放开消除抖动
        JMP   REV

DELAY:  MOV   R1,#150       ;键盘消抖和步进电机转速1
D1:     MOV   R2,#248
        DJNZ  R2,$
        DJNZ  R1,D1
        RET

DELAY1:  MOV   R1,#350       ;步进电机的转速2
D2:     MOV   R2,#348
        DJNZ  R2,$
        DJNZ  R1,D2
        RET

TABLE:
       db 01h,02h,04h,08h  ;正转表
        db 00               ;正转结束
        db 01h,08h,04h,02h  ;反转
        db 00               ;反转结束
        END
沙发
juventus9554|  楼主 | 2010-12-22 19:52 | 只看该作者
现在的问题是:正转延时调用的是DELAY,而反转延时调用的是DELAY1,当我实际运行的时候,反转为什么比正传快很多

使用特权

评论回复
板凳
小小猫咪| | 2010-12-22 20:05 | 只看该作者
是啊,DELAY1是明显比DELAY要长的啊

使用特权

评论回复
地板
juventus9554|  楼主 | 2010-12-22 20:08 | 只看该作者
所以,应该反转比正传要来的慢才对

使用特权

评论回复
5
llljh| | 2010-12-22 20:24 | 只看该作者
你DELAY1的数字已近溢出了

使用特权

评论回复
6
juventus9554|  楼主 | 2010-12-22 20:33 | 只看该作者
你DELAY1的数字已近溢出了
llljh 发表于 2010-12-22 20:24

使用特权

评论回复
7
llljh| | 2010-12-22 21:05 | 只看该作者
大于0xff

使用特权

评论回复
8
chuxh| | 2010-12-22 21:10 | 只看该作者
DELAY1比DELAY时间短,一般编译器会有提示警告的

使用特权

评论回复
9
houcs| | 2010-12-22 21:18 | 只看该作者
对,楼主留意下

使用特权

评论回复
10
zwll| | 2010-12-22 21:19 | 只看该作者
DELAY1:  MOV   R1,#350       ;步进电机的转速2
D2:     MOV   R2,#348

装不下350 348呀

使用特权

评论回复
11
juventus9554|  楼主 | 2010-12-22 21:25 | 只看该作者
非常感谢,忽略一个很弱智的问题

使用特权

评论回复
12
jack_shine| | 2010-12-23 09:19 | 只看该作者
lz还用汇编呀,好牛啊

使用特权

评论回复
13
A2000wps| | 2010-12-23 14:59 | 只看该作者
彙編我看懂多些,C我很多都看不懂

使用特权

评论回复
14
juventus9554|  楼主 | 2010-12-26 16:58 | 只看该作者
lz还用汇编呀,好牛啊
jack_shine 发表于 2010-12-23 09:19
牛啥,这么弱智的问题。。。

使用特权

评论回复
15
dinosaur45| | 2010-12-29 19:39 | 只看该作者
楼主好厉害

使用特权

评论回复
16
yongjuan1314| | 2010-12-30 10:40 | 只看该作者
以前读书的时候也写过控制电机的简单程序,呵呵

使用特权

评论回复
17
375606426| | 2011-8-18 14:20 | 只看该作者
汇编呀!晕菜我讨厌汇编
:Q

使用特权

评论回复
18
juventus9554|  楼主 | 2011-8-18 16:56 | 只看该作者
呵呵,熟悉就好了

使用特权

评论回复
19
yanzhangege| | 2013-4-25 10:24 | 只看该作者
楼主好厉害

使用特权

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

本版积分规则

900

主题

12190

帖子

3

粉丝