VII. PROGRAMACIÓN DEL MICROCONTROLADOR CON APLICACIONES
Los microcontroladores pueden ser empleados en diversas aplicaciones para la automatización de procesos, en esta entrada veremos como podremos aplicar lo aprendido hasta este momento en nuestro curso para realizar un tacometro digital con pic y lcd que puede ser muy util para conocer en todo momento la velocidad de un motor DC.
Para poder realizar un contador de RPM con el PIC deberemos recordar lo aprendido en la entrada de interrupciones y la entrada de PWM (modulación por ancho de pulso).
Como deseamos medir las RPM de un motor dc empleando el compilador PIC C (CCS C) vamos a introducir una nueva interrupción del microcontrolador conocida como la interrupción de flanco de subida y flanco de bajada.
Interrupción por Flanco de Subida y Flanco de Bajada
Sabemos que el microcontrolador generalmente trabaja con señales binarias o señales digitales de 0v y 5v (0 lógico y 1 lógico) y por lo general estas señales pueden ser representadas por un tren de pulsos:

En algunos casos, puede interesarnos leer unicamente los flancos de subida o los flancos de bajada de algún tren de pulsos que esté entrando al microcontrolador como lo vemos en la siguiente imagen
Este tipo de señales es bastante común en sensores del tipo encoders, los cuales son muy utilizados para medir posición o velocidad angular, incluso estos eran empleados en los Mouse antiguos de nuestra computadora para poder determinar la posición del cursor.
Un encoder o codificador es un dispositivo de retroalimentación electromecánica empleado para proporcionar información sobre la posición, la velocidad, el conteo o la dirección convirtiendo el movimiento en una señal eléctrica para ser leída por un dispositivo de control como por ejemplo el microcontrolador PIC.
Los encoders generalmente se componen de una carcasa de plástica o de metal para proteger la electrónica, generalmente operando con principios magnéticos u ópticos y una variedad de opciones para su montaje según lo requiera la aplicación.
A continuación vemos un encoder optico donde una rueda plastica con agujeros va interrumpiendo el haz de luz gerado por un led infrarojo, generando asi una señal cuadrada o digital la cual puede ser leida para determinar la posición o velocidad de un elemento específico y la cual es leída empleando la interrupción de flanco de subida o flanco de bajada.
Para configurar la lectura de la INTERRUPCIÓN POR FLANCO DE SUBIDA en el Compilador CCS C Compiler debemos utilizar el siguiente comando:
Para configurar la lectura del INTERRUPCIÓN POR FLANCO DE BAJADA en el Compilador CCS C Compiler debemos utilizar el siguiente comando:
Si dominas este ejemplo, estarás en la capacidad de hacer un control de velocidad de un motor DC con PIC (Tacometro con PIC), dado que uno de los factores más importantes en este tipo de aplicaciones es poder realizar un medidor de RPM con PIC 16F877A, 16F887, 18F4550 o cualquier otro PIC.
Vamos a realizar un medidor de Velocidad de un Motor DC con PIC, utilizando como sensor un Encoder de 10 Pulsos por Revolución. Esta práctica la realizaremos directamente en proteus.
El proteus directamente posee un MOTOR que ya tiene integrado un encoder y puedes buscarlo con el nombre de MOTOR-ENCODER. En nuestro curso gratuito de Arduino empleamos un motor con encoder integrado para realizar la medición de velocidad DC con Arduino.
El diagrama esquemático del sensor de velocidad RPM de un Motor DC con Microcontrolador PIC implementado en Proteus es:

En el diagrama anterior podemos ver que a través de un potenciometro, regularemos la velocidad del motor 12V DC, utilizando un mosfet en la etapa de potencia.
Como ya sabemos el motor tiene acoplado un Encoder que entrega un tren de pulsos. Ese tren de pulsos debe ser conectado en el PIN RB0 del PIC y por medio de la interrupción Externa y por lectura bien sea del flanco de subida o flanco de Bajada, se debe calcular la velocidad en RPM (Revoluciones por Minuto) y mostrarlas en una pantalla LCD.
Para eso vamos a necesitar configurar el MOTOR-ENCODER del proteus dando doble click y colocando los 10 pulsos.
La idea general aquí, es que cada vez que se detecte alguno de los flancos (Puedes escoger el que tu desees, subida o bajada) el microcontrolador incremente un contador dentro de la rutina de interrupción.
Pasado 1 segundo, se observa cuantas veces se detectó el flanco seleccionado multiplicamos por 60 para hacer la conversión a minutos y finalmente dividimos por la resolución del encoder que en este caso es 10.
el codigo compilado
Evidencias de prácticas
realizada en clase
Uso de Driver L298N para motores DC con Arduino
Este módulo basado en el chip L298N te permite controlar dos motores de corriente continua o un motor paso a paso bipolar de hasta 2 amperios.
El módulo cuenta con todos los componentes necesarios para funcionar sin necesidad de elementos adicionales, entre ellos diodos de protección y un regulador LM7805 que suministra 5V a la parte lógica del integrado L298N. Cuenta con jumpers de selección para habilitar cada una de las salidas del módulo (A y B). La salida A esta conformada por OUT1 y OUT2 y la salida B por OUT3 y OUT4. Los pines de habilitación son ENA y ENB respectivamente.
Conexión de alimentación
Este módulo se puede alimentar de 2 maneras gracias al regulador integrado LM7805.
Cuando el jumper de selección de 5V se encuentra activo, el módulo permite una alimentación de entre 6V a 12V DC. Como el regulador se encuentra activo, el pin marcado como +5V tendrá un voltaje de 5V DC. Este voltaje se puede usar para alimentar la parte de control del módulo ya sea un microcontrolador o un Arduino, pero recomendamos que el consumo no sea mayor a 500 mA.
Cuando el jumper de selección de 5V se encuentra inactivo, el módulo permite una alimentación de entre 12V a 35V DC. Como el regulador no esta funcionando, tendremos que conectar el pin de +5V a una tensión de 5V para alimentar la parte lógica del L298N. Usualmente esta tensión es la misma de la parte de control, ya sea un microcontrolador o Arduino.
Recomendamos nunca conectar una tensión de entrada al pin de +5V, cuando el jumper de selección de 5V se encuentre activado. Esto provocaría un corto y podría dañar permanentemente el módulo.
Control de un motor DC
Como demostración, vamos a controlar un motor DC a través de la salida B del módulo. El pin ENB se conectará con el jumper a +5V.
El ejemplo esta desarrollado en Arduino UNO, pero el código es compatible con cualquier Arduino o pinguino.
Esquema de conexión
Código en Arduino
El programa básicamente activa el motor en un sentido por 4 segundos, luego detiene el motor por 0.5 segundos, después activa el motor en sentido inverso por 4 segundos y por último detiene el motor por 5 segundos. Luego repite la acción indefinidamente.
| /* | |
| Ejemplo de control de motor DC usando modulo L298 | |
| http://electronilab.co/tienda/driver-dual-para-motores-full-bridge-l298n/ | |
| El programa activa el motor en un sentido por 4 segundos, | |
| para el motor por 500 ms, activa el motor en sentido inverso por 4 segundos | |
| y se detiene por 5 segundos. Luego repite la acción indefinidamente. | |
| Creado 16/05/14 | |
| por Andres Cruz | |
| ELECTRONILAB.CO | |
| */ | |
| int IN3 = 5; | |
| int IN4 = 4; | |
| void setup() | |
| { | |
| pinMode (IN4, OUTPUT); // Input4 conectada al pin 4 | |
| pinMode (IN3, OUTPUT); // Input3 conectada al pin 5 | |
| } | |
| void loop() | |
| { | |
| // Motor gira en un sentido | |
| digitalWrite (IN4, HIGH); | |
| digitalWrite (IN3, LOW); | |
| delay(4000); | |
| // Motor no gira | |
| digitalWrite (IN4, LOW); | |
| delay(500); | |
| // Motor gira en sentido inverso | |
| digitalWrite (IN3, HIGH); | |
| delay(4000); | |
| // Motor no gira | |
| digitalWrite (IN3, LOW); | |
| delay(5000); | |
| } |
compilamos en programa en arduino
Control de un motor DC variando su velocidad
Si queremos controlar la velocidad del motor, tenemos que hacer uso de PWM. Este PWM será aplicado a los pines de activación de cada salida o pines ENA y ENB respectivamente, por tanto los jumper de selección no serán usados.
Esquema de conexión
Código en Arduino
El programa controla la velocidad de un motor DC aplicando PWM al pin ENB del módulo L298N.
¿Cómo funciona un servo?
Internamente un servo está constituido por un motor de corriente continua, acoplado a un reductor para reducir la velocidad de giro, junto con la electrónica necesaria para controlar su posición.

Frecuentemente simplemente se dispone de un potenciómetro unido al eje del servo, que permite al servo para conocer la posición del eje. Esta información es tratada por un controlador integrado que se encarga de ajustar actuar sobre el motor para alcanzar la posición deseada.
La comunicación de la posición deseada se realiza mediante la transmisión de un señal pulsada con periodo de 20ms. El ancho del pulso determina la posición del servo.

La relación entre el ancho del pulso y el ángulo depende del modelo del motor. Por ejemplo, algunos modelos responden con 0º a un pulso de 500 ms, y otros a un pulso de 1000 ms
En general, en todos los modelos:
- Un pulso entre 500-1000 us corresponde con 0º
- Un pulso de 1500 ms corresponde con 90º (punto neutro)
- Un pulso entre 2000-2500us corresponde con 180º
Por tanto, variando la señal en microsegundos podemos disponer de una precisión teórica de 0.18-0.36º, siempre que la mecánica del servo acompañe.
Esquema de montaje
Conectar un servo a Arduino es sencillo. El servo dispone de tres cables, dos de alimentación (GND y Vcc) y uno de señal (Sig).
El color de estos cables suele tener dos combinaciones:
Marrón (GND), Rojo (Vcc) y Naranja (Sig)
Negro (GND), Rojo (Vcc) y Blanco (Sig)
Por un lado, alimentamos el servo mediante el terminal GND ( Marrón / Negro) y Vcc (Rojo).

En general, la alimentación a los servos se realizará desde una fuente de tensión externa (una batería o fuente de alimentación) a una tensión de 5V-6.5V, siendo 6V la tensión idónea.
Arduino puede llegar a proporcionar corriente suficiente para encender un servo pequeño (SG90), suficiente para hacer unos cuantos proyectos de prueba.
Sin embargo no dispone de corriente suficiente para actuar un servo grande (MG996R). Incluso varios servos pequeños, o hacer excesiva fuerza con ellos puede exceder la capacidad de corriente de Arduino, provocando su reinicio.
Por otro lado, finalmente, para el control conectamos el cable de señal (naranja / blanco) a cualquier pin digital de Arduino.

A continuación, se muestra los resultados los cuales fueron obtenidos a partir de la realización de la práctica.
Se muestra una imagen la cual muestra las medidas y datos
importantes en nuestro bazo robótico.
Se puede apreciar en la siguiente imagen el
brazo robótico previo al ensamblado
Proceso de armado del brazo robótico.
En
la siguiente fotografía se puede apreciar el brazo robótico ya ensamblado.
Durante la realización de la práctica se
realizaron múltiples pruebas en las cuales se consideraron distintos aspectos
fundamentales para que el brazo robótico funcionara adecuadamente con base en
esto se consideraron medidas las cuales nos podrían aportar beneficios para el
funcionamiento de nuestro robot.
Como anteriormente mencionamos para que
nuestro brazo robótico funcionara consideramos varias opciones para que asi
este pudiera funcionar, con esto en cuenta para que nuestro brazo robótico
funcionara debidamente usamos una fuente de alimentación para que la
alimentación del brazo robótico fuera la necesaria.
Posteriormente para poder tener el control
del brazo y poder mover cada uno de los servos motores que este tiene se
realizó una PCB la cual contendría potenciómetros y con estos nos servirían de
apoyo para llevar acabo las secuencias.
Códigos usados dentro de la programación del
brazo robótico
Botón y servomotores
6 servomotores
Uso de potenciómetros
Simulación en LabView
video demostrativo del brazo robotico



Comentarios
Publicar un comentario