Simulación de movimiento cámara de seguridad Proyecto MSP430G2553
Introducción
Los motores paso a paso son ideales para la construcción de mecanismos en
donde se requieren movimientos muy precisos.
La
característica principal de estos motores es el hecho de poder moverlos un paso
a la vez por cada pulso que se le aplique. Este paso puede variar desde 90°
hasta pequeños movimientos de tan solo 1.8°, es decir, que se necesitarán 4
pasos en el primer caso (90°) y 200 para el segundo caso (1.8°), para completar
un giro completo de 360°.
Estos
motores poseen la habilidad de poder quedar enclavados en una posición o bien
totalmente libres. Si una o más de sus bobinas está energizada, el motor estará
enclavado en la posición correspondiente y por el contrario quedará
completamente libre si no circula corriente por ninguna de sus bobinas.
Motor Unipolar: Estos motores suelen tener 6 o 5 cables de salida,
dependiendo de su conexionado interno. Este tipo se caracteriza por ser más
simple de controlar. En la figura 4 podemos apreciar un ejemplo de conexionado
para controlar un motor paso a paso unipolar mediante el uso de un ULN2803, el
cual es una array de 8 transistores tipo Darlington capaces de manejar cargas
de hasta 500mA. Las entradas de activación (Activa A, B, C y D) pueden ser
directamente activadas por un microcontrolador.
Descripción del
problema
Se necesita crear un sistema con
un motor a pasos que simule el movimiento de una cámara de seguridad, la cual
puede girar de manera automática de derecha a izquierda hasta los límites
respectivos que nosotros establezcamos y también podemos manipular su giro de
manera manual respetando los límites establecidos.
Solución del Problema
Se debe tener un seleccionador de
modo: automático / manual, para modo manual como para modo automático se deben
tener 2 sensores que detecten el giro del motor, éstos serán los límites
izquierda y derecha respectivamente.
Cuando se seleccione el modo
manual el giro se debe manipular con 2 push botton uno para sentido izquierda y
otro para sentido derecha. Cuando el motor llegue a cualquiera de los dos
límites deberá de detenerse.
Hardware
Software
Diagrama de Flujo
Programa Software
;MOTOR AUTOMÁTICO MANUAL PARA MSP430G2553
;*******************************************************************************
.cdecls C,LIST, "msp430G2553.h" ;
header
;-------------------------------------------------------------------------------
.text ; Inicio de programa
.retain
.retainrefs
;-------------------------------------------------------------------------------
RESET mov.w #250h,SP ; Inicializar stackpointer
AltoWDT mov.w #5A80h,&120h ; Alto
WDT
;--------------------------------------------------------
bis.b #17h,&P1DIR ;habilita 00010111 salidas=1
bis.b #00h,&P2DIR ;habilita como
entradas a todo P2
bis.b #008h,&P1REN ;ya es entrada
y se habilita resistencia
bis.b #008h,&P1OUT; resistencia en PullUp
bis.b #0Fh,&P2REN ;habilita resistencia de push
en todo P2
bis.b #0Fh,&P2OUT ;pone las resistencias de P2 en
Pull Up
;--------------------------------------------------------
Boton bit.b #008h,&P1IN ;lee
P13
jnz Manual ;si P13 es diferente 0 pasa a modo
manual
;--------------------------------------------------------
;Entra en modo Automático cuando en P1.3 lee 0
Automatico bit.b #001h,&P2IN ;lee sensor1
jnz Move1 ; si es 1 ejecuta Move1
bit.b #002h,&P2IN ;si sensor1
fue 0 lee sensor2
jnz Move2 , si sensor2 es 1 ejecuta Move2
Move1 call #Sentido1 ;Llama subrutina sentido1
bit.b #001h,&P2IN ;lee sensor1 2.0
jnz Move2
;si es 1 cambia a Move2
bit.b #008h,&P1IN
;lee botón P1.3
jnz Manual
;Si P1.3=1 Cambia a modo manual
jmp Move1 ;si el sensor y P1.3 fueron 0 repite
Move1
Move2 call #Sentido2 Llama subrutina sentido2
bit.b #002h,&P2IN ;lee
sensor2 2.1
jnz Move1
;si es 1 cambia a Move1
bit.b #008h,&P1IN ;lee
botón P1.3
jnz Manual
;Si P1.3=1 Cambia a modo manual
jmp Move2 ;si el sensor
y P1.3 fueron 0 repite Move2
;--------------------------------------------------------
Manual bic.b #17h,&P1OUT ;apaga
motor
bit.b #04h,&P2IN ;Lee
push P2.2
jnz
Move3 ;Dif 1 va a Move3
bit.b #08h,&P2IN ;test
push P2.3
jnz
Move4 ;Dif 1 va a Move4
bit.b #001h,&P2IN ;Lee sensor P2.0
jnz STOP
;si es 1 para motor
bit.b #002h,&P2IN ;test sensor P21
jnz STOP
jmp Boton ;Brinca a Boton para verificar que
esta en 1
Move3 bit.b #001h,&P2IN ;Lee
sensor P2.0
jnz STOP ;Lee si es 1 ejecuta STOP
call #Sentido1 ;Llama sentido1
bit.b
#04h,&P2IN ;test push P2.2
jnz Move3 ;mientras se 1 ejecuta Move3
jmp Manual ;Si se suelta el push P2.2 regresa a
MANUAL
jnz STOP
call #Sentido2
bit.b #08h,&P2IN ;test
push P2.3
jnz
Move4 ;Dif 1 va a Move4
jmp Manual ;Si se suelta el push P2.3 regresa a
MANUAL
STOP bic.b #17h,P1OUT ;Detiene
Motor
jmp Manual
;--------------------------------------------------------
; ;SUBRUTINA
SENTIDO1
Sentido1:
mov.b #14h,&P1OUT
call #Tiempo ;llama subrutina
call #Tiempo
mov.b #06h,&P1OUT
call #Tiempo
call #Tiempo
mov.b #03h,&P1OUT
call #Tiempo
call #Tiempo
mov.b #11h,&P1OUT
call #Tiempo
call #Tiempo
ret
;--------------------------------------------------------
;SUBRUTINA SENTIDO2
Sentido2:
mov.b #03h,&P1OUT
call #Tiempo ;llama subrutina
call #Tiempo
mov.b #06h,&P1OUT
call #Tiempo
call #Tiempo
mov.b
#14h,&P1OUT
call #Tiempo
call #Tiempo
mov.b #11h,&P1OUT
call #Tiempo
call #Tiempo
ret
;-------------------------------------------------------
Tiempo mov.w #010FFh,R5
;subrutina
LoopTiempo: dec.w R5
jnz LoopTiempo
ret
;-------------------------------------------------------------------------------
; Interrupt Vectors
;-------------------------------------------------------------------------------
.sect ".reset" ; Vector de
RESET
.short RESET
MATERIAL
- 1 Motor a pasos unipolar de 12V
- 1 ULN2803
-
2 Sensores ITR8102
- 2 push button
- 1 switch
- 11 cables jumpers macho-hembra
- 5 resistencias 330Ω
- 2 Resistencias 6.8KΩ
ESQUEMÁTICO
Comentarios
Publicar un comentario