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
Próxima revisiónAmbos lados, revisión siguiente
guias:control_de_motores [2018/05/06 16:51] – test1 Oscarguias:control_de_motores [2018/05/06 16:53] Oscar
Línea 8: Línea 8:
  
 Adaptado de [[https://bricolabs.cc/wiki/guias/control_de_motores|Wikipedia]]</WRAP> 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 ===== 
- 
-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://www.arduino.cc/en/Main/arduinoBoardMega2560|Mega 2560]]) o un circuito más especializado con otro tipo de comunicación. 
- 
-Además tendremos en cuenta, en función de nuestro proyecto, el tamaño del driver. Para proyectos en miniatura como [[https://bricolabs.cc/wiki/proyectos/sapoconcho|Sapoconcho]] elegimos un driver muy pequeño. 
- 
-===== 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). 
- 
- 
guias/control_de_motores.txt · Última modificación: 2021/04/16 20:41 por 127.0.0.1