找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7121|回复: 5
收起左侧

求助 stc12c5a60s2控制三个步进电机

[复制链接]
ID:49562 发表于 2013-4-21 16:18 | 显示全部楼层 |阅读模式

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;三个电机同时复位程序;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;送料电机先复位
SDFW:JB KA,$  ;复位开关按下后,3台电机同时复位
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;左右电机M1开始复位 (M1、M2、M3同时复位) 2013.3.17更新  
SDGFW:LCALL SONGLIAO
      LCALL ZUOYOU
      LCALL XUANZHUAN
;;;;;;;;;;;;;;;;;;;;;;;;;各电机各自复位检测程序
KKM1:
JB TT1,KKM2      ;检测送料电机M1探头
MOV CPA0,#00H ;设定脉冲数
MOV CPA1,#00H ;设定脉冲数
MOV CPA2,#00H ;设定脉冲数

KKM2:
JB TT2,KKM3    ;检测左右电机M2探头
MOV CPB0,#00H ;设定脉冲数
MOV CPB1,#00H ;设定脉冲数
MOV CPB2,#00H ;设定脉冲数

KKM3:
JB TT3,FWWC    ;检测旋转电机M3探头
MOV CPC0,#00H ;设定脉冲数
MOV CPC1,#00H ;设定脉冲数
MOV CPC2,#00H ;设定脉冲数

FWWC:JB TT1,KKM1;手动复位完成
     JB TT2,KKM2
     JB TT3,KKM3
;**************************************************手动复位完成

 

 


;***********************************************************
; M1电机运行程序
;*************************************************************
MC:PUSH ACC
   PUSH PSW
   MOV TL0,TLAA    ;时钟定时器低位 A8 042H
   MOV TH0,THAA    ;时钟定时器高位 0FFH
;;;;;;;;;;;;;;;M1电机运行程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      MOV A,CPA2         ;判断是否结束运转
      CJNE A,#00H,NEXTA ;不相等则转移
      MOV A,CPA1
      CJNE A,#00H,NEXTA
      MOV A,CPA0
      CJNE A,#00H,NEXTA  
      SETB JSBZA      
      MOV TLAA,#30H   ;恢复启动速度500HZ
      MOV THAA,#0F8H
      LJMP NEXT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NEXTA:JNB JSBZA,KKJIANSA  ;判断是否加速
;***************************************
;步进电机加速程序                      ;
;***************************************
MOV A,THAA                             ;
CJNE A,THA,PDA    ;判断是否需要加速    ;                                    
MOV A,TLAA                             ;
CJNE A,TLA,PDA    ;判断是否需要加速    ;               
CLR JSBZA                              ;
LJMP DJAYX                             ;
PDA:JNC DJAYX     ;电机A运行           ;
       
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJAJS:            ;加速斜率            ; 
MOV A,TLAA     ;                    ;
CLR C                                  ;
ADDC A,XL1    ;                    ;
MOV TLAA,A     ;                    ;
JNC DJAYX      ;;                ;
INC THAA     ;                       ;     
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KKJIANSA:JB JSBZA,DJAYX;判断是否减速
;***************************************
;步进电机减速程序                      ;
;***************************************
MOV A,CPA2                             ;
CJNE A,#00H,PDAA  ;判断是否到达减速时刻;                                       ;
MOV A,CPA1                             ;
CJNE A,#00H,PDAA  ;判断是否到达减速时刻;                                      ;
MOV A,CPA0      ;判断是否到达减速时刻;
CJNE A,#0FFH,PDAA ;                    ;
LJMP DJAJIANS                          ;                                      ;
PDAA:JNC DJAYX                         ;                     
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJAJIANS: ;减速斜率            ;       ;
CLR C                                  ;
MOV A,TLAA                          ;
SUBB A,XL1                         ;
MOV TLAA,A                          ;
JNC DJAYX                       ;;
DEC THAA                             ;   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJAYX:CPL  BJA                ;输出步进电机M1的脉冲
NEXT:POP PSW
     POP ACC
     RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;M2电机运行程序
;*************************************************************
NT0:
PUSH ACC
PUSH PSW 
MOV TL1,TLBB       ;定时器T0的中断响应程序
MOV TH1,THBB
;;;;;;;;;;;;;;;M2电机运行程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A,CPB2         ;判断是否结束运转
CJNE A,#00H,NEXTB
MOV A,CPB1
CJNE A,#00H,NEXTB
MOV A,CPB0
CJNE A,#00H,NEXTB
SETB JSBZB      
MOV TLBB,#00H   ;恢复启动速度,1000HZ
MOV THBB,#0FDH
LJMP NEXT2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NEXTB:JNB JSBZB,KKJIANSB  ;判断是否加速
;***************************************
;步进电机加速程序                      ;
;***************************************
MOV A,THBB                             ;
CJNE A,THB,PDB    ;判断是否需要加速    ;                                     
MOV A,TLBB                             ;
CJNE A,TLB,PDB    ;判断是否需要加速    ;               
CLR JSBZB                              ;
LJMP DJBYX                             ;
                                       ;
PDB:JNC DJBYX     ;电机A运行           ;       
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJBJS:            ;加速斜率            ; 
MOV A,TLBB     ;                    ;
CLR C                                  ;
ADDC A,XL2     ;                    ;
MOV TLBB,A     ;                    ;
JNC DJBYX      ;;                ;
INC THBB     ;                       ;     
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KKJIANSB:JB JSBZB,DJBYX;判断是否减速
;***************************************
;步进电机减速程序                      ;
;***************************************
MOV A,CPB2                             ;
CJNE A,#00H,PDBB  ;判断是否到达减速时刻;                                     
MOV A,CPB1                             ;
CJNE A,#00H,PDBB  ;判断是否到达减速时刻;                                      
MOV A,CPB0    ;判断是否到达减速时刻;
CJNE A,#0FFH,PDBB;                     ;
LJMP DJBJIANS                          ;                                   
PDBB:JNC DJBYX                         ;                     
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJBJIANS: ;减速斜率            ;       ;
CLR C                                  ;
MOV A,TLBB                          ;
SUBB A,XL2                          ;
MOV TLBB,A                          ;
JNC DJBYX                       ;;
DEC THBB                             ;   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJBYX:       ;电机B运行程序
CLR C
MOV A,CPB0  ;
SUBB A,#01H ;  脉冲低位减一
MOV CPB0,A
JNC BJWB   ; 检测是否有借位,借位向下
CLR C
MOV A,CPB1   ;;
SUBB A,#01H;  脉冲高位减一
MOV CPB1,A
JNC BJWB  ;  检测是否有借位,借位向下。
CLR C
MOV A,CPB2   ;;
SUBB A,#01H;  脉冲高位减一
MOV CPB2,A
JNC BJWB ;  检测是否有借位,借位向下。
BJWB:CPL  BJB                ;输出步进电机M2的脉冲
NEXT2:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
JIES:
POP PSW
POP ACC
RETI            ;中断返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;PCA模块中断服务程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PCA:
PUSH ACC
PUSH PSW
JNB CCF1,PCA0
CLR CCF1
MOV A,CCAP1L
ADD A,#20H
MOV CCAP1L,A
MOV A,CCAP1H
ADDC A,#10H
MOV CCAP1H,A
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;M3电机运行程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PCA0:CLR CCF0;模块0中断标志位清零
MOV A,CCAP0L;重新赋值
ADD A,TLCC
MOV CCAP0L,A
MOV A,CCAP0H
ADDC A,THCC
MOV CCAP0H,A
;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;M3电机运行程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A,CPC2         ;判断是否结束运转
CJNE A,#00H,NEXTC
MOV A,CPC1
CJNE A,#00H,NEXTC
MOV A,CPC0
CJNE A,#00H,NEXTC
SETB JSBZC      
MOV TLCC,#0D0H  ;恢复启动速度,500HZ
MOV THCC,#07H  
LJMP NEXT3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NEXTC:JNB JSBZC,KKJIANSC  ;判断是否加速
;***************************************
;步进电机加速程序                      ;
;***************************************
MOV A,THC                              ;
CJNE A,THCC,PDC    ;判断是否需要加速   ;                                       ;
MOV A,TLC                              ;
CJNE A,TLCC,PDC    ;判断是否需要加速   ;               
PDCX:CLR JSBZC                         ;
LJMP DJCYX                             ;                                       ;
PDC:JNC PDCX   ;电机A运行              ;       
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJCJS:            ;加速斜率            ; 
CLR C                                  ;
MOV A,TLCC                 ;
SUBB A,XL3                 ;
MOV TLCC,A                 ;
JNC DJCYX          ;
DEC THCC                 ;   
LJMP DJCYX                             ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KKJIANSC:JB JSBZC,DJCYX;判断是否减速
;***************************************
;步进电机减速程序                      ;
;***************************************
MOV A,CPC2                             ;
CJNE A,#00H,PDCC  ;判断是否到达减速时刻;                                       ;
MOV A,CPC1                             ;
CJNE A,#00H,PDCC  ;判断是否到达减速时刻;                                      ;
MOV A,CPC0    ;判断是否到达减速时刻;
CJNE A,#0FFH,PDCC;                     ;
LJMP DJCJIANS                          ;                                       ;
PDCC:JNC DJCYX                         ;                     
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJCJIANS: ;减速斜率                    ;       ;
MOV A,TLCC                 ;                    ;
CLR C                                  ;
ADDC A,XL3                 ;                    ;
MOV TLCC,A                 ;                    ;
JNC DJCYX          ;;                ;
INC THCC                 ;                       ;     
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJCYX:       ;电机3运行程序
CLR C
MOV A,CPC0  ;
SUBB A,#01H ;  脉冲低位减一
MOV CPC0,A
JNC BJWBC   ; 检测是否有借位,借位向下
CLR C
MOV A,CPC1   ;;
SUBB A,#01H;  脉冲高位减一
MOV CPC1,A
JNC BJWBC  ;  检测是否有借位,借位向下。
CLR C
MOV A,CPC2   ;;
SUBB A,#01H;  脉冲高位减一
MOV CPC2,A
JNC BJWBC ;  检测是否有借位,借位向下。
BJWBC:CPL  BJC   ;输出步进电机M2的脉冲
PCAW:
POP PSW
POP ACC
RETI

请高手帮我看看这个程序执行三个电机复位的时候有时候检测不到第一个接近开关第一个电机到达原点停不下来,有时候检测不到第二个接近开关,第二个电机到达原点停不下来。程序也不好怎么改了。但是单独一个一个复位时是正常的。我用的是stc12c5a60s2的,谁能解释一下,谢谢了,弄了很久了,还是不清楚问题在哪里。

[此贴子已经被作者于2013-4-21 17:42:57编辑过]
回复

使用道具 举报

ID:49562 发表于 2013-4-21 20:43 | 显示全部楼层
没有高手解答这个问题?pca定时器用了两个,一个显示,一个电机脉冲。
回复

使用道具 举报

ID:49521 发表于 2013-4-22 14:32 | 显示全部楼层
...............不要那么急嘛
回复

使用道具 举报

ID:49562 发表于 2013-4-22 15:48 | 显示全部楼层
解决了,找到问题了,是开关抖动的问题,程序跑到最后三个开关同时检测那里就过去了,现在加了脉冲检测,ok了。
回复

使用道具 举报

ID:1 发表于 2013-5-17 01:30 | 显示全部楼层
解决就好
回复

使用道具 举报

ID:815487 发表于 2020-8-22 11:23 | 显示全部楼层
你好!怎么利用上位机通过STC12C5A60S2单片机控制步进电机VID29-05
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表