Así que escribí otro programa que puede ejecutar el motor paso a paso nema 34 con el controlador leadshine DM860 y este es el ejemplo de mi código:
import time
import pigpio
START_DELAY=580
FINAL_DELAY=480
STEP=1
GPIO=20
pi = pigpio.pi()
pi.set_mode(GPIO, pigpio.OUTPUT)
pi.set_mode(21, pigpio.OUTPUT)
pi.set_mode(26,pigpio.INPUT)
pi.set_mode(16,pigpio.INPUT)
#pi.write(21,1)
pi.wave_clear()
statee = 0
run = True
try:
while run == True:
pi.write(21,statee)
pi.wave_clear()
wf=[]
offset = pi.wave_get_micros()
for delay in range(START_DELAY, FINAL_DELAY, -STEP):
wf.append(pigpio.pulse(1<<GPIO, 0, delay))
wf.append(pigpio.pulse(0, 1<<GPIO, delay))
for i in range(500):
wf.append(pigpio.pulse(1<<GPIO, 0, FINAL_DELAY))
wf.append(pigpio.pulse(0, 1<<GPIO, FINAL_DELAY))
for delay in range(FINAL_DELAY, START_DELAY, STEP):
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()
#pi.wave_send_once(wid2)
pi.wave_send_using_mode(wid2, pigpio.WAVE_MODE_ONE_SHOT_SYNC)
if pi.read(26) == 0:
pi.wave_tx_stop()
run = False
if pi.read(16) == 0:
pi.wave_tx_stop()
run = False
time.sleep(0.7429)
if statee == 0:
statee = 1
elif statee == 1:
statee = 0
except KeyboardInterrupt:
print ("\nCtrl-C pressed. Stopping PIGPIO and exiting...")
pi.wave_tx_stop()
pi.stop()
Se ejecuta sin error de código, pero a veces el motor paso a paso cuando se mueve tiene un retraso largo aleatorio, incluso ya disminuyo el valor de START_DELAY
, FINAL_DELAY
y time.sleep()
(con el rango entre START_DELAY
y FINAL_DELAY
el valor es 100 y el valor time.sleep()
depende de la suavidad del movimiento).
Cuando uso el valor de START_DELAY
, FINAL_DELAY
y time.sleep()
como el código de ejemplo (la velocidad más baja) en algún momento, la Raspberry Pi recibió un corte de energía (el motor paso a paso deja de moverse y el monitor LCD muestra la pantalla en blanco con el texto 'no señal'). Entonces, ¿es realmente el problema de mi código? Ya actualicé pigpiod a v68.
Así es como está cableado:
Usocablesdepuente(usandomachoamachoyhembraahembra,porquenotengocablesdepuentemachoahembra)entreelcontroladoralaframbuesapi3ylaconexiónentreDIRyPULconuncabledecobrecomún.
Esteeselresultadodelamodulacióndeanchodepulsoqueverificousandopiscope:
EspecificacióndelmotorpasoapasobipolarNEMA34:
- Parderetención5.9Nm
- Ánguloescalonado1.8°
- Resistencia/fase0.33±10%Ω
- Inductancia/fase3.00±20%mH
- Cargamáximaaxial65N
- Cargamáximaradial200N
DM860 leadshine con una corriente de salida de 1.0 - 7.2A y una tensión de entrada de 24 - 80 VDC. Tengo el controlador configurado con una fuente de alimentación de 24V.
Esta es la configuración actual del controlador y pulso / revoluciones: