Aumentar el rendimiento del motor paso a paso de rampa

Conduzco un motor paso a paso bipolar NEMA34 con las siguientes especificaciones:

  1. Par de retención 5,9 Nm
  2. Ángulo de paso 1,8°
  3. Resistencia/fase 0,33±10% Ω
  4. Inductancia/fase 3,00±20% mH
  5. Carga máxima axial 65 N
  6. Carga máxima radial 200 N

https://www.igus.com/info/drive-technology-nema-34-ca

Está siendo conducido por un plomo DM860 con una corriente de salida de 1.0 - 7.2A y un voltaje de entrada de 24 - 80 VDC ( http://www.sah.co.rs/media/sah/techdocs/dm860h_manual.pdf ) . Tengo el driver configurado con fuente de alimentación de 24V, conector de señal de control de señales PNP y usando un micropaso de 4 (800 pulsos/rev). Traté de crear un código con rampa ascendente y descendente siguiendo este ejemplo (respuesta de joan) https://raspberrypi.stackexchange.com/questions/26216/how-to-generate-smooth-frequency-ramp

Este es un ejemplo de mi código:

import time

import pigpio

def working(longLoop):
    START_DELAY=500
    FINAL_DELAY=155

    GPIO=20
    dirrection = 21

    pi = pigpio.pi()

    pi.set_mode(GPIO, pigpio.OUTPUT)

    pi.wave_clear()

    pi.write(dirrection,1)
    # build initial ramp

    wf=[]

    for delay in range(START_DELAY, FINAL_DELAY, -1):
       wf.append(pigpio.pulse(1<<GPIO, 0,       delay))
       wf.append(pigpio.pulse(0,       1<<GPIO, delay))

    pi.wave_add_generic(wf)

    # add lots of pulses at final rate to give timing lee-way

    wf=[]

    # add after existing pulses

    offset = pi.wave_get_micros()

    print("ramp is {} micros".format(offset))

    wf.append(pigpio.pulse(0, 0, offset))

    for i in range(100):
       wf.append(pigpio.pulse(1<<GPIO, 0,       FINAL_DELAY))
       wf.append(pigpio.pulse(0,       1<<GPIO, FINAL_DELAY))

    pi.wave_add_generic(wf)

    wid1 = pi.wave_create()

    # short waveform to repeat final speed

    wf=[]

    wf.append(pigpio.pulse(1<<GPIO, 0,       FINAL_DELAY))
    wf.append(pigpio.pulse(0,       1<<GPIO, FINAL_DELAY))

    pi.wave_add_generic(wf)

    wid0 = pi.wave_create()

    #ramp down

    wf=[]

    for delay in range(FINAL_DELAY,START_DELAY):
       wf.append(pigpio.pulse(1<<GPIO, 0,       delay))
       wf.append(pigpio.pulse(0,       1<<GPIO, delay))

    pi.wave_add_generic(wf)

    wid2 = pi.wave_create()

    # send ramp, stop when final rate reached

    pi.wave_send_once(wid1)

    time.sleep(float(offset)/1000000.0) # make sure it's a float

    pi.wave_send_repeat(wid0)

    time.sleep(longLoop)

    pi.wave_send_once(wid2)

    pi.wave_tx_stop()

    pi.stop()

working(1)

El problema es que, con mi código, el motor paso a paso no puede moverse alrededor de 2000 rpm (mi motor paso a paso se mueve a menos de 2000 rpm). Si configuro un FINAL_DELAYvalor inferior a 155, el motor paso a paso perdería el movimiento de paso y comenzaría a vibrar. Entonces, ¿cuál es el problema en mi código? ¡Gracias!

así que esta es la configuración de mi interruptor

ingrese la descripción de la imagen aquí

SW1 = encendido SW2 = encendido SW3 = encendido

¡Puede que no haya ningún problema con tu código! A altas velocidades, los motores paso a paso desarrollan inestabilidad y pierden sincronismo. A algunas RPM, todos los conductores no podrán mantener las corrientes que mantienen a bajas velocidades. Ahi es cuando empieza el problema.....
@ whitegreg56, entonces, ¿qué debo hacer para que mi motor paso a paso pueda moverse a 3000 RPM?
¿Cuáles son los ajustes de su interruptor?
@whitegreg56 cambie la tabla actual SW1 = apagado SW2 = apagado SW3 = apagado
¡Según su foto, me parece que SW1, SW2, SW3 están ENCENDIDOS!
@ whitegreg56 ah, lo siento, pido disculpas por la vista incorrecta. entonces SW1 = encendido SW2 = encendido SW3 = encendido pero, ¿qué configuración de corriente dinámica debo elegir? ¿La configuración de corriente dinámica que elijo es correcta?

Respuestas (2)

El factor que controla la estabilidad del motor paso a paso a alta velocidad es la resistencia efectiva vista por la fuerza contraelectromotriz que mira hacia afuera del motor y hacia el controlador. Cuando el controlador está "activo", la resistencia mirando hacia atrás será grande... y el motor estable. Al seleccionar la corriente mínima, el controlador permanecerá "activo" a velocidades más altas que si se seleccionara una corriente mayor (¡ya ha seleccionado la corriente mínima!).

La otra cosa que PODRÍA ayudar es aumentar los pulsos por revolución a 1600. Luego, el controlador tiene un breve tiempo para volverse "activo" a medida que la corriente cruza cerca de cero. Esto no ocurriría si el conductor estuviera pisando a fondo... y, entonces, el motor sería inestable.

Si esto no funciona, es posible que deba aumentar el voltaje de suministro, como se indica en la primera respuesta.

Un motor paso a paso giratorio actúa como un alternador; un voltaje cuya magnitud es proporcional a las RPM (llamada fuerza electromotriz inversa o EMF inversa) se induce en los devanados. El controlador tiene que generar más voltaje cuanto más rápido gira el motor para superar este EMF inverso, o la corriente disminuirá.

El par es directamente proporcional a la corriente, por lo que eventualmente el motor alcanza una velocidad máxima donde el par generado es menor que el par de carga y se pierde la sincronización:

curva característica

Es posible que deba aumentar aún más el voltaje de suministro al controlador para ir más rápido. El motor está clasificado para hasta 60 V.