Herramientas de usuario

Herramientas del sitio


guias:control_de_motores

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
guias:control_de_motores [2018/05/06 16:52] Oscarguias:control_de_motores [2018/05/11 11:28] Félix Sánchez-Tembleque
Línea 1: Línea 1:
 +====== Control de motores con Arduino ======
  
 +<WRAP tip> **Un motor de corriente continua** (denominado también motor DC por las iniciales en inglés direct current) es una máquina que convierte energía eléctrica en mecánica, provocando un movimiento rotatorio, gracias a la acción de un campo magnético.
  
 +{{:guias:guias:drivers:img_0128.gif}}
 +
 +Un motor de corriente continua se compone principalmente de dos partes: El estátor (carcasa exterior) crea un campo magnético. El rotor es la parte interior que gira, alimentado con corriente directa a través de delgas, que están en contacto alternante con escobillas fija.
 +
 +Adaptado de [[https://bricolabs.cc/wiki/guias/control_de_motores|Wikipedia]]</WRAP>
 +
 +===== Introducción =====
 +
 +Esta página está dedicada al control de motores con Arduino. Específicamente motores de corriente contínua estándar. Existen algunos motores DC especiales como los motores paso a paso o sin escobillas (brushless en inglés) que no serán tratados aquí. Una buena parte de la información servirá para otras plataformas como Raspberry Pi, pero en general las librerías de programación y los esquemas estarán dedicados en exclusiva a Arduino.
 +
 +Arduino tiene pines de entrada y de salida para comunicarse físicamente con su entorno. Los pines de salida pueden dar una pequeña cantidad de energía que sirve por ejemplo para encender un LED, pero no pueden alimentar a un motor. Para ello necesitamos un circuito que haga de intermediario. Este circuito, el controlador o driver de motores, tomará energía de otra fuente (una pila, batería o equivalente) y siguiendo las instrucciones de Arduino hará funcionar el motor.
 +
 +{{:proyectos:redbot:redbot_5.jpg?400}}
 +
 +Existen muchos drivers diferentes, pero para poder controlar bien un motor necesitamos dos características fundamentales:
 +
 +  * Que permitan invertir el sentido de giro del motor.
 +  * Que permitan graduar la velocidad de giro del motor.
 +
 +===== Drivers con Puentes H =====
 +
 +El circuito básico que permite las dos funciones que dijimos es un puente H. Un motor DC cambia el sentido de giro cuado invertimos los polos positivo y negativo en sus bornes, y este circuito juega con una serie de interruptores para hacer ese cambio de polaridad. Podemos construir un puente H con cuatro interruptores, pero lo que usaremos es un [[https://es.m.wikipedia.org/wiki/Circuito_integrado|circuito integrado]] que tiene esos interruptores -o puertas- y las abrirá y cerrará siguiendo instrucciones del Arduino.
 +
 +{{:proyectos:redbot:redbot_6.jpg?400}}
 +===== Señales PWM =====
 +
 +Un motor DC está preparado para funcionar a una tensión que nos dará el fabricante. Si le damos una tensión menor girará más despacio, llegando en el extremo a pararse. Así regulamos la velocidad.
 +
 +Arduino no puede (con excepciones) regular directamente los voltios que salen por un pin, pero puede hacer una pequeña 'trampa' que se llama PWM y que tiene como resultado una acción parecida a bajar la tensión. En la [[https://es.wikipedia.org/wiki/Modulaci%C3%B3n_por_ancho_de_pulsos|wikipedia]] puede verse una explicación de su funcionamiento, pero eso excede nuestro objetivo aquí. Lo importante y que nos interesa ahora es:
 +
 +  * Arduino puede generar señales PWM y así simular una tensión menor en voltios.
 +  * Esta señal sirve para controlar motores a través de un puente H (¡¡¡con una señal 'verdadera' no se puede!!!).
 +  * Los motores DC aceptan esta señal 'falsa' y podemos ajustar así la velocidad.
 + 
 +
 +No todos los pines de Arduino pueden hacer esta función [[https://cdn.arduino.cc/reference/en/language/functions/analog-io/analogWrite/|PWM]]. En los diagramas de funcionamiento de cada modelo puede verse cuáles la tienen y cuáles no.
 +===== Librerías de programación =====
 +
 +La programación de Arduino, igual que muchos lenguajes, permite la creación de nuevas instrucciones en forma de librerías.
 +
 +Para utilizar un driver combinaremos salidas PWM con salidas digitales en las que las opciones son apagado (LOW) o apagado (HIGH). Cada driver tiene su tabla lógica para funcionar. Un ejemplo de código para mover un motor podría ser este:
 +
 +<code>
 +analogWrite(9, 200);
 +digitalWrite(8, HIGH);
 +digitalWrite(7, LOW);
 +</code>
 +
 +Sin embargo en lugar trabajar con los pines uno a uno, lo haremos indirectamente con librerías que transformarán ese código en algo más sencillo como 'robot.adelante' Están pensadas para robots de dos ruedas (o cuatro, pero funcionando dos a dos) y darle instrucciones sencillas del tipo: avanza, retrocede, gira, frena.
 +
 +<code>
 +nombredelrobot.forward(128,128,1000);
 +nombredelrobot.reverse(128,128,1000);
 +nombredelrobot.rotate(128,128,1000);
 +nombredelrobot.rotate(128,128,-1000);
 +nombredelrobot.brake(1000);
 +</code>
 +
 +Hemos tratado de que las librerías tengan todas las mismas instrucciones con independencia del driver. Están alojadas en Github y también allí están los detalles para su uso. Como todo el material de Bricolabs son libres, puedes hacer con ellas lo que quieras.
 +
 +===== Conexionado general =====
 +
 +Un driver de motores, tal y como se puede ver en el diagrama de bloques de arriba, tendrá una serie de cables que van al Arduino (líneas de control), una entrada de energía conectada a una fuente como una batería o similar (línea de potencia) y las líneas que van finalmente a los motores.
 +
 +{{:old:archivo:sapoconcho_fritzing_800.jpg?400}}
 +
 +Algunas placas para robótica como la [[https://bricolabs.es/wiki/proyectos/raptor#raptor_pcb|PCB de Raptor]] tienen todo integrado: el Arduino, el driver y la alimentacion, y no tendremos que cablear nada. Esto puede ser cómodo pero también poco flexible.
 ===== Características generales de los drivers ===== ===== Características generales de los drivers =====
  
Línea 24: Línea 93:
  
 Si el motor una vez conectado no gira en el sentido deseado podemos cambiarlo muy fácilmente tanto en el hardware (intermabiando los cables del motor o del driver) como en el software (cambiando los pines en la programación). Si el motor una vez conectado no gira en el sentido deseado podemos cambiarlo muy fácilmente tanto en el hardware (intermabiando los cables del motor o del driver) como en el software (cambiando los pines en la programación).
 +
 ==== L9110 ==== ==== L9110 ====
  
Línea 46: Línea 116:
 |AI-B|0|pwm|0| |AI-B|0|pwm|0|
  
-Librerías de funcionaminto para L9110: en este enlace de [[https://github.com/fstdp/sapoconcho|Github]] puedes descargar los archivos L9110.cpp y L9110.h. Deberás instalarlos en la carpeta de librerías de Arduino. En ese mismo enlace puedes descargar varios ejemplos de programas para tu robot y ver la sintaxis para llamar a las funciones de movimiento.+Librerías de funcionaminto para L9110: en este enlace de [[https://github.com/felixstdp/sapoconcho|Github]] puedes descargar los archivos L9110.cpp y L9110.h. Deberás instalarlos en la carpeta de librerías de Arduino. En ese mismo enlace puedes descargar varios ejemplos de programas para tu robot y ver la sintaxis para llamar a las funciones de movimiento.
  
 Una vez conectado el driver e instaladas las librerías deberás elegir un nombre para tu robot, y decirle en qué pines has conectado el driver (en el ejemplo los pines 3, 5, 6 y 9), y para eso comenzar tus programas de este modo: Una vez conectado el driver e instaladas las librerías deberás elegir un nombre para tu robot, y decirle en qué pines has conectado el driver (en el ejemplo los pines 3, 5, 6 y 9), y para eso comenzar tus programas de este modo:
Línea 79: Línea 149:
 {{:guias:guias:drivers:driver_298_arduino_uno.png?500|}} {{:guias:guias:drivers:driver_298_arduino_uno.png?500|}}
  
-Librerías de funcionaminto para L298N: en este enlace de [[https://github.com/fstdp/drivers/tree/master/L298N|Github]] puedes descargar los archivos L298N.cpp y L298N.h. Deberás como siempre instalarlos en la carpeta de librerías de Arduino y empezar los programas con este código.+Librerías de funcionaminto para L298N: en este enlace de [[https://github.com/felixstdp/drivers/tree/master/L298N|Github]] puedes descargar los archivos L298N.cpp y L298N.h. Deberás como siempre instalarlos en la carpeta de librerías de Arduino y empezar los programas con este código.
  
 <code> <code>
Línea 94: Línea 164:
 {{:guias:guias:drivers:ardumoto_shield_hookup_guide-02.jpg?400|}} {{:guias:guias:drivers:ardumoto_shield_hookup_guide-02.jpg?400|}}
  
-La lógica de funcionamiento es la misma y las librerías de programación puedes encontrarlas [[https://github.com/fstdp/drivers/tree/master/ardumoto|aquí]]. Ahora no hay que indicar los pines de conexión porque están fijados, por lo que la cabecera del programa es más simple.+La lógica de funcionamiento es la misma y las librerías de programación puedes encontrarlas [[https://github.com/felixstdp/drivers/tree/master/ardumoto|aquí]]. Ahora no hay que indicar los pines de conexión porque están fijados, por lo que la cabecera del programa es más simple.
  
 <code> <code>
Línea 131: Línea 201:
 === Redbot === === Redbot ===
  
-El driver TB6612FNG también es el que integra la [[https://www.sparkfun.com/products/12097|placa Redbot]] de SparkFun, para la que creamos la librería [[https://github.com/fstdp/mobilerobot.ino|RobotMovil]].+El driver TB6612FNG también es el que integra la [[https://www.sparkfun.com/products/12097|placa Redbot]] de SparkFun, para la que creamos la librería [[https://github.com/felixstdp/mobilerobot.ino|RobotMovil]].
  
 {{:proyectos:redbot:redbot_4.jpg?400|}} {{:proyectos:redbot:redbot_4.jpg?400|}}
Línea 156: Línea 226:
 ===== Enlaces ===== ===== Enlaces =====
  
-  * [[https://github.com/fstdp/drivers|Repositorio de todo el proyecto en Github (Bricolabs)]]+  * [[https://github.com/felixstdp/drivers|Repositorio de todo el proyecto en Github (Bricolabs)]]
   * [[http://www.luisllamas.es/2016/08/arduino-motor-dc-tb6612fng/|Utilización del TB6612 (por Luis Llamas)]]   * [[http://www.luisllamas.es/2016/08/arduino-motor-dc-tb6612fng/|Utilización del TB6612 (por Luis Llamas)]]
guias/control_de_motores.txt · Última modificación: 2021/04/16 20:41 por 127.0.0.1