Echtzeit-KI zur Drehzahl- und Positionsschätzung in der feldorientierten Motorregelung (FOC)

Das Hauptziel dieser Masterarbeit war:

  • Die Entwicklung eines neuronalen Netzes auf einer PRU. Dieses Netz schätzt die Position und Drehzahl des Rotors mit Hilfe von Strom- und Spannungsdaten in einer FOC
  • Die Analyse der Leistung des neuronalen Netzes. Dabei wurden die Genauigkeit und die Reaktionszeit mit einem Hardware-Encoder verglichen

Testaufbau und Datenerfassung

  • Ein Nanotec DB42S03 (ein 3-Phasen BLDC-Motor mit 4 Polpaaren) wurde verwendet
  • Ein BP-AM2BLDCSERVO Booster-Pack diente zur Motorsteuerung
  • Ein Inkrementalgeber mit 4000 Teilstrichen wurde zur Messung der Rotorposition genutzt
  • Der R5F-Kern des AM243 LP speichert die Werte $V_\alpha, V_\beta, I_\alpha, I_\beta$ im MSRAM
  • Insgesamt wurden 32.768 Einträge pro Variable im float32_t Format (4 Bytes) gespeichert

Netzwerk zur Positionsschätzung

  • Es wurde ein voll vernetztes „Feed-forward“-Netzwerk mit 32 Eingängen, 24 versteckten Neuronen und 2 Ausgängen trainiert.
  • 70 % der Daten wurden für das Training und die restlichen 30 % zum Testen des Modells verwendet.
  • ReLU wurde als Aktivierungsfunktion für die versteckten Schichten genutzt.
  • Sinus und Kosinus des Rotorwinkels werden in der letzten Schicht vorhergesagt (Aktivierungsfunktion: Tanh).
  • Ein vorzeitiger Abbruch (Early Stopping) wurde implementiert, um das Training zu stoppen, wenn sich der MSE-Fehler nicht mehr verbessert.
  • Die Gewichte und Bias-Werte des trainierten Modells wurden in das Fixed-Point Q24-Format umgewandelt:
    • Bit (MSB): Vorzeichen (Sign)
    • 7 Bits: Ganzzahl (Integer).
    • Die letzten 24 Bits: Dezimalteil.

Training results

  • Das finale Modell erreichte einen mittleren quadratischen Fehler (MSE) von 0,00013, was eine sehr hohe Genauigkeit bedeutet.
  • Das gesamte Training dauerte 52 Minuten über 2000 Epochen

Implementierung auf der PRU

  • Gewichte und Bias-Werte werden in das Broadside RAM (BS RAM) geladen
  • Das Industrial Ethernet Peripheral (IEP) CMP4 wird verwendet, um den Task-Manager alle 62,5 $\mu$s zu starten, um die Motorsteuerung zu synchronisieren, die ebenfalls durch dasselbe IEP ausgelöst wird
  • Bei jedem Funktionsaufruf werden die Eingangsdaten in die PRU-Register geladen
  • Jeder Eingang wird dann zusammen mit seinen Gewichten in die MAC-Register geladen
  • Für ein einzelnes Neuron mit 32 Eingängen benötigt die PRU 435 Zyklen
  • Die Tanh-Lookup-Tabelle (LUT) für die letzte Schicht benötigt 25 Zyklen
  • Insgesamt benötigt die PRU 11.462 Zyklen (34,4 $\mu$s)

Ergebnisse (Results)

  • Vom Leerlauf im „Open Loop“ bis zum „Closed Loop“ beträgt der maximale Fehler 4,51 Grad (elektrisch)
  • Der Motor startet im „Open Loop“ bei 500 U/min und schaltet nach 625 Millisekunden in den „Closed Loop“
  • Während des Experiments läuft der Motor stabil bei 500 U/min

Einschränkungen (Limitations)

  • Die Datenerfassung ist ein zeitaufwendiger Prozess.
  • Fehler bei der Winkelschätzung können zu Ungenauigkeiten bei der Drehzahlschätzung führen, da die Drehzahl als Ableitung des Winkels berechnet wird.
  • Für unterschiedliche Lasten (Belastungen) wird ein jeweils anderes neuronales Netz benötigt.

Fazit (Conclusion)

  • Entwicklung und Training verschiedener neuronaler Netzarchitekturen mit Python (PyTorch), speziell zur Schätzung von Motordrehzahl und Rotorposition.
  • Erreichen einer Genauigkeit von über 95 % sowohl im „Open-Loop“ als auch im „Closed-Loop“ für die Schätzung von Winkel und Drehzahl.
  • Erfolgreiche Implementierung der trainierten Modelle auf dem 32-Bit RISC-Kern (PRU) mittels Assembly-Sprache.
  • Optimierung der Ausführung des neuronalen Netzes durch Nutzung von schnellen Broadside-Speichern und Datenbeschleunigern auf dem PRU-Kern.
  • Einstellung von PI- und PID-Reglern für die präzise Steuerung von Motorströmen und Drehzahlen in einem 3-Phasen-BLDC-Motorsystem.