Introducción
El TMC2209 es un controlador de motores paso a paso (stepper motor driver) de última generación diseñado por Trinamic Motion Control (ahora parte de Analog Devices). Este IC destaca por su operación ultra silenciosa y su capacidad para proporcionar un control de movimiento suave y preciso en una amplia gama de aplicaciones, desde impresoras 3D hasta robótica avanzada y sistemas de automatización industrial.
El TMC2209 representa la evolución de la tecnología SilentStepStick, incorporando características avanzadas como StealthChop2 para operación silenciosa, SpreadCycle para control dinámico, StallGuard4 para detección de carga sin sensores, y CoolStep para ahorro energético inteligente.
Índice
- Características Principales
- Especificaciones Técnicas
- Pinout y Diagrama de Pines
- Tecnologías Integradas
- Modos de Operación
- Configuración y Microstepping
- Interfaz UART
- Protecciones y Diagnósticos
- Aplicaciones Típicas
- Comparativa con Otros Drivers
- Guía de Implementación
- Ejemplos de Código
- Consideraciones de Diseño
- Recursos y Documentación
Características Principales
Resumen de Capacidades
| Característica | Especificación |
|---|---|
| Corriente de Bobina | Hasta 2.8A (pico), 2A RMS |
| Voltaje de Alimentación | 4.75V a 29V DC |
| Microstepping | Hasta 256 µsteps (MicroPlyer™) |
| Interfaz de Control | STEP/DIR + UART |
| Resistencia RDS(on) | 170mΩ (LS) + 170mΩ (HS) típico a 25°C |
| Paquete | QFN con heat slug integrado |
Características Destacadas
- StealthChop2™: Tecnología de conmutación silenciosa para operación ultra silenciosa del motor
- SpreadCycle™: Controlador de ciclo de conmutación altamente dinámico para aplicaciones que requieren alto rendimiento
- StallGuard4™: Detección de carga y parada sin sensores, compatible con StealthChop
- CoolStep™: Control de corriente inteligente para ahorro de energía hasta un 75%
- MicroPlyer™: Interpolación de microstepping para movimiento suave hasta 256 µsteps
- Interfaz STEP/DIR: Configuración de microstepping mediante pines (8, 16, 32 o 64)
- Interfaz UART: Configuración avanzada mediante comunicación serie de un solo cable
- Standby de Bajo Consumo: Cumple con regulaciones de energía en standby
- Resistores de Sensado Integrados: Opción de resistores internos (no requiere resistores externos)
- Generador de Pulsos Integrado: Para movimiento independiente
- Protección Completa: Diagnósticos y protecciones integrales
Especificaciones Técnicas
Parámetros Eléctricos
| Parámetro | Valor | Unidad |
|---|---|---|
| Voltaje de Alimentación Lógica (VIO) | 4.75 - 5.5 | V |
| Voltaje de Motor (VM) | 4.75 - 29 | V |
| Corriente de Salida (RMS) | 1.4 - 2.0 | A |
| Corriente de Salida (Pico) | Hasta 2.8 | A |
| Resistencia RDS(on) HS | 170 | mΩ (típico) |
| Resistencia RDS(on) LS | 170 | mΩ (típico) |
| Frecuencia STEP | Hasta 200 | kHz |
| Temperatura de Operación | -40 a +150 | °C (de la unión) |
Características del Motor
- Tipo de Motor: Motores paso a paso bipolares de 2 fases
- Inductancia Soportada: 0.5 - 10 mH (típico)
- Resistencia de Bobina: 0.5 - 10 Ω (recomendado)
- Voltaje de Motor Típico: 12V - 24V
Consumo de Energía
| Modo | Consumo |
|---|---|
| Operación Normal | Depende de la carga del motor |
| Standby | < 100 µA (típico) |
| Power Down Automático | Activable cuando el motor está inactivo |
Pinout y Diagrama de Pines
Configuración de Pines (Paquete QFN 28)
El TMC2209 viene en un paquete QFN compacto con placa térmica (heat slug) integrada para una disipación térmica eficiente.
Pines de Alimentación
| Pin | Nombre | Descripción |
|---|---|---|
| 1 | VIO | Voltaje de lógica (4.75-5.5V) |
| 2 | VM | Voltaje de motor (4.75-29V) |
| 3-4 | VREF | Referencia de corriente |
| 5-8 | GND | Tierra (múltiples pines) |
Pines de Salida del Motor
| Pin | Nombre | Descripción |
|---|---|---|
| 9-10 | 2B1, 2B2 | Salida bobina 2 |
| 11-12 | 2A1, 2A2 | Salida bobina 1 |
| 13-16 | PA1, PA2, PB1, PB2 | Puentes H para fases A y B |
Pines de Control
| Pin | Nombre | Descripción |
|---|---|---|
| 17 | STEP | Entrada de pulsos de paso |
| 18 | DIR | Entrada de dirección |
| 19 | MS1 | Selección microstepping 1 |
| 20 | MS2 | Selección microstepping 2 |
| 21 | MS3 | Selección microstepping 3 |
| 22 | UART_RX/TX | Interfaz UART (un solo cable) |
| 23 | DIAG | Salida de diagnóstico/StallGuard |
| 24 | PDN_UART | Habilitación UART/Standby |
| 25 | SLP | Sleep/Standby control |
| 26 | RESET | Reset del driver |
Diagrama de Bloques Interno
┌─────────────────────────────────────────────────────────┐
│ TMC2209 Internal │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │
│ │ STEP/ │ │ MicroPlyer│ │ StealthChop2/ │ │
│ │ DIR │──│ (256µs) │──│ SpreadCycle │ │
│ │ Input │ │ │ │ Chopper │ │
│ └──────────┘ └──────────┘ └──────────┬───────────┘ │
│ │ │
│ ┌──────────┐ ┌──────────┐ ┌──────────▼───────────┐ │
│ │ UART │ │ StallGuard│ │ Current Control │ │
│ │ Interface│ │ 4 │ │ (CoolStep) │ │
│ └──────────┘ └──────────┘ └──────────┬───────────┘ │
│ │ │
│ ┌──────────┐ ┌──────────┐ ┌──────────▼───────────┐ │
│ │ OTP │ │ Protection│ │ H-Bridge A/B │ │
│ │ Memory │ │ & Diag │ │ (170mΩ each) │ │
│ └──────────┘ └──────────┘ └──────────────────────┘ │
└─────────────────────────────────────────────────────────┘
Tecnologías Integradas
StealthChop2™
StealthChop2 es la tecnología insignia de Trinamic para operación silenciosa de motores paso a paso.
Principios de Funcionamiento
- Modulación PWM Suave: Utiliza modulación de ancho de pulso con frecuencia variable para minimizar el ruido audible
- Control de Corriente Preciso: Mantiene la corriente en el motor con alta precisión mediante realimentación continua
- Frecuencia de Conmutación Optimizada: Opera a frecuencias que están fuera del rango audible humano (20kHz+)
Ventajas de StealthChop2
| Ventaja | Descripción |
|---|---|
| Silencio | Operación prácticamente inaudible (< 10 dB de ruido adicional) |
| Suavidad | Movimiento extremadamente suave incluso a bajas velocidades |
| Eficiencia | Bajo consumo de energía en operación a velocidad constante |
| Precisión | Posicionamiento preciso sin pérdida de pasos |
Configuración Recomendada
- Para velocidades bajas a medias, el modo StealthChop2 es el ideal
- Corriente: configurarla según las necesidades del motor
- Microstepping: entre 16 y 256 µsteps para obtener la máxima suavidad
SpreadCycle™
SpreadCycle es un controlador de ciclo de conmutación altamente dinámico diseñado para aplicaciones que requieren alto rendimiento.
Características
- Conmutación de Alta Frecuencia: Para respuesta rápida y control preciso
- Corriente Máxima: Optimizado para operar a corrientes más altas
- Dinámica Mejorada: Aceleración y desaceleración más rápidas
Casos de Uso
| Aplicación | Por qué SpreadCycle |
|---|---|
| Impresión 3D de alta velocidad | Respuesta rápida a cambios de dirección |
| Cortadoras CNC | Alto torque a velocidades elevadas |
| Robótica dinámica | Movimientos rápidos y precisos |
| Sistemas de posicionamiento | Aceleración máxima requerida |
StallGuard4™
StallGuard4 es una tecnología de detección de carga y parada sin sensores.
Funcionamiento
- Medición de la fuerza contraelectromotriz (FCEM): Monitorea la FCEM del motor para detectar cambios en la carga
- Detección de Parada: Identifica cuando el motor se detiene o encuentra resistencia excesiva
- Salida Digital: Señal DIAG que indica el estado de carga
Aplicaciones de StallGuard4
┌─────────────────────────────────────────────────────────┐
│ Aplicaciones StallGuard4 │
├─────────────────────────────────────────────────────────┤
│ • Homing sin fin de carrera físico │
│ • Detección de colisiones │
│ • Monitoreo de carga en tiempo real │
│ • Protección contra atascos │
│ • Conteo de piezas (detección de final de ciclo) │
└─────────────────────────────────────────────────────────┘
Configuración de Sensibilidad
La sensibilidad de StallGuard4 es configurable mediante UART:
- Valores bajos: mayor sensibilidad (detecta cargas más ligeras)
- Valores altos: menor sensibilidad (solo detecta cargas pesadas)
CoolStep™
CoolStep es un sistema de control de corriente inteligente que ajusta dinámicamente la corriente del motor según la carga real.
Beneficios
| Beneficio | Impacto |
|---|---|
| Ahorro de Energía | Hasta 75% de reducción en consumo |
| Menor Calentamiento | Reducción de temperatura del motor y driver |
| Mayor Vida Útil | Menor estrés térmico en componentes |
| Silencio | Menor corriente = menos ruido |
Principio de Operación
Carga Alta → Corriente Máxima → Máximo Torque
↓
Carga Media → Corriente Reducida → Torque Adecuado
↓
Carga Baja → Corriente Mínima → Ahorro Máximo
Modos de Operación
Modos de Conmutación
El TMC2209 soporta dos modos principales de conmutación:
| Modo | Descripción | Uso Recomendado |
|---|---|---|
| StealthChop2 | Operación silenciosa con PWM suave | Impresoras 3D, aplicaciones silenciosas |
| SpreadCycle | Conmutación dinámica de alto rendimiento | CNC, robótica de alta velocidad |
Modos de Microstepping
El TMC2209 soporta múltiples configuraciones de microstepping:
| Configuración | Pines MS2/MS1/MS0 | Microsteps por Paso |
|---|---|---|
| Full Step | 0/0/0 | 1 |
| 1/2 Step | 0/0/1 | 2 |
| 1/4 Step | 0/1/0 | 4 |
| 1/8 Step | 0/1/1 | 8 |
| 1/16 Step | 1/0/0 | 16 |
| 1/32 Step | 1/0/1 | 32 |
| 1/64 Step | 1/1/0 | 64 |
| 1/256 Step | 1/1/1 | 256 (MicroPlyer) |
Modos de Energía
| Modo | Descripción | Consumo |
|---|---|---|
| Operación Normal | Driver activo controlando motor | Según carga |
| Standby | Bajo consumo, configuración mantenida | < 100 µA |
| Power Down | Apagado completo | Mínimo |
| Automatic Power Down | Apagado automático cuando inactivo | Variable |
Configuración y Microstepping
Configuración mediante Pines
Los pines MS1, MS2 y MS3 permiten configurar el microstepping mediante hardware:
Conexión típica de pines MS:
VCC (5V)
│
┌┴┐
│ │ Resistor 10kΩ
└┬┘
│
├─── MS1 ───┐
├─── MS2 ───┤
└─── MS3 ───┘
GND (para desactivar)
Configuración mediante UART
La interfaz UART permite configuración más avanzada:
# Ejemplo de configuración UART (pseudo-código)
# Configuración del registro CHOPCONF - Configuración del chopper
CHOPCONF = {
'toff': 3, # Tiempo de apagado
'hstart': 0, # Inicio de la histéresis
'hend': 5, # Fin de la histéresis
'fd3': 0, # Fast decay time
'rndtf': 0, # Random TOFF
'chm': 0, # SpreadCycle mode (0=StealthChop)
'tbl': 1, # Blank time
'vhighfs': 0, # Fullstep en alta velocidad
'vhighchm': 0, # SpreadCycle en alta velocidad
'tpd2hyst': 0, # Inicio de la histéresis
'hend': 5, # Fin de la histéresis
'hdec': 0, # Decremento de la histéresis
}
Configuración de Corriente
La corriente del motor se configura mediante el pin VREF:
I RMS = VREF × 0.347 (para resistores internos)
Ejemplo:
VREF = 1.0V → I RMS = 0.347A
VREF = 2.0V → I RMS = 0.694A
VREF = 3.0V → I RMS = 1.041A
Para resistencias externas de detección:
I RMS = VREF / (8 × RSENSE)
Ejemplo con RSENSE = 0.11Ω:
VREF = 1.0V → I RMS = 1.14A
Interfaz UART
Características de la Interfaz UART
La interfaz UART del TMC2209 destaca por permitir la comunicación en un solo cable.
| Parámetro | Valor |
|---|---|
| Baud Rate | 9600, 19200, 38400, 57600, 115200 |
| Formato | 8N1 (8 bits, sin paridad, 1 stop) |
| Cableado | Un solo cable (RX/TX compartido) |
| Dirección | 4 direcciones posibles (0-3) |
Protocolo de Comunicación
┌─────────┬─────────┬─────────────┬─────────┬──────────┐
│ Address │ Register│ Data (4B) │ CRC │ Stop │
│ 2 bits │ 8 bits │ 32 bits │ 8 bits │ bit │
└─────────┴─────────┴─────────────┴─────────┴──────────┘
Registros Principales
| Registro | Dirección | Descripción | Acceso |
|---|---|---|---|
| GCONF | 0x00 | Configuración global | R/W |
| GSTAT | 0x01 | Estado global | R/W |
| IOIN | 0x06 | Estado de entradas | R |
| IHOLD_IRUN | 0x10 | Corriente de hold/run | R/W |
| TPOWERDOWN | 0x11 | Tiempo de power down | R/W |
| TSTEP | 0x12 | Tiempo entre pasos | R |
| TPWMTHRS | 0x13 | Umbral de velocidad PWM | R/W |
| VACTUAL | 0x22 | Velocidad actual | R/W |
| CHOPCONF | 0x6C | Configuración chopper | R/W |
| COOLCONF | 0x6D | Configuración CoolStep | R/W |
| STALLCONF | 0x6E | Configuración StallGuard | R/W |
| STALLGUARD | 0x6F | Valor StallGuard | R |
Ejemplo de Comunicación UART
# Ejemplo Python para comunicación UART con TMC2209
import serial
class TMC2209:
def __init__(self, port, address=0, baudrate=115200):
self.serial = serial.Serial(port, baudrate=baudrate)
self.address = address
def write_register(self, register, data):
"""Escribir en un registro"""
packet = self._build_packet(register, data, write=True)
self.serial.write(packet)
def read_register(self, register):
"""Leer un registro"""
packet = self._build_packet(register, 0, write=False)
self.serial.write(packet)
response = self.serial.read(12) # Respuesta completa
return self._parse_response(response)
def _build_packet(self, register, data, write=True):
# Construir paquete UART con CRC
pass
def _calculate_crc(self, data):
# Calcular CRC-8 para el paquete
pass
# Uso
driver = TMC2209('/dev/ttyUSB0', address=0)
driver.write_register(0x00, 0x00000000) # Reset GCONF
Protecciones y Diagnósticos
Protecciones Integradas
El TMC2209 incluye un conjunto completo de protecciones:
| Protección | Descripción | Acción |
|---|---|---|
| Over Temperature | Detección de sobrecalentamiento | Reducción de corriente / Shutdown |
| Over Voltage | Voltaje de alimentación excesivo | Shutdown |
| Under Voltage | Voltaje de alimentación bajo | Shutdown |
| Short Circuit | Cortocircuito en salidas | Shutdown inmediato |
| Open Load | Carga desconectada | Detección y alerta |
| Reverse Voltage | Polaridad inversa | Protección integrada |
Sistema de Diagnóstico
El registro GSTAT proporciona información de estado:
GSTAT Register (0x01):
┌───┬───┬───┬───┬───┬───┬───┬───┐
│ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ UV │ - Under Voltage
├───┼───┼───┼───┼───┼───┼───┼───┤
│ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ OV │ 0 │ - Over Voltage
├───┼───┼───┼───┼───┼───┼───┼───┤
│ 0 │ 0 │ 0 │ 0 │ 0 │ OT │ 0 │ 0 │ - Over Temperature
├───┼───┼───┼───┼───┼───┼───┼───┤
│ 0 │ 0 │ 0 │ 0 │ OTPW│ 0 │ 0 │ 0 │ - Temperature Warning
└───┴───┴───┴───┴───┴───┴───┴───┘
Registro IOIN
El registro IOIN proporciona el estado de todas las entradas:
IOIN Register (0x06):
- Estado de STEP, DIR, MS1, MS2, MS3
- Estado de UART
- Versión del chip
- Parte ID
Aplicaciones Típicas
Impresoras 3D
El TMC2209 es ampliamente utilizado en impresoras 3D debido a su operación silenciosa:
| Aplicación | Beneficio |
|---|---|
| Ejes X/Y/Z | Impresión silenciosa |
| Extrusor | Movimiento suave del filamento |
| Impresoras de escritorio | Ambiente de trabajo silencioso |
CNC y Máquinas de Control Numérico
| Aplicación | Beneficio |
|---|---|
| Cortadoras de plasma | uso de SpreadCycle para una mayor dinámica |
| Máquinas de grabado | Precisión con microstepping |
| Máquinas de corte | Control de carga con StallGuard |
Robótica
| Aplicación | Beneficio |
|---|---|
| Brazos robóticos | Movimiento preciso y suave |
| Robots móviles | Bajo consumo con CoolStep |
| Sistemas de posicionamiento | Detección de límites con StallGuard |
Automatización Industrial
| Aplicación | Beneficio |
|---|---|
| Máquinas de empaquetado | operación continua y silenciosa |
| Sistemas de alimentación | Control preciso de posición |
| Máquinas de ensamblaje | Detección de colisiones |
Dispositivos Médicos
| Aplicación | Beneficio |
|---|---|
| Bombas de infusión | Operación silenciosa en hospitales |
| Posicionadores quirúrgicos | Precisión extrema |
| Equipos de diagnóstico | Bajo nivel de ruido |
Comparativa con Otros Drivers
TMC2209 vs TMC2208
| Característica | TMC2208 | TMC2209 |
|---|---|---|
| Corriente Máxima | 1.2A RMS | 2.0A RMS |
| StallGuard | StallGuard2 | StallGuard4 (mejorado) |
| Interfaz UART | Sí | Sí (mejorada) |
| CoolStep | No | Sí |
| Voltaje Máximo | 28V | 29V |
| Mejoras | - | StallGuard4, CoolStep y mayor capacidad de corriente |
TMC2209 vs A4988
| Característica | A4988 | TMC2209 |
|---|---|---|
| Corriente Máxima | 2.0A (con enfriamiento) | 2.8A pico |
| Microstepping | Hasta 1/16 | Hasta 1/256 |
| Silencio | Ruidoso | Ultra silencioso |
| StallGuard | No | Sí |
| CoolStep | No | Sí |
| Interfaz UART | No | Sí |
| Voltaje Máximo | 35V | 29V |
| Protecciones | básicas | Completas |
TMC2209 vs DRV8825
| Característica | DRV8825 | TMC2209 |
|---|---|---|
| Corriente Máxima | 1.5A | 2.0A RMS |
| Microstepping | Hasta 1/32 | Hasta 1/256 |
| Silencio | Moderado | Ultra silencioso |
| StallGuard | No | Sí |
| CoolStep | No | Sí |
| Interfaz UART | No | Sí |
| Voltaje Máximo | 45V | 29V |
Tabla Comparativa Completa
| Driver | Corriente | Microstep | Silencio | StallGuard | CoolStep | UART | Precio |
|---|---|---|---|---|---|---|---|
| TMC2209 | 2.8A | 1/256 | ⭐⭐⭐⭐⭐ | Sí | Sí | Sí | Medio |
| TMC2208 | 2.0A | 1/256 | ⭐⭐⭐⭐⭐ | Sí | No | Sí | Bajo |
| A4988 | 2.0A | 1/16 | ⭐⭐ | No | No | No | Bajo |
| DRV8825 | 1.5A | 1/32 | ⭐⭐⭐ | No | No | No | Bajo |
| TMC5160 | 2.0A | 1/256 | ⭐⭐⭐⭐⭐ | Sí | Sí | Sí | Alto |
Guía de Implementación
Esquema de Conexión Básico
┌─────────────────────────────────────────────────────────────┐
│ Conexión TMC2209 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Arduino/Controlador TMC2209 Driver │
│ ┌─────────┐ ┌──────────────┐ │
│ │ 5V │─────────────────│ VIO │ │
│ │ GND │─────────────────│ GND │ │
│ │ 12-24V │─────────────────│ VM │ │
│ │ │ │ │ │
│ │ Digital│─────────────────│ STEP │ │
│ │ Pin │ │ │ │
│ │ │ │ │ │
│ │ Digital│─────────────────│ DIR │ │
│ │ Pin │ │ │ │
│ │ │ │ │ │
│ │ Analog │─────────────────│ VREF │ │
│ │ Pin │ │ │ │
│ │ │ │ │ │
│ │ GND │───┬─────┬───────│ MS1/MS2/MS3 │ │
│ │ 5V │───┴─────┴───────│ (según la configuración)│ │
│ └─────────┘ └──────────────┘ │
│ │ │
│ ├─── Motor Paso A Paso │
│ │ (2B1, 2B2, 2A1, 2A2) │
│ │ │
│ ┌─────────┐ │ │
│ │ UART │──────────────┤ UART_RX/TX │
│ │ TX/RX │ │ │
│ └─────────┘ └───────────────────────────────┘
│ │
└─────────────────────────────────────────────────────────────┘
Configuración de Corriente
Paso 1: Determinar la Corriente del Motor
Consulte las especificaciones de su motor paso a paso:
- Corriente nominal del motor: Ej. 1.5A
- Resistencia de la bobina: Ej. 1.2Ω
- Voltaje recomendado: Ej. 12V
Paso 2: Calcular VREF
Para resistores internos del TMC2209:
VREF = I_deseada × 2.88
Ejemplo para 1.5A:
VREF = 1.5 × 2.88 = 4.32V
Para resistores externos (RSENSE = 0.11Ω típico):
VREF = I_deseada × 8 × RSENSE
Ejemplo para 1.5A:
VREF = 1.5 × 8 × 0.11 = 1.32V
Paso 3: Ajustar VREF
Use un potenciómetro o fuente de voltaje ajustable para configurar VREF:
Conecte un multímetro entre VREF y GND
Ajuste el potenciómetro hasta obtener el voltaje calculado
Configuración de Microstepping
Configuración Hardware (Pines MS)
| Microstepping | MS1 | MS2 | MS3 |
|---|---|---|---|
| Full Step | GND | GND | GND |
| 1/2 Step | VCC | GND | GND |
| 1/4 Step | GND | VCC | GND |
| 1/8 Step | VCC | VCC | GND |
| 1/16 Step | GND | GND | VCC |
| 1/32 Step | VCC | GND | VCC |
| 1/64 Step | GND | VCC | VCC |
| 1/256 Step | VCC | VCC | VCC |
Configuración de UART
Conexión UART
Arduino/Controller TMC2209
┌──────────┐ ┌──────────┐
│ TX (Pin) │─────────│ UART │
│ RX (Pin) │─────────│ (mismo) │
│ GND │─────────│ GND │
└──────────┘ └──────────┘
Nota: El TMC2209 usa una interfaz UART de un solo cable. Conecte TX y RX del controlador al mismo pin UART del TMC2209.
Configuración de Baud Rate
El baud rate se configura mediante los pines de dirección:
- Address 0: 115200 baudios (por defecto)
- Address 1: 57600 baudios
- Address 2: 38400 baudios
- Address 3: 19200 baudios
Ejemplos de Código
Ejemplo Arduino - Control Básico STEP/DIR
// Ejemplo básico de control TMC2209 con Arduino
// Conexión: STEP -> Pin 2, DIR -> Pin 3
const int STEP_PIN = 2;
const int DIR_PIN = 3;
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
// Inicializar dirección
digitalWrite(DIR_PIN, LOW); // Dirección positiva
}
void loop() {
// Mover 200 pasos (una revolución completa en modo Full Step)
for (int i = 0; i < 200; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(500); // Controla la velocidad
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(500);
}
delay(1000); // Esperar 1 segundo
// Mover en dirección opuesta
digitalWrite(DIR_PIN, HIGH); // Dirección negativa
for (int i = 0; i < 200; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(500);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(500);
}
delay(1000);
}
Ejemplo Arduino - Control con AccelStepper
#include <AccelStepper.h>
// Configuración TMC2209 con AccelStepper
const int STEP_PIN = 2;
const int DIR_PIN = 3;
AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
void setup() {
// Configurar velocidad máxima
stepper.setMaxSpeed(1000); // pasos por segundo
// Configurar aceleración
stepper.setAcceleration(500); // pasos por segundo²
// Configurar velocidad inicial
stepper.setSpeed(100);
Serial.begin(9600);
Serial.println("TMC2209 Control con AccelStepper");
}
void loop() {
// Mover a posición absoluta
stepper.moveTo(200); // 200 pasos
// Mover hasta llegar a la posición
while (stepper.distanceToGo() != 0) {
stepper.run();
delay(1);
}
delay(1000);
// Mover en dirección opuesta
stepper.moveTo(0);
while (stepper.distanceToGo() != 0) {
stepper.run();
delay(1);
}
delay(1000);
}
Ejemplo Python - Comunicación UART
#!/usr/bin/env python3
"""
Ejemplo de comunicación UART con TMC2209 usando Python
Requiere: pip install pyserial
"""
import serial
import time
class TMC2209UART:
"""Clase para comunicación con TMC2209 vía UART"""
# Registros
GCONF = 0x00
GSTAT = 0x01
IOIN = 0x06
IHOLD_IRUN = 0x10
TPOWERDOWN = 0x11
TSTEP = 0x12
TPWMTHRS = 0x13
VACTUAL = 0x22
CHOPCONF = 0x6C
COOLCONF = 0x6D
STALLCONF = 0x6E
STALLGUARD = 0x6F
def __init__(self, port, address=0, baudrate=115200):
self.serial = serial.Serial(
port,
baudrate=baudrate,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
timeout=1
)
self.address = address
def _crc8(self, data):
"""Calcular CRC-8 para el paquete UART"""
crc = 0xFF
for byte in data:
crc ^= byte
for _ in range(8):
if crc & 0x80:
crc = (crc << 1) ^ 0x07
else:
crc <<= 1
return crc & 0xFF
def _build_packet(self, register, data, write=True):
"""Construir paquete UART"""
addr_bits = self.address << 6
rw_bit = 0x80 if write else 0x00
header = addr_bits | rw_bit | register
packet = bytes([header]) + data.to_bytes(4, 'big')
crc = self._crc8(packet)
return packet + bytes([crc]) + b'\x00' # Stop bit
def write_register(self, register, data):
"""Escribir en un registro"""
packet = self._build_packet(register, data, write=True)
self.serial.write(packet)
time.sleep(0.001) # Pequeña pausa
def read_register(self, register):
"""Leer un registro"""
packet = self._build_packet(register, 0, write=False)
self.serial.write(packet)
time.sleep(0.001)
response = self.serial.read(12)
if len(response) >= 8:
data = int.from_bytes(response[1:5], 'big')
return data
return None
def set_current(self, hold_current, run_current, standby_delay):
"""Configurar corrientes del motor"""
data = (hold_current << 8) | (run_current << 0)
self.write_register(self.IHOLD_IRUN, data)
# Configurar tiempo de standby
self.write_register(self.TPOWERDOWN, standby_delay)
def set_microstepping(self, msteps):
"""Configurar microstepping"""
# Configurar CHOPCONF para microstepping
chopconf = 0x00000000
chopconf |= (3 << 0) # toff = 3
chopconf |= (1 << 4) # tbl = 1
chopconf |= (0 << 7) # chm = 0 (StealthChop)
self.write_register(self.CHOPCONF, chopconf)
def enable_stallguard(self, sensitivity):
"""Habilitar StallGuard con sensibilidad configurada"""
stallconf = sensitivity & 0xFF
self.write_register(self.STALLCONF, stallconf)
def read_stallguard(self):
"""Leer valor de StallGuard"""
return self.read_register(self.STALLGUARD)
def get_ioin(self):
"""Leer estado de entradas"""
return self.read_register(self.IOIN)
def reset(self):
"""Reiniciar el controlador"""
self.write_register(self.GCONF, 0x00000000)
time.sleep(0.1)
# Ejemplo de uso
if __name__ == "__main__":
# Inicializar driver
driver = TMC2209UART('/dev/ttyUSB0', address=0)
# Configurar corriente (1.0A de mantenimiento, 1.5A de funcionamiento)
driver.set_current(hold_current=16, run_current=24, standby_delay=10)
# Configurar microstepping
driver.set_microstepping(256)
# Habilitar StallGuard
driver.enable_stallguard(sensitivity=100)
print("TMC2209 configurado exitosamente")
# Leer estado
ioin = driver.get_ioin()
print(f"IOIN: {hex(ioin)}")
# Leer StallGuard
stall = driver.read_stallguard()
print(f"StallGuard: {stall}")
Ejemplo - Detección de Homing con StallGuard
// Ejemplo de homing usando StallGuard4
// El motor se mueve hasta que detecta resistencia (fin de carrera)
const int STEP_PIN = 2;
const int DIR_PIN = 3;
const int DIAG_PIN = 4; // Pin de diagnóstico para StallGuard
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(DIAG_PIN, INPUT_PULLUP);
Serial.begin(9600);
Serial.println("Iniciando homing con StallGuard...");
// Configurar dirección de homing
digitalWrite(DIR_PIN, LOW);
}
void loop() {
// Mover motor lentamente hacia el home
for (int i = 0; i < 10000; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(1000); // Velocidad lenta
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(1000);
// Verificar si StallGuard detectó resistencia
if (digitalRead(DIAG_PIN) == LOW) {
Serial.println("StallGuard detectó fin de carrera!");
// Retroceder un poco para salir del límite
digitalWrite(DIR_PIN, HIGH);
for (int j = 0; j < 100; j++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(500);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(500);
}
Serial.println("Homing completado!");
break;
}
}
delay(5000); // Esperar antes de repetir
}
Consideraciones de Diseño
Disipación Térmica
El TMC2209 genera calor durante la operación. Considere las siguientes medidas:
Diseño de PCB
Recomendaciones para PCB:
1. Use una gran área de cobre conectada a GND
2. Conecte el heat slug del TMC2209 a un plano de tierra
3. Use múltiples vias para mejorar la disipación
4. Mantenga distancia de componentes sensibles al calor
Enfriamiento Activo
| Método | Aplicación |
|---|---|
| Disipador Pasivo | Corrientes hasta 1.5A |
| Ventilador Pequeño | Corrientes 1.5-2.0A |
| Enfriamiento Forzado | Corrientes máximas |
Ruido Electromagnético (EMI)
El TMC2209 minimiza EMI, pero considere:
Recomendaciones EMI:
1. Mantenga cables del motor cortos y trenzados
2. Use cables blindados para aplicaciones sensibles
3. Separe cables de motor de señales sensibles
4. Use filtros de ruido en la entrada de alimentación
Alimentación de Energía
Recomendaciones de Alimentación:
1. Use fuente de alimentación estable (ripple < 5%)
2. Añada condensadores de desacople cerca del driver
3. Use condensador de 100µF mínimo en VM
4. Considere condensador de 10µF en VIO
Protección de Entradas/Salidas
Protecciones Recomendadas:
1. Diodos de protección en entradas sensibles
2. Resistores en serie para limitar corriente
3. Filtros RC en líneas de control
4. Optoacopladores para aislamiento galvanico
Consideraciones de Montaje
| Consideración | Recomendación |
|---|---|
| Temperatura Ambiente | Mantener < 50°C para operación continua |
| Flujo de Aire | Asegurar ventilación adecuada |
| Distancia de Componentes | Mínimo 5mm de componentes sensibles |
| Montaje del Disipador | Usar pasta térmica para mejor transferencia |
Recursos y Documentación
Documentación Oficial
| Recurso | Descripción | Enlace |
|---|---|---|
| Datasheet | Especificaciones completas | TMC2209 Datasheet |
| Guía de Inicio Rápido | Configuración inicial | Analog Devices |
| Aplicación Notes | Notas de aplicación | AN-001, AN-047 |
Herramientas de Desarrollo
| Herramienta | Descripción |
|---|---|
| TMC2209-EVAL | Placa de evaluación oficial |
| TMC2209-BOB | Breakout Board para prototipos |
| TMC2209 Calculator | Hoja de cálculo para configuraciones |
Bibliotecas de Software
| Biblioteca | Plataforma | Descripción |
|---|---|---|
| TMC2209 Stepper | Arduino | Biblioteca para control STEP/DIR |
| Trinamic TMC2xx0 | Arduino | Biblioteca oficial Trinamic |
| pyTMC | Python | Biblioteca Python para UART |
| AccelStepper | Arduino | Control con aceleración |
Comunidades y Foros
| Comunidad | Plataforma |
|---|---|
| EngineerZone | ez.analog.com |
| GitHub | Repositorios oficiales Trinamic |
| RepRap Forum | Comunidad de impresoras 3D |
Resumen
El TMC2209 representa una de las mejores opciones disponibles para el control de motores paso a paso en aplicaciones que requieren:
- Operación ultra silenciosa (StealthChop2)
- Alto rendimiento dinámico (SpreadCycle)
- Detección de carga sin sensores (StallGuard4)
- Ahorro de energía inteligente (CoolStep)
- Configuración flexible (STEP/DIR + UART)
Con su amplio rango de voltaje (4.75-29V), capacidad de corriente hasta 2.8A, y microstepping hasta 1/256, el TMC2209 es ideal para una amplia gama de aplicaciones desde impresoras 3D hasta sistemas industriales de automatización.
Puntos Clave para Recordar
- Configure correctamente la corriente para evitar sobrecalentamiento
- Use StealthChop2 para aplicaciones silenciosas
- Aproveche StallGuard4 para homing sin sensores físicos
- Habilite CoolStep para ahorro de energía
- Proporcione adecuada disipación térmica para operación continua
- Use UART para configuración avanzada y diagnóstico
Preguntas Frecuentes
¿Cuál es la diferencia entre TMC2209 y TMC2209-V2?
La versión V2 incluye mejoras en la sensibilidad de StallGuard y optimizaciones en el algoritmo de CoolStep.
¿Puedo usar el TMC2209 con motores de 3.3V?
Sí, el TMC2209 soporta voltajes desde 4.75V, pero para motores de muy bajo voltaje considere usar un driver específico.
¿Cómo configuro el baud rate de UART?
La velocidad de baudios (baud rate) se configura mediante los pines de dirección (0-3), donde cada uno corresponde a una velocidad diferente.
¿El TMC2209 soporta motores de 4 hilos?
Sí, el TMC2209 está diseñado para motores paso a paso bipolares de 4 hilos (2 fases).
¿Puedo cambiar entre StealthChop y SpreadCycle dinámicamente?
Sí, puede cambiar entre modos mediante la interfaz UART según la velocidad de operación.
Este artículo fue creado con información de Analog Devices y la comunidad de desarrollo de Trinamic. Para información técnica detallada, consulte siempre el datasheet oficial.
