Introducción
En varios sistemas electrónicos nos encontramos con una parte mecánica que transmite algún movimiento por palancas, levas, poleas, ejes de rotación, entre otras, todas ellas obtienen, en primera instancia, el movimiento de algún motor.
Existen diferentes tipos de motores, sin embargo para sistemas como: DVD’s, Grabadoras, Quemadores de discos, Impresoras, etc; se necesita un mejor control de las vueltas que realiza el motor, de esta manera los motores a pasos resultan ser los más convenientes.
De igual manera disponemos de motores a pasos unipolares o bipolares, cada uno de ellos tiene una combinación a sus entradas que determina su posición. Para controlar la secuencia de estas combinaciones podemos utilizar un PIC.
Objetivo
Manipular un motor a pasos bipolar en dos direcciones mediante dos botones.
Objetivos específicos
- Identificar las características del PIC18F4550.
- Manejar el software MPLAB para crear un proyecto y simular su funcionamiento.
- Realizar un programa en lenguaje ensamblador para controlar el sentido de giro de un motor a pasos bipolar mediante dos botones pulsadores; un pulsador ubicado en RD0 controla el sentido de giro hacia la derecha, mientras que el otro ubicado en RD1 lo hace hacia la izquierda. El motor sólo avanza un paso cada vez que se presiona uno de los dos botones, si se presionan ambos o no se presiona ninguno el motor no deberá avanzar.
- Realizar la simulación del código en MPLAB.
- Armar el circuito en ISIS Proteus y simularlo.
- Programar el microcontrolador mediante el software Pickit2.
- Armar el circuito físico y realizar pruebas.
Marco Teórico
En el siguiente gráfico (Figura 1) se muestran los puertos disponibles en el PIC18F4550, sus ubicaciones y las posibles funciones de cada pin.
A continuación se muestra el diagrama de Bloques de dicho microcontrolador (Figura 2)
Y por último una tabla con funciones para su programación (Figura 3)
Hemos mencionado que un microcontrolador puede ser considerado como una computadora, pues posee una ALU (Unidad de Aritmética y Lógica), registros, buses y unidad de control, es decir tiene una CPU (Unidad Central de Procesamiento).
La mayoría de los dispositivos de lógica secuencial, entre ellos los CPU, son de naturaleza síncrona. Es decir, están diseñados y operan en función de una señal de sincronización. Esta señal, conocida como señal de reloj, usualmente toma la forma de una onda cuadrada periódica. Calculando el tiempo máximo en que las señales eléctricas pueden moverse en las varias bifurcaciones de los muchos circuitos de un CPU, los diseñadores pueden seleccionar un período apropiado para la señal de reloj.
Para el correcto funcionamiento del microcontrolador debemos definir la frecuencia del oscilador pues determinará los ciclos de instrucción; podemos utilizar un oscilador interno o externo, sin embargo es recomendable utilizar un oscilador de cristal externo para evitar un mal funcionamiento frente a las variaciones de temparatura dentro del microcontrolador.
A continuación mostramos la tabla del registro de configuración del oscilador (Figura 4)
Podemos ver que por default tiene cargado el valor: 0100 X000 que de acuerdo con los valores de la tabla anterior corresponderían a la siguiente configuración:
- 0 | El dispositivo entra en reposo/bajo consumo cuando se ejecuta la instrucción Sleep.
- 100 | Frecuencia del oscilador interno: 1MHz
- X | Depende del estado del bit IESO
- 0 | INTOSC La frecuencia del Oscilador Interno no es estable
- 00 | Oscilador primario, externo
Aunque el microcontrolador está configurado por defecto con 1MHz es necesario especificarlo en la palabra de configuración.
Para estas prácticas se utilizará una frecuencia de 4MHz y, como no es necesario precisión en el tiempo, no pondremos ningún oscilador externo, de esta manera el valor a cargar será el siguiente:
- 0 110 0 0 00 => 0110 0000 => 0x60
Motor a Pasos Bipolar
Un motor a pasos es capaz de moverse ciertos grados cada vez que se le aplique un pulso y se mueva un paso, este paso puede variar desde 90º hasta 1.8º.
Estos motores poseen la ventaja de poder quedar enclavados en una sóla posición o bien totalmente libres; si una o más de sus bobinas esta energizada el motor permanecerá en la posición correspondiente, o bien, si no hay flujo de corriente en las bobinas el eje del motor estará libre.
Estos motores están constituidos normalmente por un rotor sobre el que van aplicados distintos imanes permanentes y por un cierto número de bobinas excitadoras en su estator.
Para controlar un motor a pasos es necesario conocer su funcionamiento, diseñar la etapa de potencia (transistores, diodos) y un circuito digital para la etapa de control (Circuitos TTL, Microcontrolador PIC). (Figura 5)
Existen 2 tipos de motores a pasos:
- Unipolares
- Bipolares
Ambos soncontrolados mediante una secuencia de activación específica, pero se diferencian en el modo en que están conectadas sus bobinas. Debido a que se usará un motor a pasos bipolar se caracterizará a continuación.
Motor Bipolar
En este tipo de motores las bobinas del estator se conectar en serie formando solamente dos grupos, que se montan sobre dos estatores. De acuerdo a la (Figura 5) se observa que de este motor salen cuatro hilos que se conectan al circuito de control que realiza la función de cuatro interruptores electrónicos dobles, que nos permiten variar la polaridad de alimentacón de las bobinas.
Con la activación y desactivación adecuada de dichos interruptores dobles, podemos obtener las secuencias adecuadas para que el motor pueda girar en un sentido o en otro.
Secuencia para manejar motores paso a paso Bipolares
Los motores a pasos Bipolares generalmente tienen 4 cables de salida. Se caracterizan por tener dos bobinas independientes que al ser excitadas posicionan el eje del motor en cierta posición, estos motores necesitan la inversión de la corriente que circula en sus bobinas en una secuencia determinada; Cada inversión de la polaridad provoca el movimiento del eje en un paso, cuyo sentido de giro está determinado por la secuencia siguiente (Figura 6):
Motor Unipolar
Estos motores suelen tener 6 o 7 cables de salida, dependiendo de sus conexiones internas. Este tipo se caracteriza por ser más simple de controlar. En la (Figura 7) podemos apreciar un ejemplo de conexionado para controlar un motor a pasos unipolar mediante el uso de un ULN2803, el cual es un array de 8 transistores tipo darlington capaz de manejar cargas de hasta 500mA. Las entradas de activación (A, B, C y D) pueden ser activadas por un microcontrolador.
Secuencia para manejar motores paso a paso Unipolares
Existen tres secuencias posibles para este tipo de motores, todas las secuencias comienzan nuevamente por el “paso 1” una vez alcanzao el paso final (4 u 8).
- Secuencia normal: La descrita en la tabla de la (Figura 8).
- Secuencia del tipo Wave drive: Sólo activa una bobina a la vez.
- Secuencia del tipo medio paso: Activa una bobina y después dos.
Para invertir el sentido de giro, simplemente se debe ejecutar las secuencias en modo inverso.
Cálculos
Dado que se configuró el oscilador interno del microcontrolador a 4MHz, se tiene:
- Ciclo de reloj:
- Para limitar la corriente del pin de Reset y el botón pulsador a 0.5mA, utilizar una resistencia de 10kΩ.
- Se emplea un retardo de 200 ms para verificar la secuencia de pulsos de los botones, tomando en cuenta que es un tiempo considerable para pulsar y soltar un botón. Por lo tanto se crean 2 variables quedando definidas de la siguiente manera:
Conta 1: 256
Conta 2: 256
El contador 1 se encuentra dentro del ciclo de conteo del contador 2. Tomando en cuenta que se necesitan 3 ciclos de instrucción 3 us para la ejecución de cada sustracción al contador 1. La fórmula queda como sigue:
Simulación
Antes de comenzar la simulación es necesario leer lo siguiente: ¿Cómo simular en MPLAB? y ¿Cómo simular en ISIS Proteus? en caso de saber cómo hacerlo se pueden omitir los enlaces anteriores.
Simulación en MPLAB
Para el desarrollo de esta práctica haremos uso de una librería que contendrá las funciones para los retardos, de manera que necesitaremos un archivo con extensión *.inc y un *.asm, éste último será el archivo principal.
En primer lugar se realizará el código correspondiente a los retardos, para ello creamos un nuevo archivo File\New o Ctrl + N
Nos aparecerá una ventana en blanco donde podemos comenzar a escribir el código, sin embargo la sintaxis no se resaltará hasta que tenga una extensión, para ello ejecutamos el comando Guardar como… mediante el menú File\Save As En la ventana que aparece asignar el nombre de la librería, en este caso le llamaremos “Retardo” y le colocamos la extensión “.inc” de manera que antes de guardar deberá aparecer en el cuadro de texto “Retardo.inc” como se muestra en la (Figura 9)
Después de verificar la configuración de la ventana Guardar como, damos clic en “Guardar” y ahora nuestro archivo aparecerá en la ventana de archivos de proyecto en la carpeta “Header Files” (Figura 10). De este manera podemos insertar el código que se interpretará como una función incluida en una librería.
Ahora en el archivo Retardo.inc escribiremos el siguiente código:
#define Conta cblock Conta1 Conta2 Conta3 endc Retardo200ms clrf Conta1 clrf Conta2 Repeat decfsz Conta1, F ;Salta cuando Conta1 llega a 0 bra Repeat ;Salta a Repeat para Decrementar Conta1 decfsz Conta2, F ;Salta cuando Conta2 llega a 0 bra Repeat ;Salta a Repeat Return
Se guardan los cambios y se continua editando el archivo fuente como sigue:
; ******************************************************** ; Desarrollo de Microcontroladores y DSPS ; Control de un Motor a pasos Bipolar ; Práctica 3 ; ; Fecha: 15/06/2012 ; Notas: Control de un motor a pasos bipolar mediante ; dos botones que controlan su dirección ; ; Autor: ek ; ************************************************************ LIST P = 18F4550 INCLUDE <P18F4550.INC> ;************************************************************ CONFIG FOSC = HS ;INTOSC_XT no disponible para simulación, usar HS CONFIG PWRT = ON CONFIG BOR = OFF CONFIG WDT = OFF CONFIG MCLRE = ON CONFIG PBADEN = OFF CONFIG LVP = OFF CONFIG DEBUG = OFF CONFIG XINST = OFF ; CODE ****************************************************** cblock SecuenC ;Indice de la Secuencia endc ORG 0x00 ;Iniciar el programa en el registro 0x00 movlw 0x62 ;Palabra de congiguración del OSC Interno movwf OSCCON ;Configurar OSCC2ON <- W clrf PORTD ;Borra posibles valores en PORTD clrf PORTB ;Borra posibles valores en PORTB movlw 0x03 ;Configurar RD0 y RD1 como entradas movwf TRISD ;TRISD <- W clrf TRISB ;Configurar PORTD como salida clrf SecuenC ;Estado de Posición a 0x00 INICIO movf SecuenC, W call MotorPosition movwf PORTB call Retardo200ms ButtonRight ;Verificar Botón Derecho btfss PORTD, 0 ;Verificar RB0 == 1, R == ON bra ButtonLeft ;RB0 == 0, R == OFF btfsc PORTD, 1 ;Verificar RB1 == 0, L == OFF bra INICIO ;Ambos están Presionados bra MoveRight ;Entradas RB0 == 1, RB1 == 0 ButtonLeft ;Verificar Botón Izquierdo btfss PORTD, 1 ;R == OFF ahora Verificar RB1 == 0, L == ON bra INICIO ;Ambos están Sueltos bra MoveLeft MoveRight ;Aumentar indice para la tabla movf SecuenC, W xorlw 0x06 ;Verificar el indice Max btfss STATUS, Z ;Salta si Z == 1, SecuenC = Indice Max bra Continue1 clrf SecuenC bra INICIO Continue1 incf SecuenC, F incf SecuenC, F bra INICIO MoveLeft movf SecuenC, W ;SecuenC -> W xorlw 0x00 ;Comprobar si W == 0 btfss STATUS, Z ;Salta si Z == 1, SecuenC = Indice Min bra Continue2 ;Secuence =/= 0 movlw 0x06 ;Rotar hasta Indice Max movwf SecuenC ;Asignar Indice Max -> SecuenC bra INICIO Continue2 decf SecuenC, F decf SecuenC, F bra INICIO MotorPosition addwf PCL, F retlw 0x0A ;0000 1010 retlw 0x09 ;0000 1001 retlw 0x05 ;0000 0101 retlw 0x06 ;0000 0110 include "Retardo.inc" ;Agregar librería Retardo.inc END ;Fin de Programa
Simulación en ISIS Proteus
Se construyó en ISIS Proteus el diagrama eléctrico de la siguiente manera y se verificó que el motor respondía como se esperaba al presionar los pulsadores que controlan el sentido de giro del mismo. El motor siempre se mueve sólo un paso si se presiona sólo una vez, el sentido depende del botón presionado.
Si el botón se mantiene presionado el motor seguirá girando en el sentido correspondiente hasta que se suelte, y si ambos se ambos se encuentran en el mismo estado el motor no hará nada.
Desarrollo Experimental
Material y Equipo requerido
- 1 PIC18F4550
- 1 CI L293D (Puente H con diodos)
- 3 Resistencias de 10kΩ
- 8 Diodos 1N4007
- 1 Motor a pasos Bipolar
- 1 Tablilla de experimentación (Protoboard)
- 1 Fuente de 5V
- 1 Multímetro
- 1 Programador de Microcontroladores
- 1 Computadora
- Software MPLAB y software de programador
- Software ISIS Proteus