miércoles, 18 de febrero de 2015

Controlar Motores de CD: encendido/apagado y dirección mediante el LaunchPad MSP430G2.

Introducción
En este proyecto muestro como realizar el control de encendido, apagado y dirección de un motor de CD mediante el microcontrolador MSP430G2553 el cual viene por defecto en el LaunchPad de TexasInstruments que se usará en este proyecto. En este caso la velocidad de los motores no se contempla, solo la dirección. Para el control de la velocidad en otro proyecto previo se uso un PWM como método de control de dicho parámetro. Se prevee en un futuro crear un proyecto para poder controlar el encendido, apagado, dirección y velocidad de un motor de CD para el cual se usan estos mismos componentes mas una compuerta lógica y claro el cambio del programa en el microcontrolador.

Requerimientos
Procedimiento
El Circuito
El circuito eléctrico está compuesto por:
  1. Fuentes de alimentación eléctrica. En mi caso uso una fuente de poder de una PC vieja que resultaperfecta para éste proyecto y la mayoría dado que unas de las posibles salidas de dicha fuente de alimentación son +-3.3V, +-5V, etc. y si recordamos nuestros microncontroladores de la familia MSP430 son ultra-low power por lo que pueden ser alimentados desde 1.8V hasta 3.4V aproximadamente, mientras el Bluetooth que yo uso está montado en una base con pines para ser alimentado entre 3.6V y 6V, el circuito L293D puede ser alimentado a 5V para el funcionamiento del mismo mientras como fuente de alimentación para los motores puede variar hasta 36V. En este caso solo usaremos la misma fuente de alimentación de 5V dado que el motor usado es de ese voltaje.
  2. El módulo Bluetooth. Éste componente estará enlazado inalámbricamente con el celular o computadora con la que se desee controlar el motor DC. De manera alámbrica está conectado con el microcontrolador mediante sus canales TXD y RXD (véase que es el protocolo UART y cómo funciona). El pin del módulo Bluetooth denominado como RXD debe conectarse con el pin 4 (UCA0TXD) del microcontrolador, mientras el pin TXD del Bluetooth debe conectarse al pin 3 (UCA0RXD) del microcontrolador.
  3. Microcontrolador MSP430G2553. Dicho microcontrolador es el que trae a la fecha el antiguo LauchPad (A la fecha, hace unos días salio una versión mjorada con otro microcontrolador de la misma familia, ya hablaremos de éste en cuanto reciba mi LaunchPad). Éste microcontrolador es alimentado en un rango de voltaje bajo, para éste caso 3.3V el cual debe ser suministrado en el pin 1. La tierra o GND (también conocida para algunos como el menos de la alimentación) es conectada en el pin 20 de dicho microcontrolador. Una nota muy importante que hay que considerar es que el pin 16 o RESET, debe estar puesto en alto (conectado al voltaje positivo de la alimentación) dado que si está a tierra o está flotado, el microcontrolador no trabajará, esto se debe que como todos los microcontroladores, éste es el pin RESET, o sea que con éste pin podemos reiniciar el programa cuando queramos poniendolo en bajo (conectándolo a tierra) y vlviendo a ponerlo en alto.
  4. El integrado L293D. Éste circuito contiene dentro 4 drivers puente H qu pueden ser usados en tres modos diferentes como lomuestra su datasheet o la imágen de abajo. Éste circuito se alimenta para su funcionamiento en el pin 16 a 5V, mientras que para el suministro de voltaje para el motor se realiza en el pin 8 y soporta hasta 36V y 600mA nominales. Para éste caso usamos la configuración de controlar un solo motor, por lo que solo debe conectarse la parte encerrada en un cuadro verde y por supuesto la alimentación de 5V alos pines 8 y 9. El pin 9 sirve para activar/desactivar dos de los drivers como se muestra en la imágen. Se debe conectar el pin 15 de éste circuito con el pin de salida del microcontrolador 14, pues en éste se pone la salida el PWM en nuestro programa. 
En este punto analizaremos la configuración del puente H que debe usarse. El integrado tiene 3 configuraciones que se muestranen los diagramas de abajo. La mitad de la derecha muestra dos configuraciones posibles para controlar dos motores de CD con la diferencia entre ambas configuraciones de que el motor se encenderá con una entrada en alto o en bajo, dependiendo de la configuración. Además se debe tener en cuenta que el motor solo puede girar hacia un lado.

Para este proyecto la configuración que  nos interesa es la de la mitad izquierda del integrado. Internamente el integrado tiene amplificadores operacionales de potencia de tipo histeresis, es decir que cuando la entrada al amplificador sea igual o superior al voltaje de saturación, este tendrá como salida el voltaje de alimentación designado para lo motores.

En el diagrama del integrado VCC1 (esquina superior derecha) representa el voltaje de alimentacion del integrado mismo, es decir elvoltaje aplicado para que dicho integrado funcione. Por otro lado el voltaje VC (esquina inferior izquierda) representa el voltaje de alimentacion para los motores.

El pin 1 del integrado controla si el puente H funciona en la mitad izquierda, siendo esta independiente de la mitad derecha, por ende dicho pin debe estar conectado en un alto lógico, es decir 5V( Aunque puede ser un voltaje menor o un poco mayor). Los pines 2 y 7 controlan el voltaje de salida de los amplificadores operacionales internos, si la entrada es 0 la salida es 0V mientras que si la entrada es un alto logico la salida sera VC.
 A continuación la explicación del funcionamiento del circuito en dicha configuración.
La siguiente imagen muestra un estado posible en las entradas posibles a los pines 2 y 7 del puente H, en este caso los voltajes de entrada son 0V o estados logicos en bajo por lo tanto en las salidas 3 y 6 del integrado tendremos un voltaje de 0V. Dado que estos pines están conectados a las entradas del motor, dicho motor reibe una diferencia de potencial de 0V por lo que no tiene movimiento. En el caso de que las dos entradas fueran 1 logicos, las salidas de los pines 3 y 6 serian igual a VC por lo que en este mismo caso la diferencia de potencial o el voltaje mismo entre los pines del motor sería 0 y de igual forma el motor no se movería.

Para el caso de que el pin 2 sea 0 y el pin 7 sea 1 (logicos) el pin 3 tiene una salida de 0v mientras el pin 6 tiene una salida de VC Volts lo que origina una diferencia de potencial entre los pines del motor de VC Volts o -VC Volts dependiendo de como se quiera ver. Esto ocaciona que el motor gire hacia un lado.


Para el caso de el pin2 con entrada 1 y el pin 7 con entrada 0, el pin 3 tiene una salida de VC Volts y el pin 6 una salida de 0 Volts lo que ocaciona que el motor tenda unadiferencia de potencial de VC Volts o -VC Volts dependiendo de como se quiera ver. Esto ocaciona que el motor gire hacia el otro lado.
 De esta forma, los requerimeintos de las salidas de los pines del microcontrolador son:
  1. Se necesitan dos pines para controlar el motor.
  2. Las salidas de los dos pines a 0 o a 1, es decir salidas iguales al mismo tiempo provocanq ue el motor este detenido.
  3. Las salidas diferentes de los pines 0-1 o 1-0 provocan que el motor gire hacia una dirección.

La Programación

La programación de nuestro Launchpad y microcontrolador se realiza en el software gratuito CodeComposerStudio distribuido por el mismo TexasInstruments (del cual dejé un enlace arriba). Abriendo nuestro entorno de desarrollo hacemos click en File->New->CCS Project.

Después de realizar esto aparecerá una ventana donde debemos ingresar los parámetros para nuestro nuevo proyecto, en el cual debemos especificar:
  • Nombre: El que gusten (El que le puse se muestra en la imagen).
  • Family: MSP430
  • Variant: MSP430G2553
  • Connection: TI MSP430 USB1 (Nuestro LaunchPad)
Y seleccionamos "Empty Grace (MSP430) Project" Al final solo hacemo click en Finish.

Después de realizar lo anterior, nos aparece un diagrama de bloques sobre los módulos que componen a nuestro microcontrolador. Aquellos bloques en azul son los que podemos modificar mientras los que están de blanco son aquellos que no.

Los módulos que modificaremos serán el voltajes de alimentación, El Timer0_A3, el USCI A0 y como opción el bloque de reloj, aunque no es necesario dado que nuestro timer trabaja con un reloj secundario. Para modificar algún módulo solo es necesario hacer click en él y nos abrira una pestaña inferior en la que debemos ingresar los parámetros. En este punto hay que aclarar que el suministro de voltaje que le daré al microcontrolador fuera del LaunchPad será de 3.3V que es uno de los voltajes de una fuente de poder de computadora la cual yo uso y otro punto importante es que el Pin RST/NMI (Reset) debe ser alimentado con el voltaje de alimentación dado que si se pone a tierra o se deja flotando, el microcontrolador NO funcionará.


Primero seleccionamos el bloque "USCI A0 UART/LIN, IrDA, SPI". Nos vamos a Basic User y como primer opcíón debemos elegir el protocolo de comunicanión que será usado, en ese caso es UART. 


Después de elegir dicha opción, proseguimos a configurarlo de la siguiente manera. Debemos activar los pines de entrada/salida del módulo UART que por default están desactivados. En éste caso solo necesitamos el pin de entrada, dado que no enviaremos algún dato de regreso, sin embargo estableceremos los dos. Configuramos la opción "Baud" a 9600 bps que es la frecuancia o velocidad de comunicación que trae por defecto nuestro módulo Bluetooth en su puerto UART. y por último activamos la interrupción de entrada haciendo check en el checkbox correspondiente.


Al final de esto volvemos al diagrama principal donde aparecen los bloques del integrado y ahora seleccionamos el bloque "GPIO". Una vez abierta esta sección hacemos click en "Pinout 20-TSSOP/..." como se muestra mas abajo y configuramos dicho módulo como se muestra. Pines P1.0 y P1.6 como salidas.
 


Despés de terminar de configurar los módulos de nuestro microcontrolador mediante Grace, proseguimos a guardar todo y construir nuestro proyecto haciendo click en el icono de "Build" con forma de martillo arriba del explorador de proyectos, esperamos a que termine y si no nos equivocamos no marcará ningún error.


En el archivo principal (main.c) escribimos el siguiente código que permitira tener un bucle infinito, esperando a que llegue una orden por el bluetooth o al presionar el pushBoton de del LaunchPad.


Ahora modificamos el archivo de interrupciones para que de acuerdo al dato de entrada en la interrupcion UART controle al motor. El siguiente código permite que cuando el motor reciba el caracter "q" o "e" el motor girará hacia alguno de los lados mientras que si recibe el caracter "w" el motor se detendra. Si recibe algun otro caracter simplemente lo desechará.


Al final como ya sabemos, con nuestro LaunchPad conectado hacemos click en Debugg que es el ícono al lado del martillo que tiene forma de escarabajo y esperamos a que cargue el programa a nuestro LaunchPad, de ahí podremos o debuggearlo o simplemente detener el debugger, desconectar el LaunchPad, sacar el microcontrolador del LaunchPad y comenzar a probar en nuestro protoboard.

Recursos


Código Fuente: Dropbox Code Composer Studio  Version: 6.0.1.00040 (Necesario el plugin Grace)