Estoy conduciendo un motor paso a paso bipolar NEMA34 con las siguientes especificaciones:
- Par de retención 5.9 Nm
- Ángulo escalonado 1.8 °
- Resistencia / fase 0.33 ± 10% Ω
- Inductancia / fase 3.00 ± 20% mH
- Carga máxima axial 65 N
- Carga máxima radial 200 N
Está siendo impulsado por un plomo DM860 con una corriente de salida de 1.0 - 7.2A, y un voltaje de entrada de 24 - 80 VDC ( enlace ). Tengo el controlador configurado con una fuente de alimentación de 24 V, el conector de señal de control de señales PNP y el uso de un microstep de 4 (800 pulsos / rev). Intenté crear un código con ramp up y ramp down siguiendo este ejemplo (joan answer) enlace
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 por debajo de 2000 rpm). Si configuro FINAL_DELAY
más bajo que 155, el motor paso a paso perdería el movimiento de paso y comenzará a vibrar. Entonces, ¿cuál es el problema en mi código? ¡Gracias!
así que esta es la configuración de mi interruptor
SW1 = on SW2 = on SW3 = on