Skip to content

Probar la rampa de aceleracion de los steppers (perdida de pasos) #19

Description

@mmggjj

Contexto

Los motores paso a paso de elevación pierden pasos al subir las orugas. La
sospecha inicial era falta de par, pero los números dicen que no:

Motor 57HS112 Driver DM542
Corriente 4.2 A nominal 0.5–4.2 A programable
Par 3.1–3.2 N·m —

El DM542 ya cubre la corriente nominal completa del motor, así que un driver
más grande (DM556, DM860) no aportaría par: solo permitiría inyectar más
corriente de la que el motor aguanta. Y con la reductora NMRV030 1:80 hay
~110 N·m en el eje de salida contando el ~45 % de rendimiento del husillo, que
es de sobra para levantar un brazo.

O sea: no es falta de fuerza, es dinámica de arranque.

Qué se ha encontrado en el firmware

Dos causas, las dos en el arranque del movimiento:

  1. No había rampa de aceleración. steppers_comando() activaba el motor y
    la ISR empezaba inmediatamente a 417 pasos/s. Con la inercia del brazo
    reflejada a través del 1:80, pedir velocidad plena desde parado es la causa
    de manual de que un paso a paso se cale.
  2. El pin DIR se reescribía en cada ciclo de control (100 Hz), de forma
    asíncrona a los pulsos. Si esa escritura cae justo en un flanco de STEP, el
    DM542 puede dar un paso hacia el lado contrario. El DM542 pide DIR estable
    antes del pulso.

Qué se ha cambiado (commit 52bf987)

  • El temporizador pasa a un tick fijo (TICK_ISR_US = 50 µs) y cada motor
    cuenta ticks hasta su propio semiperiodo, así que los cuatro pueden ir a
    velocidades distintas con un solo timer.
  • Cada motor arranca a SEMIPERIODO_ARRANQUE_US (4800 µs) y acelera hasta
    SEMIPERIODO_STEP_US (1200 µs) restando RAMPA_DECREMENTO_TICKS por pulso:
    unos 0.2 s de rampa.
  • DIR solo se escribe al arrancar o al invertir, con 10 µs de margen antes del
    primer pulso. La rampa se rearma en cada cambio de sentido.
  • test_steppers gana el comando r para activar y desactivar la rampa,
    para poder comparar A/B con el mismo motor.

Estado: sin verificar en hardware. Compila y pasa los tests de lógica
(66/66), pero el efecto sobre la pérdida de pasos está por medir.

Qué hay que probar

⚠️ Robot sobre tacos. Esta prueba mueve motores.

1. Comparación A/B de la rampa

arduino-cli compile --fqbn esp32:esp32:esp32doit-devkit-v1 test/target/test_steppers
arduino-cli upload -p COMx --fqbn esp32:esp32:esp32doit-devkit-v1 test/target/test_steppers

Monitor serie a 115200. Para cada motor (1..4):

  1. a para armar, y elegir el motor con 1/2/3/4
  2. n → poner 2000 pasos (un movimiento largo, que es donde se nota)
  3. r hasta que diga DESACTIVADA → + → anotar el ángulo que recorre
  4. r hasta que diga ACTIVADA → - para volver al punto de partida, y
    luego + otra vez → anotar el ángulo
  5. Repetir un par de veces cada uno

El sketch ya imprime el ángulo del encoder antes y después, así que la
pérdida de pasos se ve en la diferencia
: si con el mismo número de pasos
recorre más grados con la rampa, es que sin ella los estaba perdiendo.

Motor Grados SIN rampa Grados CON rampa ¿Mejora?
FR
FL
RR
RL

2. Comprobaciones de hardware (gratis, y pueden ser la mitad del problema)

  • DIP de corriente del DM542: ¿están puestos a 4.2 A? Si están más
    abajo, se está regalando par. Son los 3 primeros interruptores.
  • Tensión de alimentación de los drivers: el DM542 admite hasta 50 V.
    Si está a 24 V, subir a 48 V da bastante más par en movimiento.
  • Micropasos: ahora son 400 pasos/vuelta (medio paso), que es basto y
    hace resonar el motor. Subir a 1600 suavizaría mucho, pero requiere
    ajustar SEMIPERIODO_STEP_US para mantener la velocidad.

3. Firmware completo

Cuando el A/B salga bien, probar con el firmware real (starcrawler_esp32_basico)
en los modos 3 y 4, que es donde el usuario mueve las orugas de verdad.

Qué reportar aquí

  • La tabla de arriba rellena
  • Si la rampa de 0.2 s se nota lenta al manejar (se ajusta con
    RAMPA_DECREMENTO_TICKS en config.h: más grande = rampa más corta)
  • Posición de los DIP y tensión medida

Si aun así pierde pasos

Entonces sí está justificado el hardware, pero de lazo cerrado, no más
potencia
: lleva encoder en el motor y corrige los pasos perdidos.

Ojo: necesitan motor con encoder, así que se compran en kit. Los de lazo
cerrado suelen ser más largos que el 57HS112 (112 mm): medir el hueco antes
de comprar
.

Notas

Activity

  1. mmggjj commented on Sep 19, 2026

    @mmggjj
    CollaboratorAuthor

    Revisión del diagnóstico: el par disponible está muy por debajo del nominal

    Observación nueva en banco: aplicando carga manual moderada el motor pierde
    sincronismo
    , acompañado de vibración acústica durante el movimiento.

    Ese comportamiento no es compatible con un problema de perfil de aceleración.
    Par teórico disponible en el eje de salida:

    3.1 N·m (57HS112 a 4.2 A) × 80 (NMRV030) × ~0.45 (rendimiento del husillo)
    ≈ 110 N·m

    Equivalente a ~37 kg de fuerza a 30 cm del eje.

    Si una carga manual provoca pérdida de sincronismo, el par efectivo es un orden
    de magnitud inferior al nominal. La rampa de aceleración sigue siendo necesaria
    —el arranque escalón era un defecto real— pero no explica esta observación.

    Nuevo procedimiento: test/target/test_par_stepper (commit 0eca362)

    Adaptado a la configuración disponible en banco: un único motor, sin encoder.
    El procedimiento A/B descrito en la issue no es aplicable, ya que se apoyaba en
    la medida angular del AS5600.

    Ensayo 1 — r, par de retención (ejecutar primero)

    Excita el motor en reposo, sin tren de pulsos, durante 15 s. Se aplica par
    resistente manual sobre el brazo.

    Es el ensayo discriminante: separa las dos familias de causa en una sola medida.

    Resultado Interpretación
    No se consigue desplazar el eje Hay par disponible → la causa es dinámica → ensayo 2
    El eje cede con carga manual No se está entregando corriente al motor → causa eléctrica → ver d

    Ensayo 2 — v, barrido de velocidad

    Secuencia de 25, 50, 100, 200, 417, 800 y 1602 pasos/s, 4 s por escalón,
    aplicando carga manual en cada uno.

    • Par adecuado en unos escalones e insuficiente en otros, con incremento de
      vibración en los escalones deficientes → resonancia de banda media,
      habitual en medio paso. Corrección: aumentar la resolución de micropaso
      (SW5–SW8) de 400 a 1600 pasos/vuelta y reajustar SEMIPERIODO_STEP_US en
      config.h para conservar la velocidad angular del brazo.
    • Par insuficiente en todos los escalones → causa eléctrica (corriente de
      fase o conexionado).

    Registrar en qué escalones el motor mantiene el sincronismo y en cuáles no.

    Ensayo 3 — i, ida y vuelta

    N pasos en un sentido y N en sentido contrario, 5 ciclos, contra una referencia
    física (marca en brazo y chasis). Sin pérdida de pasos el eje retorna siempre a
    la referencia; la desviación acumulada cuantifica los pasos perdidos. Permite
    medir sin encoder.

    Verificación previa: configuración del DM542

    El comando d imprime la tabla. Se reproduce aquí por ser la comprobación de
    mayor rendimiento inmediato:

    SW1 SW2 SW3 Corriente de pico / reposo
    ON ON ON 1.00 A / 0.71
    OFF ON ON 1.46 A / 1.04
    ON OFF ON 1.91 A / 1.36
    OFF OFF ON 2.37 A / 1.69
    ON ON OFF 2.84 A / 2.03
    OFF ON OFF 3.31 A / 2.36
    ON OFF OFF 3.76 A / 2.69
    OFF OFF OFF 4.20 A / 3.00 (máximo)

    El 57HS112 tiene una corriente nominal de 4.2 A, por lo que la configuración
    correcta es SW1–SW3 en OFF. Cualquier otra posición limita el par disponible
    y podría explicar por sí sola el comportamiento observado.

    SW4 fija la corriente en reposo: OFF = 50 % de la dinámica (valor por defecto),
    ON = 100 %. Si el brazo cede al detener el movimiento, conviene ponerlo en ON,
    asumiendo mayor disipación térmica.

    Verificaciones adicionales si el par de retención resulta insuficiente

    1. Emparejamiento de fases. Los cuatro conductores del motor corresponden a
      dos bobinados (A+/A− y B+/B−). Un emparejamiento incorrecto produce vibración
      y una reducción drástica del par, compatible con lo observado. Con el motor
      desconectado, verificar con polímetro: los conductores de un mismo bobinado
      presentan unos pocos ohmios entre sí y circuito abierto frente a los del otro.
    2. Tensión de alimentación. Rango admisible del DM542: 20–50 V. A mayor
      tensión, mayor par disponible en movimiento. Medir en bornes del driver.
    3. Capacidad de la fuente. 4.2 A por motor. Una fuente limitada en corriente
      impide alcanzar el par nominal aunque la configuración de DIP sea correcta.

    Datos a registrar

    • Ensayo 1: ¿cede el eje con carga manual? SÍ / NO (dato prioritario)
    • Ensayo 2: escalones de velocidad en los que mantiene y pierde sincronismo
    • Posición de SW1–SW4 y de la resolución de micropaso (SW5–SW8)
    • Tensión medida en bornes del driver
    • Ensayo 3: desviación acumulada tras 5 ciclos

    Con esos datos se podrá determinar si procede reconfigurar los DIP, revisar el
    conexionado de fases, aumentar la resolución de micropaso, o evaluar una
    solución de lazo cerrado.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions