Ansteuerung einer Schrittmotor-Achse mit dSpace DS1104 und Matlab/Simulink
Einleitung
Das Thema Ansteuerung einer Schrittmotor-Achse mit dSpace DS1104 und Matlab/Simulink ist ein Teilthemengebiet des Projekts 3-D-Bearbeitungsmaschine (Projekt des Schwerpunkts GPE im Studiengang MTR) und wurde bisher von Stefan Schweins und Jonas Rüschenschmidt (Wintersemester 2013/14) sowie von Florian Discher und Florian Nolte (Wintersemester 2014/15) bearbeitet. Im Wintersemester 2016/17 wurde das Projekt von Madleine Kahr und Marcel Begere weitergeführt.
Aufgabenstellung
Wintersemester 2013/14
Die Aufgabe des Praktikums bestand darin, die Ansteuerung einer Zahnriemenachse mit einem Schrittmotor durch den Einsatz von einem dSpace DS1104 R&D Controller Board mit einer Programmierung auf Basis von Matlab Simulink zu realisieren. Zwischen dem dSpace Board und dem Schrittmotor befindet sich zusätzlich noch ein GeckoDrive als Motorsteuerung.
Wintersemester 2014/15
Die Aufgabe des Praktikums bestand darin, das von der Vorgängergruppe bestehende Programm zu analysieren, in Betrieb zu nehmen und zu vervollständigen. Dazu wurde auf die bereits aus dem Vorjahr vorhandene Aufgabenliste zurückgegriffen.
Folgende Aufgaben waren noch offen und zur Weiterführung des Projekts zu bearbeiten:
- Programm Review (Erstellung eines Ablaufdiagramms und Verbesserung des schon bestehenden Simulink Programms)
- Test der Endschalter (zunächst Einbindung der Schalter direkt über den GeckoDrive)
- Recherche nach Konzepten zur Einbindung eines Encoders (wird in diesem Jahrgang nicht bearbeitet)
- Einlesen und Einregeln der Soll-Position (Aufbau einer seriellen Kommunikation über die RS232 Schnittstelle)
Während der Bearbeitung des Projekts ergaben sich neue Aufgaben, um vorhandene Schwachstellen im Programmablauf zu entfernen:
- Einbinden der Endschalter in Simulink
- Einbinden eines Multiswitches in Simulink
Wintersemester 2016/17
Die Praktikumsaufgabe bestand erneut darin, das vorhandene Material aus den vorangegangenen Semestern zu sichten, zu analysieren und weiter zu entwickeln. Folgende Schwerpunkte gab es in der Aufgabenstellung:
- Verständnis der vorhandenen Programmierung
- Inbetriebnahme einer Achse (Testaufbau)
- Erweiterung der Programmierung und Verkabelung auf mehrere Achsen
- Lösungsfindung für Endschalter (Hardwareseitig)
- Einlesen der Daten über die RS232 Schnittstelle
- Testen aller Achsen an der Fräse
Aufbau / Schaltplan
Im Allgemeinen ist der Aufbau der Hardwarekomponenten, wie bei den meisten Steuerungen, in Last- und Steuerkreis aufgeteilt. Der Laststromkreis beinhaltet alle Verbindungen zwischen der Spannungsversorgung (Power Supply), dem GeckoDrive und dem Schrittmotor. Der Steuerstromkreis beinhaltet alle Verbindungen zwischen der dSpaceBox CP1104 und dem GeckoDrive.
Für die Programmierung wurde aus dem Schaltplan ein Versuchsaufbau generiert, damit erste Ergebnisse direkt erkannt und dokumentiert werden konnten.
Die Endschalter sind nur theoretisch erarbeitet worden und wurden noch nicht umgesetzt. Das Konzept dazu, wird im Abschnitt "Endschalter" erläutert.
Die Pinbelegung am SubD-Stecker der war von Bedeutung, damit für den Versuchsaufbau die benötigten Pins (GND;IO1) belegt werden konnten.
Die vorhandene Hardware für den Testaufbau besteht aus:
- DSPACE DS1104 R&D Controller Board mit dSPACE CP1104
- Achse mit Schrittmotor
- GeckoDrive
- Power Supply
In der folgenden Abbildung ist die Verbindung der einzelnen Komponenten miteinander zu sehen.
Regelkreis
Für diesen Anwendungsfall startet der Regelkreis mit dem einlesen eines bestimmten Weges über eine RS232 Schnittstelle. Dieser Wert ist der Sollwert der Position (Xsoll). Aus dieser Position wird durch die Programmierung auf dem dSpace Board ein PWM (Pulsweitemodulation) Signal erzeugt, welches eine bestimmte Anzahl an High-Pegeln an den GeckoDrive sendet. Jeder High-Pegel steht für einen Schritt. Der Schrittmotor setzt diese Signale in 1.8° Schritte um, und entlang der Linearachse wird ein Weg verfahren. Ein Encoder soll daraufhin diesen Weg durch Rückgabewerte zurücksenden, so dass ein kontinuierlicher Vergleich zwischen der Ist- und der Sollposition stattfinden kann, bis keine Regeldifferenz vorhanden ist.
Programm Review
Zunächst wurde zur besseren Übersicht und Verständlichkeit des bisherigen Simulink Programmes ein Ablaufdiagramm erstellt. Dazu wurden die offiziellen Symbole für einen Flowchart nach DIN 66001 genutzt. Es kommen damit folgende Bausteine zum Einsatz:
- Ovale als Programmkontrollpunkte
- Rechtecke als Operationen
- Rauten als Entscheidungen/Verzweigungen
- Pfeile als Verbindung zwischen den Elementen
Zunächst wird eine Soll-Position in Hundertstel-Millimeter an das Simulink Programm übergeben. Diese Distanzangabe wird dann in Schritte des Motors umgerechnet. Als Nächstes findet der Vergleich zwischen Soll- und Ist-Position statt. Entspricht der Ist-Wert dem Soll-Wert, soll der Motor anhalten. Entspricht er ihm nicht, wird ein weiterer Vergleich durchgeführt. Hierbei wird festgestellt, in welche Richtung der Schlitten verfahren werden muss. Je nach benötigter Verfahrrichtung muss ein Motorschritt addiert oder subtrahiert werden. Dies wird in einer Schleife solange wiederholt, bis die Ist-Position der Soll-Position entspricht.
PWM Signal zur Ansteuerung des Motors
Die Abbildung des verwendeten Oszilloskops zeigt den Verlauf des PWM-Signals am Ausgang der dSpace Box. Die Mindestperiodendauer, die der GeckoDrive benötigt um die einzelnen Schritte erkennen zu können beträgt 3,5 µs. In dem vorhandenen Simulinkprogramm ist bisher eine Periodendauer von 2 ms realisiert worden. Dieses Signal besteht aus 1 ms High- und 1 ms Low-Pegel.
Die Periodendauer wird jetzt durch das Einlesen des Vorschubs durch den String, welcher durch den G-Code von Matlab bereitgestellt und über die RS232-Schnittstelle eingelesen wird, variabel gehalten. Das bedeutet, dass der Wert des Vorschubs aus dem G-Code ausgelesen wird und nicht wie bisher durch eine konstante Periodendauer des Pulsegenerators bestimmt wird.
Die Umrechnung des zur Verfügung gestellten Vorschubwertes in die Einheit, welche vom Pulsegenerator benötigt wird, wurde noch nicht realisiert. Das Problem besteht darin, dass nicht heruausgefunden werden konnte, welche Einheit der Generator genau benötigt.
Simulink Programm
Das Simulink Programm startet, indem es über die RS232-Schnittstelle mehrere Soll-Positionen (x- ,y- und z-Achse) erhält, welche in die Subfunktion eingelesen werden.
Im nächsten Schritt wird diese Position in eine Position umgerechnet, welche eine Datenbasis in Schritten besitzt. Aus der Übersetzung zwischen der Drehung des Schrittmotors und der Strecke auf der Achse folgt, dass 0,01 mm Fahrweg = 0,33 Schritte entspricht.
Eine Umdrehung (360°) des Schrittmotors entspricht 200 Schritte. Daraus folgt: 360°/200 Schritte = 1,8 ° pro Schritt
In einer Datentyp-Umwandlung wird dieser Positionswert in ganzzahlige Werte (Integer-Werte) umgewandelt.
Anschließend wird dieses Signal mit der aktuellen Position, welche in der Software hinterlegt ist, verglichen. Der Relational Operator 1 unterbricht bei Erreichen des Zielwertes die Verbindung zwischen dem Pulsgenerator und dem Digitalausgang für die Schritte. Dies geschieht durch ein Umschalten des Switch_Stop-Bausteins auf ein konstantes Low-Signal. Der Relational Operator im unteren Bereich des Programms vergleicht die Sollposition mit der aktuellen Position, um die Richtung vorzugeben. Ist der neue Wert größer als die aktuelle Position, so fährt der Motor weiter vorwärts, sonst rückwärts. Dies funktioniert über den Switch-Richtung-Baustein.
Das Richtungssignal wird dann durch den Gain-Baustein halbiert, da es auf einen Analogausgang geleitet wird. Dieser Ausgang gibt bei dem Wert 1 eine Spannung von 10 V. Um 5 V zu erreichen muss also ein Wert von 0.5 an den Ausgang gesendet werden.
Für die Positionsbestimmung ist im oberen rechten Bereich ein Zähler über ein getriggertes Subsystem realisiert worden. Je nach gefahrener Richtung wird pro Schritt, also pro High-Signal, ein Schritt addiert oder subtrahiert, so dass für jedes reale Signal am Schrittmotor auch ein Schritt im Memory-Baustein gespeichert wird. Der Ausgang dieses Bausteins wird dann wie beschrieben zum Ist-Soll-Vergleich genutzt.
Das vorhandene Programm wurde, zum besseren Verständnis für nachfolgende Gruppen, durchkommentiert. Des Weiteren wurde eine Subfunktion für die Ansteuerung einer Achse erstellt, welche dann für die weiteren Achsen genutzt werden konnte. Somit ist es jederzeit möglich das Programm für weitere Achsen zu erweitern.
Mit den rechts dargestellten Scopes können in der Simulink Simulation die Richtung, sowie die Ist- und die Sollpositionen dargestellt werden.
Verbindung von dSpace CP1104 zum Schaltschrank
Um in Zukunft alle Achsen der Fräse anzusteuern, musste ein Kabel hergestellt werden der das dSpace Paket (37-poliger Stecker) mit dem Schaltschrank der Fräse 25-poliger Stecker) verbindet. Das Kabel ist bereits für 5 Achsen ausgelegt, da in Zukunft eine Erweiterung der Fräse geplant ist.
Aufgrund einer ungünstigen Belegung im Schaltschrank wurde diese überarbeitet und im Anschluss ein neuer Schaltplan erstellt. Nach diesem Plan konnten sich alle Gruppen bei der Herstellung ihres Kabels richten.
Für den Schaltplan wurde noch eine Tabelle mit den Belegungen erstellt, um die Übersichtlichkeit zu gewährleisten
Starten einer Simulink Programmierung inkl. ControlDesk
Informationen zum Start einer Simulink Programmierung inkl. Anbindung von ControlDesk sind unter diesem Link zu finden: Datei:Start Simulink und ControlDesk.pdf
ControlDesk Oberfläche
Das Programm ControlDesk ist als Oberfläche für die Visualisierung und Steuerung des Simulinkprogramms genutzt worden.
Um das Programm auszuführen öffnet man zunächst das Programm "dSPACE ControlDesk 5.0". Als nächstes öffnet man ein vorhandenes Projekt und wählt das Programm "Experiment_001" in dem SVN Verzeichnis "MTR_GPE_Praktikum\Fachthemen\Automatisierung_Dspace\Simulink\AchseAnsteuerung" aus.
In dem Bild ist die erstellte Oberfläche dargestellt. Die Abbildung zeigt oberhalb einen Schieberegler, der für die Vorgabe der Sollposition verwendet wurde. Links oben ist eine Anzeige der aktuellen Position in Schritten integriert (Labels/IstSchritte).
Darüber hinaus ist ein Plotter für den Vergleich der Ist- und der Sollschritte eingefügt worden.
Mit den Schiebereglern links unten können die Pulsweite und die Periodendauer variiert werden.
Elemente zum ausgeben und vorgeben von Zuständen werden per "drag and drop" Auswahl über eine Bibliothek in die ControlDesk Oberfläche initialisiert.
Einlesen und Einregeln der Soll-Position
Eine weitere Aufgabe war das Einlesen einer Sollposition über die RS232 Schnittstelle an dem dSPACE CP1104 und das anschließende Anfahren dieser Position.
Aus einem String bzw. RS232-Kommando der Form „X10000Y12000Z08000F12345E“ soll eine Achse (X, Y oder Z) ausgewählt und die anzufahrende Position bestimmt werden. Der String arbeitet auf einer Basis von Schritten, wobei ein Schritt 0,01mm entspricht.
X10000 bedeutet eine Distanz von 100mm. Also muss die X-Achse auf die Position 100mm fahren. Mit dem F im gesendeten Kommando wird der Vorschub angegeben und das E kennzeichnet einfach das Ende des Strings. Zur Realisierung in Simulink und dSPACE wurde zunächst der DS1104SER_RX Block in Simulink ausgewählt. Mit diesem Block kann die serielle Schnittstelle in Simulink eingebunden werden. In der unten stehenden Abbildung erkennt man den Block mit seinen Ein- und Ausgängen. Auf den Eingang „NumBytes“ wurde eine Konstante mit der maximalen Anzahl der zu empfangenden Bytes gelegt. Außerdem gibt es drei Ausgänge:
1. RXBytes: hier werden die empfangenen Bytes ausgegeben
2. NumRXBytes: Angabe über die Anzahl der empfangenen Bytes
3. Status: Meldung, ob die Bytes angekommen sind oder ein Fehler beim Empfangen aufgetreten ist
Zum Funktionstest der seriellen Schnittstelle an dem dSPACE CP1104 mussten nun über den Comport des PCs testweise Daten geschickt werden. Dabei kann das frei herunterladbare Programm HTerm verwendet werden. Aufgrund eines Fehlers in unserem Programm, welchen wir erst in der letzten Stunde beheben konnten, haben wir es nicht mehr geschafft den Test mit HTerm zu machen. Das in der Abbildung "Serielle Kommuniktation" dargestellte Bild mit HTerm stammt von unseren Vorgängern. Wir haben das Bild gelassen, damit nachfolgende Gruppen sehen können wie man z.B. eine Buchstaenfolge eingibt und sendet. Die genauen Einstellungen für HTerm müssten jedoch selbst erarbeitet werden, da wir aufgrund unseres Programmfehlers nicht so weit gekommen sind. In der Abbildung erkennt man das testweise die Buchstabenfolge „acdc“ eingegeben und gesendet werden konnte. Der nächste Schritt war die Erstellung eines neuen ControlDesk Experiments. Hier wurde der RX-Block ausgewählt und die in der unteren Abbildung erkennbare Oberfläche aufgebaut.
Für jeden Ausgang des RX-Blocks ist ein Array erstellt worden. Im Variable Array 27 (Siehe Abbildung) ist die Zahlenfolge 97, 99, 100, 99 zu erkennen. Empfangen wurde die Buchstabenfolge „acdc“ im ASCII-Code.
Der empfangene Code muss nun in anderer Form in das vorhandene Simulink-Programm eingebunden werden. Im weiteren Verlauf wurde daher mit der Programmierung einer Matlab-Funktion begonnen. Die Idee dabei sieht wie folgt aus:
- Betrachtung der beispielhaften Datenreihe X 1 0 0 0 0 Y 1 2 0 0 0 Z 0 8 0 0 0 F 1 2 3 4 5 E
- Empfangen werden die Daten im ASCII-Code folgendermaßen: 88 49 48 48 48 48 89 49 50 48 48 48 90 48 56 48 48 48 70 49 50 51 52 53 69
- Nun soll das Programm zum Beispiel die Ansteuerung der Y-Achse übernehmen. Um die Position zu ermitteln, werden die Stellen 8 bis 12 des Strings betrachtet. Die Zeichen im String lauten: 1 2 0 0 0
- Im ASCII-Code werden sie folgendermaßen dargestellt: 49 50 48 48 48
- Im folgenden Schritt wird von jeder dieser ASCII-Zahlen der Betrag 48 abgezogen. Entstandene numerische Zahlen: 1 2 0 0 0
- Der letzte Schritt ist die Addition unter Berücksichtigung der Stellenwertigkeit der Zahlen, sodass sich als Ergebnis 12000 Hunderststelmillimeter ergibt.
Daraus ergibt sich folgender Quelltext für den FUnktionsblock:
function [x,y,z,f] = fcn(u)
x = (u(2)-48)*10^4+(u(3)-48)*10^3+(u(4)-48)*10^2+(u(5)-48)*10^1+(u(6)-48)*10^0;
y = (u(8)-48)*10^4+(u(9)-48)*10^3+(u(10)-48)*10^2+(u(11)-48)*10^1+(u(12)-48)*10^0;
z = (u(14)-48)*10^4+(u(15)-48)*10^3+(u(16)-48)*10^2+(u(17)-48)*10^1+(u(18)-48)*10^0;
f = (u(20)-48)*10^4+(u(21)-48)*10^3+(u(22)-48)*10^2+(u(23)-48)*10^1+(u(24)-48)*10^0;
Der dadurch ermittelte Wert für die Soll-Position kann nun an das Simulink-Programm weitergegeben werden. Der RX-Block wird also anstelle des Blocks „SollPos“ eingebunden.
Endschalter
Die Endschalter sollen in Zukunft über ein Relais realisiert werden. Der Motor wird durch einen Kurzschluss von Disable (Pin7) und CurrentSet (Pin12) gestoppt (siehe GeckoDrive Datenblatt). Für die Endschalter sollen Öffner verwendet werden, da somit auch bei einem Kabelbruch der Motor gestoppt werden kann. Ein Öffner schließt den Stromkreis im unbetätigten Zustand. Sobald er betätigt wird, wird der Stromkreis unterbrochen. Das Relais wird durch eine UND-Schaltung der beiden Schalter angesteuert. Wenn der Stromkreis unterbrochen wird, soll das Relais eine Verbindung zwischen Pin7 und Pin12 herstellen. Falls das Relais kein Signal bekommt, muss eine Verbindung bestehen. Somit muss das Relais ebenfalls als Öffner realisiert werden.
Herausforderungen
Während der Bearbeitung des Projektes sind diverse Herausforderungen aufgetreten, die für den Projekfortschritt hinderlich waren.
- Verständnis des alten Programms
- Falsche Verkabelung aufgrund von anderer Schnittstelle
- Wie es scheint benutzte die Vorgruppe eine andere dSpace Box, weshalb die alte Verkabelung des Testaufbaus nicht mehr passste. Dieses Problem zog sich auch durch das Simulink Programm.
- Einbindung einer Funktion zum Auslesen der RS232-Schnittstelle im Simulink-Programm für 3 Achsen
- Änderung der Ein- und Ausgänge von Funktion zum Auslesen
- Neue Vorgehensweise für die Endschalter --> Probleme beim Finden eines Ansatzes
Zusammenfassung
Im Wintersemester 2016/17 wurde das Projekt weiterentwickelt. Wichtige Schwerpunkte die ergänzt wurden, waren die Fertigung des Kabels, welches dazu dienen wird, die drei Achsen der Fräse anzusteuern. Des Weiteren wurde auch die Programmierung für drei Achsen erweitert sowie das Auslesen eines Strings, welcher über den G-Code von Matlab geliefert und über die RS232 Schnittstelle ausgelesen wird, ergänzt. Aus zeitlichen Gründen konnte zum Thema Endschalter nur die Theorie erarbeitet werden. Diese sollen wie bereits beschrieben später einmal über ein Relais integriert werden. Dies wäre eine Aufgabe, die von der nächsten Gruppe weiterfolgt werden müsste. Zusammenfassend kann man sagen, dass das Projekt bis auf wenige Schritte abgeschlossen ist. Es wurde ein fertiges Programm erstellt, mit welchem die Stringfolge ausgelesen wird und alle Daten so verarbeitet werden, dass sie auf die Fräse übertragen werden. Hierfür fehlt lediglich die Umrechnung des Vorschubs sowie ein Funktionstest. Desweiteren ist die Hardwareseitige Übertragung mithilfe eines Kabels realisiert worden. Somit können die dSpace-Box und die Fräse problemlos verbunden werden. Hierfür wurde eine Dokumentation erstellt und das Kabel lässt sich jederzeit erweitern. Es wurden auch schon Anschlüsse für die 4. und 5. Achse vorbereitet, welche zu einem späteren Zeitpunkt in Betrieb genommen werden sollen, sowie Relais eingeplant, mit welchen zum Beispiel der Staubsauger an- und ausgeschaltet werden kann. Mithilfe der einfachen Theorie für die Endschalter lassen sich diese sehr schnell hardwareseitig umsetzen.
Ausblick
Die nächsten und wahrscheinlich finalen Schritte in diesem Projekt, werden die Umsetzung der Theorie zu den Endschaltern in ein reales Ergebnis sein sowie die Inbetriebnahme aller drei Achsen an der Fräse. Für die Inbetriebnahme muss jedoch die Umrechnung des Vorschubs, wie im Abschnitt "Simulink Programm" erwähnt, umgesetzt werden. Zurzeit wird der Vorschubwert, der als String in das Programm eingeht direkt in den Pulse-Generator eingebracht. Dieser muss jedoch in einen geeigneten Wert umgerechnet werden. Die Pulseweite wird durch den Wert verändert und gibt somit vor, wie schnell hintereinander der Motor ein Schrittsignal erhält. Ein abschließender Funktionstest mit der fertigen Fräse sollte das Projekt abrunden.
Quellen
Die Bilder wurden selbst erstellt oder es handelt sich um Visualisierungen aus den benutzten Programmen Matlab/Simulink oder ControlDesk.
Dateien
Medium:DSpace-Abschlusspräsentation.pptx
Medium:Produktionstechnik Präsentation 2017.pdf
Alle für das Projekt relevanten Dokumente sind im SVN (Zugriffsrecht benötigt) zu finden.
Autoren: Madleine Kahr und Marcel Begere.
Zurück zur Projektseite 3-D-Bearbeitungsmaschine (Projekt des Schwerpunkts GPE im Studiengang MTR).