sábado, 9 de abril de 2016

Rotina em assembly para controle de motor de passo

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:  
 
clr p3.0
clr p3.1
clr p1.7

; -----_----------------
testes: 
 
teste1:
 jb p3.0,passo1;
lcall DELAY1ms ;

teste2:
 jb p3.1,passo2


lcall testes 
;-----------------------------------

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

0 comments:

Postar um comentário

Translate | Tradutor

Ajude este projeto

Ajude este projeto
Produtos Digitais


Deseja anunciar aqui. Fale comigo !!!

Nome

E-mail *

Mensagem *

Tecnologia do Blogger.

Popular Posts

Arquivo