Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previaPróxima revisiónAmbos lados, revisión siguiente | ||
guias:control_de_motores [2018/05/06 16:51] – test1 Oscar | guias:control_de_motores [2018/05/06 16:53] – Oscar | ||
---|---|---|---|
Línea 8: | Línea 8: | ||
Adaptado de [[https:// | 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 ===== | ||
- | |||
- | Cuando elegimos un driver para nuestro proyecto -de robot móvil o lo que queramos- debemos tener en cuenta varias cosas: | ||
- | |||
- | * Cuántos motores vamos a controlar. Hay circuitos integrados -y placas- que pueden controlar 1, 2, 4, 6 o el número que se nos ocurra. | ||
- | * Qué potencia (consumo en mA) necesitan esos motores. El driver deberá dara esa potencia o más. | ||
- | * Qué tensión de alimentación (en V) tienen los motores. | ||
- | |||
- | Si la potencia es suficiente podremos conectar dos motores en paralelo a una misma salida de un driver. También podemos conectar varios drivers (iguales o no) pero necesitaremos un Arduino con muchas salidas (como el [[https:// | ||
- | |||
- | Además tendremos en cuenta, en función de nuestro proyecto, el tamaño del driver. Para proyectos en miniatura como [[https:// | ||
- | |||
- | ===== Drivers más utilizados en proyectos DIY/DIWO ===== | ||
- | |||
- | A continuación vamos a detallar una lista de drivers utilizados muy comunmente en proyectos de robótica casera, que conocemos de nuestros propios proyectos y para los que hemos creado librerías. La lista incluye: | ||
- | |||
- | * L9110 | ||
- | * L298N | ||
- | * L297D | ||
- | * TB6612FNG | ||
- | * DRV8835 | ||
- | |||
- | 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). | ||
- | |||
- |