Erhöhen Sie die Leistung des Hochlauf-Schrittmotors

Ich fahre einen bipolaren NEMA34-Schrittmotor mit den folgenden Spezifikationen:

  1. Haltemoment 5,9 Nm
  2. Schrittwinkel 1,8°
  3. Widerstand / Phase 0,33 ± 10 % Ω
  4. Induktivität / Phase 3,00 ± 20 % mH
  5. Max. Belastung axial 65 N
  6. Maximale Belastung radial 200 N

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_DELAYverliert 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

Geben Sie hier die Bildbeschreibung ein

SW1 = ein SW2 = ein SW3 = ein

Es kann nicht sein, dass etwas mit Ihrem Code nicht stimmt! Bei hohen Geschwindigkeiten entwickeln Schrittmotoren eine Instabilität und verlieren den Gleichlauf. Bei einigen Drehzahlen wird jeder Fahrer nicht in der Lage sein, die Ströme aufrechtzuerhalten, die er bei niedrigen Geschwindigkeiten hat. Da fängt der Ärger an.....
@ whitegreg56 was soll ich dann tun, damit sich mein Schrittmotor mit 3000 U / min bewegen kann
Wie sind deine Schaltereinstellungen?
@whitegreg56 Aktuelle Tabelle wechseln SW1 = aus SW2 = aus SW3 = aus
Auf Ihrem Foto sieht es für mich so aus, als wären SW1, SW2, SW3 eingeschaltet!
@ whitegreg56 ah, tut mir leid, ich entschuldige mich für die falsche Ansicht. also SW1 = an SW2 = an SW3 = an, aber welche dynamische Stromeinstellung sollte ich wählen? Ist die von mir gewählte dynamische Stromeinstellung korrekt?

Antworten (2)

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:

charakteristische Kurve

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.