Ich fahre einen bipolaren NEMA34-Schrittmotor mit den folgenden Spezifikationen:
https://www.igus.com/info/drive-technology-nema-34-ca
Es wird von einem DM860 Leadshine mit einem Ausgangsstrom von 1,0 - 7,2 A und einer Eingangsspannung von 24 - 80 VDC betrieben ( http://www.sah.co.rs/media/sah/techdocs/dm860h_manual.pdf ) . Ich habe den Treiber mit 24-V-Stromversorgung, PNP-Signalen, Steuersignalanschluss und Verwendung eines Mikroschritts von 4 (800 Impulse / Umdrehung) konfiguriert. Ich habe versucht, einen Code mit Ramp Up und Ramp Down zu erstellen, indem ich diesem Beispiel (Antwort von Joan) https://raspberrypi.stackexchange.com/questions/26216/how-to-generate-smooth-frequency-ramp gefolgt bin
Dies ist ein Beispiel für meinen Code:
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)
Das Problem ist, dass sich der Schrittmotor mit meinem Code nicht um 2000 U / min bewegen kann (mein Schrittmotor bewegt sich niedriger als 2000 U / min). Wenn ich den niedrigeren Wert als 155 einstelle, FINAL_DELAY
verliert der Schrittmotor die Schrittbewegung und beginnt zu vibrieren. Also, was ist das Problem in meinem Code? Danke schön!
Das ist also mein Switch-Setup
SW1 = ein SW2 = ein SW3 = ein
Der Faktor, der die Stabilität des Schrittmotors bei hoher Geschwindigkeit steuert, ist der effektive Widerstand, den die Gegen-EMK sieht, die aus dem Motor heraus und zurück in den Treiber blickt. Wenn der Treiber "aktiv" ist, ist der Widerstand, der in ihn zurückblickt, groß ... und der Motor stabil. Durch die Auswahl des Mindeststroms bleibt der Treiber bei höheren Geschwindigkeiten "aktiv", als wenn ein größerer Strom ausgewählt wurde (Sie haben den Mindeststrom bereits ausgewählt!).
Die andere Sache, die helfen KÖNNTE, ist, die Impulse pro Umdrehung auf 1600 zu erhöhen. Dann hat der Fahrer eine kurze Zeit, um "aktiv" zu werden, wenn der Strom nahe Null geht. Dies würde nicht stattfinden, wenn der Fahrer Vollschritt machen würde ... und dann wäre der Motor instabil.
Wenn dies nicht funktioniert, müssen Sie möglicherweise die Versorgungsspannung erhöhen, wie in der ersten Antwort angegeben.
Ein sich drehender Schrittmotor fungiert als Lichtmaschine; In den Wicklungen wird eine Spannung induziert, deren Größe proportional zur Drehzahl ist (als elektromotorische Gegenkraft oder Gegen-EMK bezeichnet). Der Treiber muss mehr Spannung ausgeben, je schneller sich der Motor dreht, um diese Gegen-EMK zu überwinden, oder der Strom nimmt ab.
Das Drehmoment ist direkt proportional zum Strom, sodass der Motor schließlich eine maximale Drehzahl erreicht, bei der das erzeugte Drehmoment geringer als das Lastdrehmoment ist und die Synchronisierung verloren geht:
Möglicherweise müssen Sie die Versorgungsspannung für den Treiber weiter erhöhen, um schneller zu werden. Der Motor ist für bis zu 60 V ausgelegt.
whitegreg56
Jan Sebastian
whitegreg56
Jan Sebastian
whitegreg56
Jan Sebastian