Taller de Sistemas Embebidos Semestre 2-2014 Laboratorio 02/Tarea 02 Hugo Gonz´alez alez Escalona
[email protected] Resumen
En el siguiente informe se manejar manejar´a´ el control de la velocidad de un motor DC, mediante el uso de se˜ senal n˜ al PWM, adem´ ademas a´ s se controlar´ controlara´ el sentido de giro de dos motores DC.
´ I NTRODUCCI ON
1.
En este informe, se realizar´ realizara´ un estudio del control de velocidad de un motor DC, mediante la simulaci on o´ n en el Software Software Proteus. Para ello es importante importante tener presente presente algunos conceptos conceptos de programacion programacion en C, para realizar realizar la programaci´ gramacion o´ n de un microcontrolador ATmega168, as´ as´ı como tambi´ tambien, e´ n, conocer algunos registros de este microcontrolador, que vienen especificados en la hoja de datos de este. Luego de conocer estos datos, es importante conocer como se realiza el control de velocidad, para ello se utilizar´a el manejo de una se˜nal nal PWM generada por el microcontrolador, mediante mediante el uso de una caracter´ caracter´ıstica ıstica designada designada para ello, puesto puesto que su uso es muy frecuente en la actualidad actualidad.. Adem´as as de ello y mediante el uso del microcontrolador antes mencionado se realizar´a el control de sentido de giro de dos motores DC, de forma independiente mediante interruptores, y luego siguiendo una secuencia l´ogica de funcionamiento utilizando ambos motores. ´ DE CONTROL DE S IMULACI ON
2.
VELOCIDAD VELOCIDAD DE UN MOTOR.
Los primeros pasos para realizar la simulaci´on on de control de velocidad de un motor de esta experiencia en laboratorio, es realizar una simulaci on, o´ n, la cual se llevar a´ a cabo en el Software Proteus. Para esta simulaci on o´ n se necesitar´ necesitar an a´ n algunos componentes como; un microcontrolador Atmega168, un transistor Tip122 y un motor de corriente continua. Una Una vez vez que que se monta monta y se realiz realizaa la cone conexi´ xi´on on de los compon component entes, es, es necesa necesario rio realiz realizar ar la progra programac maci´ i´on o n del del microc microcont ontrol rolado ador, r, puesto puesto que para para realiz realizar ar el contro controll de veloc velocida idad d de un motor motor,, se puede puede utiliz utilizar ar el m´etodo etodo de la modulaci´ on por ancho de pulso o PWM, el cual consiste en regular el ciclo de trabajo de una se˜nal, nal, la cual ir´a conectada a la base de un transistor Tip122, que permitir´a el paso de la corriente entre su colector y emisor, para el funcionamiento del motor DC. ˜ PWM se realizar´ La senal realizar a´ mediante el uso del microcontrolador Atmega168, para esto es necesario habilitar algunos registros y variables.
2-A. 2-A.
Progr Programa amaci ci´ on ´ en C.
Para empezar es necesario conocer algunas cosas acerca de la programaci´on para luego conocer algunos registros y variables del microcontrolador ATmega168. 1. Constante Constantess enteras largas y sin signo. signo.
Figura 1. Simulaci´on control de velocidad de un motor DC.
Las constantes enteras sin signo pueden tener un valor m a´ ximo de aproximadamente el doble del m´aximo de las ˜ endole constantes ordinarias, pero su valor no puede ser negativo. Una constante entera sin signo se identifica a nadi´ la letra U, may´uscula o min´uscula (U del ingl´es unsigned), al final de la constante. Constantes enteras largas pueden tomar valores m´aximos mayores que las constantes enteras ordinarias, pero ocupan m´as memoria en la computadora. En algunos computadores (y/o algunos compiladores) se generar´a una constante entera larga cuando simplemente se especifique una cantidad que exceda el valor m´aximo. En cualquier caso siempre es posible ´ especificar una constante entera larga a n˜ adiendo la letra L (mayuscula o minu´ scula) al final de e´ sta. Una constante entera larga sin signo se puede especificar a n˜ adiendo las letras UL al final de la constante. Las letras pueden estar ´ en mayuscula o minu´ scula. Sin embargo, la u debe ir delante de la L. 2. Tipo de dato char El tipo char se utiliza para representar caracteres individuales, por lo tanto, el tipo char requerir´a solo 1 byte de memoria. Cada tipo char es realmente una clase especial de entero corto. En la mayor´ıa de los compiladores un tipo de dato char podr´a tomar valores de 0 a 255. Tambi´en se puede utilizar datos unsigned char(datos sin signo) con valores de 0 a 255, o signad char con valores de -128 a +127(datos con signos). Recordando adem a´ s que: El byte, compuesto por ocho bits, es una unidad de memoria m a´ s u´ til. Puesto que cada bit puede tomar el valor 0 o 1, en un byte pueden representarse hasta 28 = 256 combinaciones de ceros y unos (256 c o´ digos binarios). Con estas combinaciones pueden representarse, por ejemplo, los enteros entre 0 y 255 (0 . . . 28 − 1), un conjunto de caracteres, etc. ´ 3. Operadores l´ogicos. Hay tres operadores que realizan las conectividades l´ogicas Y (AND), O (OR) y NEGACI ON (NOT), que se utilizan cuando se quiere comparar ciertos par´ametros, ya sea en sentencias, if-else, if-else if-else, etc. Su simbolog´ıa puede verse a continuaci o´ n;
AND ( & & ) , OR (||) , N O T (!)
4. Manejo de bits. En el manejo de bits, se tiene algunos operadores l´ogicos, como el AN D ( & ), OR (|), Negacio´n (˜), X OR(ˆ), y desplazamiento de bits, derecha a izquierda (<<), izquierda a derecha (>>). En el uso de operadores AND, OR, XOR, y Negaci´on se sigue la l´ogica booleana bit a bit: Ejemplo:
A = 01000101; B = 11101010; A & B = 01000000; A|B = 11101111; AˆB = 10101111;
˜A = 10111010; 5. Desplazamiento de bits. Existen dos tipos de desplazamiento, de derecha a izquierda (<<), y de derecha a izquierda (<<).
C = V ar1 << V ar 2; C = V ar1 >> V ar 2; Significa, en el primer caso asignarle a C los bits correspondientes a Var1 desplazados Var2 bits a la izquierda. En donde los bits insertados a la derecha se rellenan con 0 y los bits desplazados al lado izquierdo se eliminan. En el caso del desplazamiento al lado derecho se procede de la misma forma. 2-B.
Manejo de Registros de Atmega168
Ahora, para la utilizacion ´ del microcontrolador, Atmega168, es importante saber qu e´ : En la programaci´on del microcontrolador Atmega168, podemos encontrar pines de entrada o salida que no est´an configurados como tales, por ello estos pines pueden ser configurables. Cada uno de los puertos digitales de entrada/salida ´ de los datos de registros (DDRx), un registro de es asociado con tres tipos de registros entrada/salida; La direcci on pines (PINx), y un registro de los puertos (PORTx), donde X es el puerto A, B, C, etc. 1. La Direcci´on de los Datos de Registros (DDRx).
Figura 2. Direcci´on de los datos de registros del puerto D.
La DDRx (Data Direction Register) es un registro de 8 bit que almacena la informaci o´ n de la configuracio´ n de los registros de los pines del puerto seleccionado. As´ı, escribiendo un 1 en la ubicaci´on del pin in el DDRx, este hace f´ısicamente que el pin quede configurado como un pin de salida, en caso contrario, si se escribe un 0 el pin quedara definido como un pin de entrada. Adem´as cada pin de un puerto es configurado de manera independiente, pudiendo establecerse algunos pines como entradas y otros como salida.
2. El Registro de Pines (PINx)
Figura 3. Registro de pines.
El PINx es un registro de 8 bits que almacena los valores l o´ gicos, del estado actual de los pines del puerto seleccionado. Por lo tanto es posible conocer o leer cual es el valor actual de los pines de un puerto accediendo a este registro de pines. 3. El registro de los puertos (PORTx)
Figura 4. Registro de puertos.
El PORTx es un registro de 8 bits que almacena los valores l´ogicos que actualmente est´an siendo emitidos f´ısicamente sobre los pines del puerto. Si estos pines son configurados como salida, se puede escribir los valores l´ogicos al puerto en los registros del puerto que se seleccione. 4. Contador/temporizador (TCNT0) Un temporizador es un m o´ dulo de prop´osito general de 8 bits, se puede utilizar para medir acontecimientos de tiempo. Incrementa con cada ciclo de instrucci o´ n o con un evento externo y trabaja independientemente de la CPU, el Atmega168 cuenta con tres temporizadores, pero para la programaci o´ n de esta simulaci o´ n solo se utilizar a´ el Timer 0. Entre los eventos de los temporizadores, se tiene, el de Desbordamiento (Overflow), el de Comparaci´on (Compare Match), el de Captura de Entrada (Input Capture Register), Interrupci´on (Interrupt), etc. El modo que interesa trabajar, es el de comparaci´on. En este modo de temporizador se compara el valor actual del registro TCNTn con el valor N cargado en el registro OCRn, cuando son iguales, se dispara un evento, el valor de precarga N se calcula con la formula;
N =
retardo deseado
preescalador fosc
5. Registro OCR0A. El registro OCRnA es un registro de comparaci´on, el cual se compara continuamente con el temporizador, en este caso se utilizar´a el temporizador 0, por lo que le corresponde el OCR0A, m´as adelante se explica su funcionamiento. Tambi´en se debe setear los registros para al control del temporizador, TCCR0A y TCCR0B, en la simulaci´on que se realiz´o, los registros est´an configurados seg´u n el c´odigo presentado en la figura 5.
6. Registro de control de Temporizador/contador TCCR0A.
Figura 5. C´odigo programaci´ on microcontrolador Atmega168.
Figura 6. Registro de control de temporizador.
El registro TCCR0A, nos permite elegir el modo de funcionamiento del temporizador/contador. Primero que todo se analizar´a c´omo est´an seteados los bit 0 (WGM01) y 1 (WGM00), en este caso se observa que est´an seteados ambos en 1, en modo FAST PWM.
Figura 7. Modo de operaci´on del temporizador.
Esto significa que el temporizador trabaja en una sola pendiente, y se encuentra activado el TOV flag nivel MAX, que significa que el conteo tendr´a un desbordamiento en el conteo en el m´aximo nivel para un registro de 8 bits. Esto quiere decir que el temporizador puede alcanzar un conteo desde 0 a 255 y cuando llegue a su m´aximo nivel, este volver´a a 0 por el desbordamiento u Overflow. En el caso de la se˜nal PWM de fase correcta, se trabaja
diferente que el modo Fast PWM, puesto que se trabaja en modo doble pendiente, esto quiere decir que el conteo va desde 0 a 255 y luego de 255 a 0, por lo tanto posee una frecuencia menor que el modo Fast PWM.
Figura 8. Modo comparaci´on de salida, Fast PWM pin COM0B1 Y COM0B0.
En el an´alisis del c´odigo se observa que los bits 4 y 5 del registro de control, en este caso est´an seteados en 1 y 0, lo que podemos observar en la figura anterior, que se borra el valor almacenado en OC0B que es qui´en guarda el valor del periodo en que el temporizado alcanza el valor del registro OCRB, en base a este valor obtenido se calcula el ciclo de trabajo, en este caso el programa utilizado no necesita que este activo OC0B, puesto que el temporizador timer 0 solo est a´ comparando con el registro OCR0A.
Figura 9. Comparaci´on en modo salida, Fast PWM, bits COM0A1 y COM0A0.
Ademas, se puede observar que los bits 6 y 7 del registro TCCR0A est a´ n seteados en 0 y 1 respectivamente, lo ´ cuando ambos se alcancen, y que nos indica que el bit de comparaci o´ n OC0A, se borrar´a en modo comparaci on ser´a en modo no invertido.
Lo que se explica anteriormente, b´asicamente es que existe un registro OCR0A, el cual ser´a comparado con un temporizador Timer 0 (TCNT0). En donde, el periodo en que se demora en alcanzarlo ser´a guardado en un pin llamado OC0A, el cual al encontrar el punto de intersecci´on entre ambos registro caer´a a 0 mientras que el temporizador alcance el Overflow, as´ı nuevamente empieza el ciclo de comparaci o´ n. Un ejemplo se muestra a continuaci o´ n en la figura 10, en donde el registro OCR0A es seteado en 64, entonces cuando el temporizador alcanza si valor el pin comparador OC0A, baja al nivel 0 y as ´ı nuevamente cuando se produce un desbordamiento, este vuelve a nivel de OCR0A para continuar la comparaci´on, en base al valor que posea el registro OCR0A en comparaci´o n m´aximo valor que se alcanza es el ciclo de trabajo de la se˜nal PWM. El registro OCR0A es de doble buffer, lo que significa que no se puede escribir directamente en este registro, cuando cada vez que se escribe en OCR0 en realidad se est´a escribiendo a un buffer. El valor de memoria intermedia se copia a OCR0 real solo cuando se produce el desbordamiento, y TNT0 vuelve de 255 a 0, para no perder comparaciones en el proceso.
Figura 10. Comparaci´on de registro OCR0A y el temporizador Timer 0.
7. Registro de control de Temporizador/contador TCCR0B.
Figura 11. Registro de control de temporizador para preescalador.
Para analizar co´ mo est´a definido el registro B del temporizador, se observa el programa realizado, y de los bits del TCCR0B que los primeros tres bits, setean el prescalador para el temporizador, en este caso los bits CS02 es 0, el CS01 es 1 y el CS00 es 1 lo que nos indica que el preescalador ser a´ de 64, adem a´ s los otros bits no se usan en modo PWM seg´un la hoja de datos del microcontrolador.
Figura 12. Descripci´on de bits del reloj, para prescalador.
En la figura 13 se muestra como se realiza la comparaci´on de los registros y el temporizador, adem´a s de la configuraci´on de los TCCRnA y TCCnB y la salida es la generaci´o n de se˜nales en los pin OCnA y OCnB. Una vez seteados los registros en el programa, simplemente se realiza un aumento en el registro OCR0A mediante una variable creciente de tipo unsigned char definida como ’a’. Se realizar a´ la comparacio´ n cada vez que el valor de OCRA aumente, siguiendo las caracter´ısticas del doble buffer. Adem a´ s se inicia el contador TCNT0 y OCR0A en 0 en el programa implementado, y el aumento del dato char con un retardo de 10 mS. Una de las caracter ´ıstica
Figura 13. Diagrama de bloque de funcionamiento de modo comparaci´ on.
del funcionamiento de este programa es que el ciclo de trabajo se comporta como una rampa y cuando el valor sea m´aximo para OCR0A este se mantendr´a, posibilitando a una se˜nal PWM de 100%. Luego el pin de salida en el microcontrolador es el pin 6 del puerto D, adem a´ s de poseer la salida OC0A, este pin tiene diferentes funciones PD6/AIN0/OC0A/PCINT22.
Figura 14. Microcontrolador Atmega168, PIND6.
AIN0, comparador an´alogo entrada positiva, se configura este puerto como salida con las resistencias Pull-up desactivadas, para evitar la confusi´on con el puerto digital y el comparador an´alogo. PCINT22, este pin puede configurarse como fuente de interrupci´on, esto quiere decir que puede configurarse para realizar funciones cuando se produce una interrupci´on mediante una se˜nal externa.
3.
C ONTROL DE SENTIDO DE GIRO DE
DOS MOTORES D C.
Para realizar el control de sentido de giro de dos motores es necesario realizar una simulaci´on en el Software Proteus. En la primera rutina se debe controlar el sentido de giro debe estar dado por interruptores para ambos motores, y adem´as se debe indicar cuando cada uno est a´ en modo activo. La segunda se etapa se realiza mediante los interruptores, pero debe implementarse una secuencia l´ogica. 1. Control de giro de motores mediante interruptores. ´ de Proteus. En la simulacio´ n del circuito para la primera etapa se muestra en la figura de la simulaci on
Figura 15. Esquema simulaci´on de control de motores.
´ de Como se puede observar en la figura de la simulaci o´ n en Proteus, los label(etiquetas) realizan la asociaci on los pines. El siguiente paso es realizar la programaci´on, para ello se utiliza el Software Atmel 6.1 en donde se realizar´a la programaci´on en C. En el c´odigo se puede observar que se define la velocidad del procesador, de 8 Mhz. seg´un lo antes visto de programaci´on en C, se declaran las librer´ıas a utilizar, y se definen los registros de los puertos, para el puerto D como entrada y para el puerto B como salida, inicializando el puerto B como desactivado.
En el c´odigo de la figura 17 se puede observar que la asociaci o´ n para los interruptor es de la forma que el el
Figura 16. Declaraci´on de velocidad del procesador, librer´ıas y registros de pines.
Figura 17. C´odigo principal, para la activaci´on de motores mediante los switch.
interruptor A, es le´ıdo por el bit 0 del puerto D, y el interruptor B es le ´ıdo por el bit 1 del Puerto D. Luego, en el c o´ digo se puede observar que cuando el interruptor A se encuentra activo, la salida asociada al puerto B para el motor 1, de los bits 0 y 1, es activada en el pin 0, lo que genera que el motor 1 se active en la direcci´on horario, en caso contrario, si se activa el bit 1 el motor gira en sentido antihorario, cabe decir que ambos bits no pueden estar activos, por esto cuando el interruptor de A se encuentra desactivado la salida del bit 0 se desactiva. De la misma forma se realiza la comprobaci´on con el interruptor B, que permite activar el sentido de giro antihorario del motor 2. Seg´un la notacion ´ del lenguaje en C, la sentencia PORTB | = (1 << PD0) permite activar el bit PD0 solamente, esto nos permite trabajar con cada bits de forma independiente. luego la sentencia PORTB & = ˜(1 << PD0) permite desactivar el bit PD0, por lo que se puede activar y desactivar bits de manera independiente sin intervenir en los dem´as bits. Luego para indicar cuando los motores est´an activos, se realiza una lectura de los bits del puerto B asociados a cada motor, si alguno esta activo se realiza la activaci´on del bit asociado a cada Led que indica el funcionamiento de cada motor. Para realizar de la manipulaci´on de motores DC, se utiliza un puente H LM298, puesto que se requiere para ´ seg´un la hoja t´ecnica de este, una ventaja invertir el sentido de giro de los motores, se ha realizado la conexi on
Figura 18. C´odigo de activaci´on de Led mediante el funcionamiento de los motores.
de este puente H es que nos permite conectar dos motores, trabajando de manera dual-independiente soportando corrientes m´aximas de 1 [A]. 2. Secuencia de motores DC mediante dos interruptores. Para realizar la secuencia de motores se sigue la misma l´ogica presentada anteriormente, las librer´ıas no cambian, pero lo que si cambia es el c o´ digo de activacio´ n de los motores, puesto que deben seguir una l o´ gica, y los Led adem´as mostrar´an el sentido de giro de estos. El modo de programacio´ n para realizar la secuencia de giro mediante interruptores se realiza comparando cuando los interruptores A y B se activan, adem´as los Leds se activan cuando alg´un motor se encuentra en funcionamiento, para cada motor existe dos Leds, que indican el sentido positivo antihorario y el sentido negativo horario. De esta manera y mediante el uso de la activaci´on de cada bits de forma independiente en el puerto B, es posible
´mero) y bit is clear(PINX,nu ´mero), tambi´en realizar la lectura de estos, mediante los comandos bit is set(PINX,nu que retornan un valor booleano 1 si el pin esta activo, y 0 si el pin esta inactivo respectivamente. Con esto, se puede observar que es posible analizar el estado de los bits de salidas de los motores 1 y 2 para activar los Leds.
Algunos de los pines utilizados en este Atmega168, cumplen otras funciones, en este caso solo se utiliz´o los pines de entrada/salida digital, pero por ejemplo:
• El pin PD0, puede utilizarse como un pin de comunicaci´on serial(RXD) de recepci´on, as´ı como tambi´en como una interrupci´on de tipo externa.
• El pin PD1, puede utilizarse tambi e´ n como comunicaci o´ n serial(TXD) de transmisio´ n, y como un pin de fuente de interrupci´on externa.
• Los pines utilizados como salida para los motores y led, tambi e´ n cumplen con otras funciones, puesto que tienen asignadas funciones particulares dentro del microcontrolador, dependiendo del modo de funcionamiento que se seleccione.
Figura 19. Simulaci´on de secuencia de giro de motores DC.
Figura 20. C´odigo de secuencias de los motores DC seg´un lectura de interruptores.
La mayor´ıa de los pines de microcontrolador, pueden funcionar como interrupciones externas, el bit 2, 3, 4 y 5 pueden funcionar para la conexi o´ n SPI de sistema maestro/esclavo, mientras que los pines 6 y 7 pueden ser
Figura 21. Activaci´o n de los Led para el motor 1 seg u´ n sentido de giro.
Figura 22. Activaci´o n de los Led para el motor 2 seg u´ n sentido de giro.
utilizados para conectar un cristal para el temporizador, as´ı como tambi´en como osciladores de tiempo, y los bits 1 y 2 pueden ser utilizados como registro de OCR1A y OCR1bB para la generaci´o n de se˜nales PWM, el bit 0 puede ser utilizado como capturador de entrada, y as´ı para cada bits del microcontrolador.
´ C ONCLUSI ON A modo de conclusi´on, se puede observar que manipular la velocidad de un motor mediante la generaci´on de una se˜nal PWM, es un m´etodo muy utilizado hoy en d´ıa, as´ı como tambi´en, la manipulaci´on de microcontroladores. Con esta experiencia se puede profundizar un poco m´as la interpretaci´on de una hoja de datos para la manipulaci´on de los puertos de un microcontrolador, co´ mo se definen en un programa cada bit, como se implementa un c o´ digo para realizar ciertas funciones, para la posterior simulaci o´ n con las herramientas que se disponen, y la manipulaci o´ n del sentido de giro de un motor siguiendo una secuencia l o´ gica, esta ultima se puede implementar f ´acilmente y es com u´ n encontrar en sistemas embebidos del sector productivo, sistemas de correas transportadores, etc.
R EFERENCIAS [1] Marco A. Pe˜na Basurto, Jos´e M. Cela Esp´ın. ’Introducci´on a la programaci´on en C’. Ediciones UPC. Primera edici o´ n.septiembre de 2000. [2] Byron S. Gottfried.’Programacion en C’. Segunda edici´on revisada. Mc Graw Hill. 2005.