CONTROL DE POSICIÓN DE UN MOTOR DC - ElektronikaDonBosco/Control-de-posicion-de-un-motor-DC GitHub Wiki
INTRODUCCIÓN
La empresa Gitronik constituido por Tomas y Joseba ha hecho un proyecto el cual se basa en hacer un control de posición de un motor DC mediante PID. Explicaremos como hacer paso a paso este proyecto y dando explicaciones teóricas y prácticas de cada bloque que tiene.
OBJETIVO
El objetivo inicial de este proyecto es poder manipular una flecha libremente y este automáticamente que retorne a su posición de inicio sin que este pierda ni un pulso en su camino.
MEMORIA DE FUNCIONAMIENTO
Como hemos mencionado anteriormente en este apartado explicaremos cada bloque de materiales y herramientas usadas:
- Placa Arduino uno
- Micro Motorreductor DC 6V
- Encoder magnético para micro motorreductor
- Driver puente H TB6612FNG
- Potenciómetro de 10K
- Fuente de alimentación
- Chasis
Placa Arduino uno
Arduino uno es una placa electrónica con un microcontrolador ATmega328 , cuenta con 14 entradas/salidas digitales, de las cuales 6 son PWM( los pines : 3,5,6,9,10,11) y otras 6 son entradas analógicas (A1,A2,A3,A4,A5,A6).También incluye un resonador cerámico de 16 MHz, un conector USB, un conector de alimentación, una cabecera ICSP y un botón de reseteo.
Características técnicas de Arduino Uno
- Voltaje entrada (recomendado): 7-12V
- Voltaje entrada (limites): 6-20V
- Digital I/O Pins: 14 (de los cuales 6 son salida PWM)
- Entradas Analogicas: 6
- DC Current per I/O Pin: 40 mA
- DC Current parar 3.3V Pin: 50 mA
- Flash Memory: 32 KB (ATmega328) de los cuales 0.5 KB son de arranque
- SRAM: 2 KB (ATmega328)
- EEPROM: 1 KB (ATmega328)
Mirando a la placa desde la parte de arriba, este es el esquema de lo que puedes ver.
Empezando según las agujas del reloj:
- Terminal de referencia analógica (naranja)
- Tierra digital (verde claro)
- Terminales digitales 2-13 (verde)
- Terminales digitales 0-1/ E/S serie – TX/RX (verde oscuro) – Estos pines no se pueden utilizar como e/s digitales (digitalRead() y digitalWrite()) si estás utilizando comunicación serie (por ejemplo Serial.begin).
- Botón de reinicio – S1 (azul oscuro)
- Programador serie en circuito “In-circuit Serial Programmer” o “ICSP” (azul celeste).
- Terminales de entrada analógica 0-5 (azul claro)
- Terminales de alimentación y tierra (alimentación: naranja, tierras: naranja claro)
- Entrada de alimentación externa (9-12VDC) – X1 (rosa)
- Selector de alimentación externa o por USB (coloca un jumper en los dos pines más cercanos de la alimentación que quieras) – SV1 (púrpura). En las versiones nuevas de Arduino la selección de alimentación es automática por lo que puede que no tengas este selector.
- USB (utilizado para subir programas a la placa y para comunicaciones serie entre la placa y el ordenador; puede utilizarse como alimentación de la placa) (amarillo) Nosotros hemos usado una placa de arduino Uno para hacer pruebas junto con un protoboard pero a la hora del montaje final hemos decidido poner el ATmega 328P independientemente de la placa arduino ya que así reduciremos el espacio y podremos crear nuestro circuito mediante la PCB y que todos los elementos queden unidos sin necesitar “cables”.
Esquema del ATmega 328P:
La buena noticia es que podemos programarlo directamente en la protoboard conectando los pines TX y RX a la placa Arduino. Ojo, antes hay que quitar el Atmega328P que hay en la placa Arduino
Micro Motorreductor DC 6V:
Usaremos un motor-reductor pequeño pero con una gran potencia, es de corriente continua con escobillas y dispone de una reductora de salida con relación a 100:1. Dispone de un eje trasero del motor extendido el cual le permite colocar un sensor óptico de rotación. Ideal para aplicar encoder que configurándose nos proporcionan velocidad y posición del motor. La alimentación de este motor ideal es de 6v aunque se le puede alimentar con 9v pero se acortaría la vida de este.
Dato importante a coger en cuenta es que el eje de salida puede girar a valores alimentados desde 0,5v lo cual nos proporciona el control de velocidad de 0,5v a 6v.
Características:
Voltaje nominal de funcionamiento: 6V (9V máximo) Relación de la reductora: 100:1 Velocidad de giro en vacío (a 6V): 320 rpm Consumo en vacío (a 6V): 80mA Consumo en bloqueo (a 6 V): 1600mA Par máximo (a 6V): 2.12 Kg Cm Dimensiones 24 x 10 x 12 mm Peso: 9.6 gr Diámetro del eje de salida: 3 mm (dispone de un chaflán para mejorar su sujeción)
Encoder magnético para micro motorreductor
El encoder provee 12 pulsos por revolución en el eje del motor y funciona desde 2.7V a 18V.
El encoder detecta la rotación del disco magnético y proporciona una resolución de 12 pulsos por revolución del eje del motor. Para calcular los pulsos por revolución en el eje de salida del reductor debes multiplicar la relación de transmisión por 12.
Una vez que los pads están soldados a los dos terminales, los cables del motor se conectan a los agujeros M1 y M2 a lo largo del borde de la placa; los cuatro pines restantes se utilizan para tomar la información de los sensores.
Estos sensores son alimentados a través de las conexiones VCC y GND y aceptan un amplio rango de voltajes de alimentación, desde 2.7V a 18V. Las señales de salida de los sensores a los cuales puedes acceder a través de las conexiones OUT A y OUT B para cada canal respectivamente, te van a dar una señal de 0V a VCC (de acuerdo a la alimentación). Los sensores incluyen un comparador que previene de obtener señales con ruido y mejora mucho la señal de salida, como se puede observar en la siguiente imagen.
Características:
- Voltaje de operación: 2.7 v - 18v
- Dimensiones: 10.6 mm x 11.6 mm
- Peso: 1.0 gr.
- Se venden en Pares
Driver puente H TB6612FNG
El TB6612FNG es un controlador (driver) de motores que nos permite manejar dos motores de corriente continua desde Arduino, variando tanto la velocidad como el sentido de giro. También permite controlar intensidades de corriente superiores, siendo capaz de suministrar 1.2A por canal de forma continua, y 3.2A de pico. Recordar que el L298N tiene una intensidad máxima teórica de 2A, pero las pérdidas hacen que en la práctica sólo pueda suministrar 0.8-1A. Además, el TB6612FNG no tiene la caída de tensión que sí tiene el L298N debido a sus transistores BJT, que podían llegar a ser superiores a 3V. En su lugar, el TB6612FNG se comporta como una pequeña resistencia de 0.5 Ohm.
El esquema de montaje no es demasiado complicado. Por un lado, suministramos la tensión que alimentará el motor desde una fuente de alimentación externa, mediante el pin VM. La tensión máxima es de 15V. Además, tenemos que alimentar la electrónica del módulo mediante el pin VCC. El rango de tensión para VCC es 2.7 a 5.5V. Para el control del módulo Los pines AIN1, AIN2 Y PWMA controlan el canal A, mientras que los pines BIN1, BIN2, y PWMB controlan el canal B. Finalmente, el pin STBY controla el modo Standby. Debemos ponerlo en HIGH para activar el motor. Podemos conectarlo a un pin digital de Arduino, si queremos poder activar el modo Standby, o conectarlo a VCC si queremos dejarlo permanentemente desconectado.
La conexión, vista desde Arduino quedaría de la siguiente forma.
Características:
- Puente H dual, controla dos motores al mismo tiempo
- Voltaje de alimentación: 5V
- Motores de hasta 15V
- Consumo de corriente: 1A continuo, picos de hasta 3.2A
- Medidas: 20mm x 20mm
- Incluye disipador de aluminio
Potenciómetro de 10K
A nivel interno, la estructura de un potenciómetro es la siguiente:
Un potenciómetro son 2 resistencias conectadas en serie. A partir del nodo que se forma entre estas dos resistencias tenemos un terminal, el cual será la pata del centro en un potenciómetro de 3 patas. El símbolo utilizado para representar un potenciómetro en un diagrama de circuitos es:
Es, básicamente, el símbolo de una resistencia con una flecha que nos indica que podemos variar su valor. En el caso de Gitronic utilizaremos tres potenciómetros de 10K cada uno. Fuente de alimentación Vamos a usar una fuente de alimentación para alimentar el arduino 5v y el motor a 6v. Para ello hemos diseñado una placa en la PCB, lo más reducida posible y con la siguiente configuración:
-
El primer paso es el transformador, lo alimentamos a 230v (AC) y nos proporciona 9V (DC) y 2A.
-
El segundo paso es el puente de diodos:
En el caso del puente de diodos, que consta de cuatro de estos, la disposición de los mismos tiene que ser muy específica, guiándose por lo que se llama configuración de rectificación. Así es como logra terminar con una mitad de ciclo de corriente alterna de entrada, dejando pasar únicamente la otra mitad por medio del puente, pero siempre haciendo que el polo positivo y el negativo salgan por los mismos diodos para conseguir la inversión completa. Así es como se genera una señal eléctrica en forma de pulsos, conocida como media onda de rectificación. Para que pueda ser usada, se ha de estabilizar para que se forme una señal de corriente DC completa, como se conoce, y para lo que se suelen usar condensadores.
-
El tercer paso es un condensador de 4.700uF y 25V lo utilizamos para que ninguno de los reguladores sufra alguna imperfección
-
El cuarto paso son los dos reguladores, el 7805 y 7806.
El esquema de la fuente con las dos salidas de 6v para los motores y 5v para el arduino:
CONSTRUCCIÓN PASO A PASO Chasis
El material que hemos utilizado es aluminio para formar nuestro chasis.Donde irán todos los componentes que hemos explicado anteriormente : motor + encoder, y dos placas, una con el atmega y puente h y la otra para la fuente alimentación. Usamos metacrilato para que nadie pueda tocar ningún componente excepto la aguja para regular la modulación angular.
1- Primeramente, vemos como funciona el Encoder, como poder juntarlo junto al motor y como programarlo para que nos refleje los pulsos.
El codificador detecta la rotación del disco magnético y proporciona una resolución de 12 pulsos por revolución del eje del motor cuando se cuentan ambos bordes de los dos canales.
En este video se explica muy bien cómo se suelda el encoder al motor DC=
https://www.youtube.com/watch?v=iwW8ozNg8xc
Una vez soldado el encoder con el motor procedemos hacer el conexionado con el arduino.
2- Ahora una vez puesto en funcionamiento el encoder y su lectura pondremos a girar el motor pero automáticamente mediante programación (esta vez sin la lectura del encoder)
El TB6612FNG es un controlador (driver) de motores que nos permite manejar dos motores de corriente continua desde Arduino, variando tanto la velocidad como el sentido de giro.
Conexionado:
3- Ahora toca unir todo para que le demos un giro al motor y que nos lea los pulsos mediante el encoder. El giro lo damos gracias al chip TB6612FNG.
Conexionado:
4- Hemos hecho un avance muy bueno pero la clave para leer una programación con distintos elementos sin que estos perjudiquen el ritmo de la programación el comando MILIS. Primeramente hay que saber como programar algo básico mediante milis, nosotros hemos usado con unos leds para que se enciendan y se apagan con un tiempo.
5- Ahora le aplicaremos el Milis visto anteriormente pero para la lectura del encoder. Programación:
6- Ahora aplicaremos ese código de Milis pero a los motores haciéndolos mover los motores a los lados mediante el tiempo de Milis. Le hemos unido el encoder para que haga la lectura también en el monitor serie.
7- Finalmente le ponemos el PID en su totalidad para que corrija totalmente el PROPORCIONAL, INTEGRAL Y DERIVATIVO.
PUESTA EN MARCHA Y AJUSTES
Para la puesta en marcha tenemos dos hitos. El primero es la programación de arduino, es un programa complejo y que lo hemos tenido que ajustar hasta conseguir lograr el objetivo que queremos , que sea lo más exacto posible y que no pierda ningún pulso del encoder. El segundo hito es la parte mecánica y electrónica de nuestro reto. Todo lo que conlleva placas, soldaduras, chasis... Para ello hemos ido haciendo cada bloque por separado y al final los hemos juntado para finalizar nuestro proyecto, un controlador PID. La mayor dificultad es que lo hemos tenido que hacer lo más reducido posible, hasta conseguir que nos gustase el resultado de todo el conjunto.
PRESUPUESTO
Para nuestro proyecto hemos sido minimalistas usando los recursos que teníamos a nuestro alcance pero haremos el presupuesto del hipotético caso de que hubiésemos comprado todos los componentes para hacer nuestro proyecto.
Hemos usado un ATM 328 y para cargar el programa hemos usado arduino uno.
Para controlar el giro del motor hemos usado el chip TB6612FNG que es el puente h.
Para girar el motor necesitamos un motor y para contar las vueltas que da el motor utilizamos un encoder. El motor es un motor pololu de 6v 1100rpm y 100mA.
El precio del encoder es el par, para nuestro proyecto necesitamos uno.
Para hacer algunas conexiones hemos usado algunos cables.
Para diseñar el chasis de nuestro controlador PID hemos escogido aluminio. Ya que es un material consistente y estéticamente bonito.
Para acabar con el chasis hemos colocado alguna pieza de madera, para que el diseño quede los más compacto posible.
El transformador lo necesitamos para diseñar la fuente de alimentación
Total precio:
- Arduino : 13.39$
- Puente H: 0,92$
- Motor: 15,79$
- Encoder: 4,04$
- Tira cables: 0,97$
- Aluminio: 7,75$
- Metacrilato: 2,24$
- Madera: 0,81$
- Transformador: 6,55$
Total Presupuesto: 38.62$ Iva más gastos de envío incluido.
CONCLUSIONES
El comienzo del reto fue complicado, ya que hemos utilizado arduino pero no al nivel de hacer un controlador PID. Por este motivo las primeras semanas fueron complicadas pero con el paso del tiempo y los consejos de nuestro profesor hemos sido capaces de hacerlo, entenderlo y de estar satisfechos con el trabajo que hemos realizado.
REFERENCIAS
-
Aquí pondremos la información de la placa del arduino: http://www.iescamp.es/miarduino/2016/01/21/placa-arduino-uno/
-
La primera referencia a sido un video en youtube de un controlador PID , nos llamó la atención y nuestro profesor nos propuso hacerlo . Nuestra respuesta fue que si , aquí os dejamos el link https://www.youtube.com/watch?v=fusr9eTceEo&t=99s
-
La información sobre controlador PID es muy escasa , indagando encontramos al creador y diseñador del video del que hemos hablando anteriormente. Su nombre es Gregory L.Holst , mejor que veáis las cosas que a creado , un autentico crack. http://www.gregoryholst.com/
-
Para hacer el ATmega 328P independientemente del arduino se puede mirar en este link que explica completamente como quemar y poder hacer las conexiones. http://www.digilogic.es/atmega328p-independiente-de-arduino-standalone/
-
Donde mayor problemas hemos tenido ha sido en la programación de arduino, donde no teníamos ningún tipo de referencia, ya que Gregory no da ninguna información de lo que ha creado.
-
Hemos tenido los consejos y ayuda de nuestro profesor y esa es nuestra mayor referencia. Las fuentes de información que hemos encontrado en internet eran malas, ya que en el video hacen una cosa y cuando lo pruebas tu mismo hacen otra cosa. Por lo tanto nuestra única y gran referencia la hemos tenido