找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7920|回復(fù): 5
收起左側(cè)

求助 stc12c5a60s2控制三個步進電機

[復(fù)制鏈接]
ID:49562 發(fā)表于 2013-4-21 16:18 | 顯示全部樓層 |閱讀模式

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;三個電機同時復(fù)位程序;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;送料電機先復(fù)位
SDFW:JB KA,$  ;復(fù)位開關(guān)按下后,3臺電機同時復(fù)位
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;左右電機M1開始復(fù)位 (M1、M2、M3同時復(fù)位) 2013.3.17更新  
SDGFW:LCALL SONGLIAO
      LCALL ZUOYOU
      LCALL XUANZHUAN
;;;;;;;;;;;;;;;;;;;;;;;;;各電機各自復(fù)位檢測程序
KKM1:
JB TT1,KKM2      ;檢測送料電機M1探頭
MOV CPA0,#00H ;設(shè)定脈沖數(shù)
MOV CPA1,#00H ;設(shè)定脈沖數(shù)
MOV CPA2,#00H ;設(shè)定脈沖數(shù)

KKM2:
JB TT2,KKM3    ;檢測左右電機M2探頭
MOV CPB0,#00H ;設(shè)定脈沖數(shù)
MOV CPB1,#00H ;設(shè)定脈沖數(shù)
MOV CPB2,#00H ;設(shè)定脈沖數(shù)

KKM3:
JB TT3,FWWC    ;檢測旋轉(zhuǎn)電機M3探頭
MOV CPC0,#00H ;設(shè)定脈沖數(shù)
MOV CPC1,#00H ;設(shè)定脈沖數(shù)
MOV CPC2,#00H ;設(shè)定脈沖數(shù)

FWWC:JB TT1,KKM1;手動復(fù)位完成
     JB TT2,KKM2
     JB TT3,KKM3
;**************************************************手動復(fù)位完成

 

 


;***********************************************************
; M1電機運行程序
;*************************************************************
MC:PUSH ACC
   PUSH PSW
   MOV TL0,TLAA    ;時鐘定時器低位 A8 042H
   MOV TH0,THAA    ;時鐘定時器高位 0FFH
;;;;;;;;;;;;;;;M1電機運行程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      MOV A,CPA2         ;判斷是否結(jié)束運轉(zhuǎn)
      CJNE A,#00H,NEXTA ;不相等則轉(zhuǎn)移
      MOV A,CPA1
      CJNE A,#00H,NEXTA
      MOV A,CPA0
      CJNE A,#00H,NEXTA  
      SETB JSBZA      
      MOV TLAA,#30H   ;恢復(fù)啟動速度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的中斷響應(yīng)程序
MOV TH1,THBB
;;;;;;;;;;;;;;;M2電機運行程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A,CPB2         ;判斷是否結(jié)束運轉(zhuǎn)
CJNE A,#00H,NEXTB
MOV A,CPB1
CJNE A,#00H,NEXTB
MOV A,CPB0
CJNE A,#00H,NEXTB
SETB JSBZB      
MOV TLBB,#00H   ;恢復(fù)啟動速度,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模塊中斷服務(wù)程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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         ;判斷是否結(jié)束運轉(zhuǎn)
CJNE A,#00H,NEXTC
MOV A,CPC1
CJNE A,#00H,NEXTC
MOV A,CPC0
CJNE A,#00H,NEXTC
SETB JSBZC      
MOV TLCC,#0D0H  ;恢復(fù)啟動速度,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

請高手幫我看看這個程序執(zhí)行三個電機復(fù)位的時候有時候檢測不到第一個接近開關(guān)第一個電機到達原點停不下來,有時候檢測不到第二個接近開關(guān),第二個電機到達原點停不下來。程序也不好怎么改了。但是單獨一個一個復(fù)位時是正常的。我用的是stc12c5a60s2的,誰能解釋一下,謝謝了,弄了很久了,還是不清楚問題在哪里。

[此貼子已經(jīng)被作者于2013-4-21 17:42:57編輯過]
回復(fù)

使用道具 舉報

ID:49562 發(fā)表于 2013-4-21 20:43 | 顯示全部樓層
沒有高手解答這個問題?pca定時器用了兩個,一個顯示,一個電機脈沖。
回復(fù)

使用道具 舉報

ID:49521 發(fā)表于 2013-4-22 14:32 | 顯示全部樓層
...............不要那么急嘛
回復(fù)

使用道具 舉報

ID:49562 發(fā)表于 2013-4-22 15:48 | 顯示全部樓層
解決了,找到問題了,是開關(guān)抖動的問題,程序跑到最后三個開關(guān)同時檢測那里就過去了,現(xiàn)在加了脈沖檢測,ok了。
回復(fù)

使用道具 舉報

ID:1 發(fā)表于 2013-5-17 01:30 | 顯示全部樓層
解決就好
回復(fù)

使用道具 舉報

ID:815487 發(fā)表于 2020-8-22 11:23 | 顯示全部樓層
你好!怎么利用上位機通過STC12C5A60S2單片機控制步進電機VID29-05
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表