Um circuito muito utilizando para o pessoal de gosta de robótica são os circuitos de atuam sobre os motores de passo, como padrão utilizei um microcontrolador 89c2051 para este protótipo.
Os resistores apresentados que vão ao circuito foram adicionados devido o motor dar um break quando começava a se movimentar já o transistor foi incluído para dar um reset automático quando o mesmo inicializa, assim como uma forma de estabilizar o estado de rotação do motor.
Vídeo do protótipo em funcionamento
| Esquema elétrico controle de motor de passo |
; Rotina para controle de motor de passo - Autor : Anderson O.de Sampaio
; Rotina elabora e compilada no aplicativo PEQUI
$mod51
org 00h ;Posição de reset
sjmp inicio ;Salto para o início do código
org 30h ; Endereço do inicio do programa
inicio:
$mod51
org 00h ;Posição de reset
sjmp inicio ;Salto para o início do código
org 30h ; Endereço do inicio do programa
inicio:
clr p3.0
clr p3.1
clr p1.7
clr p3.1
clr p1.7
; -----_----------------
testes:
testes:
teste1:
jb p3.0,passo1;
lcall DELAY1ms ;
teste2:
jb p3.1,passo2 ;
lcall testes
;-----------------------------------
passo1:
passo1:
setb p1.7
lcall DELAY1ms
clr p1.7
clr a
mov p1,a
mov p1,#8
lcall DELAY
mov p1,#4
lcall DELAY
mov p1,#2
lcall DELAY
mov p1,#1
lcall delay
jb p3.0, passo1
lcall testes
passo2:
setb p1.7
lcall DELAY1ms
clr p1.7
clr a
mov p1,a
mov p1,#1
lcall DELAY
mov p1,#2
lcall DELAY
mov p1,#4
lcall DELAY
mov p1,#8
lcall delay
jb p3.1, passo2
lcall testes
; Obs.: No MSC1211 um ciclo de Máquina = 4 pulsos de clock...
; Obs.: No 8051 um ciclo de Máquina = 12 pulsos de clock...
;
; *** DELAY 1ms ************************************************************
; ** **
; ******************************** [ MSC1211 @ 11.0592MHz = 2757 CICLOS] ***
;
DELAY1ms: PUSH 07H
MOV R7,#83 ; <-- 250="" ciclo="" msc1211="" p="" para="" pulsos="" um=""> _LOOP1ms: NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,_LOOP1ms
POP 07H
RET
; *** DELAY 500ms **********************************************************
; ** Baseada na rotina de 1ms! **
; ********************************************* [ MSC1211 @ 11.0592MHz ] ***
;
DELAY500ms: PUSH 07H
MOV R7,#100
_LOOP500ms: LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
DJNZ R7,_LOOP500ms ; Repete 100x
POP 07H
RET
; *** DELAYx1000ms(A) ******************************************************
; ** Baseada na rotina de 1ms! **
; ********************************************* [ MSC1211 @ 11.0592MHz ] ***
;
DELAYx1000ms: PUSH 07H
PUSH 06H
MOV R7,A
_LOOPxx1000ms: MOV R6,#200
_LOOPx1000ms: LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
DJNZ R6,_LOOPX1000ms ; Repete 200x = 1segundo
DJNZ R7,_LOOPxx1000ms ; Repete A vezes
POP 06H
POP 07H
RET
DELAY: mov r4,#01 ; 01 fica bem mais rapido
MOV TMOD,#01
MOV TCON,#00
REPETE: MOV TH0,#08
MOV TL0,#0DBh
SETB TR0
AQUI: JNB TF0,AQUI
CLR TF0
DJNZ R4,REPETE
CLR TR0
RET
end -->
lcall DELAY1ms
clr p1.7
clr a
mov p1,a
mov p1,#1
lcall DELAY
mov p1,#2
lcall DELAY
mov p1,#4
lcall DELAY
mov p1,#8
lcall delay
jb p3.1, passo2
lcall testes
; Obs.: No MSC1211 um ciclo de Máquina = 4 pulsos de clock...
; Obs.: No 8051 um ciclo de Máquina = 12 pulsos de clock...
;
; *** DELAY 1ms ************************************************************
; ** **
; ******************************** [ MSC1211 @ 11.0592MHz = 2757 CICLOS] ***
;
DELAY1ms: PUSH 07H
MOV R7,#83 ; <-- 250="" ciclo="" msc1211="" p="" para="" pulsos="" um=""> _LOOP1ms: NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,_LOOP1ms
POP 07H
RET
; *** DELAY 500ms **********************************************************
; ** Baseada na rotina de 1ms! **
; ********************************************* [ MSC1211 @ 11.0592MHz ] ***
;
DELAY500ms: PUSH 07H
MOV R7,#100
_LOOP500ms: LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
DJNZ R7,_LOOP500ms ; Repete 100x
POP 07H
RET
; *** DELAYx1000ms(A) ******************************************************
; ** Baseada na rotina de 1ms! **
; ********************************************* [ MSC1211 @ 11.0592MHz ] ***
;
DELAYx1000ms: PUSH 07H
PUSH 06H
MOV R7,A
_LOOPxx1000ms: MOV R6,#200
_LOOPx1000ms: LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
LCALL DELAY1ms ; Aguarda 1ms!!!
DJNZ R6,_LOOPX1000ms ; Repete 200x = 1segundo
DJNZ R7,_LOOPxx1000ms ; Repete A vezes
POP 06H
POP 07H
RET
DELAY: mov r4,#01 ; 01 fica bem mais rapido
MOV TMOD,#01
MOV TCON,#00
REPETE: MOV TH0,#08
MOV TL0,#0DBh
SETB TR0
AQUI: JNB TF0,AQUI
CLR TF0
DJNZ R4,REPETE
CLR TR0
RET
end -->
0 comments:
Postar um comentário