¿Cómo conecto un controlador de motor paso a paso TMC2130 a un Arduino UNO para controlarlo?

Simplemente quiero controlar un motor paso a paso con un Arduino y necesito el TMC2130 para asegurarme de que funcione muy silenciosamente. He buscado mucho y de alguna manera no puedo encontrar cómo conectarlo a un Arduino y una fuente de alimentación.

Sin embargo, puedo encontrar bibliotecas Arduino y código de muestra en abundancia. He visto diagramas de cableado, pero solo usan el kit de evaluación TMC que no quiero comprar.

¿Es un TMC2130 y Arduino todo lo que necesito en lo que respecta a circuitos integrados o placas? Alguien tiene experiencia con esto?

Respuestas (4)

Este esquema me recuerda a esos esquemas DRV8825. Bastante simple de seguir:

Esquema de cableado de TMC2130 Arduino

Fuente: cableado Arduino TC2130 (última verificación: 13/07/2018)

Me parece bastante sencillo, hay un diagrama en la hoja de datos en la página 5. Le recomiendo encarecidamente que lea y comprenda la hoja de datos , si no lo hace, es más que probable que lo inicie por primera vez y no tenga funcionalidad . Luego leerá la hoja de datos hasta que la entienda y encuentre el problema.

Lo primero que debe verificar en una hoja de datos son las calificaciones máximas absolutas, no exceda estas condiciones.

El bus SPI está conectado al arduino (asegúrese de que los niveles lógicos sean los mismos)

ingrese la descripción de la imagen aquí

Parece que los puertos STEP y DIR pueden controlarse desde el microprocesador, y el motor controlado de esa manera (y también puede controlarse a través del bus spi)

Aquí se encuentra un esquema de ejemplo para la placa de evaluación .

También hay un blog que muestra todos los pines para Arduino UNO aquí: blog.trinamic.com/2017/06/27/… La placa de evaluación solo tiene el TMC2130, por lo que solo está copiando los números de pin.

La mayoría de nosotros, gente perezosa, solo usamos una placa RAMPS para nuestros controladores paso a paso con el Arduino. Los esquemas están disponibles, pero es muy fácil comprar una placa RAMPS.

Una placa RAMPS se usa comúnmente para impulsar los 4 motores paso a paso que se encuentran en la mayoría de las impresoras 3D, pero es de uso general y puede impulsar muchas aplicaciones de posicionamiento.

¡Ah, OK! No sabía nada sobre RAMPS aparte de que normalmente se usa para la impresión 3D, así que supongo que ni siquiera lo consideré. Lo miraré, gracias!

Solo porque todavía no sabía lo que estaba haciendo después de las respuestas, aunque son útiles, un poco de comprensión en el conocimiento para principiantes, ya que la placa de controlador diferencia fe de una placa de controlador L298n.

En resumen, una placa de controlador como la TMC 2130única necesidad +5Vy GND, un pin digital para DIRy STEP. ENse puede colocar en un GNDpin para que funcione con la AccelStepperbiblioteca de arduino, pero perdería muchas características excelentes. Para aprovecharlos, mi guía de 6 pasos para protegerlo uno o dos días trabajando en el sitio web de Trinamic para una ejecución rápida.

En general todo lo que hay que hacer es:

  1. Comprobación de la hoja de datos del motor paso a paso para la Imaxcorriente. En mi caso: 17hs4401 el motor tiene 1.7A "Rated Current". Eso significa que TMC 2130funcionaría pero no podría ejecutarse en modo sigiloso, pero funcionaría desde ...

"La corriente máxima configurable del motor es 1,77 A RMS (resistencias de detección de 0,11 ohmios), pero los SilentStepSticks solo se pueden usar hasta 1,2 A RMS". ( https://wiki.fysetc.com/TMC2130/#motor-current-setting )

Corriente de fase del motor máx. 2 A RMS, pico de 2,8 A

( https://wiki.fysetc.com/Silent2209/#technical-specifications )

Así que opté por lo último TMC 2209 (en mi opinión, es una mejor opción en todos los aspectos TMC 2130e incluso aunque aparece el mismo indicio de 1.2A, pero el RMS está en 2A, por lo que funciona).

EDITAR: Teemalut, el creador de la biblioteca aclaró algunos puntos que malinterpreté en la documentación:

La calificación actual no limita su elección de modo de paso. El límite de 1,2 A es un límite térmico práctico. Preferiría no llamar al 2209 por ser mejor en todos los sentidos que el 2130. Le faltan algunas opciones y agrega algunas y, en última instancia, será el usuario quien elija el controlador. Tiendo a preferir los SPI porque es más fácil trabajar con ellos.


Si no tiene control de software sobre el controlador, debe ajustar la resistencia manualmente. De lo contrario, puede omitir los puntos 2 y 3.

  1. Para hacer esto manualmente, coloque un multímetro en el pin de tierra de la salida del motor (junto a los 3 orificios vacíos) y el otro cable en el Vreforificio/pin y verifique nuevamente la hoja de datos donde Vrefse debe medir, ya que eso cambia incluso de versión a versión del diseño del tablero. Podría ser el pin derecho o el izquierdo de los 3 pines o en otro lugar. (Y sí, en este punto tienes que conseguir un multímetro, uno barato de descuento por 5 dólares lo hará aunque no freirá la placa del controlador)

(El multímetro en voltaje de corriente continua ⎓, NO en corriente alterna ~; Cambie la selección del multímetro para que esté tan cerca como, pero más grande que, el voltaje a medir, rango fe 20V para la medición de 2.4V)The higher the range difference, the less accurate the measuring will get

De hecho, hay una calculadora para eso en la página de inicio solo para entrenar la fórmula:

Vref = (Irms * 2,5V) / 1,77A = Irms * 1,41 = Imáx

entonces Vref = (1,7A * 2,5V) / 1,77A = 1,4V


  1. Poniendo el voltaje lógico de 5V VIOy GNDel voltaje del motor de 12V VMy GNDal lado. No conecte el motor y no necesariamente los GNDpines entre sí, se pueden separar. Ahora tome un destornillador realmente pequeño y ajuste el tornillo en el potenciómetro hasta que aparezca el voltaje de corriente continua calculado.

Es posible que deba esperar un poco hasta que el voltaje deje de saltar porque el TMC 2209 or TMC 2130controlador se ajusta en la primera conexión al voltaje hasta que pueda ajustarse, en mi caso, 2.4V para un motor paso a paso bipolar de 1.7A.

Esa fue la parte más difícil.


  1. Los tipos de motor deben estar en la TMCStepperbiblioteca del Arduino IDE. En realidad, hay un boceto de ejemplo de TMC2209y la biblioteca también funciona con TMC 2130y aprovecha muchas características de los controladores TMC ( https://github.com/teemuatlut/TMCStepper )

Estoy usando el clon de Arduino Mini

El pin Habilitar y Dirección deben ser pines digitales y el pin Paso SW_RXy SW_TX PWMpines. El TMC 2209y TMC 2130funciona con 3,3V y 5V, así que no hay nada de qué preocuparse aquí.

Todos los pines pueden ser pines digitales IO normales. https://github.com/teemuatlut/TMCStepper/pull/146#issuecomment-684010156


  1. Cambie los pines de acuerdo DigitalIOcon su tablero y elimine los comentarios de acuerdo con el siguiente ejemplo de código
    #define EN_PIN           7 // Enable 
    #define DIR_PIN          8 // Direction 
    #define STEP_PIN         9 // Step 
    #define SW_RX            5 // 
    #define SW_TX            6 // 
    #define SERIAL_PORT  Serial // [Serial1 to Serial]
    #define DRIVER_ADDRESS 0b00 // TMC2209 Driver address according to MS1 and MS2
    
    #define R_SENSE 0.11f // Match to your driver
                          // SilentStepStick series use 0.11
                          // UltiMachine Einsy and Archim2 boards use 0.2
                          // Panucatt BSD2660 uses 0.1
                          // Watterott TMC5160 uses 0.075
    
    // Select your stepper driver type
    //TMC2209Stepper driver(&SERIAL_PORT, R_SENSE, DRIVER_ADDRESS);
    TMC2209Stepper driver(SW_RX, SW_TX, R_SENSE, DRIVER_ADDRESS); //Uncomment this if you connected SW_RX and SW_TX
    //...

Eso fue todo.


Entonces obtuve la siguiente configuración:

  • Arduino Digital Pin 7 --> Habilitar paraEN

  • Arduino Digital Pin 8 --> Dirección aDIR

  • Arduino Digital Pin 9 --> Paso aSTEP

  • PIN digital Arduino 5 --> SW_RX aRX

  • PIN digital Arduino 6 --> SW_TX aTX

  • Arduino +5V o +3.3V --> aVIO

  • Arduino GND --> al GNDlado deVIO

  • +12V >2A Fuente de alimentación --> aVM

  • GND >2A Fuente de alimentación --> al GNDlado deVM

  • Motor A+ -->A2

  • Motor A -->A1

  • Motor B+ -->B1

  • Motor B- -->B2

(También funcionaría, simplemente conecte Paso y Dirección al arduino, con la biblioteca AccelStepper, y jale EN a Arduino GND y deje los otros abiertos, para hacer que el motor funcione, pero muchas características del TMC no serían usado y el motor probablemente sería más ruidoso y "consumiría" más energía. Pero esa es una solución si solo tiene un pin digital y uno pwm en su arduino).

Espero que alguien ahorre un día leyendo la documentación para entender cómo funciona esa placa de controlador con esta publicación.

Hola y muchas gracias por tu completo tutorial. Solo una nota al margen: si alguien va a usar la biblioteca TMCStepper junto con un ESP32 como lo hice yo, debe usar HardwareSerial, debido a problemas de compatibilidad. Consulte github.com/teemuatlut/TMCStepper/issues/… para obtener más detalles.
@karlitos Feliz de haberte ayudado :) Gracias por tu respuesta.