Servo Motoren haben gegenüber Schrittmotoren Vorteile die vor allen Dingen bei großen Maschinen zum tragen kommen. Im Wesentlichen sind das größere Drehmomente und höhere Geschwindigkeiten. Die Geschwindigkeit wird dabei standardgemäß über analoge Spannungen von -10 bis +10V gesteuert.
Servomotoren selbst haben allerdings kein festes Schrittraster um die Position zu ermitteln, daher kommen bei Servomotoren Tachogeber und Quadraturencoder für die Positionsermittlung zum Einsatz.
Tachogeneratoren sind meistens direkt mit der Servoendstufe verbunden welche in einem eigenen Regelprozess für eine konstante Geschwindigkeit sorgen. Stellt sich also ein zu fräsendes Brett in den Weg bekommt der Motor alle nötigen Kraftreserven um seine "befohlene" Geschwindikeit bei zu behalten.
Sind keine Tachogeneratoren im Spiel fällt diese Aufgabe ebenso an den PID Regeler von LinuxCNC.
Der PID Regler von LinuxCNC vergleicht ständig die reale Position welche vom Encoder empfangen wird mit der Spannung die den Servo steuert und passt diese ggf. an wenn Abweichungen ermittelt wurden. Die Anpassung der Spannung hat Ihrerseits wieder Einfluss auf die Positon die vom Encoder empfangen wird, so dass eine relativ komplexe Wechselwirkung entsteht die als Regelkreis bezeichnet wird.
Die Komplexität des Regelkreises ergibt sich dabei vor allen Dingen durch das einwirken von so genannten Störgrößen wie die Trägheit um eine Achse zu Bewegen oder die härte des Materials das bearbeitet wird. Diese Störgrößen erfordern eine ständige und schnelle Anpassung in nicht vorhersehbarem Maße, was das Auffinden der nötigen Parameter zu einem echten Abenteuer machen kann.
Nicht unerwähnt bleiben soll die Tatsache das Servosysteme wie z.B. von ESTUN mittlerweile die Option bieten Servos über Impulse wie Schrittmotoren zu steuern, alle Regelaufgaben werden von der Endstufe justiert, was die Einrichtung solcher Antriebe deutlich vereinfachen kann.
Wichtig: Servo Antriebe die im kW Leistungsbereich arbeiten sind kein SPEILZEUG sie können Aggregate mit mehreren 100kg Gewicht mit einem "Knall" auf mehrere Meter pro Sekunde beschleunigen !!! Was unweigerlich zu Schäden an Mensch und Maschine führt wir Empfehlen daher vor den ersten Versuchen die folgende Prozedur-Beschreibung gründlich zu lesen.
Darüber hinaus distanziert sich das Unternehmen Lonnox sowie der Inhaber (Kai Masemann) hiermit von jeglichen Schadensersatzforderungen die aus der folglichen Prozedur entstehen, der Artikel ist nach bestem Wissen und Gewissen verfasst und baut auf Erfahrungen mit Maschinen in verschieden Größen von Weeke, Klopp, IMA und weiteren Firmen auf. Fehler oder Missverständnisse können aber dennoch nicht vollständig ausgeschlossen werden.
Um konkrete Begrifflichkeiten nutzen zu können verweden wir für die Einrichtung eine Mesakarten Kombination aus einer 6i25 und einer 7i77. Die Encoder sollten dabei bereits angeschlossen sein, während die analogen Eingänge der Servo Endstufen vorerst noch nicht angeschlossen sein sollten.
Nach dem start der LinuxCNC Konfiguration, die z.B. mit dem PncConf Wizard erstellt werden kann, wird als erstes die Kalibrierung... über das Maschine Menü aufgerufen.
Begriffserklärung:
ENCODER_SCALE | Anzahl der Impulse für 1mm |
P | Propotional Wert des PID. Gibt an wie stark der PID Regler grundsätzlich reagieren soll. |
I | Integral Wert des PID. Gibt an wie stark auf Verzögerungen reagiert werden soll. |
D | Differential Wert des PID. Dämpft zu schnelle Reaktion des Reglers um einem Aufschwingen entgegen zu wirken. |
BIAS | Bekommt die Endstufe eine Spannung von 0V (P=0) sollte der Motor/die Achse theoretisch stehen. Ist eine Drift vorhanden kann diese mit dem BIAS Wert heraugetrimmt werden. |
FF0 bis 2 | Werte für die Kompensation spezieller mechanischer Vorraussetzungen wie z.B. wenn Achsen über größer/kleiner werdende Winden bewegt werden. |
DEADBAND | Gibt an bei welcher Abweichung keine Regelung mehr erforderlich ist. |
MAX_OUTPUT | Begrenzt die Ausgangsspannung des PID Regel (nach der Scalierung) auf den angegebenen Wert in Volt. |
OUTPUT_SCALE | Der PID Regler Arbeitet intern mit Werten von -1 bis +1 (-100% bis +100%) was z.B. über den Wert 10 auf -10 bis +10 hochscaliert werden kann. |
Tune 0 bis 2 | Tune 0 = X Achse; Tune 1 = Y Achse; ... |
Im ersten Schritt sollten ein paar Dinge gründlich geprüft werden.
Bekommt der PID Regler keine Rückmeldung vom Encoder, geht der PID Regler davon aus das die Motoren mehr Dampf braucht um ihre Position zu erreichen. Diese Annahme 1000 x pro Sekunde sorgt in kürzester Zeit für 10V an den analogen Ausgängen, daher ist es wichtig das die Encoder vor der Inbetriebnahme der Servos eingestellt und getestet werden.
Dazu wird der ENCODER_SCALE Wert berechnet, LinuxCNC aufgerufen und im Menü Maschine die Kalibrierung gewählt.
P,I,D,BIAS,FF und Deadband sollten dabei den Wert 0 haben, MAX_OUTPUT den Wert 0.1 und OUTPUT_SCALE den Wert 10.
Ist der errechnete encoder scale Wert eingetragen wird dieser mit einem Klick auf Test und OK übernommen. Beim Verschieben der entsprechende Achse per Hand kann dann in der schwarzen 3D Vorschau die Positionsänderung beobachtet werden.
Auf diese Weise können folgende Punkte kontrolliert werden:
Der MAX_OUTPUT Wert begrenzt die maximale Spannung der analogen Ausgänge und ist ein wichtiges Instrument um das Risiko der Tests zu minimieren.
Das Funktioniert jedoch nur wenn die Mesakarte richtig konfiguriert wurde. Um auch hier auf Numer sicher zu gehen sollten Parameter die mit dem Wert in Verbindung stehen ebenfalls geprüft werden. In der [AXIS_] Sektion der INI Datei müssen bei der Verwendung einer 7i77 folgende Werte zu finden sein.
OUTPUT_MIN_LIMIT = -10
OUTPUT_MAX_LIMIT = 10
Hinweis: Änderungen der INI Datei werden erst mit dem nächsten Start von LinuxCNC wirksam.
Die zweite wichtige Schutzfunktion ist der FERROR Wert welcher als eine Art Notbremse verstanden werden kann. Bei jeder Bewegung gibt es immer eine Position die eine Achse theoretisch haben sollte und eine reale Position. Mit den finalen Einstellungen liegen diese (hoffentlich) möglichst dicht beieinander, bis es aber soweit ist schaltet LinuxCNC bei einer zu großen Abweichung die Antriebe aus.
Damit auch das Funktioniert müssen die Antriebe so verdrahtet sein, das LinuxCNC im Notaus-Zustand die Antriebe ausschaltet. Das kann entweder direkt über die Aktivierungspins der Endstufe Erfolgen die an die Mesakarten angeschlossen sind, oder über eine Einwirkung der Mesakarten auf den Notauskreis einer Maschine.
In der INI Datei sollten beide FERROR Werte der Achsen z.B. auf 50 bis 150mm gesetzt werden und für Testzwecke nach Bedarf angehoben werden. Nochmal zum Verständnis: Es Handelt sich bei den Werten nicht um einen Spielraum mit absoluten Positionsangaben sondern um eine kurzzeitige Abweichung während einer Bewegung, werte jenseits von 500 haben hier also nichts zu suchen.
Neben dem Fenster zur Kalibrierung... wird aus dem Maschine Menü zweimal das HAL-Meter benötigt um die Qualität der Regelung zu beurteilen.
Die Pins pid.0.output und axis.0.f-error geben uns hierzu zwei aussagekräftige Werte zurück. Die "0" in den Pinbezeichnungen ist übrigens eine Durchnummerierung der Achsen (0=X; 1=Y; ...).
Die hier beschriebene Methode zum auffinden der PID Werte weicht von den Standardprozeduren zum einrichten von PID Reglern und der LinuxCNC Doku bewusst ab.
Im Normalfall ist das Ziel die P, I und D Werte nacheinander anzuheben bis Schwingungen auftreten. Man Versucht dabei die Werte so zu kombinieren, das möglichst kleine Differenzen (Schleppfehler) zwischen der theoritischen und realen Position entstehen.
Dieser Prozess ist jedoch von vielen Faktoren Abhängig denen wir erst in der Praxis begegnen. Das Einrichten der Regler kann so Stunden und Wochen dauern und führt oft zu unbefriedigen Kompromissen bei denen die Achsen in einzelnen Situationen zum Schwingen neigen.
In der hier beschriebenen Methode ist das Ziel nicht einen möglichst kleinen Schleppfehler zu erreichen sondern bei allen Achsen den selben. Der Fräser eilt so der theoretischen Position um einige Millimeter nach, allerdings tut er dies auf allen Achsen gleich, so dass das Ergebnis vom Schleppfehler unbeeinflusst bleibt.
Wurden die Encoder geprüft und die Werte sind wie im nebenstehenden Bild, kann die Maschine das erste mal mit den LinuxCNC-NotausMaschine Ein Buttons oben links eingeschaltet werden. Dabei sollte eine Hand immer fest am Notaus der Maschine sein.
Beim einschalten sollten die Antriebe folglich hörbar sein und eine leichte Drift aufweisen.
Analoge Ausgänge prüfen
Als nächstes können nun die analogen Ausgänge und deren Begrenzung geprüft werden. Dazu wird das LinuxCNC Fenster ausgewählt und kurz die Pfeiltaste der Tastatur zum manuellen fahren angetippt.
Als Folge regelt der PID (siehe pid.0.output) bis in die Begrenzung, so dass am analogen Ausgang der MAX_OUTPUTWert in Volt messbar wird also 0.1V.
Ist das der Fall können im nächsten Schritt die Antriebe ausgeschaltet und mit den analogen Ausgängen verbunden werden. Eine falsche Polung ist hierbei ersteinmal sekundär und wird in den folgenden Schritten ggf. behoben.
Reihenfolge
Begonnen wird mit der Achse die das meiste Gewicht zu tragen hat, da diese durch ihre Trägheit den größten Schleppfehler aufweisen wird. Danach folgt die Achse mit dem 2. höchsten Gewicht usw.. In der Regel entspricht das der Reihenfolge X --> Y --> Z.
BIAS
Ein erneutes einschalten der Antriebe kann nun abermals zu einer Drift führen welche mit kleinen positiven oder negativen BIAS Werten getrimmt werden kann.
DEADBAND
Der Deadband Wert kann pauschal auf einen kleinen Wert wie 0.0001 gesetzt werden.
P Wert der 1. Achse
Ab hier ist sorgfältiges und konzentriertes Arbeiten wichtig. Eine Null zuviel oder zu wenig kann deutliche Auswirkungen haben. Gernerell gilt hier das amerikanische Zahlenformat mit Punkt statt Komma. Fangen sie darüber hinaus mit kleinen Werten wie 0.001 an.
Um den neuen P Wert zu testen betätigen sie den test Button, wählen das LinuxCNC Fenster und reduzieren den Schieberegler für die Schrittgeschwindigkeit. Danach kann die Achse manuell mit den Feiltasten verfahren werden.
Testen sie die Achse bei verschiedenen Geschwindigkeiten um störende Schwingungen aufzuspüren. Heben sie den P Wert an bis sichbare oder hörbare Schwingungen auftreten und korrigieren sie den Wert dann wieder etwas nach unten für eine Schwingungsfrei Fahrt.
I und D Werte der 1. Achse
Nach dem P Wert kann der I Wert und später der D Wert auf die selbe Weise wie der P Wert angehoben werden. Ist ein Tachogeber oder Encoder direkt an die Servoendstufe angeschlossen, müssen keine I und D Werte gesetzt werden, da dies zu Konflikten mit der Endstufen internen Regelung führt was sich in Form von Schwingungen äußert.
Zum Abschluss bewegen sie die Achse mit einer Geschwindigkeit die später alle Achsen erreichen können und notieren sich die gewählte Geschwindigkeit und den zugehörigen "axis.0.f-error" Wert.
MAX_OUTPUT
Der pid.0.output zeigt aufgrund der schnellen Regelung ein unruhiges Verhalten bis weit hinter das Komma. Bleibt dieser bei Testfahrten auf einem glatten Wert wie 0.1 stehen ist der Regler an der MAX_OUTPUT Begrenzung angekommen, welche folglich angehoben werden muss. Letztlich sollte hier der Wert 10 erreicht werden um die volle Performance zu erhalten, in welchen Schritte sie den Wert anheben hängt dabei von Ihrem Sicherheitsempfinden hab.
FERROR
Hat der Regler die MAX_OUTPUT Begrenzung erreicht, kann er die theoretische Position nicht mehr erreichen, so dass der axis.0.f-error zügig ansteigt und nach kurzer Zeit die Notbremse zieht. Zwar kann der FERROR Wert der INI in dem Fall angehoben werden um mehr Spielraum zum testen zu erhalten, das Ziel ist es aber den axis.0.f-error zu senken was durch die Erhöhung des P Wertes oder Senkung der Geschwindigkeit erreichte wird.
Verpolung
Arbeiten Endstufen mit -10 bis +10V muss ggf auch eine Verpolung festgestellt werden. Bei vertauschten Anschlüssen wird die Achse versuchen der vorgegebenen Position zu entfliehen. Entfliehen kann dabei als eine Drift mit stetig steigender Geschwindigkeit verstanden werden. Das passiert entweder direkt nach dem Einschalten oder mit der ersten kleinen manuellen Bewegung.
Anders als bei der normalen Drift die mit anheben des P Werten geringer wird, wird die Verpolungs-Drif mit steigendem P Wert schneller.
P, I und D Werte der übrigen Achsen
Die PID Werte der üprigen Achsen werden auf die selbe Weise ermittelt mit dem Unterschied das die Werte hier nursolange angehoben werden bis der notierte axis.x.f-error Wert erreicht ist. Wichtig dabei ist das bei allen Achsen die selbe Geschwindigkeit zu Grunde gelegt wird, da die Werte sonst nicht vergleichbar sind.
Geschwindigkeit und Beschleunigung
Whärend des Testens und zum Abschluss kann es erforderlich sein die Geschwindigkeit und Beschleunigung der Achsen anzupassen. Alle Werte dazu befinden sich in der INI Datei in den [DISPLAY] und [AXIS_X] Sektionen.
Notbremse / FERROR
Die FERROR Werte in den [AXIS_X] Sektionen sollten ebenfalls angepasst werden um die Notbremse auch im Normalbetrieb zu gewährleisten. Das kann z.B. sinnvoll sein wenn die Achsen durch einen Gegenstand blockiert werden.
Der MIN_FERROR und FERROR bilden hierbei eine Rampe über den gesamten Geschwindigkeitsbereich der Achse. Bei langsamer fahrt gilt also der MIN_FERROR bei größeren Geschwindigkeiten wird der Grenzwert bis zum FERROR Wert heraufskaliert.
Welche Werte hier angebracht sind kann mit dem axis.x.f-error Wert beim verfahren ermittelt werden.
MAX_OUTPUT
Dieser Wert sollte zum Abschluss und bei Verwendung der 7i77 auf 10 stehen um alle Leistungsreserven für die Regelung zur Verfügung zu stellen.
Speichern und Sichern
Änderungen der INI Datei werden erst mit dem nächsten start von LinuxCNC wirksam. Bevor sie einen neustart der Programms durchführen oder die INI Datei öffnen vergessen sie nicht den "save to file" Button des Kalibrierungsfensters zu betätigen.
Darüber hinaus ist es eine Gute Idee den Konfigurations-Ordner zu diesem Zeitpunkt für Backupzwecke z.B. auf einen USB Stick zu kopieren. Der Backupordner enthält alle Daten die z.B. bei einer Neuinstallation des Betriebssystems benötigt werden.
Beispielpfad: /home/cnc/linuxcnc/configs/Weeke_BP10_V1
[DISPLAY] | DEFAULT_LINEAR_VELOCITY | Startwert für die Schrittgeschwindigkeit in mm/s (Schieberegler) |
MAX_LINEAR_VELOCITY | Maximum für die Schrittgeschwindigkeit in mm/s (Schieberegler) | |
[TRAJ] | MAX_VELOCITY | Maximale Geschwindigkeit für alle Achsen in mm/s (z.B. wenn Achsen gemeinsam verfahren werden) |
MAX_ACCELERATION | Maximale Beschleunigung für alle Achsen in mm/s² (z.B. wenn Achsen gemeinsam verfahren werden) | |
[AXIS] | MAX_VELOCITY | Maximale Geschwindigkeit der Achse in mm/s |
MAX_ACCELERATION | Maximale Beschleunigung der Achse in mm/s² | |
MIN_FERROR | Notbrems-Grenzwert für min. Geschwindigkeiten in mm | |
FERROR | Notbrems-Grenzwert für max. Geschwindigkeiten in mm | |