Muestra las diferencias entre dos versiones de la página.
guias:control_de_motores [2018/05/06 16:52] – Oscar | guias:control_de_motores [2021/04/16 20:41] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
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. | ||
+ | {{: | ||
+ | |||
+ | 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:// | ||
+ | |||
+ | ===== 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. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | 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, | ||
+ | |||
+ | {{: | ||
+ | ===== 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 ' | ||
+ | |||
+ | * 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 ' | ||
+ | * Los motores DC aceptan esta señal ' | ||
+ | |||
+ | |||
+ | No todos los pines de Arduino pueden hacer esta función [[https:// | ||
+ | ===== 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: | ||
+ | |||
+ | < | ||
+ | analogWrite(9, | ||
+ | digitalWrite(8, | ||
+ | digitalWrite(7, | ||
+ | </ | ||
+ | |||
+ | 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 ' | ||
+ | |||
+ | < | ||
+ | nombredelrobot.forward(128, | ||
+ | nombredelrobot.reverse(128, | ||
+ | nombredelrobot.rotate(128, | ||
+ | nombredelrobot.rotate(128, | ||
+ | nombredelrobot.brake(1000); | ||
+ | </ | ||
+ | |||
+ | 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. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Algunas placas para robótica como la [[https:// | ||
===== 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:// | + | Librerías de funcionaminto para L9110: en este enlace de [[https:// |
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: | ||
{{: | {{: | ||
- | Librerías de funcionaminto para L298N: en este enlace de [[https:// | + | Librerías de funcionaminto para L298N: en este enlace de [[https:// |
< | < | ||
Línea 94: | Línea 164: | ||
{{: | {{: | ||
- | La lógica de funcionamiento es la misma y las librerías de programación puedes encontrarlas [[https:// | + | La lógica de funcionamiento es la misma y las librerías de programación puedes encontrarlas [[https:// |
< | < | ||
Línea 131: | Línea 201: | ||
=== Redbot === | === Redbot === | ||
- | El driver TB6612FNG también es el que integra la [[https:// | + | El driver TB6612FNG también es el que integra la [[https:// |
{{: | {{: | ||
Línea 156: | Línea 226: | ||
===== Enlaces ===== | ===== Enlaces ===== | ||
- | * [[https:// | + | * [[https:// |
* [[http:// | * [[http:// |