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.
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.
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.
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.
Die geschätzte Transferfunktion für diese Daten ist im Beispiel eine zeitkontinuierliche Transferfunktion mit zwei Polen und ohne Nullstellen (Abbildung 6).
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).
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).
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).
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).
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).
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.
Anschließend werden die Closed-Loop-Sprungantworten des linearen und nichtlinearen Modells bezüglich einer gewünschten Referenzposition von 60° ermittelt (Abbildung 13).
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).
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).
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).
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