Ansteuerung einer Schrittmotor-Achse mit dSpace DS1104 und Matlab/Simulink

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

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. Im Wintersemester 2019/20 wurde es von Valentin Joshua Schniederkötter und Matthias Giller weiter bearbeitet.

Aufgabenstellung

Die Aufgabenstellung war, die Schrittmotoren der 3D-Bearbeitungsmaschine, welche zum Verfahren der Achsen genutzt werden, mittels dSPACE DS1104 in Verbindung mit Matlab/Simulink zu steuern. Die Ansteuerung der Schrittmotoren wird jeweils über einen Geckodrive G201X realisiert. Um die anzufahrenden Punkte im dreidimensionalen Raum zu übermitteln, wird ein String aus einem Steuerungsalgorithmus über die Schnittstelle RS232 übergeben. Dieser überträgt entweder einen Referenzbefehl zum Bestimmen der aktuellen Positionen der X-, Y- und Z-Achse oder zum Anfahren an die jeweilige Soll-Position im Raum. Der Referenzbefehl wird in dem Format „U11111V22222W33333“ und der Fahrbefehl in dem Format „X11111Y22222Z33333F44444“ erzeugt. Die Zahlenwerte der drei Achsen sind jeweils Positionen auf ein zehntel mm genau. Am Ende des Fahrbefehls wird der Vorschub F in mm/min festgelegt.

Die Aufgaben für die Realisierung aus der Anforderungsdefinition lauten:

  • Software
    • Matlab/Simulink mit dSPACE in Betrieb nehmen
    • String auslesen via RS232
    • String auswerten
    • Schrittmotoren referenzieren
    • Schrittmotoren ansteuern
  • Hardware
    • Ausgänge auf dem dSPACE DS1104 definieren
    • Ausgangssignale überprüfen
  • Schnittstellen
    • Bestehendes Verbindungskabel (Sub-D-Stecker) auf Funktionalität prüfen
    • RS232-Kommunikation herstellen

Funktionaler Systementwurf

Der funktionale Systementwurf stellt das System und seine Funktion nach dem EVA-Prinzip (Eingabe-Verarbeitung-Ausgabe) dar. Zur Eingabe wird der G-Code mit Referenzposition und Verfahrbefehl über ein RS232 Signal eingelesen. Zur Verarbeitung werden die eingelesenen Befehle differenziert und zur Berechnung von relativen Verfahrwegen und der Fahrtgeschwindigkeit, bezogen auf die jeweilige Achse, genutzt. Für jede Achse wird anhand dieser Berechnung die Frequenz des Schrittimpulses sowie der Richtungssignale generiert. Diese werden in der Ausgabe über digitale Signale an die CNC Fräse übergeben.

Funktionaler Systementwurf - Original-Datei: Datei:Funktionaler Systementwurf.xlsx

Technischer Systementwurf

Über eine RS232 Schnittstelle wird ein String für einen Fahr- oder Referenzierungsbefehl übergeben. Dieser String wird durch einen Algorithmus aufgeschlüsselt.

Der Referenzierungsbefehl beinhaltet absolute Positionsbefehle der Positionen U, V und W in . Diese Positionen werden für jede Achse gespeichert. Bei einem Fahrbefehl werden sowohl X-, Y-, Z-Positionen in als auch die Fahrgeschwindigkeit F in übergeben. Anhand der aktuellen Motorpositionen werden die relativen Verfahrwege für jeden Motor berechnet. Die Motorgeschwindigkeiten müssen für jede Achse angepasst werden, dass die Motoren zur selben Zeit die Sollposition erreichen. Dies wird durch den Satz des Pythagoras berechnet. Durch die relativen Verfahrwege im Bezug auf die zugehörige Geschwindigkeit wird ein pulsierendes Signal auf einem Ausgang der Schnittstelle, welche einen 37-poligen Stecker besitzt, gelegt.


Technischer Systementwurf - Original-Datei: Datei:Technischer Systementwurf.xlsx

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.

Schaltplan dSpace-Geckodrive-Schrittmotor


Die Pinbelegung am SubD-Stecker der war von Bedeutung, damit für den Versuchsaufbau die benötigten Pins (GND;IO1) belegt werden konnten.

Pinbelegung CP1104


Die vorhandene Hardware für den Testaufbau besteht aus:

  1. DSPACE DS1104 R&D Controller Board mit dSPACE CP1104
  2. Achse mit Schrittmotor
  3. GeckoDrive
  4. Power Supply


In der folgenden Abbildung ist die Verbindung der einzelnen Komponenten miteinander zu sehen.


Testaufbau einer Achse mit Ansteuerung durch dSpace

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.

Regelkreis dSpace


Realisierung des Projekts bis Wintersemester 2016/17

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


Ablaufdiagramm - Achsenansteuerung mit DSpace


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.


PWM-Signal zur Motoransteuerung


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 5 V.

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.


Programm dSpace Simulink


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.

Programmierung für 3 Achsen mit Subfunktionen

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.

Steckerverbindung zum Schaltschrank

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.

Schaltplan Steckerverbindung zum Schaltschrank

Für den Schaltplan wurde noch eine Tabelle mit den Belegungen erstellt, um die Übersichtlichkeit zu gewährleisten

Pin Belegung bei CP1104 Belgeung an der CP1104 Belgeung bei LPT-Ports Belgeung im Schaltschrank
1 GND Strobe
2 IO1 Direction x-Achse IO0 Step x-Achse
7 GND IO1 Direction x-Achse
8 IO9 Direction y-Achse IO2 Step y-Achse
9 IO11 Step y-Achse IO3 Direction y-Achse
10 GND Common y-Achse IO4 Step z-Achse
11 IO13 IO5 Direction z-Achse
12 IO15 IO6 Step Roatationsachse
13 GND IO7 Direction Rotationsachse
14 IO17 Direction z-Achse IO8 Step Extruder
15 IO19 Step z-Achse IO9 Direction Extruder
16 GND Common z-Achse IO10 Relais Spindel
17 GND IO11 Relais Staubsauger
18 GND IO12 Relais noch frei
19 GND Schirm IO13
20 IO0 Direction Rotationsschub IO14
21 IO2 Step Rotationsachse IO15
22 GND Common Rotationsachse GND
23 IO4 GND
24 IO6 GND
25 GND GND Common x-Achse
26 IO8 Direction Extruder GND Common y-Achse
27 IO10 Step Extruder GND Common z-Achse
28 GND Common Extruder GND Common Rotationsachse
29 IO12 GND Common Extruder
30 IO14
31 GND Relais Spindel
32 IO16 Relais Staubsauger
33 IO18 freies Relais
34 GND
35 GND
36 VCC +5V
37 VCC +5V


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,1mm entspricht.

X10000 bedeutet eine Distanz von 1000mm. Also muss die X-Achse auf die Position 1000mm 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.


Aufbau der seriellen Kommunikation - links: Simulinkmodell, rechts: ControlDesk-Experiment


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.

Theorie der Endschalter


Realisierung des Projekts bis Wintersemester 2019/20

Der Projektteil der Entwicklung wurde in drei Teile aufgeteilt.

  • Überprüfung der besetehenden Hardware
  • Entwicklung eines Simulink-Programms
  • Herstellung der RS232-Kommunikation

Sie werden im folgenden genauer beschrieben.

Überprüfung der bestehenden Hardware

Zur Verbindung zwischen DS1104 und der 3D-Bearbeitungsmaschine wurde bereits ein Kabel gebaut (Verbindung von dSpace CP1104 zum Schaltschrank). Dieses wurde auf Funktion und Verdrahtung überprüft. Die Durchgangsmessung und die Verpolung nach Schaltplan war korrekt.

Entwicklung eines Simulink-Programms

Als Grundlage für das Simulink-Programm dient der Technische Systementwurf. Zunächst wird das Programm in 4 Teile aufgeteilt:

  • RS-232 Signal auslesen und Berechnung
  • Antrieb X-Achse
  • Antrieb Y-Achse
  • Antrieb Z-Achse

Dieses Hauptprogramm ist hier zu sehen:

Hauptprogramm Übersicht

Die Blöcke "Rate Transition" sind für die Entkopplung zuständig. Dies ermöglicht eine unabhängige und parallele Ansteuerung der Achsen. Im Oberen Bereich sind die zwei Konstanten "Treiberverhältnis" und "mm pro Schritt", welche bei Verwendung von anderen Treibern oder anderer Übersetzung angepasst werden können.

Auf der rechten Seite werden die Ausgänge, welche mit den Achsen verbunden werden, gesteuert. Zusätzlich werden die Positionen und Steuersignale mit jeweils einem Scope versehen, um die Werte im ControlDesk überprüfen zu können.

RS-232 Signal auslesen und Berechnung

Dieser Programmblock ist für das Auslesen des RS232-Signals und für die Berechnung der jeweiligen Vorschübe zuständig.

Programmblock ASA_RS232readAndCalc für das Auslesen des RS232-Signals und die Berechnung der Vorschübe

Über den Block DS1104SER_RX wird der String, welcher über die RS232-Schnittstelle übertragen wird, ausgelesen. In der Matlab-Funktion wird dieser String verarbeitet.

%Referenzbefehl
if u(1) == 85
    ASA_xSpeicher_u16 = double(u(2)-48)*10^4 + double(u(3)-48)*10^3 + double(u(4)-48)*10^2 + double(u(5)-48)*10^1 + double(u(6)-48)*10^0;
    ASA_ySpeicher_u16 = double(u(8)-48)*10^4 + double(u(9)-48)*10^3 + double(u(10)-48)*10^2 + double(u(11)-48)*10^1 + double(u(12)-48)*10^0;
    ASA_zSpeicher_u16 = double(u(14)-48)*10^4 + double(u(15)-48)*10^3 + double(u(16)-48)*10^2 + double(u(17)-48)*10^1 + double(u(18)-48)*10^0;
    ASA_speichern_bit = 1;
    
    ASA_xSoll_u16 = ASA_xSpeicher_u16;
    ASA_ySoll_u16 = ASA_ySpeicher_u16;
    ASA_zSoll_u16 = ASA_zSpeicher_u16;
    ASA_vX_u16 = 100;
    ASA_vY_u16 = 100;
    ASA_vZ_u16 = 100;

Dieser Teil der Matlab-Funktion ist für die Referenzierung zuständig. Ist der erste Buchstabe des Strings ein "U", handelt es sich um einen Referenzbefehl. Der String wird aufgetrennt und die Zahlen werden ausgelesen. Im Anschluss daran werden die Positionen gespeichert.

%Fahrbefehl
elseif u(1) == 88
    %Sollpositionen werden aus dem String ausgelesen

    ASA_xSoll_u16 = double(u(2)-48)*10^4 + double(u(3)-48)*10^3 + double(u(4)-48)*10^2 + double(u(5)-48)*10^1 + double(u(6)-48)*10^0;
    ASA_ySoll_u16 = double(u(8)-48)*10^4 + double(u(9)-48)*10^3 + double(u(10)-48)*10^2 + double(u(11)-48)*10^1 + double(u(12)-48)*10^0;
    ASA_zSoll_u16 = double(u(14)-48)*10^4 + double(u(15)-48)*10^3 + double(u(16)-48)*10^2 + double(u(17)-48)*10^1 + double(u(18)-48)*10^0;
    ASA_xSpeicher_u16 = ASA_xSoll_u16;
    ASA_ySpeicher_u16 = ASA_ySoll_u16;
    ASA_zSpeicher_u16 = ASA_zSoll_u16;

    %temporäre Sollgeschwindigkeit
    ASA_f_u16 = double(u(20)-48)*10^3 + double(u(21)-48)*10^2 + double(u(22)-48)*10^1 + double(u(23)-48)*10^0;
    %Relative Verfahrwege
    ASA_xRel_u16 = double(ASA_xSoll_u16 - ASA_xIst_u16);
    ASA_yRel_u16 = double(ASA_ySoll_u16 - ASA_yIst_u16);
    ASA_zRel_u16 = double(ASA_zSoll_u16 - ASA_zIst_u16);
    
    
    %Berechnung der Gesamtstrecke
    ASA_c_u16 = sqrt( sqrt( ASA_yRel_u16^2 + ASA_xRel_u16^2 )^2 + ASA_zRel_u16^2 );
    
    %Berechnung der einzelnen Geschwindigkeiten
    ASA_vX_u16 = double(sqrt((ASA_xRel_u16 / ASA_c_u16 * ASA_f_u16)^2));
    ASA_vY_u16 = double(sqrt((ASA_yRel_u16 / ASA_c_u16 * ASA_f_u16)^2));
    ASA_vZ_u16 = double(sqrt((ASA_zRel_u16 / ASA_c_u16 * ASA_f_u16)^2));
    ASA_speichern_bit = 0;

Dieser Teil der Matlab-Funktion berechnet den Fahrbefehl. Die Sollpositionen werden zunächst ebenfalls ausgelesen. Zusätzlich wird die Vorschubsgeschwindigkeit F ausgelesen. Danach werden die relativen Verfahrwege (Sollposition - Istposition) berechnet und gespeichert. Nach dem Satz des Pythagoras werden die Vorschübe jeder einzelnen Achse berechnet. Das ist nötig, damit die Achsen zum gleichen Zeitpunkt die jeweilige Sollposition erreichen. Die Berechnung wurde zusammen mit der Gruppe "Ansteuerung einer Schrittmotor-Achse mit Mikrocontrollern am Beispiel eines Arduino-Mega" und ist hier beschrieben: [Funktionaler Systementwurf].

Die Gleichung für die Berechnung der jeweiligen Achsgeschwindigkeiten sind hier aufgelistet:

Gesamtstrecke s:

Vorschubgeschwindigkeit der Achse X:

Dann werden die Sollpositionen und Vorschübe jeder Achse ausgegeben.

Ansteuerung der Achsen

Die Funktionsblöcke der Achsen sind identisch. Die Achsensteuerung weiß zu jeder Zeit die aktuell angenommene Istposition (1) und die Sollposition (2). Bei einem Referenzbefehl wird die Ist- und Sollposition überschrieben, so dass die Steuerung am Zielort angekommen ist und den Motor nicht steuert. Bei einem Fahrbefehl wird die Sollposition verändert. Daraufhin wird abhängig von der Vorschubgeschwindigkeit (3) bei jedem Schritt die Istposition einen Schritt (Größe abhängig von der gewählten "mm pro Schritt") an die Sollposition angenähert. Mit dem PWM-Generator (4) wird dementsprechend ein Pulssignal erzeugt.

Dies wird so lange durchgeführt, bis die Sollposition an der Istposition angelangt ist. Jedoch wird aufgrund der Schrittgröße "mm pro Schritt" der Punkt u.U. nicht exakt getroffen. Daher ist der Vergleich mit der Toleranz einer Schrittgröße versehen.

Programmblock ASA_axisX für die Ansteuerung der X-Achse

Der Funktionsblock "Schrittzähler" beinhaltet die Berechnung des Ist- und Sollposition-Vergleichs. Sie ist folgendermaßen realisiert:

if (ASA_speichernAktiv_bit == 0)
    if (ASA_sollPos_u16 > (ASA_istPos_u16 + ASA_mmProSchritt_u16))
        ASA_istPosOut_u16 = ASA_istPos_u16 + (10 * ASA_mmProSchritt_u16 / ASA_treiberverhaeltnis_u16);
        ASA_fahren_bit = 1;
        ASA_richtung_bit = 1;
    elseif (ASA_sollPos_u16 < (ASA_istPos_u16 - ASA_mmProSchritt_u16))
        ASA_istPosOut_u16 = ASA_istPos_u16 - (10 * ASA_mmProSchritt_u16 / ASA_treiberverhaeltnis_u16);
        ASA_fahren_bit = 1;
        ASA_richtung_bit = 0;
    elseif (ASA_sollPos_u16 == ASA_istPos_u16)
        ASA_istPosOut_u16 = ASA_istPos_u16;
        ASA_fahren_bit = 0;
        ASA_richtung_bit = 0;
    else      
        ASA_fahren_bit = 0;
        ASA_richtung_bit = 0;
        ASA_istPosOut_u16 = istPos;
    end
else
   ASA_fahren_bit = 0;
   ASA_richtung_bit = 0;
   ASA_istPosOut_u16 = istPos;
end

Herstellung der RS232-Kommunikation

Bei der Herstellung einer Kommunikation über die RS232-Schnittstelle wurde Hterm verwendet. Zunächst wurde die Verbindung über das Kabel hergestellt. Im Anschluss daran wurde sekündlich der String "U11111V22222W33333" übertragen. Empfangen wurde jedoch nur der String "22W33333000000000000000". Nach intensiver Recherche konnte das Problem gelöst werden. Der Puffer des Recieve-Blocks war zu klein eingestellt. Außerdem darf der String erst übergeben werden, wenn alle Bits (23) empfangen wurden.

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.

ControlDesk Oberfläche

Inbetriebnahme eines Schrittmotors

Bei der Inbetriebnahme wurde zunächst nur über das ControlDesk gearbeitet.

  • Bei dem Referenzierbefehl werden die Istpositionen der drei Achsen gesetzt
  • Bei dem Fahrbefehl werden die Sollpositionen gesetzt und die Achsen verfahren parallel
  • Die Vorschübe werden für jede Achse einzeln richtig berechnet
    • Die Achsen erreichen nahezu gleichzeitig ihre jeweilige Sollposition

Im Anschluss daran wurde die X-Achse angeschlossen und verfahren. Die Funktion ist gegeben und die Achse fährt sowohl vorwärts als auch rückwärts. Der Verfahrweg entsprich jedoch nur einem Zehntel des erwarteten Weges. Bei der Fehlersuche stellte sich heraus, dass das fehlende Treiberverhältnis die Ursache war. Nach Beheben des Fehlers, entsprach der erwartete Verfahrweg dem gemessenen Verfahrweg.

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
  • Wintersemester 2019/20
    • Es gab starke Lizenz-Probleme vom ControlDesk 5.0, welche aber durch hervorragenden Support seitens dSPACE nach intensiver Fehlersuche behoben werden konnten
    • Das Auslesen des RS232-Signals war zunächst fehlerhaft, konnte aber gelöst werden

Zusammenfassung

Im Wintersemester 2016/17 wurde das Projekt um einige wichtige Schwerpunkte weiterentwickelt:

  • Fertigung des Kabels, welches dazu dienen wird, die drei Achsen der Fräse anzusteuern
  • 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
  • Erarbeitung der Theorie zu den Endschaltern, welche später über ein Relais integriert werden sollen
    • Aus zeitlichen Gründen konnten wir das ganze Hardwareseitig nicht mehr umsetzten


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
    • Das Programm wurde neu entwickelt und der Funktionstest wurde im Wintersemester 2019/20 durchgeführt; Der Test war erfolgreich und die Ansteuerung der Achsen ist funktionsfähig
  • Realisierung der Hardwareseitigen Übertragung mithilfe eines Kabels
    • Somit können die dSpace-Box und die Fräse problemlos verbunden werden
    • Hierfür wurde eine Dokumentation erstellt
    • Das Kabel lässt sich jederzeit erweitern, denn 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.

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. Ziel der nächsten Gruppe sollte es sein, das Projekt ab diesem Stand weiterzuführen. Die vorherigen Tests von dem Programm wurden bestanden und die Integration in das Gesamtsystem dürfte ohne größere Probleme möglich sein.

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, Valentin Joshua Schniederkötter und Matthias Giller.

Zurück zur Projektseite 3-D-Bearbeitungsmaschine (Projekt des Schwerpunkts GPE im Studiengang MTR).