Conduzco un motor paso a paso bipolar NEMA34 con las siguientes especificaciones:
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_DELAY
valor 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
SW1 = encendido SW2 = encendido SW3 = encendido
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:
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.
blancogreg56
sebastián
blancogreg56
sebastián
blancogreg56
sebastián