四相步進電機的控制

****************任務八:四相步進電機的控制*************************

;注:本程序爲四相步進電機實驗用,適於四組線圈的電機。

;電路接法:P1.7 P1.6 P1.5 P1.4分別接晶體管驅動器A,B,C,D輸入端,

          相應輸出端接步進電機的a,b,c,d四相,電機公共端接步進電機

           電源正。

*******************************************************************

 

ORG  0000H               ;讓編譯程序從0地址開始

JMP    STAR

ORG  0030H

 

STAR:      MOV  SP,#30H            ;堆棧指針設定

MOV  21H,#00H            ;初始步調清零(0-7)有效

            MOV  20H,#4             ;速度選擇1至255(1最大)

MOV   A,  #200            ;轉200步

LOOP:      MOV  R3,#4               ;執行4次

L1:        CALL    BJDJ_4Z;          ;正轉

            DJNZ     R3,L1

MOV     R3, #10            ;停止一秒

L2:        CALL    YS_01S          ;延時2 ms

DJNZ     R3,L2

MOV   R3, #4                  ;執行4次

L3:        CALL    BJDJ_4F                ;正轉

DJNZ    R3,L3

MOV   R3,   #10              ;停止一秒

L4:        CALL    YS_01S       

DJNZ    R3,L4

JMP    LOOP

 

           

PROC  YS_01S,  YS_20MS                ;延時子程序定義

YS_01S:   MOV  R7,#10                  ;R7中送入數值10

LP3:      MOV  R6,#100                  ;R6中送入數值100

LP2:      MOV  R5,#100                  ;R5中送入數值100

LP1:      DJNZ  R5,LP1                   ;R5減1不爲0轉LP1

DJNZ  R6,LP2                    ;R6減1不爲0轉LP2

DJNZ  R7,LP3                     ;R7減1不爲0轉LP3

RET                               ;子程序返回

YS_20MS:  MOV  R7,#1                    ;R7中送入數值1

JMP  LP3                          ;轉到LP3

END                               ;子程序編譯結束

 

 

 

****************步進電機控制子程序*************************

;作用:四相步進電機角度及速度控制

;使用方法:先在速度寄存單元20H寫入速度值1至255(1最快)

             將要轉過的步數寫入A(1-255),調用該正轉或反轉子程序。

;電路接法: P1.7, P1.6 ,P1.5, P1.4分別接晶體管驅動器A,B,C,D輸入端,

           相應輸出端接步進電機的a,b,c,d四相,電機公共端接步進電機

           電源正。

;資源佔用:  20H-速度,21H-步調,R0,B,DPTR

 

              PROC  BJDJ_4Z,BJDJ_4F

BJDJ_4Z:     PUSH  A

MOV  R0,A              ;步進數送R0

            MOV  DPTR,#MTAB     ;控制碼地址送DPTR

MOV   A, P1               ;P1口狀態送A

ANL    A,#0FH           ;清零高四位

    MOV  B,A               ;保存P1口低四位狀態

 

LP2:       INC  21H                  ;步調數加1

            MOV  A,21H              ;步調數(0至7),每8步爲一個週期,該寄存

器記錄當前是第幾步

CJNE   A,#08H,LP1      ;步調數不爲8轉

CLR    A

MOV   21H,A

LP1:     MOVC  A,@A+DPTR        ;查控制碼到A

          ORL  A,B                  ;P1口低4位狀態送A

          MOV   P1,A                 ; 送出控制碼

CALL    YS_SD              ;根據速度參數延時

DJNZ  R0,LP2                 ;步進數減1不爲0轉LP2

MOV  A,#0F0H            ;停止電機驅動

ORL  A,B 

MOV   P1,A

POP    A

RET                       ;子程序返回

 

BJDJ_4F:     PUSH    A

MOV  R0,A                ;步進數送R0

MOV  DPTR,#MTAB        ;控制碼地址送DPTR

MOV   A, P1                ;P1口狀態送A

ANL  A,#0FH           ;清零高四位

MOV  B,A               ;保存P1口低四位狀態

 

LP4:       DEC  21H                  ;步調數減1

            MOV  A,21H              ;步調數(0至7),每減8步爲一個週期,該寄存器記錄當前是第幾步

CJNE    A,#0FFH,LP3      ;步調數不爲8轉

MOV  A,#07H

MOV  21H,A

LP3:       MOVC  A,@A+DPTR        ;查控制碼到A

          ORL  A,B                  ;P1口低4位狀態送A

      MOV  P1,A               ; 送出控制碼

CALL    YS_SD              ;根據速度參數延時

DJNZ  R0,LP4                ;步進數減1不爲0轉LP4

MOV  A,#0F0H            ;停止電機驅動

ORL  A,B 

MOV   P1,A

POP    A

RET                           ;子程序返回

END                            ;子程序編譯結束

 

 

PROC  YS_SD                         ;速度延時子程序

YS_SD       MOV  R7, 20H                 ;速度參數送R7

LP2:      MOV  R6,#0B0H              

LP1:      NOP

NOP

DJNZ  R6,LP1                

DJNZ  R7,LP2

RET

END

 MTAB:    DB    0E0H,0C0H,0D0H,90H,0B0H,30H,70H,60H

**********************************************************************

END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章