Motor A Pasos Retroalimentado
Enviado por angelvg • 6 de Febrero de 2012 • 1.224 Palabras (5 Páginas) • 873 Visitas
Puerto B Configuracion Assignacion
RB0 Entrada Sensor Optoacoplador
RB1 Entrada Boton de subir en modo manual
RB2 Entrada Boton de bajada en modo manual
RB3 Salida Bobina A del motor
RB4 Salida Bobina B del motor
RB5 Salida Bobina C del motor
RB6 Salida Bobina D del motor
RB7 Entrada Boton de ON / OFF
Lenguaje Basic
Compilado en Pic Simulator IDE
Simulado en Proteus
Configuración de Puertos
ON OFF
RB7 1 0
Puerto A Configuración Asignación
RA0 Entrada x Posición deseada bit 0
RA1 Entrada x Posición deseada bit 1
RA2 Entrada x Posición deseada bit 2
RA3 Entrada x Posición deseada bit 3
RA4 Entrada Cambio de modo manual a automático
X = utilizados solo en modo automático
Automático Manual
RA4 1 0
Define CONF_WORD = 0x3ff1 ; Se define la palabra de configuración como trabajara el pic, en este caso es 3ff1 que dice lo siguiente: Code Protection deshabilitado, Power-up Timer habilitado, Watchdog Timer deshabilitado, Oscillator tipo XT.
Define CLOCK_FREQUENCY = 4 ; se define la frecuencia con la que nuestro pic trabajara en este caso 4 mhz.
Dim retro As Byte ; se declara la variable “retro” como Byte ( retro es el registro donde se ira dando el incremento de la interrupción dada por la retroalimentación del motor ).
Const tope = 12 ; declaración de la constante “tope” la máxima posición alcanzada por la grúa en este caso es igual a 12 decimal.
Dim deseada As Byte ; Declaración de la variable “deseada” esta será donde se guardara la posición ala que queramos llegar en modo automático.
INTCON.INTE = 1 ; habilita las interrupción de entrada en RB0.
Enable ; Habilita las interrupciones en general GIE
TRISA = $1f ; Configura el Puerto A
TRISB = $87; Configura el Puerto B
OPTION_REG.INTEDG = 1 ; Configura que las interrupciones sean dadas por el flanco ascendente
-----------------------------------------------------------------------------------------------------------------------------------
Inicio de ciclo de escaneo (inicio) se encarga de estar escaneando el bit 7 del puerto B que es el botón de encendido si esta en 0 salta a OFF sino sigue a escanear el bit 4 del puerto A que es el botón para cambiar de modo automático a modo manual si este esta en 1 entonces salta a programa2 (automático), si no continua con el bit 1 del puerto B si este esta en 1 salta a rutina de Subir si no es así salta a escanear el bit 2 del puerto B si es 1 salta a rutina de bajar si no se dio ninguna condición el programa se queda ciclado esperando una entrada por estos puertos.
inicio:
If PORTB.7 = 0 Then Goto off
If PORTA.4 = 1 Then Goto programa2
If PORTB.1 = 1 Then Goto subir
If PORTB.2 = 1 Then Goto bajar
Goto inicio
off:
PORTB = $00 ; OFF se encarga de cuando el bit 7 del puerto B este en 0 des energiza el motor así para ahorrar energía en modo apagado después salta a inicio.
Goto inicio
-----------------------------------------------------------------------------------------------------------------------------------
Rutina de Subir y bajar se manda un código a los bits correspondientes alas bobinas A,B,C,D, en secuencia para asi poder hacer girar el motor a pasos, entre cada paso hay un retardo de 90 mili segundos asi para lograr una velocidad moderada y una buena respuesta de parte del motor a los cambios.
SUBIDA
A B C D
Pasos RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 CODIGO HEX
1 x x x 1 0 0 0 x 08H
2 x x x 0 1 0 0 x 10H
3 x x x 0 0 1 0 x 20H
4 x x x 0 0 0 1 x 40H
subir:
If retro = tope Then Goto inicio
PORTB = $08
WaitMs 90
PORTB = $10
WaitMs 90
PORTB = $20
WaitMs 90
PORTB = $40
WaitMs 90
Goto inicio
CICLO DE BAJADA
A B C D
Pasos RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 CODIGO HEX
1 x x x 0 0 0 1 x 40H
2 x x x 0 0 1 0 x 20H
3 x x x 0 1 0 0 x 10H
4 x x x 1 0 0 0 x 08H
bajar:
If retro = 0 Then Goto inicio
PORTB = $40
WaitMs 90
PORTB = $20
WaitMs 90
PORTB = $10
WaitMs 90
PORTB
...