Archiv verlassen und diese Seite im Standarddesign anzeigen : Zusammenspiel Schrittmotor-Encoder
Ben Reiley
31.07.2014, 18:01
Hallo Leute,
mache schon lagern von diesem Forum Gebrauch und von nun an auch als Mitglied :)
Ich beschäftige mich seit einiger Zeit mit Schrittmotoren und komme gerade nicht ganz weiter. Ich versuche einen Programm zu schreiben für einen Linearaktuator (Schrittmotor mit Spindel) für eine Aushubeinheit. Diese soll ganz exakt auf unterschiedliche Höhen fahren können. Die Hardware, die Verbaut war, ist der
Schrittmotor: L4118L1804-T6X2
http://de.nanotec.com/produkte/677-l41-linearaktuatoren-mit-trapezspindel-feingewinde/
mit dem Encoder: NOE2-05-K10
http://de.nanotec.com/produkte/192-noe2-optischer-3-kanal-encoder/
dazu habe ich mir dann die Steuerung von Trinamic: TMCM-1160 geholt
http://www.trinamic.com/products/modules/controller-driver-stepper/tmcm-1160
nach einiger Zeit im Internet konnte ich noch immer keine Antwort auf einige Fragen finden.
Wie wird so eine Steuerung aufgebaut?
Sieht eine normaler Ablauf (grob) so aus, dass man die gewünschte Position einstellt, wartet, den Encoder-Wert abfragt und bei Differenzen noch einmal nachregelt? Oder prüft man permanent nach jedem Schritt ob Encoder- und Stellwert zu einander passen? Also kurz gesagt, wie sehen im Prinzip geeignete Algorithmen aus um ein genaues Ergebnis zu erzielen. Was für Strategien gibt es? Welche Vor- und Nachteile bringen Sie? Stehe da gerade irgenwie auf dem Schlauch und hoffe, ihr kommt mit sagen, wo ich mich in diese Thematik einlesen kann.
Wie setze ich die Funktionen der Trinamic Steuerung am Sinnvollsten ein?
Es gibt bei dieser Steuerung die Möglichkeit vordefinierte Befehle zu senden. Das eigentliche Programm, wird in C# geschrieben. Jetzt stellt sich mir halt die Frage, was ich alle lieber selber schreiben soll, oder wie gut komme ich mit den Möglichkeiten aus, die mir die Steuerung bietet. Rechen diese aus, um den gewünschten Ablauf zu bekommen? Hat da jemande Erfahrung? Leider gibt (mir) die Dokumentation nicht genügend Aufschluss. Ein Beispiel wäre: Man kann der Steuerung sagen, bei welcher Abweichung der Schrittzahl von dem Encoder Wert ein Fehler gemeldet wir. Wann wird das geprüft, ständig, alle paar Schritte, alle paar ms...? Sollte ich diese Überwachung lieber "manuell" machen....
Also ihr seht, dass mir zu dem Grundverständnis und zur Steuerung eine Menge Informationen fehlen und ich nicht erwarten kann, dass ihr mich jetzt an der Hand nehmt und da durch führt aber vielleicht kennt ja Jemand ein paar Quellen, aus denen ich mir das erarbeiten Kann (Internet, Bücher...) oder TMLC, C, C#, Beispielcode. Danke schon mal für die bis hierhin investierte Zeit ;-)
Grüße
Hi,
hoffe einige Fragen beantworten zu können:
Wie wird so eine Steuerung aufgebaut? -> da wäre es schön etwas mehr Input von dir zu bekommen!
Ich fange mal von Vorne an. Du hast eine Mechanik mit Linearaktuator und einer Trinamic Steuerung und willst eine Positioniersteuerung aufbauen. Du setzt dafür einen Schrittmotor sowie einen Encoder ein. Beide sind keine Absolutgeber, d.h. du musst beim Hochfahren/Neustart der Anlage/Einheit zunächst einmal eine Referenzfahrt durchführen (Einheit könnte ja im stromlosen Zustand von Hand bewegt worden sein). Hier eignet sich z.b. ein Induktiver Geber, Rollentaster oder ähnliches.
Ist der Nullpunkt der Maschine erreicht wird die Istposition in der Steuerung genullt oder auf einen definierten Wert gesetzt. Von da aus kannst du definierte Schritte fahren.
Zur Positionierung fährt du bsp. 100 Schritte rechtsdrehend (hängt von Mechanik sowie Übersetzung der Spindel ab). Allein für diese Positionierung (wenn deine statischen und dynamischen Kräfte + Sicherheitsfaktor < dem Motormoment sind) benötigst du überhaupt keinen Encoder. Falls die Kräfte grenzwertig sind, dann empfiehlt sich wie von dir genannt ein zusätzlicher Encoder zur Positonsüberwachung/Detektion von Schrittverlusten.
Bei der Detektion der Schrittverluste (Trinamicsteuerung bietet meines Wissens nach beides) gibt es zwei Möglichkeiten:
A) Das System erkennt eine zu große Abweichung von Soll- zu Istposition (Schleppfehler) und stopt mit einem Fehler den Antrieb
B) Das System erkennt während der Fahrt Abweichungen von Soll- und Istpositon und regelt spätestens beim Erreichen der falschen Zielposition nach
Vor- und Nachteile ergeben sich aus der Anwendung heraus. Wenn z.B. zwei Antriebe ineinander Laufen und synchronisiert sind (z.B. Kinematiken, elektronisches Getriebe), dann wäre es fatal einen Schleppfehler zu ignorieren und erst am Ende auszugleichen. Hier wäre ein sofortiger Stop sinnvoll. Wenn wie von die nur eine Achse vorhanden ist, die an Zeit x auf einer bestimmten Position ist, dann wäre ein Nachregeln an der Zielposition nur mit einer Verzögerung verbunden, die eventuell gar nicht störend ist.
Und damit wären wir bei einem wichtigen Thema, der Reaktionszeit der Steuerung. Hier wäre interessant was für eine Applikation hinter deiner Aushubeinheit steht und ob noch weitere Mechaniken einwirken.
Um prinzipiell einen Schleppfehler zu detektieren ist ein Regelkreis notwendig. D.h. in den Regler gehen die Sollpositon der Maschiene sowie die Istposition des Gebers und beide werden miteinander verglichen. Überschreitet die Abweichung einen festgelegten Wertebereich, führt die Steuerung die gewünschte Reaktion (Stop oder Nachregelung) durch. Dieser Vorgang sollte abhängig von der Applikation so schnell wie möglich passieren!
D.h haben wir nur eine einfache Hubeinheit und geht es nur um die richtige Zielposition, da spielt es vermutlich keine Rolle wenn die Detektion des Schleppfehlers erst nach z.B. 1 Sekunde erfolgt. Handelt es sich um eine schnelle Achse wo wegen Positionsfehlern Kollisionen möglich sind, dann bedeuten bei Geschwindigkeiten von 1m/s eine Reaktionszeit (Auswertung + Anhaltezeit) von 100 ms schon überschlagen 10cm Nachlaufweg.
Die Reaktionszeit ist also ein entscheidender Faktor. Passier die Schleppfehlerüberwachung direkt auf der Trinamic-Steuerung bekommst du Reaktionsgeschwindigkeiten von schätzungsweise < 5 ms. Wenn die Überwachung auf einem externen PC erfolgt, ist in deinem Überwachungskreis 2x die Kommunikationszeit enthalten. D.h. du schickst eine Telegramm an die Steuerung mit Anfrage der Istposition, diese Anfrage wird auf der Steuerung verarbeitet, und du erhälst ein Antworttelegramm mit aktueller Istpostition. Dieser Vorgang benötigt abhängig von der Schnittstelle Zeit. Super sind hier USB und CAN, eher schlechter sind RS232 und RS485.
Jetzt noch allgemein zu Trinamic Steuerungen. Hab ich selber auch schon eingesetzt und bieten eigentlich alle Möglichkeiten.
Betreiben kann man die Steuerung eigentlich in 3 Arten:
1.) Man schreibt ein Programm in der TMLC-Sprache und dieses wird auf die Steuerung geladen. Nach Anschalten der Steuerung läuft automatisch das Programm ab. In diesem Programm kann eigentlich alles gemacht werden. Ein-Aus-Gänge schalten und Abfragen, Positionierungen, Referenzfahrt bis Endschalter, Istwerte Nullen, Geschwindigkeiten ect. anpassen, Loops
2.) Man setzt alle Parameter der Steuerung über die Schnittstelle und ruft nacheinander vordefinierte Befehl auf, die dann von der Steuerung ausgeführt werden. Von den Befehlen her kann alles aufgerufen werden was auch unter 1.) gemacht werden kann
3.) Man schreibt mehrere vordefinierte Programme in die Steuerung und kann über eine Variable von Außen verschiedene Programmteile ausführen lassen
Kombinierter Betrieb von 1-3 ist ebenfalls möglich.
Hab alle Varianten schon gemacht, ist mehr oder weniger Geschmacksache. Die Programme auf der Steuerung müssen in TMCL-Sprache geschrieben werden, die Syntax ist aber recht überschaubar und mit ein wenig Übung sehr einfach. Wenn ich die Wahl hätte würde ich extern das Programm schreiben (dort kann dann die bevorzugte Programmiersprache verwendet werden, in meinem Fall C++) und die vordefinierten Befehle verwenden.
Noch gut zu wissen:
Bei den Steuerung wird ein Konfigurationsprogramm für einen PC mitgeliefert, kann man sich auch runterladen. Alle fest definierten Parameter (Geschwindigkeit, Beschleunignung, Schleppfehlerüberwachung, Schleppfehlerreaktion...) die immer konstant sind müssen nicht per selbst geschriebenen Programm gesetzt werden, sondern können über das mitgelieferte Konfigurationsprogramm eingestellt und dauerhaft im Eprom gespeichert werden. Damit bleiben die Werte auch bei Stromausfall erhalten!
Wenn man das alles vorher schon sauber macht, dann ist das selbst geschriebene Programm meist nur ein paar Zeilen lang. Hier kann man z.b. auch die Reaktion bei einem Schleppfehler sowie die zulässige Abweichung eingestellen.
Gruß Joe
Ben Reiley
04.08.2014, 11:56
Hallo Joe,
vielen Dank schon mal für die super ausführliche Antwort!!! :Strahl
vielleicht erst noch ein paar fehlende Informationen vorne weg, die unter anderem von Bedeutung für die von dir angesprochenen Punkte sind:
Die Endposition der Aushubeinheit ist variabel, da sie von der Größe des Prüflings und der darüber angebrachten Kontaktiereinheit abhängt.
Die maximal mögliche Strecke beträgt 200mm. Der Weg sollte natürlich so schnell wie möglich zurück gelegt werden und erst auf dem Letzten Stück
langsam ein die Kontaktierung einfahren. Dort befindet sich dann auch Mechanik, die verfahren wird.
So, hoffe du hast jetzt ein genaueres Bild der Anwendung.
Nun zu deinen Aussagen.
Zu der Referenzfahrt.
Ein Referenzfahrt hatte ich vorgesehen. Wäre es hier Sinnvoll/Unsinnig die Ruheposition als 0-Position zu nehmen und bei jedem Zurückfahren der Einheit meine Referenz zu nullen?
Zu der Trinamicsteuerung mit Encoder:
Den Punkt A) habe ich bereits gefunden, allerdings konnte ich noch keine "vorhandene" Funktion wie in punkt B) finden. Werde aber noch weiter suchen.
Da hier nur die Endposition wichtig ist, darf das Nachregeln auch erst zum Schluss erfolgen. Die Funktionalität von Punkt A) könnte man dann als Überwachung von zum Beispiel Kollisionen verwenden?!
Den StallGuard finde ich in diesem Zusammenhang etwas Knifflig. Habe mich daran versucht und festgestellt, dass ich immer wieder neue Werte für unterschiedliche Prüflinge (Gewicht) und Geschwindigkeiten ermitteln und übergeben müsste. Wofür es allerdings (in meinen Augen) viel Sinn machen würde, ist das letzte Stück, bei dem der Prüfling in die Kontaktierung einfahren soll. Dort ist jede Kollision dann kritisch.
Zu den Betriebsarten.
Ich denke, dass der 2. Punkt die Beste Lösung ist, da hier der ganze Ablauf Zentral von der Prüfsystemsoftware gehandelt werden kann.
Jetzt ist aber noch ein weiteres Problem aufgetaucht. Mein verbauter Encoder macht 4000 Impulse pro Umdrehung, was bedeutet, dass er 16000 Schritte pro Umdrehung macht (wie ich erst nach vielem Rumprobieren und Rücksprache mit Trinamic raus bekommen habe, muss dieser Wert noch mit 4 multipliziert werden). Die Trinamic Steuerung verwendet für dieses Signal einen Prescaler der wie folgt berechnet wird: Prescler=Wert/512.
Wenn ich die Encoderschritte 1:1 auswerten will, muss ich Wert=512 einstellen, denn 512/512=1 -> 1*16000=16000. Und hier ist das Problem. Der Encoder ist dezimal aufgelöst und die Steuerung auf eine binäre Auflösung ausgelegt. Wenn ich also die Funktionen für Schleppfehler verwenden möchte, müssen die Encoderschritte mit den Motorschritten übereinstimmen, was wegen dem Teilen durch 512 nie der Fall sein kann!?
Somit müsste ich die Überwachung dann wohl doch selber machen, oder? Die Firma des Mors bietet für diesen Typ keinen binär aufgelösten Encoder an :(
Freue mich schon auf Weitere Anregungen :D
Beste Grüße
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.