So führen Sie eine Stromregelung für einen Gleichstrommotor mit PWM durch

Wir versuchen, ein Ausgleichssystem (mit einem Reaktionsrad) mit Strom- und Winkel-PID-Steuerung herzustellen.

Die gesamte Schaltung besteht aus einem Gleichstrommotor, einer Stromversorgung, einem Stromsensor und einer MPU6050 (für Winkel). Der Prozess des Systems besteht darin, dass die Winkel-PID-Steuerung die Menge des erforderlichen Stroms (in Form des Arbeitszyklus für PWM in einem Arduino) bestimmt und die Strom-PID-Steuerung weiterleitet, um die Menge des erforderlichen Drehmoments zu erzeugen (um zu verhindern, dass es über- Strom).

Ich habe Teile des gesamten Systems in Simulink und Matlab simuliert, aber die Implementierung ist wichtig.

Geben Sie hier die Bildbeschreibung ein

Jetzt arbeite ich am aktuellen Teil. Zuerst habe ich einen Stromsensor (INA260) in der + Leitung des DC-Motors installiert, aber das Problem ist, dass die Stromdaten kontinuierlich sein sollten. Der Motor wird durch PWM im Motortreiber gesteuert und daher haben die Daten aufgrund der PWM-Signale viel Rauschen (ich habe es durch Plotten auf einem PC überprüft).

Ich habe zuvor einen analogen ACS758-Stromsensor verwendet, aber auch damals konnte ich dieses Problem nicht lösen. Soweit ich weiß, könnte die Verwendung von Filtern für das aktuelle Signal zu einer gewissen Verzögerung im System führen, aber ich kenne keinen guten Weg, um Daten ohne Filter zusammenzubringen.

Und wie kann ich eine aktuelle PI-Regelung durchführen? Gibt es dafür eine gute Lösung?

Geben Sie hier die Bildbeschreibung ein

  • PWM-Einstellung = 3000 Hz
  • MCU = Arduino Uno
  • MPU6050 (Winkelsensor)
  • MD30C (Motortreiber)
  • SPG300 (300-W-Gleichstrommotor)
  • INA260 (Stromsensor/Nebenwiderstand basierend/I2C/bis 15 A)
  • ACS758 (Stromsensor/Hallsensor/analog/bis 15 A))

Gesammeltes Stromsignal:

Geben Sie hier die Bildbeschreibung ein

Ihr INA kann nicht einmal 1000 Samples pro Sekunde ausführen. Finden Sie heraus, wie viele es tun kann, dann haben Sie ein ungefähres Ziel für Ihren Filter. Selbst bei "nur" 3k sollten Sie genügend Zeit zum Filtern haben, ohne die Abtastrate zu senken oder nutzbare Informationen zu verwischen.

Antworten (2)

Dies ist eine ein Jahr alte Frage, und wir haben noch keine Antwort vom OP gehört, aber ich dachte, ich könnte einige Vorschläge machen, falls jemand anderes ein ähnliches Problem hat.

Sie können Rauschen im Stromsignal effektiv eliminieren, indem Sie es direkt nach dem Einschalten des PWM-Signals abtasten. Zumindest sollte dies einen konsistenten Messwert proportional zum Strom liefern. Und Sie könnten die 3-kHz-PWM mit vielleicht 10 bis 20 Abtastungen pro Sekunde abtasten und eine schnelle True-RMS-Berechnung durchführen.

Ein Hall-Effekt-Sensor ist eine gute Möglichkeit, den Motorstrom abzulesen, aber es gibt auch High-Side-Strom-Shunt-Sensoren wie den HV7800 und den INA195, die kostengünstig und schnell genug sind.

Analoger Tiefpassfilter ist für das ADC-Anti-Aliasing obligatorisch. Sie sollten die PWM-Frequenz erhöhen und eine ausreichend hohe Abtastrate für den ADC mit einem analogen LPF mit einer Grenzfrequenz von 1/3 x ADC-Abtastfrequenz verwenden. Verarbeiten Sie dann alles in der MCU mit einem digitalen LPF-FIR-Filter. Natürlich wird es eine leichte Verzögerung geben, die die Dynamik des Systems einschränkt, aber nicht so sehr, wenn es richtig gemacht wird.

Ich denke, Sie würden eine MCU mit genügend Ressourcen (Rechengeschwindigkeit) benötigen.