Codegenerierung für Mikrocontroller aus einem Simulink ...ems_labor/HSC/uebungen/es_09/... ·...

12
Codegenerierung für Mikrocontroller aus einem Simulink- Modell (Schritt-für-Schritt-Anleitung) Folgende Schritt-für-Schritt-Anleitung zeigt exemplarisch den Arbeitsablauf der C- Codegenerierung für den Mikrocontroller XC167 aus einem Simulink-Modell am Beispiel eines Regelkreises. Es wird ferner gezeigt, wie dieser Code in eine Entwicklungsumgebung eingebunden wird. Was nicht das Thema dieser Anleitung ist, ist die Modellbildung selbst. Hierzu wird an dieser Stelle auf gute Online-Dokumentation von Matlab/Simulink und die entsprechende Literatur[1] verwiesen. Eine detaillierte Erklärung zu diesem Modell findet sich in der Diplomarbeit Codegenerierung mit Matlab/Simulink für Mikrocontroller und FPGAs[2]. Soll nur das Reglerprogramm auf den Mikrocontroller übertragen werden, so beginnen Sie bei Punkt 4.2 ansonsten mit Punkt 1. 1 Einleitung - Der Regelkreis Als Anwendungsbeispiel für die Codegenerierung in Simulink wurde ein Regelkreis mit einem Hubmagneten, dessen Hubhöhe eingestellt werden kann, gewählt. Bei einem Regelkreis handelt es sich um ein rückgekoppeltes System, das mindestens aus einem Regler und einer Regelstrecke, in diesem Fall dem Hubmagneten, besteht. Der Regler hat die Aufgabe, seinen Ausgangswert (Stellgröße) so zu verändern, dass die Regelgröße (Istwert), einen vorgegebenen Wert (Sollwert) einnimmt. Geschieht diese Auswertung mit einem Digitalrechner, so handelt es sich, wie in unserem Fall, um einen Digitalregler. Die Ermittlung der Stellgröße wird durch den Regelalgorithmus bestimmt. Abbildung 1 zeigt den Versuchsaufbau des Regelkreises im Remote-Labor. Abbildung 1: Regelkreis Hubmagnet

Transcript of Codegenerierung für Mikrocontroller aus einem Simulink ...ems_labor/HSC/uebungen/es_09/... ·...

Page 1: Codegenerierung für Mikrocontroller aus einem Simulink ...ems_labor/HSC/uebungen/es_09/... · Abbildung 3: Simulink Arbeitsbereich mit Modell des Regelkreises 3 Arbeiten mit Simulink

Codegenerierung für Mikrocontroller aus einem Simulink-Modell (Schritt-für-Schritt-Anleitung)

Folgende Schritt-für-Schritt-Anleitung zeigt exemplarisch den Arbeitsablauf der C-Codegenerierung für den Mikrocontroller XC167 aus einem Simulink-Modell am Beispiel eines Regelkreises. Es wird ferner gezeigt, wie dieser Code in eine Entwicklungsumgebung eingebunden wird. Was nicht das Thema dieser Anleitung ist, ist die Modellbildung selbst. Hierzu wird an dieser Stelle auf gute Online-Dokumentation von Matlab/Simulink und die entsprechende Literatur[1] verwiesen. Eine detaillierte Erklärung zu diesem Modell findet sich in der Diplomarbeit Codegenerierung mit Matlab/Simulink für Mikrocontroller und FPGAs[2].Soll nur das Reglerprogramm auf den Mikrocontroller übertragen werden, so beginnen Sie bei Punkt 4.2 ansonsten mit Punkt 1.

1 Einleitung - Der Regelkreis

Als Anwendungsbeispiel für die Codegenerierung in Simulink wurde ein Regelkreis mit einem Hubmagneten, dessen Hubhöhe eingestellt werden kann, gewählt. Bei einem Regelkreis handelt es sich um ein rückgekoppeltes System, das mindestens aus einem Regler und einer Regelstrecke, in diesem Fall dem Hubmagneten, besteht. Der Regler hat die Aufgabe, seinen Ausgangswert (Stellgröße) so zu verändern, dass die Regelgröße (Istwert), einen vorgegebenen Wert (Sollwert) einnimmt. Geschieht diese Auswertung mit einem Digitalrechner, so handelt es sich, wie in unserem Fall, um einen Digitalregler. Die Ermittlung der Stellgröße wird durch den Regelalgorithmus bestimmt. Abbildung 1 zeigt den Versuchsaufbau des Regelkreises im Remote-Labor.

Abbildung 1: Regelkreis Hubmagnet

Page 2: Codegenerierung für Mikrocontroller aus einem Simulink ...ems_labor/HSC/uebungen/es_09/... · Abbildung 3: Simulink Arbeitsbereich mit Modell des Regelkreises 3 Arbeiten mit Simulink

Die Aufgabe des Reglers übernimmt ein Infineon XC167 Mikrocontroller-Board. Die Sollwertvorgabe (Hubhöhe) wird vom Remote Rechner über die serielle Schnittstelle ans Board übertragen. Beim Stellwert am Mikrocontrollerausgang handelt es sich um ein PWM-Signal, dass, in verstärkter Form, an den Spulen des Hubmagneten anliegt. Die Erfassung der Hubhöhe erfolgt über einen Infrarot-Distanzsensor, dessen Ausgangsspannung vom Analog-Digital-Wandler des Mikrocontrollers gemessen wird. Der Regelalgorithmus im Mikrocontroller wurde mit Hilfe von Matlab Simulink erzeugt, was im Folgenden gezeigt wird.

2 Öffnen des Simulinkmodells

2.1 Machen sie eine Kopie des Verzeichnisses XC167_Regelkreis von?/?/ in ein eigenes Verzeichnis unter ?/?

2.2 Starten sie Matlab durch Doppelklick auf das Matlabsymbol am Windows Desktop-Bildschirm. Das Matlab Haupfenster erscheint Abbildung 2.

Abbildung 2: Matlab Hauptfenster

2.3 Wechseln sie in das Verzeichnis XC167_Regelkreis (Abb. 2 - 1) von dem Sie zuvor eine Kopie erstellt haben, durch eintragen des Pfads ins Feld Current Directory.

2.4 Auf der linken Seite des Matlab-Fensters ist eine Datei hubmagnet_regelkreis.mdl zu Finden. Durch Doppelklick (Abb. 2– 2 ) auf den Namen wird Simulink mit dem entsprechenden Modell geöffnet (Abbildung 3).

Page 3: Codegenerierung für Mikrocontroller aus einem Simulink ...ems_labor/HSC/uebungen/es_09/... · Abbildung 3: Simulink Arbeitsbereich mit Modell des Regelkreises 3 Arbeiten mit Simulink

Abbildung 3: Simulink Arbeitsbereich mit Modell des Regelkreises

3 Arbeiten mit Simulink

3.1 Hinter den einzelnen Blöcken PID-Regler, Hubmagnet Regelstrecke und IR-Sensor verbergen sich Subsysteme. Durch Doppelklick auf diese wird das entsprechende Subsystem in einem separaten Fenster geöffnet. Abbildung 4 zeigt das Subsystem welches sich hinter dem PID-Regler Block verbirgt.

Abbildung 4: Subsystem PID-Regler

Page 4: Codegenerierung für Mikrocontroller aus einem Simulink ...ems_labor/HSC/uebungen/es_09/... · Abbildung 3: Simulink Arbeitsbereich mit Modell des Regelkreises 3 Arbeiten mit Simulink

3.2 Um das Modell simulieren und Code aus ihm generieren zu können, müssen die Modellparameter (rechts im Modell) markiert und in den Matlab-Workspace kopiert werden (Abb. 5 – 1,2). Durch Veränderung der Parameter kann das Modellverhalten angepasst werden.

Abbildung 5: Kopieren der Regelkreisparameter

3.3 Anschließend müssen die Parameter durch Drücken von „Strg+V“ in das Command Window des Matlab-Hauptfensters in den Matlab Workspace übernommen werden (Abbildung 6).

Abbildung 6: Einfügen der Modellparameter in den Matlab Workspace

Page 5: Codegenerierung für Mikrocontroller aus einem Simulink ...ems_labor/HSC/uebungen/es_09/... · Abbildung 3: Simulink Arbeitsbereich mit Modell des Regelkreises 3 Arbeiten mit Simulink

3.4 Durch Drücken des Start-Buttons im Simulink Fenster wird die Simulation ausgeführt (Abb. 7 – 1).

Abbildung 7 : Simulation starten und Simulationsergebnis betrachten

3.5 Führt man einen Doppelklick auf ein Scope-Symbol (Abb. 7-2) aus, kann man das Simulationsverhalten des Modells betrachten. Genauer gesagt das Signal der Anschlussleitung über die Zeit (Abbildung 8).

Abbildung 8: Hubhöhe in Abhängigkeit von der Zeit

Page 6: Codegenerierung für Mikrocontroller aus einem Simulink ...ems_labor/HSC/uebungen/es_09/... · Abbildung 3: Simulink Arbeitsbereich mit Modell des Regelkreises 3 Arbeiten mit Simulink

4 Codegenerierung

Bei der Codegenerierung wird nicht das gesamte Modell in C-Code umgesetzt sonder nur das PID-Regler-Subsystem, da dieses die Funktionalität widerspiegelt, die der Mikrocontroller im Regelkreis übernimmt.

4.1 Um den Code generieren klicken Sie mit der rechten Maustaste auf das PID-Regler Subsystem (Abb. 9 -1) und im Kontextmenü Real-Time Workshop => Build Subsystem (Abb. 9 -2 ) auswählen.

Abbildung 6: Codegenerierung

Page 7: Codegenerierung für Mikrocontroller aus einem Simulink ...ems_labor/HSC/uebungen/es_09/... · Abbildung 3: Simulink Arbeitsbereich mit Modell des Regelkreises 3 Arbeiten mit Simulink

4.2 Es erscheint ein Dialogfenster in dem verschiedene Parameter für die im Modell verwendeten Variablen eingestellt werden können (Abbildung 10). Die vorgegebenden Werte werden beibehalten. Durch Drücken des Build-Buttons wird der eigentliche Codegenerierungsprozess eingeleitet.

Abbildung 10: Build code for Subsystem Dialogfeld

4.3 Hat Matlab die Codegenereriung abgeschlossen, so erscheint das Report-Fenster (Abbildung 11). Hier kann der generierte Code begutachtet werden.

Abbildung 11: Report-Fenster

Page 8: Codegenerierung für Mikrocontroller aus einem Simulink ...ems_labor/HSC/uebungen/es_09/... · Abbildung 3: Simulink Arbeitsbereich mit Modell des Regelkreises 3 Arbeiten mit Simulink

5 Einbetten in die Keil µVision Entwicklungsumgebung

Aus dem Simulink-Modell wird nur der Code des Regelalgorithmus generiert. Dieser muss jedoch in regelmäßigen Abständen aufgerufen werden, was durch die Basissoftware des Mikrocontrollers geschieht. Bei der Basissoftware handelt es sich um ein Programmgrundgerüst das die grundlegende Funktionalität des Mikrocontrollers bereitstellt und unter anderem auch die für den Analog-Digital-Wandler, den PWM Ausgang und den seriellen Ausgang. Die Verknüpfung mit dem Modell erfolg mit so genannten S-Functions.Im Reglermodell Abbildung 3 sind dies die Blöcke Serial_in, PWM und ADC. In dieses Grundgerüst, das ebenfalls als C-Code bereitsteht, muss der Code des Simulink-Modells eingebettet werden.

5.1 Zuerst muss der von Simulink generierte Code in das Verzeichnis des Programmgrundgerüsts kopiert werden. Dazu kopieren sie alle Dateien aus dem Verzeichnis PID_ert_rtw in das Verzeichnis XC167_Regler_20MHz (Abbildung 12).

Abbildung 7: Quellcodeverzeichnisse

5.2 Öffnen sie das Verzeichnis XC167_Regler_20MHz.5.3 Durch Doppelklick auf die Datei XC167_Regler.Uv2 wird die Keil uVision 3

Umgebung gestartet (Abbildung 13).

Page 9: Codegenerierung für Mikrocontroller aus einem Simulink ...ems_labor/HSC/uebungen/es_09/... · Abbildung 3: Simulink Arbeitsbereich mit Modell des Regelkreises 3 Arbeiten mit Simulink

Abbildung 8: Keil µVision 3

Die wesentlichen Teile des generierten Codes sind in der Datei PID.c zu finden. Die meisten anderen Dateien sind aus einem vorgegebenen Programmgrundgerüst.

5.4 Bevor das Programm auf den Mikrocontroller übertragen wird, muss es durch Drücken der entsprechenden Taste (Abb. 13– 2) kompiliert werden. Stellen sie Sicher, dass zuvor als Traget „Monitor“ ausgewählt wurde (Abb. 13–1).

5.5 Starten Sie das Programm BoardControl auf dem Desktop durch Doppelklick auf des Symbol.

5.6 Schalten Sie die Spannungsversorgung des XC-167 ein (Abb. 14-1) und aktivieren Sie den Regelkreis (Abb.14-2).

Page 10: Codegenerierung für Mikrocontroller aus einem Simulink ...ems_labor/HSC/uebungen/es_09/... · Abbildung 3: Simulink Arbeitsbereich mit Modell des Regelkreises 3 Arbeiten mit Simulink

Abbildung 9: BoardControl

5.7 Der Upload erfolgt durch Debug Starten/Stoppen im Menü Debug von µVision (Abbildung 15).

Abbildung 10: Programm Upload

5.8 Nach dem Upload wird das Programm durch drücken des Run-Buttons gestartet.

Page 11: Codegenerierung für Mikrocontroller aus einem Simulink ...ems_labor/HSC/uebungen/es_09/... · Abbildung 3: Simulink Arbeitsbereich mit Modell des Regelkreises 3 Arbeiten mit Simulink

5.9 Tritt ein Fehler beim Upload auf, erscheint ein Dialogfeld (Abbildung 16). Fehler können mehrere Ursachen haben. Oft hilft ein einfaches Drücken Sie die Resettaste in der Board-Control Anwendung und betätigen Sie „Try Again“. Wechseln Sie unter Umständen die COM-Ports zu erreichen mit dem Settings…- Button.

Abbildung 16: Dialog bei einem Uploadfehler

5.10Es empfiehlt sich das Programm DualCAM, das sich ebenfalls auf dem Desktop befindet öffnen. Durch Drücken der Schaltfläche „Kamera 2 einblenden“ kann die Regelung verfolgt werden.

Abbildung 17: DualCAM ( unten Hubmagnet )

Page 12: Codegenerierung für Mikrocontroller aus einem Simulink ...ems_labor/HSC/uebungen/es_09/... · Abbildung 3: Simulink Arbeitsbereich mit Modell des Regelkreises 3 Arbeiten mit Simulink

5.11Starten sie das Programm Magnet-Control durch Doppelkick auf das Symbol auf dem Desktop.

Abbildung 18: Steuerapplikation für Hubmagneten

4.13Achten sie darauf, dass der XC167-Mikrocontroller als Regler ausgewählt ist.

4.14Jetzt können dort die Werte für die Hubhöhe und die Regelparameter verändert werden. Für die Hubhöhe sind Werte im Bereich von 0-90 mm möglich. Die Regelparameter sind zulässig von -9999 bis 9999. Mit voreingestellten Regelparameter erhält man bereits einen funktionsfähigen Regler.

Literatur:

[1] Angerman A., et. Al.: Matlab-Simulink-Stateflow, Oldenbourg Verlag, 2005

[2] Froschhammer Martin: Codegenerierung mit Matlab/Simulink für Mikrocontroller und FPGAs (Diplomarbeit), FH-Regensburg, 2007