打印

步进电机程序

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


;功能: 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

使用特权

评论回复
沙发
llljh| | 2022-10-8 21:00 | 只看该作者
现在的问题是:正转延时调用的是DELAY,而反转延时调用的是DELAY1,当我实际运行的时候,反转为什么比正传快很多

使用特权

评论回复
板凳
heweibig| | 2022-10-8 21:03 | 只看该作者
是啊,DELAY1是明显比DELAY要长的啊

使用特权

评论回复
地板
hanwe|  楼主 | 2022-10-8 21:07 | 只看该作者
所以,应该反转比正传要来的慢才对

使用特权

评论回复
5
zhenykun| | 2022-10-8 21:10 | 只看该作者
你DELAY1的数字已近溢出了

使用特权

评论回复
6
huangchui| | 2022-10-8 21:17 | 只看该作者
大于0xff

使用特权

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

使用特权

评论回复
8
chuxh| | 2022-10-8 21:29 | 只看该作者
DELAY1:  MOV   R1,#350       ;步进电机的转速2
D2:     MOV   R2,#348

装不下350 348呀

使用特权

评论回复
9
shimx| | 2022-10-8 21:34 | 只看该作者
lz还用汇编呀,好牛啊

使用特权

评论回复
10
pengf| | 2022-10-8 21:40 | 只看该作者
以前读书的时候也写过控制电机的简单程序,呵呵

使用特权

评论回复
11
zhanghqi| | 2022-10-8 21:42 | 只看该作者
步进电机控制器上面会用到驱动IC吗?

使用特权

评论回复
12
tpgf| | 2022-11-2 09:48 | 只看该作者
步进电机的速度快慢和pwm的频率应该成正比呀

使用特权

评论回复
13
qcliu| | 2022-11-2 09:57 | 只看该作者
zhenykun 发表于 2022-10-8 21:10
你DELAY1的数字已近溢出了

在哪里可以判断已经溢出了呢?另外如果溢出的话 程序是不是会报错?

使用特权

评论回复
14
drer| | 2022-11-2 10:23 | 只看该作者
llljh 发表于 2022-10-8 21:00
现在的问题是:正转延时调用的是DELAY,而反转延时调用的是DELAY1,当我实际运行的时候,反转为什么比正传 ...

是否可以考虑修改一下DELAY1里边变量的类型

使用特权

评论回复
15
coshi| | 2022-11-2 10:45 | 只看该作者
改用c语言 配置好了寄存器之后数据都是一目了然

使用特权

评论回复
16
kxsi| | 2022-11-2 10:55 | 只看该作者
楼主选用的这个步进电机是什么相序的呢?

使用特权

评论回复
17
wiba| | 2022-11-2 11:11 | 只看该作者
如果R1的数据类型是char 那么上限就是255 绝不可能计数到350

使用特权

评论回复
18
chenjun89| | 2022-11-5 12:59 | 只看该作者
还是用汇编啊,楼主牛x。

使用特权

评论回复
19
MessageRing| | 2022-11-5 19:09 | 只看该作者
用c语言 配置好了寄存器之后数据都是一目了然

使用特权

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

本版积分规则

979

主题

8749

帖子

4

粉丝