Newsletters

  • Vertrieb kontaktieren

Steuerung eines Motors mithilfe von Arduino: Eine Fallstudie für datengestützte Modellierung und Entwurf von Steuerungen

Von Pravallika Vinnakota, MathWorks

Die Abstimmung einer Steuerung auf einen physikalischen Prototypen oder eine Anlagenhardware kann unsichere Betriebsbedingungen und eine Beschädigung der Hardware zur Folge haben. Ein zuverlässigerer Ansatz besteht darin, ein Anlagenmodell zu erstellen und dessen Verhalten zu simulieren, um die Steuerung unter verschiedenen Betriebsmodi prüfen zu können. Damit lassen sich um ‚Was-wäre-wenn‘ Szenarien risikofrei durchspielen.

Wenn sich das Anlagenmodell nicht mithilfe theoretischer Grundlagen bzw. Informationen zu dessen Verhalten erstellen lässt, kann das Modell alternativ auf Basis von Messungen bestimmter Ein-/Ausgabe-Größen entwickelt werden. Für den Entwurf einer einfachen Steuerung kann ein lineares Modell niedriger Ordnung bereits ausreichend sein. Die detaillierte Analyse und der Entwurf einer Steuerung mit höheren Anforderungen hingegen erfordert ein detailgetreueres und möglicherweise nichtlineares Modell.

Anhand einer einfachen Steuerung für einen Gleichstrommotor zeigt dieser Artikel, wie ein Anlagenmodell aus Ein-/Ausgabe-Daten identifiziert wird, wie dieses Modell für den Entwurf einer Steuerung eingesetzt wird und wie die Steuerung schließlich implementiert werden kann. Der Workflow enthält die folgenden Schritte: Erfassen der Daten, Identifizieren von linearen und nicht linearen Anlagenmodellen, Entwerfen und Simulieren von Feedbacksteuerungen und Implementieren dieser Steuerungen auf Embedded Mikroprozessoren für Echtzeittests.

Die Modelle und Skripte aus diesem Beispiel sind zum Download verfügbar.

Der Gleichstrommotor: Ziele beim Entwurf der Steuerung

Das physikalische System ist ein Gleichstrommotor, der mithilfe eines Motortreibers (Abbildung 1) an eine Arduino® Uno-Platine angeschlossen ist. Es soll eine Feedbacksteuerung entworfen werden, damit dieser Motor eine Referenzposition nachverfolgen kann. Die Steuerung erzeugt auf Basis von Referenzdaten für die Motorposition das entsprechende Spannungssignal.

Bei Anlegen dieser Spannung an den Motor erzeugt dieser das Drehmoment, das die Drehung der Motorwelle bewirkt. Mittels eines Potentiometers wird der der Drehwinkel der Motorwelle gemessen mit der Steuerung rückgekoppelt.

Abbildung 1. Arduino-Platine an einen Gleichstrommotor angeschlossen.
Abbildung 1. Arduino-Platine an einen Gleichstrommotor angeschlossen.

Der Motortreiber auf dem IC steigert die Stromstärke und kann den Motor in beide Richtungen antreiben. Anhand der Positionsdaten des Motors, die über einen analogen Eingang auf der Arduino-Platine erfasst werden, erfolgt die Fehlerberechnung zwischen den Referenz- und Ist-Daten (der Steuerungseingabe). Das Spannungssignal (die Steuerungsausgabe) wird als PWM-Signal über zwei analoge Ausgänge auf der Platine an den Treiber-IC weitergeleitet, der den Motor mit den entsprechenden Antriebsströmen versorgt.

Die Steuerung muss das System stabil halten und für eine schnelle Nachverfolgung der Referenzpunkte sorgen bei gleichzeitiger Minimierung von Positionsfehlern und des Überschwingens.

Erfassen und Verarbeiten der Daten

Für Verbindung des Host-PCs mit der Arduino-Platine wird mit Simulink® eine Exe-Datei generiert, die auf der Hardware ausgeführt wird. Abbildung 2 zeigt die Simulink-Bibliothek für die Arduino-Hardware.

Abbildung 2. Simulink-Blockbibliothek: Hardware-Target zur Verwendung mit Arduino Hardware.
Abbildung 2. Simulink-Blockbibliothek: Hardware-Target zur Verwendung mit Arduino Hardware.

Zur Datenerfassung sendet die Arduino-Platine Spannungssignale an den Motor und misst die resultierenden Motorwinkel, die in ein Simulink-Modell eingespeist werden. Ein zweites Simulink-Modell stellt die Kommunikation zwischen Host-Computer und der Arduino-Platine her, um Spannungssignale zu senden bzw. Winkeldaten zu empfangen.

In dem Modell, das auf der Arduino Uno-Platine (Abbildung 3) ausgeführt wird, liest der MATLAB®-Funktionsblock „Voltage Command To Pins“ Signale vom seriellen Anschluss aus und leitet die Spannungssignale an die entsprechenden analogen Ausgänge weiter. Für die Kommunikation zwischen Host-Computer und Arduino-Platine wird ein serielles Kommunikationsprotokoll verwendet. Das CreateMessage-Subsystem erstellt ein serielles Signal aus den Motorpositionsdaten, die über die analogen Eingänge auf der Platine erfasst werden.

Abbildung 3. Simulink-Modell, das auf dem Arduino-Board ausgeführt wird.
Abbildung 3. Simulink-Modell, das auf dem Arduino-Board ausgeführt wird.
Die Echtzeitanwendung wird einfach mit der Befehlsfolge Tools > Run on Target Hardware > Run aus dem Modell generiert. Damit lassen sich nun die Eingabe-/Ausgabedaten mit dem Modell, das auf dem Host-Computer (Abbildung 4) ausgeführt wird, erfassen.
Abbildung 4. Modell, das auf dem Host-Computer ausgeführt wird.
Abbildung 4. Modell, das auf dem Host-Computer ausgeführt wird.

Mit verschiedenen Spannungsprofilen wird sodann das System angeregt und es werden die resultierenden Positionsdaten dokumentiert. Am Ende der Simulation generiert die Signal Logging Funktion in Simulink ein Objekt, das alle protokollierten Signale als Zeitreihenobjekte enthält.

Anschließend werden die erfassten Daten für die Schätzung und Validierung aufbereitet. Mit den folgenden Befehlen konvertieren wir die Daten in iddata-Objekte, um sie in das System Identification Tool der System Identification Toolbox™ zu importieren.

>> logsout
      logsout = 
        Simulink.SimulationData.Dataset
        Package: Simulink.SimulationData
        Characteristics:
                    Name: 'logsout'
          Total Elements: 2
        Elements:
          1: 'Voltage'
          2: 'Angle'
        -Use getElement to access elements by index or name.
        -Use addElement or setElement to add or modify elements.
        Methods, Superclasses

>> u = logsout.getElement(1).Values.Data;

>> y = logsout.getElement(2).Values.Data;

>> bounds1 = iddata(y,u,0.01,'InputName','Voltage','OutputName','Angle',...
             ...'InputUnit','V','OutputUnit','deg')
             Time domain data set with 1001 samples.
             Sample time: 0.01 seconds               
             Outputs       Unit (if specified)       
                Angle         deg                    
             Inputs        Unit (if specified)       
                Voltage       V

Für die Validierung des Modells werden zwölf Datensätze ausgewählt, um eine adäquate Anregung des Systems zu gewährleisten und eine ausreichende Datenmenge zur Verfügung zu stellen.

Entwickeln von Anlagenmodellen anhand experimenteller Daten

Das Entwickeln von Anlagenmodellen mithilfe von Methoden zur Systemidentifikation erfordert einen Kompromiss zwischen Modellzuverlässigkeit und Modellierungsaufwand. Je genauer das Modell sein soll, desto höher ist der Aufwand und die Rechenzeit. Das Ziel ist, das einfachste Modell zu ermitteln, das die Systemdynamik angemessen erfassen kann.

Der typische Workflow für die Systemidentifikation sieht wir folgt aus: Zunächst wird ein einfaches lineares System abgeschätzt; anschließend wird ein detaillierteres, nicht lineares Modell bestimmt, das den Motor genauer abbildet und das nichtlineare Verhalten erfasst. Während das lineare Modell für die meisten Anwendungen eines Steuerungsentwurfs ausreicht, ermöglicht das nichtlineare Modell genauere Simulationen des Systemverhaltens und einen Steuerungsentwurfs in einem breiten Spektrum von Betriebspunkten.

Lineare Systemidentifikation

Mithilfe der iddata-Objekte wird zunächst ein lineares dynamisches Modell der Anlage als zeitkontinuierliche Transferfunktion geschätzt. Für diese Schätzung wird die Anzahl an Polen und Nullstellen angegeben. System Identification Toolbox bestimmt anschließend automatisch deren Positionen, um die Übereinstimmung mit den ausgewählten Datensätzen zu maximieren.

Wir starten das System Identification Tool mit dem Befehl:

>> ident

Nach Import der Daten werden die Arbeitsdaten ausgewählt, die zur Schätzung des Modells verwendet werden sollen, sowie die Validierungsdaten, anhand derer das geschätzte Modell getestet werden soll. Anfänglich lassen sich hierzu dieselben Datensätze verwenden. Weitere Datensätze werden schließlich zur Bestätigung der Ergebnisse herangezogen. Abbildung 5 zeigt das System Identification Tool mit dem importierten Datensatz. Der Datensatz für die Schätzung beruht auf einem Experiment, mit dem das Anregen von Nichtlinearitäten im System vermieden werden sollte.

Abbildung 5. System Identification Tool mit importierten Daten.
Abbildung 5. System Identification Tool mit importierten Daten.

Die geschätzte Transferfunktion für diese Daten ist im Beispiel eine zeitkontinuierliche Transferfunktion mit zwei Polen und ohne Nullstellen (Abbildung 6).

Abbildung 6. Benutzeroberfläche „Kontinuierliche Transferfunktion“.
Abbildung 6. Benutzeroberfläche „Kontinuierliche Transferfunktion“.

Mittels  ‚Model Output‘ im System Identification Tool wird die Simulationsantwort des geschätzten Modells mit den gemessenen Daten verglichen. Die Übereinstimmung zwischen der Reaktion des geschätzten linearen Modells und dem Datensatz für die Schätzung beträgt 93,62 % (Abbildung 7).

Abbildung 7. Diagramm mit Vergleich zwischen geschätzter Modellreaktion und Schätzdaten.
Abbildung 7. Diagramm mit Vergleich zwischen geschätzter Modellreaktion und Schätzdaten.

Um sicherzustellen, dass die geschätzte Transferfunktion die Motordynamik wirklich abbildet, muss sie mit einem weiteren Datensatz validiert werden. Die Verwendung eines unabhängigen Datensatzes, bei dem der Motor sich ebenfalls linear verhält, zeigt eine Übereinstimmung mit ausreichender Genauigkeit (Abbildung 8).

Abbildung 8. Diagramm mit Vergleich zwischen geschätzter Modellreaktion und Validierungsdaten.
Abbildung 8. Diagramm mit Vergleich zwischen geschätzter Modellreaktion und Validierungsdaten.

Die Übereinstimmung ist zwar nicht perfekt, die identifizierte Transferfunktion erfasst die Systemdynamik jedoch auf angemessene Weise. Damit kann diese Transferfunktion verwendet werden, um eine Steuerung für das System zu entwerfen.

Darüber hinaus lässt sich auch der Effekt der Unsicherheit des Analgenmodells analysieren. Modelle, die mithilfe der System Identification Toolbox generiert wurden, enthalten nicht nur Informationen über Nennparameterwerte, sondern auch über Parameterunsicherheiten, die in einer Parameter-Kovarianzmatrix gekapselt sind. Als Maß für die Zuverlässigkeit des Modells hängt die berechnete Unsicherheit folgenden Faktoren ab: externen Störungen, die auf das System einwirken; nicht modellierte Dynamik des System; und Menge der gesammelten Daten. Die Unsicherheit lässt sich visualisieren, indem die entsprechenden Auswirkungen zusammen mit der Modellantwort in einem Diagramm dargestellt werden -  z. B. mit einem Bode-Diagramm der geschätzten Transferfunktion mit Konfidenzintervall der Standardabweichung (Abbildung 9).

Abbildung 9. Bode-Diagramm des geschätzten Modells mit Modellunsicherheit.
Abbildung 9. Bode-Diagramm des geschätzten Modells mit Modellunsicherheit.

Nicht lineare Systemidentifikation

Ein lineares Modell der Motordynamik auf Basis von Daten aus einem linearen Betriebsbereich ist hilfreich beim Entwickeln einer effizienten Steuerung. Mit solch einem Anlagenmodell kann das nichtlineare Verhalten des Motors jedoch nicht erfasst werden.

Weitere Datensätze zeigen beispielsweise, dass die Reaktion des Motors bei einem Winkel von ca. 100° in die Sättigung läuft, oder dass der Motor nicht auf kleine Befehlsspannungen reagiert, was möglicherweise an der Trockenreibung liegt.

In folgenden Schritt wird ein Modell des Gleichstrommotors mit höherer Genauigkeit bestimmt - ein nichtlineares Modell. Eine nähere Betrachtung der Daten ergibt, dass die Änderung der Reaktion des Motors in Bezug auf die Spannungsänderung nicht linear verläuft. Dieser Trend weist auf ein nicht lineares, Hysterese-ähnliches Verhalten hin. Nichtlineare ARX (NLARX)-Modelle bieten ausreichend Flexibilität und ermöglichen es, ein derartiges Verhalten unter Verwendung vielfältiger nichtlinearer Funktionen, z. B. Wavelets und Sigmoid-Netzwerken, zu erfassen. Weiterhin können solche Modelle Effekte berücksichtigen, die mittels benutzerdefinierten Regressoren zu Nichtlinearitäten des Systems ermittelt wurden.

Für die NLARX-Modellierung sind Daten mit einer ausreichenden Informationstiefe hinsichtlich der Nichtlinearitäten erforderlich. Im Beispiel werden drei Datensätze kombiniert, die zur Modellschätzung verwendet werden sollen. Weitere fünf Datensätze werden kombiniert, um einen umfangreicheren, für mehrere Experimente geeigneten Validierungsdatensatz zu erhalten.

>> mergedD = merge(z7,z3,z6)
      Time domain data set containing 3 experiments.
      Experiment    Samples      Sample Time          
         Exp1         5480            0.01            
         Exp2          980            0.01            
         Exp3          980            0.01            
                                           
      Outputs       Unit (if specified)               
         Angle         deg                            
                                               
      Inputs        Unit (if specified)               
         Voltage       V     
>> mergedV = merge(z1,z2,z4,z5,z8);

Das nichtlineare Modell hatte verschiedene anpassbare Komponenten. Für dieses Beispiel wurden Modellordnungen, Verzögerungen, Typ der nichtlinearen Funktion und die Anzahl der Einheiten in der nicht linearen Funktion angepasst. Weiterhin wurden Regressoren hinzugefügt, die die Sättigung und das Totzonenverhalten darstellen. Nach mehreren Iterationen wurde eine Modellstruktur ausgewählt, die ein Sigmoid-Netzwerk mit paralleler linearer Funktion aufweist und einen Satz von Regressoren als Eingaben verwendete. Die Parameter dieses Modells erreichen nach Abschätzung die bestmöglichen Simulationsergebnisse (Abbildung 10).

Abbildung 10. Benutzeroberfläche für die nicht lineare ARX (NLARX)-Modellschätzung.
Abbildung 10. Benutzeroberfläche für die nicht lineare ARX (NLARX)-Modellschätzung.

Das resultierende Modell hat eine hervorragende Übereinstimmung von >90 %; dies gilt sowohl für die Schätzdaten als auch für die Validierungsdaten. Dieses Modell kann sowohl für die Steuerungsentwicklung als auch für die Analyse und Prognose verwendet werden.

Entwerfen der Steuerung

Nun lässt sich eine PID-Steuerung für das genauere nichtlineare Modell entwerfen. Hierzu wird das geschätzte, nichtlineare Modell an einem relevanten Betriebspunkt linearisiert und anschließend die Steuerung für dieses linearisierte Modell entworfen.

Die PID-Steuerung wird abgestimmt und deren Parameter ausgewählt (Abbildung 11).

Abbildung 11. Benutzeroberfläche „PID Tuner“.
Abbildung 11. Benutzeroberfläche „PID Tuner“.

Die Leistungsfähigkeit dieser Steuerung wird auch anhand des nichtlinearen Modells geprüft. Abbildung 12 zeigt das Simulink-Modell, mit dem die Simulationsreaktion auf das nicht lineare ARX-Modell ermittelt wird.

Abbildung 12. Simulink-Modell zum Testen der Steuerung mit dem geschätzten nichtlinearen Modell.
Abbildung 12. Simulink-Modell zum Testen der Steuerung mit dem geschätzten nichtlinearen Modell.

Anschließend werden die Closed-Loop-Sprungantworten des linearen und nichtlinearen Modells bezüglich einer gewünschten Referenzposition von 60° ermittelt (Abbildung 13).

Abbildung 13. Diagramm mit Sprungantworten, in dem die Simulationsreaktionen auf nichtlineare und linearisierte Modelle dargestellt sind.
Abbildung 13. Diagramm mit Sprungantworten, in dem die Simulationsreaktionen auf nichtlineare und linearisierte Modelle dargestellt sind.

Testen der Steuerung auf der Hardware

Die Steuerung wird schließlich über ein Simulink-Modell und der integrierten Hardwareunterstützung in Simulink auf dem Arduino Uno Board implementiert (Abbildung 14).

Abbildung 14. Modell der Steuerung, implementiert auf dem Arduino Board.
Abbildung 14. Modell der Steuerung, implementiert auf dem Arduino Board. Das Subsystem „Get Angle“ (Winkel abrufen) empfängt das Referenzsignal über die seriellen Port und konvertiert dies in den gewünschten Winkel für den Motor. Das Gleichstrommotor-Subsystem konfiguriert Schnittstelle zwischen Arduino Board und dem physikalischen Motor.

Die Steuerung beruht auf dem geschätzten nichtlinearen ARX-Modell, das bezüglich eines ausgewählten Betriebspunktes linearisiert ist. Die Ergebnisse für diese Steuerung zeigen, dass die Hardwareantwort eine hohe Übereinstimmung mit den Simulationsergebnissen aufweist (Abbildung 15).

Abbildung 15. Diagramm mit einem Vergleich der Simulations- und Hardware-Antwort auf ein Sprungsignal für eine Steuerung, die mit einem linearisierten Modell entwickelt wurde.
Abbildung 15. Diagramm mit einem Vergleich der Simulations- und Hardware-Antwort auf ein Sprungsignal für eine Steuerung, die mit einem linearisierten Modell entwickelt wurde.

Ein weiterer Test zeigt, wie gut die Steuerung einen zufälligen Referenzbefehl nachverfolgt.

Auch in diesem Fall stimmt das Verhalten der Hardware in einem hohen Maß mit den Werten aus der Simulation überein (Abbildung 16).

Abbildung 16. Diagramm zum Vergleich der Nachverfolgungsleistung bei Simulationen und auf der Hardware für Steuerungen, die mit einem geschätzten nicht linearen Modell entwickelt wurden.
Abbildung 16. Diagramm zum Vergleich der Nachverfolgungsleistung bei Simulationen und auf der Hardware für Steuerungen, die mit einem geschätzten nicht linearen Modell entwickelt wurden.
Dieses Beispiel ist zwar einfach angelegt, enthält jedoch die wichtigsten Schritte für eine datengestützte Steuerung. Anhand von Ein-/Ausgangsdaten einer bestimmten Hardware wurden mit der System Identification Toolbox verschiedene Modelle des Systems mit unterschiedlicher Genauigkeit konstruiert. Anschließend wurden basierend auf diesen Modellen Steuerung entwickelt und deren Leistungsfähigkeit auf der tatsächlichen Hardware verifiziert.

Veröffentlicht 2013 - 92109v00

Receive the latest MATLAB and Simulink technical articles.

Related Resources

Latest Blogs