Ansteuerung einer Schrittmotor-Achse mit NI Labview

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Einleitung

Mein Name ist Raphael Bertelt,im Rahmen des Produktionstechnik II Praktikums war es meine Aufgabe mittels NI LabView die Ansteuerung einer CNC Achse zu realisieren. Die Gruppenmitglieder aus Wintersemester 2014/2015 sind: Felix Kortmann und Dominik Rebein ,waren bereits beteiligt. Der Artikel „Ansteuerung einer Schrittmotor-Achse mit NI Labview“ wurde im Wintersemster 2013/2014 durch Martin Klingen erstellt und im Wintersemester 2014/2015 weiter optimiert.


Regelkreis

Vor der Realisierung in Hardware und Software wurde zunächst ein Regelkreis für die Ansteuerung des Schrittmotors entworfen. Für die Ansteuerung des Schrittmotors wird ein Motorcontroller des Typs Gecko Drive verwendet. Dieser übernimmt die leistungsseitige Ansteuerung des Motors. Der Motor bewegt eine Linearachse, deren Bewegung für eine Achse einer Bearbeitungsmaschine verwendet wird. Der NI Controller fungiert als Steuerteil des Aufbaus, indem die benötigten Signale an den Motorcontroller gesendet werden. Über einen Motorpositionssensor ist es möglich, die Bewegungen des Motors softwareseitig einzulesen und für einen Regelkreis zu verwenden. Dabei soll der Weg s, den die Linearachse zurücklegt, geregelt werden. Den Regelkreis zeigt die folgende Abbildung 1.

Abbildung 1: Regelkreis für Schrrittmotoransteuerung

Belegungsplan für Motoransteuerung

Zunächst sollten die benötigten Eingänge und Ausgänge, die für die Funktion des Motors benötigt werden, definiert werden. In diesem Fall wurde zur Ansteuerung des Schrittmotors ein Leistungsmodul des Typs Gecko Drive verwendet. Aus dem Datenblatt lassen sich die notwendigen Informationen über die Beschaffenheit der benötigten Signale entnehmen.

Schließlich kann das Leistungsmodul mit dem Schrittmotor verbunden werden und entsprechende Leitungen für den Anschluss an den NI Controller verlegt werden.

In diesem Fall wurde nach dem Belegungsplan in Abbildung 2 verkabelt.

Abbildung 2: Belegungsplan für Schrittmotoransteuerung

Installation der Hardware

Um mit der Programmierung zu starten, muss zunächst ein leeres Projekt erstellt werden. Dieses enthält später alle Informationen, Schnittstellen und graphischen Oberflächen, die man für ein Programm benötigt.

Dafür muss die aktuell auf dem Computer installierte Version von National Instruments LabView gestartet werden. Es öffnet sich ein Fenster.

Dort muss zum Start die Option ==> Leeres Projekt erzeugen gewählt werden. Daraufhin zeigt sich der sogenannte Projekt-Explorer, welcher alle wichtigen Bestandteile des Projektes als auf-und zuklappbare Reiter darstellt.

Möchte man das Projekt mit einem Eingabe/Ausgabegerät verwenden, muss dieses zunächst hinzugefügt werden. Die folgenden Schritte beschreiben, wie ein I/O Controller cRIO 9024 in ein Projekt eingebunden werden kann.

Im Project-Explorer befindet sich nun das leere Projekt, dem nun die Hardware hinzugefügt wird:

• Rechtsklick auf das Projekt => Neu => Ziele und Geräte

• Im Ordner Real-Time CompactRIO befindet sich die über das Netzwerk verbundene HSHL-CRIO-CPU02 und wird über einen Doppelklick zum bestehenden Projekt hinzugefügt.


Abbildung 3: Leeres Projekt


Anschließend erscheint im Project-Explorer die Hardware Chassis (CRIO-9114). Das im Slot 1 befindliche Modul zeigt alle DIO´s (DIO = digital Input/Output) welche über einen Rechtsklick auf Mod1 konfiguriert werden können, d.h. die jeweiligen DIO´s können als Input oder Output definiert werden.


• Um potenzielle Fehler zu vermeiden, ist es sinnvoll den verwendeten Input bzw. Output direkt umzubenennen. Dazu muss lediglich doppelt auf die Bezeichnung des DIO (bspw. DIO20) im Projektexplorer geklickt werden und der gewünschte Name eingetragen und durch die Enter-Taste bestätigt werden.


Abbildung 4: Einbindung der Hardware CompactRIO


Die Hardware wurde nun mit dem Programm "bekannt gemacht" und kann verwendet werden.

Das folgende Kapitel beschreibt die notwendigen Schritte, um mit der Programmierung zu starten und welche Bestandteile die Programmieroberfläche aufweist.


Erweitertes Target-Programm mit Verarbeitung eines übernommenen Strings

In diesem Kapitel geht es darum einen String der übergeben wird zu speichern, diesen gespeicherten String in X-,Y-,Z- und F-Werte zu separieren und mit einer weiteren Funktion die separierten Sollposition anfahren zu können. Wie in der Abbildung … links zu erkennen ist erhalten wir in diesem Ausschnitt des Erweiterten Target-Programms den übergebenen String z.B. durch das Terminal Programm Hercules. Wie man ein RS232 Modul Einbindet und Funktionen in LabVIEW verbindet um im Endeffekt ein String zu übergeben, ist in dem Artikel „LabVIEW RS232 Schnittstelle“ nachzulesen. Aufgrund der While-Schleife, in dem Sich der Ausschnitt des Programms befinde, wird der übergebene String durchginge mit dem nächsten schleifendurchlauf überschrieben. Um aber einen String verarbeiten zu können benötigt man einen zusammenhängenden String, der zur Verarbeitung abgespeichert werden muss. Dies übernimmt die programmierte Funktion oben links in der Abbildung über dem Case-Struktur-Kästchen. Der übergebene String wird hier mit der Funktion „Strings verknüpfen“ mit dem zuletzt gespeicherten String verknüpft, sodass einzelne übergebene Zeichen miteinander verkettet werden können. Die darauffolgende Funktion „Teil-String“ begrenzt den zu speichernden String auf 20 Zeichen, welches die exakte Länge eins Strings ist, um X-,Y-,Z-, und F-Werte mit jeweils 4 Zahlen und einem abschließenden Semikolon z.B. „X1234Y1234Z1234F1234;“ zu erhalten. Die numerische Zahl 20 ist somit mit der Funktion am Eingang Länge zu verknüpfen. Die Rosanen Kästchen mit dem schwarzen Häuschen sind lokale Variablen die sich unter den Funktionen in der Registerkarte Datenaustausch befinden. Um eine Lokale Variable verwenden zu können müssen sie jedoch schon definiert bzw. vorhanden sein. Hierzu muss jedoch erst ein String-Anzeigeelement im Frontpanel erstellt werden. Durch einen Linksklick auf die lokale Variable lässt sich nun die zu verwendende Variable auswählen und durch ein Rechtsklick und auf „In ‚Lesen‘ ändern“ so ändern, dass die gespeicherte Variable bei der Funktion „Strings verknüpfen“ verwendet werden kann.

Unter der Funktion zum Speichern des Strings befindet sich eine Case-Struktur. Alle Funktionen die sich in dem Case-Struktur-Kästchen befinden, werden ausgeführt wenn der boolische Wert am Case-Selektor von 0 auf 1 ändert, da in der Voreinstellung der Case-Struktur die Bedingung des Ausführens True (boolesch = 1) ist. Die Bedingung, dass die Funktionen in der Case-Struktur ausgeführt werden wird hier durch eine ergleich realisiert. Wenn sich in dem übergebenen String ein Semikolon befindet, wird durch die „Gleich?“ Funktion der boolesche Wert 1 an die Case-Struktur übergeben und die sich darin befindenden Funktionen ausgeführt. In der Case-Struktur befindet sich wieder die lokale Variable „Speicher“, in der sich alle X-,Y-,Z- und F-Werte gespeichert wurden. Die sich in der Mitte befindenden Funktion „In String suchen“ kann den eingelesenen String in verschieden Formate umformatieren und teileweise, komplett oder unterteilt wieder ausgeben. Die sich darüber befindende Codierung „X%4dY%4dZ%4dF%4d“ realisiert, dass die Zahlen des Strings nach X,Y,Z und F alle natürlichen Zahlen Separat an verschieden Ausgängen ausgegeben werden. Die verschiedenen Codierungen sind in einer Tabelle in der erweiterten Hilfe von Labview hinterlegt. Die 0 am Eingang „Anfangssuchposition“ gibt lediglich ab welcher Stelle der String untersucht werden soll und ist daher mit 0 angegeben. Der Ausgang „verbleibender String“ sollte nach der Durchführung nichts ausgeben, da alle Werte verarbeitet werden sollten. Auch das Semikolon sollte im String nicht enthalten sein da die Case-Struktur im Programmablauf vor dem Speichern des Semikolons ausgeführt wird. Alle „gefilterten“ X-,Y-,Z- und F-Werte werden hier von den Ausgängen an das Frontpanel weitergeleitet und durch Numerische Anzeigeelemente visualisiert. Außerdem werden sie dadurch auch wieder in lokale Variablen gespeichert, um sie an anderer Stelle im Programm zu verwenden.

In der Abbildung … ist eine erweiterte Funktion des VI aus dem Kapitel „Verfahren einer vorgegebenen Wegstrecke“ dargestellt. Die Erweiterte Funktion ermittelt den Unterschied zwischen der Ist-Position zur Soll-Position und lässt den Motor in die Richtung fahren um zur übergeben Soll-Position zu gelangen. Wie in dem VI aus dem Kapitel „Verfahren einer vorgegebenen Wegstrecke“ wird dies mit Vergleichern realisiert. Die beiden Vergleicher „größer“ und „kleiner“ unterhalb der Funktion „Flache Sequenz“ addieren bzw. subtrahiert mit jedem Schleifendurchlauf immer eine 1 zur aktuellen Ist-Position. Um allerdings einen Wert von 1 zu addieren bzw. zu subtarieren benötigt man an dieser Stelle einen Konvertierer der boolesche Werte zu einen numerischen Wert konvertiert, da die Vergleicher keine numerischen Werte ausgeben können. Diese Funktion findet man unter der Registerkarte „Programmierung“ und „Boolesch“. Da die booleschen Werte einen Schalter zur Richtungsänderung ersetzen kann, wird hier eine Verbindung zum zuvor definierten Output des NI Controllers geschaffen (siehe Kapitel “Richtungsänderung des Schrittmotors“). Die Funktion erkennt nun in welche Richtig der Motor fahren muss, und gibt das Signal autonom an den Motor Controller weiter. Um den Motor bei Abweichung der Ist-Position mit dem Soll-Position fahren zu lassen, wird bei der erweiterten Funktion der Ist-Wert mit dem Soll-Wert der übergeben wurde verglichen. Dies übernimmt ein ungleich Operator „Ungleich?“. Bei Abweichung des Ist-Werts zum Soll-Wert wird auch hier ein True (1) an den DIO angelegt und der Motor dreht sich, wie im Kapitel „Ansteuerung eines Schrittmotors mit LabView“ beschrieben ist.

In der nächsten Abbildung sind die Endschalter Softwaretechnisch angesteuert. Dazu müssen Vier der While-Schleife hinzugefügt werden. Zwei müssen davon durch ein rechtsklick zu „lesen“ geändert werden und für eine Visualisierung auf dem Frontpanel mit LED’s verbunden werden. Damit das der Motor nicht weiter dreht, ist eine Verbindung wie oben links in der Abbildung … zu schaffen. „oder“ Operatoren dienen hier zu einer gefächerten Verbindung und Stoppen das Programm bei Betätigung eines Schalters. Zwei Umgebungsvariablen müssen dazu noch mit einer „True-Konstante“ verbunden werden und durch Linksklick auf die Umgebungsvariablen alle zuvor Konfigurierten Ausgänge ausgewählt werden.

Abbildung 7:Programmierung einer flachen Sequenz

Damit auch vom VI Einfluss auf diese Zeiten und damit die Fahrgeschwindigkeit des Schrittmotors genommen werden kann, ist ein Regler einzufügen, welcher außerhalb der „flachen Sequenzen“ liegt. Dieser kann mit beiden Warteelementen verbunden werden, da die Wartezeiten beider Zustände immer identisch sein sollte. (High- / Low-Flanken jeweils 50%)

Abbildung 8:Einstellung des Taktverhältnisses

Verbesserung der Achsengeschwindigkeit

Durch die Änderung des Parameters "Scan Period" im Unterpunkt "Scan Engine" bei den Einstellungen der "Real-Time CompactRIO Properties" aus Abbildung 16 kann die Geschwindigkeit der Achse eminent verbessert werden. Es wird davon ausgegangen, dass die Standard "Scan Period" von 20ms nicht ausreichend ist, um die Stepsignale in gewünschter Form zu übertragen. Die "Scan Period" ist die maximale Abtastrate zwischen CRio und dem NI9403-Modul.Durch eine schnellere Abtastrate ist es möglich, mehr Stepsignale an den Geko-Drive zu übertragen um somit die Geschwindigkeit der Achse zu erhöhen. Durch die Änderung dieses Parameters auf die minimale Zeit von 1ms war es möglich, eine erhebliche und ausreichende, maximal mögliche Geschwindigkeit zu erlangen.

Abbildung 16:Scan Time

Einbindung der RS232 Schnittstelle zur Datenübertragung (WICHTIG für weitere Praktika in diesem Bereich!)

Bisher wurde in diesem Artikel der Umgang mit LabVIEW beschrieben und die Programmierung eines funktionsfähigen Programmes zur Steuerung einer Achse erläutert. Ein weiterer wichtiger Bereich zur Realisierung einer autonomen Achsenbewegung ist allerdings die autonome Übergabe von Parametern zur Steuerung der Achse. Dabei ist es von Bedeutung, eine Real-Time Anwendung zu gewährleisten. Hierzu wird in dem Artikel LabVIEW RS232 Schnittstelle eine Möglichkeit aufgezeigt, Daten über die RS232 Schnittstelle zu erhalten und im Blockdiagramm weiterführend zu verwenden.

Aufgetretene Probleme

Falsche Datentypen:

Teilweise kann es bei zyklischen Abfragen eines bool'schen Datentyps (bspw. in jedem Durchlauf einer Schleife) zu Problemen kommen, wenn dieser Wert für die Abbruchbedingung der Schleife verwendet wird. Dabei wird ein Fehler angezeigt, dass es sich nicht um einen bool'schen Wert an sich, sondern um ein eindimensionales Array handelt.

National Instruments Support:

Im Kontext der Einbindung der RS232 Schnittstelle zur Übergabe von Parametern zur Motorbewegung konnte der Support leider keine Hilfestellung leisten. Der betreuende Mitarbeiter verwies auf die Vielzahl der Module von NI und konnte leider zu keiner Lösung beitragen. Dazu möchte ich anmerken, dass die Hilfe des Supports angenommen werden soll, jedoch vor allem bei spezifische Problemen es einer parallelen Eigenrecherche bedarf. Für weitere Informationen und Hilfestellungen beachten Sie bitte den eigenständigen Artikel LabVIEW RS232 Schnittstelle.

Ausblick

Encoder

Das aktuelle Programm stellt nur eine Steuerung des Motors dar. D.h. es wird davon ausgegangen, dass das Ausgangssignal der Steuerung eine entsprechende Bewegung des Motors zur Folge hat. Beispielsweise unter Belastung oder anderen Betriebszuständen kann die Ist-Position des Motors jedoch von der Soll-Position im Programm abweichen. Um diese Abweichung zu erkennen und ausgleichen zu können, kann ein Motorpositionssensor eingesetzt werden. Dieser wird auch als Encoder bezeichnet. Anhand des Beschaltungsplanes kann dieser an mehrere Eingänge des Controllers angeschlossen werden und so entsprechend die Position des Motors an das Programm übermittelt werden.

Auswertung des Strings über die RS232 Schnittstelle

Um eine autonome Achsensteuerung zu gewährleisten ist es nicht nur erforderlich, den String mit den nötigen Parametern für das Blockdiagramm zur Verfügung zu stellen. Weiterhin muss der relevante Teil des Strings für die definierte Achse ausgelesen werden.
Als Beispiel dazu dient folgender Code: X11111Y22222Z33333F44444E Ist die zu betreibende Achse beispielsweise die Y-Achse, so muss die Zahlenkombination "22222" als Verfahrweg und die Zahlenkombination "4444" als Vorschub abgespeichert und weiterverwendet werden.

Anhang

Datei:Automatisierung LabView.zip

Literatur