martes, 2 de agosto de 2016

Control de motores con Arduino.

En esta entrada vamos a comentar y aclarar la cuestión de si es posible controlar con Arduino motores más potentes, lejos de los típicos NEMA 17, y la respuesta es SI.

Podemos controlar desde motores en corriente alterna (CA) mediante relés, motores paso a paso, con el uso de drivers o bien motores de corriente continua(CC) con el uso de transistores.



Pero para controlar motores paso a paso con más potencia, debemos tener en cuenta adaptar nuestros driver de control, por ejemplo una CNC debe tener motores con más potencia que para la impresión 3D o el grabado láser.

Los típicos driver que utiliza Arduino son para impresoras 3D que no necesitan de mucha potencia, pero si queremos controlar potentes motores de CNC, podemos utilizar como microcontrolador Arduino, pero utilizaremos otros drivers que manejen más potencia para estos motores.


Antes de continuar, definiremos que es un “Driver”: cualquier equipo electrónico inteligente que proporcione un control ajustable de la velocidad para un motor. El driver para un motor paso a paso corresponde a un circuito electrónico, el cual tiene la característica de conmutar cada una de las bobinas del Stepper y a su vez, generar la secuencia en que debe alimentarse cada bobina para generar un paso. Junto con ello, permite invertir el giro del motor invirtiendo la secuencia en que las bobinas son conmutadas.

Los más utilizados en proyectos como la impresora 3D, son el A4988 y el DRV8825, pero como podemos ver en la siguiente tabla, presentan caracteristicas muy similares si lo comparamos con otros tipos en el mercado.



Los valores que debemos conocer para la elección de un motor son las siguientes:
-Escoger motores con un par o torque suficiente para la aplicación que vayan a tener (suficientemente “fuertes”).

-Elegir los drivers que puedan manejar suficiente corriente para que el motor ejerza el par motor necesario.
Además, el driver debe ser compatible con el resto de componentes electrónicos y con el resto de la circuitería de control.

El fabricante de los motores nos va a especificar una serie de datos y gráficos sobre su producto en las hojas técnicas o datasheet, como por ejemplo siguiente tabla:



Debemos fijarnos especialmente en dos datos:
-El par motor (o torque) de retención:
Aparecerá como “Holding Torque” o “Static moment”. Se mide en N·m o N·cm (Newtons·centímetro) y es uno de los parámetros que indica la “fuerza” del motor. Es el que más habitualmente ofrecen los fabricantes.
En la tabla anterior podemos observar que para el motor del ejemplo su valor es de 65 N·cm.
¿Qué significa este valor?
Es un indicativo de la fuerza con la que el motor puede mantenerse en un paso. Determinará el aguante del motor a que la inercia del eje que estamos moviendo le haga saltarse un paso al frenar dicho eje (que es el punto más común en el que puede saltarse un paso).

-La corriente o intensidad nominal:
Aparecerá como “Rated Current”, “Phase Current” o “Max Current”.
Se mide en amperios (A) y nos da el valor máximo de corriente que podemos hacer circular de manera continua por el motor sin quemarlo (recuerda que más corriente → más fuerza).
En la tabla podemos observar que para el motor del ejemplo su valor es de 1,8 A.
Por tanto si queremos utilizar este motor aprovechando toda su fuerza tenemos que controlarlo con un driver que sea capaz de entregar toda esa corriente.
Consejo: 
En caso de que sólo dispongamos de motores más ligeros a los recomendados: Disminuir el valor de aceleración máxima y limitar la velocidad máxima a un valor más pequeño, en el firmware de la máquina.
En caso de duda, entre dos motores del mismo par no siempre es mejor escoger el de menor corriente nominal. Cuanta mayor corriente nominal, más conserva su par el motor a altas velocidades, por lo que escogeremos el de mayor corriente que admitan los drivers de los que disponemos.
 
NOTA: Revisar la disposición del cableado de conexión, esta disposición puede variar entre distintos fabricantes.


Existen en el mercado multitud de drivers para motores paso a paso. Entre ellos hay una serie de diferencias, las cuales pueden dividirse en diferencias de control y de prestaciones.


Respecto al control:

-Drivers plug & play
Se controlan por USB. Son capaces de comunicarse con un software ejecutándose en un PC, que les envía las órdenes que el driver convertirá en movimiento de los motores que esté controlando. Pueden comunicarse en tiempo real o ser programados.
Pueden funcionar de forma independiente, sin necesidad de más electrónica excepto la alimentación.




-Drivers de bajo nivel
Son aquellos drivers que se controlan con señales electrónicas básicas, como voltajes y corrientes. Necesitan una electrónica de control aparte, ya que forman parte de un sistema y no se utilizan de manera independiente.



Respecto a sus prestaciones, los drivers pueden tener diferentes especificaciones, de las cuales podemos destacar las siguientes:

  • Rango de voltajes de operación (con los que alimentarán al motor)
  • Corriente que son capaces de suministrar de manera continua a cada bobina del motor
  • Modos de micropasos disponibles (1/8, 1/16, 1/32, full-step…)
  • Presencia de mecanismos de seguridad, como control contra sobretemperaturas, sobrecorrientes y cortocircuitos
  • Presencia de limitadores de corriente para poder utilizar motores con baja corriente nominal o bien a un mayor voltaje que el nominal


En el mercado existe una variedad amplia de motores según su torque, número de pasos, consumo, etc…



Cada tipo, tiene su propio tipo de driver de control adaptado a sus necesidades técnicas, sin embargo, se mantienen las señales de control de manera independiente al tamaño, torque, número de pasos… que tenga el motor. Esta característica, permite que mediante Arduino se puedan controlar una amplia variedad de motores sin necesidad de utilizar los pequeños drivers típicos para la mayoría de proyectos de Arduino con pequeños motores.

Por ejemplo, si necesitamos controlar un motor NEMA 34, utilizamos el driver ST-M5045, y en el código de programación de Arduino, hacemos uso de la biblioteca AccelStepper.


Las conexiones de control, serán las mismas que para otros motores paso a paso.
Por ejemplo:

>Pul+ se conecta a +5V
>Pul- se conecta a Arduino Pin 9
>Dir+ se conecta a +5V
>Dir- se conecta a Arduino Pin 8
>Enable+ sin conexión
>Enable- sin conexión 


En el siguiente enlace se puede ver un video explicativo en inglés que muestra un ejemplo:

Para saber si el driver que utilizamos es compatible con Arduino, debemos comprobar en la hoja de características del driver,que sus entradas de control funcionan a 5V (como el Arduino Mega) o 3.3V (como el Arduino Due) dependiendo del tipo Arduino, y están en un rango de intensidad de entre 10 a 15mA
Muchos nuevos driver de control tienen las entradas de control fotoacopladas, para aislar eléctricamente el circuito, y necesitan de un amplificador de señal para activar sus entradas de control a mas voltaje o intensidad de la que puede suministrar el microcontrolador.

Imagen cortesia de inventable.eu

Los drivers, internamente, suelen estar separados en dos circuitos integrados, uno para el manejo de la corriente (como el L298) y el otro para el control de la secuencia de conmutación y el control de la corriente de bobinado para el motor paso a paso (como el L297).
El control de la corriente de bobinado genera las secuencias de fase adecuadas. Integra toda la circuiteria de control necesaria para controlar motores paso a paso bipolares y unipolares. Usado con un driver de puente H doble como el L298N forma una completa interfaz entre un microprocesador y un motor paso a paso bipolar.
El  manejo de la corriente se consigue con un doble puente completo para controlar alto voltaje y alta corriente diseñado para aceptar estándares niveles lógicos TTL y manejar cargas inductivas tales como relés, solenoides, motores paso a paso y de corriente continua.


Un truco para el manejo de motores bipolares con los driver de 2 A. como máximo es para el control de corrientes superiores a 2A por fase, los dos puentes H en el circuito integrado L298N se puede conectar en paralelo las entradas y las salidas correspondientes. Sin embargo, para una distribución más equitativa de la carga y de la temperatura en el chip, el controlador de la bobina 1 deberá conectarse en paralelo con el controlador de la bobina 4, y el controlador de la bobina 2 con el controlador de la bobina 3. Además, la corriente total del driver debe ser reducida en 0.5A para permitir el desequilibrio máximo posible de la corriente en cada puente H. Así, dos circuitos integrados L298 pueden manejar motores de hasta 3.5A nominal por fase.

Otra opción es construirnos nosotros mismos el Driver adaptado a nuestras necesidades, el problema será en que no todos disponemos del material necesario para construirlo con componentes electrónicos con soldadura SMD y debemos de aumentar el tamaño de los drivers.


Esto puede ser una dificultad si necesitamos conectar varios motores al mismo arduino y no disponemos de espacio suficiente para almacenarlos con seguridad y comodidad.




 Si lo que necesitamos es optimizar el espacio, y disponer de un sistema fiable, lo ideal será adquirir los driver adaptados a los motores, ya que Arduino es capaz de manerar exactamente el mismo número de drivers sin depender de la potencia que consuman.





Esperamos que esta entrada sirva apra aclarar las dudas sobre si Arduino es capaz de manejar motores de gran potencia incluso para un uso industrial con CNC.

Enlace a otras entradas relacionadas:

Arduino Industrial: el Open SOurce se abre camino a nuevas fronteras.

Diagrama de conexión de la impresora 3D basada en Arduino  

Elección de un transisotor: Calcular compatibilidad

Todo lo que necesitas saber sobre drones basados en Arduino 


Un saludo, 
Ingenio Triana.

11 comentarios:

  1. Muy buén articulo. Gracicas me sirvió mucho.

    ResponderEliminar
  2. hola me gustaria saber si sabes de algun tipo de control a un motor paso a paso con un driver de estos requiero manipular las RPM

    ResponderEliminar
  3. hola me gustaria saber si sabes de algun tipo de control a un motor paso a paso con un driver de estos requiero manipular las RPM

    ResponderEliminar
    Respuestas
    1. Suele haber dos métodos, de forma manual, muchos driver suelen llevar jumpers para regular la frecuencia de pulsos que regulan los pasos por milímetros del motor.
      Otra forma es hacerlo mediante el firmware del código que controla los motores.
      Desde Arduino, en el código de programación, se puede modificar los valores que regulan las ordenes que envia el driver al motor.

      Espero que esta información te sea de utilidad.

      Eliminar
  4. hola si en el driver necesito manejar 51200 pasos y me los da pero a la hora de correrlo en el arduino no he podido manipular las RPM tal vz este usando una libreria que no sea la adecuada o no se q pasara me puedes recomendar alguna libreria.

    ResponderEliminar
  5. Hola,

    Nosotros con la librería que utilizamos nos sirve para el manejo de motores paso a paso en Arduino.

    Si con esta librería no te funciona correctamente, dando por seguras las conexiones electrónicas, revisa el driver por si tiene algunos jumpers para regular la precisión de los motores.

    Comentanos con más detalle si llegan a moverse, pero no de forma adecuada o si giran bien pero las medidas no las hace correcta...

    Un saludo y esperamos tu respuesta.

    ResponderEliminar
  6. Buenas Tardes Saludos, me gustaria construir una impresora 3d con algunas piezas electrónicas que ya poseo, pero no encuentro algun tutorial de como cablear un arduino uno con tres motores paso paso bipolares y tres drivers L298n

    ResponderEliminar
    Respuestas
    1. Hola buenas tardes Ramsel10, en internet,podrás encontrar mucha información referida a estos componentes muy utilizados y genéricos.
      En el siguiente video tutorial te explica como conectar una placa Arduino a un driver L298n y esta a su vez a un motor paso a paso. A diferencia de tu caso, en el video utiliza un arduino Mega, pero sólo tendrás que identificar las salidas digitales que tu tienes asignada en tu placa Arduino UNO y listo.

      https://www.youtube.com/watch?v=ArthFphoUfY

      Eliminar
    2. ok perfecto lo habia visto pero no entiendo como conectar los tres motores al mismo tiempo usando grbl y un arduino Uno, te agradeceria si podrias facilitarme un esquema de conexion

      Eliminar
  7. Ingeniero. Gracias por su aporte. Yo le hago una consulta. el PAP que dispongo de reciclado para mi CNC no tiene muchos datos, asumí que anda por los 3.5 A. tiene un reductor de velocidad incorporado que gana fuerza, calculo que gracias a eso no perderé pasos, elegí un driver de 5A. por seguridad, del tipo que muestra en su foto con Arduino, yo ya habia hecho un prototipo y me perdia muchos pasos inclusive bajando la velocidad de trabajo, me dejó en duda el tema de los otros factores que influyen en la perdida de pasos. No sé si el reductor sería un problema al empezar a trabajar. Agradeceria su ayuda. cuando me responda este mensaje le agregaré fotos de mi maquina. Gracias.

    ResponderEliminar
    Respuestas
    1. Hola, te comentaré las posibles causas de pérdida de pasos para un motor paso a paso.

      La causa más común suele ser una intensidad de trabajo inadecuada. Si tu motor es de 3.5A y le suministras 5A, puede que el torque que desarrolle sea tan fuerte, que a nivel interno a las bobinas del motor le cueste dejar al rotor gierar hasta enfretarse al siguiente grupo de bobinas, lo que se traduce que el motor hace movimientos bruscos al moverse, perdiendo pasos.
      En la otra cara opuesta, estaría que tu motor de 3.5A le esten llegando una cantidad más baja, por ejemplo 2A, esto causaría que el motor parece que se mueve y a veces no llega a completar el movimiento, se nota que le falta fuerza, no gira correctamente.

      Además de causas por una intensidad de trabajo incorrecta, a nivel lógico puede que la velocidad de funcionamiento, que traducido significa los tiempos en microsegundos que el controlador deja para que el motor gire y complete los pasos sea muy bajo. Esto provoca que las bobinas no se sincronizan con el giro del motor. Notaremos que el motor esta desfasado, y si le damos la instrucción de dar una vuelta, no le dará tiempo a completarla, el motor gira a trompicones.

      Si además de estas causas sigue sin funcionar correctamente, puedes revisar la parte mecánica, como que el rotor este bien lubricado, y la reductora que lleva acoplada como comentas no genere un excesivo esfuerzo en el motor.

      Para estas pruebas, es bueno tener conectado un amperímetro para comprobar la intensidad a la que funciona correctamente.


      Espero que esta información te sea de utilidad.


      Un saludo,
      Ingenio Triana.

      Eliminar