Hallo zusammen. Ich habe hier folgendes Setup: Schrittmotor mit 200 steps/revolution, mit bis zu 50-fachen Mikroschrittbetrieb, ein Schneckengetriebe mit 1:360 und einen Drehwinkelencoder an der Abtriebsseite mit 23600 Counts, der interpoliert durch ein dazu passendes Interface mit 200, also "real" 23600*200=4,72M Counts. Angenommen, ich fahre den 50er Mikroschrittbetrieb, so kann ich z.B. 360°/200 steps per revolution/50=36m°/step Auflösung erreichen. Mit dem Getriebe komme ich auf 36m°/360=100µ° Auflösung, Getriebespiel und Nichtlinearität der Mikroschritte erstmal vernachlässigt. Der Encoder kann maximal 360°/4,72M=76,2712µ° auflösen. Allerdings möglicherweise mit Fehlern durch die Interpolation. Die beiden Auflösungen passen nicht zusammen, sind keine Vielfache voneinander, die ich per Vorteiler in meiner Steuereinheit korrigieren könnte. Einen Multiplizierer gibt es nicht, sodass ich keine rationalen Teiler einstellen kann. Häufig liest man, dass der Encoder ein vielfaches genauer seinn muss, als der Motor. Das stellt mir vor ein Verständnisproblem: Der Motor kann nur max 100µ° Schritte fahren idealerweise. Der Encoder kann aber nur 76,2712µ° Schritte auflösen. Das heißt es tritt außer bei zufälligen Positionen, in denen die beiden Werte nahezu ein Vielfaches voneiannder sind, stets ein Fehler auf, der durch einen fest eingebauten Regler korrigiert werden möchte. Leider kann der Motor gar nicht auf alle beliebigen Positionen fahren. Daher schwingt das Dingen, insbesondere wenn der I Anteil eingeschaltet ist. Müsste der Encoder nicht eigentlich absichtlich SCHLECHTER eingestellt werden, also z.B. durch 14 geteilt werden, sodass ich eine Auflösung von 1,07µ° bekomme, um eine Regelung erst überhaupt zu ermöglichen? Denn dann hat der Motor ca 11 Mikroschritte "Platz", um einen Encoder Schritt zu machen? Ich erhoffe mir dadurch ein ruhigeres Regelverhalten und eine erhöhte GENAUIGKEIT der gewünschten Position. Die Auflösung meiner Position ist nicht so wichtig, das können ruhig einige Milligrad sein, aber wenn ich eine Position anfahre, die ein Vielfaches der Auflösung ist, so sollte die Genauigkeit des angefahrenen Winkels am Ende bis auf +-1 Mikroschritte genau sein (vorausgesetzt, der Regler regelt richtig), oder? Macht es also Sinn, die Encoder Auflösung herabzusetzen oder ist das quatsch? Vielen Dank für eure Antworten, dbdb
Du wirfst hier munter Auflösung und Genauigkeit durcheinander. Wie ist denn die Genauigkeit deines Encoders angegeben? Die dürfte normalerweise um 1-2 Größenordnungen schlechter sein als die Auflösung nach Interpolation. Und bei deinem Motor mit Mikroschritt und Getriebe (Platenten-, Schnecken-, Stirnradgetriebe?) sieht es mit der Genauigkeit nochmal deutlich schlechter aus. Das sollte dem Regeler aber alles egal sein. Normalerweise rechnet man die Messung auf Grad oder eine feste interne Einheit um. Idealerweise steht dafür ein Bruch mit Zähler und Nenner zur Verfügung. Wenn deine Steuerung nicht so genau rechnen kann hast du allerdings ein Problem. Allerdings nur in Bezug auf die Genauigkeit, für den Regler sollte das keine Rolle spielen. Mit freundlichen Grüßen Thorsten Ostermann
Wenn der Encoder eine niedrigere Auflösung als der Motor hat istdas gut so. Dann kann der Motor in den "Encoder schritt" hineinfahren. Wenn nicht muss man halt die Encoderauflösung künstlich "reduzieren" indem man einen Fangbereich einführt, also ein Fenster.
Unsinn. Warum sollte man die Auflösung vom Encoder gröber wählen als vom Motor? Das macht bei Servomotoren auch niemand, und es funktioniert trotzdem. Ich behaupte einfach mal, dass der Regler schlecht parametriert oder falsch implementiert ist. Mit freundlichen Grüßen Thorsten Ostermann
Hi Leute, vielen Dank für eure Antworten. Thorsten Ostermann schrieb: > Du wirfst hier munter Auflösung und Genauigkeit durcheinander. Wie > ist > denn die Genauigkeit deines Encoders angegeben? Die dürfte normalerweise > um 1-2 Größenordnungen schlechter sein als die Auflösung nach > Interpolation. Und bei deinem Motor mit Mikroschritt und Getriebe > (Platenten-, Schnecken-, Stirnradgetriebe?) sieht es mit der Genauigkeit > nochmal deutlich schlechter aus. Ich habe eigentlich versucht, Auflösung und Genauigkeit nicht durcheinander zu werfen :-/ Wo denn genau? Die Encoderauflösung beträgt wie gesagt 360°/4,72M=76,2712µ° oder ca 0,27'' (so stehts im Datenblatt bei 200er Interpolation). Eine Genauigkeit steht beim Encoder Lesekopf nicht dabei, bei dem Ring allerdings schon und beträgt +-1,9'' also etwa +-527µ°. Es handelt sich um ein Schneckengetriebe. > > Das sollte dem Regeler aber alles egal sein. Normalerweise rechnet man > die Messung auf Grad oder eine feste interne Einheit um. Idealerweise > steht dafür ein Bruch mit Zähler und Nenner zur Verfügung. Wenn deine > Steuerung nicht so genau rechnen kann hast du allerdings ein Problem. > Allerdings nur in Bezug auf die Genauigkeit, für den Regler sollte das > keine Rolle spielen. Das verstehe ich leider nicht so richtig, worauf du hinaus willst. Ich kann die Counts des Encoders natürlich in Winkel umrechnen. Die Steuerung rechnet eh nur in Motor Steps oder Encoder Counts, wenn dieser aktiviert ist. Die Sollwerte kommen aus einer PC Software, die kann natürlich beliebige Umrechnungsfaktoren verwenden. Der Regler ist Teil der Steuerung und regelt nur auf die Encoder counts. Wenn ich jetzt eine Position anfahren möchte, gebe ich diese z.B. von extern in Grad oder Milligrad oder so vor. Diese Position wird exakt (bzw mit double Genauigkeit) in Encoder Counts verrechnet. Der Regler versucht die Regelabweichung zu minimieren. Aber die "Rastpositionen" (falls man da im Mikroschrittbetrieb noch von sprechen kann) liegen ja auf keinen Fall auf den Positionen Encoder Counts, auf Grund der nicht äquidistanten Mikroschritte, des Getriebes, des ungleichen Teilungsfaktors Motor<->Encoder etc. Im schlimmsten Fall ist der Encoder deutlich genauer und der Motor kommt nie zur Ruhe, weil z.B. ein I Anteil früher oder später IMMER für eine Bewegung in eine Richtung sorgt. Unser Ziel ist nicht, beliebige Positionen anzufahren (also eine besonders große Auflösung des Gesamtsystems zu erreichen, korrekt?), sondern die möglichen Positionen GENAU einzuhalten. Daher dachte ich, die hohe Interpolation des Encoders etwas herunterzuteilen, so wie uwe es auch vorschlug: uwe schrieb: > Wenn der Encoder eine niedrigere Auflösung als der Motor hat istdas gut > so. Dann kann der Motor in den "Encoder schritt" hineinfahren. > Wenn nicht muss man halt die Encoderauflösung künstlich "reduzieren" > indem man einen Fangbereich einführt, also ein Fenster. Daraufhin sagst du aber: Thorsten Ostermann schrieb: > Unsinn. Warum sollte man die Auflösung vom Encoder gröber wählen als vom > Motor? Das macht bei Servomotoren auch niemand, und es funktioniert > trotzdem. Ich behaupte einfach mal, dass der Regler schlecht > parametriert oder falsch implementiert ist. Ich bin der Meinung, dass das bei Servos in der Tat keinen Sinn macht, weil deren Position nicht quantisiert ist (könnte man da sagen, dass die eine sehr viel höhere Auflösung haben?). Dies ist aber bei Steppern doch der Fall. Bin leider etwas verwirrter als vorher, wäre euch sehr dankbar, wenn ihr zu meinen Gedanken noch etwas sagt :) Schöne Grüße
Hallo "dbdb", > Thorsten Ostermann schrieb: >> Du wirfst hier munter Auflösung und Genauigkeit durcheinander. > Ich habe eigentlich versucht, Auflösung und Genauigkeit nicht > durcheinander zu werfen :-/ Wo denn genau? Hier z.B.:
1 | Häufig liest man, dass der Encoder ein vielfaches genauer seinn muss, |
2 | als der Motor. Das stellt mir vor ein Verständnisproblem: |
3 | |
4 | Der Motor kann nur max 100µ° Schritte fahren idealerweise. Der Encoder |
5 | kann aber nur 76,2712µ° Schritte auflösen. Das heißt es tritt außer bei |
6 | zufälligen Positionen, in denen die beiden Werte nahezu ein Vielfaches |
7 | voneiannder sind, stets ein Fehler auf, der durch einen fest eingebauten |
8 | Regler korrigiert werden möchte. |
Du spricht erst von Genauigkeit, dann von Schrittweiten bzw. Auflösung. >> Das sollte dem Regeler aber alles egal sein. Normalerweise rechnet man >> die Messung auf Grad oder eine feste interne Einheit um. > Das verstehe ich leider nicht so richtig, worauf du hinaus willst. Ich > kann die Counts des Encoders natürlich in Winkel umrechnen. Die > Steuerung rechnet eh nur in Motor Steps oder Encoder Counts, wenn dieser > aktiviert ist. Die Sollwerte kommen aus einer PC Software, die kann > natürlich beliebige Umrechnungsfaktoren verwenden. > Der Regler ist Teil der Steuerung und regelt nur auf die Encoder counts. Wenn du mit ganzzahligen Werten arbeitest und Encoder und Motor keinen gemeinsamen Teiler haben, verlierst du hier natürlich Genauigkeit. Es wäre vielleicht sinnvoller, die Werte intern hoch zu skalieren (z.B. um den Faktor 100 oder sogar 1000), damit das Raster feiner wird. > Wenn ich jetzt eine Position anfahren möchte, gebe ich diese z.B. von > extern in Grad oder Milligrad oder so vor. Diese Position wird exakt > (bzw mit double Genauigkeit) in Encoder Counts verrechnet. Der Regler > versucht die Regelabweichung zu minimieren. Aber die "Rastpositionen" > (falls man da im Mikroschrittbetrieb noch von sprechen kann) liegen ja > auf keinen Fall auf den Positionen Encoder Counts, auf Grund der nicht > äquidistanten Mikroschritte, des Getriebes, des ungleichen > Teilungsfaktors Motor<->Encoder etc. Im schlimmsten Fall ist der Encoder > deutlich genauer und der Motor kommt nie zur Ruhe, weil z.B. ein I > Anteil früher oder später IMMER für eine Bewegung in eine Richtung > sorgt. Das würde sich aber auch nicht ändern, wenn du die Auflösung reduzierst. Sobald der Encoder an der Quantisierungsgrenze pendelt (und das tut er immer), wird der Regler versuchen das auszuregeln. Das kann man bei Regelungen nicht verhindern. Wenn du die Auflösung reduzierst, wird das Problem eher schlimmer, weil dann die Sprünge größer werden. Dann macht der Motor nämlich gleich 2 oder 3 Mikroschritte, bevor der Regler die Auswirkungen "sehen" kann. Du kannst natürlich versuchen, mit unterschiedlichen Reglereinstellungen für Stillstand und Bewegung zu arbeiten. Oder eine Schwelle für einen Mindestfehler definieren, unterhalb derer der Regler (oder nur der I-Anteil) abgeschaltet wird. Das führt aber alles dazu, das die Regelung nichtlinear und damit potientiell schwerer zu handhaben ist. > Thorsten Ostermann schrieb: >> Unsinn. Warum sollte man die Auflösung vom Encoder gröber wählen als vom >> Motor? Das macht bei Servomotoren auch niemand, und es funktioniert >> trotzdem. Ich behaupte einfach mal, dass der Regler schlecht >> parametriert oder falsch implementiert ist. > Ich bin der Meinung, dass das bei Servos in der Tat keinen Sinn macht, > weil deren Position nicht quantisiert ist (könnte man da sagen, dass die > eine sehr viel höhere Auflösung haben?). Dies ist aber bei Steppern doch > der Fall. Stepper sind nur im open-loop Betrieb quantisiert. Rastmoment haben EC-Motoren / Synchron-Servos auch, allerdings versucht man das eher klein zu halten. Die Polpaar-Zahl bei Synchronmotoren ist deutlich niedriger als bei Schrittmotoren, so dass man da mit noch feineren "Mikroschritten" arbeitet. Da die Motoren eigentlich nur geregelt betrieben werden, nennt das nur niemand so. Mit freundlichen Grüßen Thorsten Ostermann
:
Bearbeitet durch User
Thorsten Ostermann schrieb: > Wenn du mit ganzzahligen Werten arbeitest und Encoder und Motor keinen > gemeinsamen Teiler haben, verlierst du hier natürlich Genauigkeit. Es > wäre vielleicht sinnvoller, die Werte intern hoch zu skalieren (z.B. um > den Faktor 100 oder sogar 1000), damit das Raster feiner wird. Welches Raster meinst du? Thorsten Ostermann schrieb: > Das würde sich aber auch nicht ändern, wenn du die Auflösung reduzierst. > Sobald der Encoder an der Quantisierungsgrenze pendelt (und das tut er > immer), wird der Regler versuchen das auszuregeln. Das kann man bei > Regelungen nicht verhindern. Wenn du die Auflösung reduzierst, wird das > Problem eher schlimmer, weil dann die Sprünge größer werden. Dann macht > der Motor nämlich gleich 2 oder 3 Mikroschritte, bevor der Regler die > Auswirkungen "sehen" kann. > Du meinst, wenn er zwischen zwei Werten hin- und her springt? Die Sprünge zwischen zwei Encodercounts werden größer, genau. Aber eben dadurch dachte ich - wie uwe oben, dass der Motor die Encoder Position genauer "trifft". Wenn der Encoder aber zwischen zwei Werten pendelt hast du natürlich recht. Tut er das, wenn ich auf die Encoder Positionen regle? > Du kannst natürlich versuchen, mit unterschiedlichen Reglereinstellungen > für Stillstand und Bewegung zu arbeiten. Oder eine Schwelle für einen > Mindestfehler definieren, unterhalb derer der Regler (oder nur der > I-Anteil) abgeschaltet wird. Das führt aber alles dazu, das die Regelung > nichtlinear und damit potientiell schwerer zu handhaben ist. Der Regler ist fix in dem Motortreiber integriert, eine entsprechende Funktion ist nicht vorgesehen. Eventuell kann man über die Ansteuerungssoftware den Regler ein/ausschalten, aber das ist erst recht keine schöne Lösung. Thorsten Ostermann schrieb: > Stepper sind nur im open-loop Betrieb quantisiert. Rastmoment haben > EC-Motoren / Synchron-Servos auch, allerdings versucht man das eher > klein zu halten. Die Polpaar-Zahl bei Synchronmotoren ist deutlich > niedriger als bei Schrittmotoren, so dass man da mit noch feineren > "Mikroschritten" arbeitet. Da die Motoren eigentlich nur geregelt > betrieben werden, nennt das nur niemand so. Aber im closed loop wird doch auch quantisiert geregelt? Der Regler erzeugt keine entsprechende Spannung in den Motorwicklungen, das macht der Treiber selbst, je nachdem welcher Mikroschrittbetrieb eingestellt ist. Der Regler sagt doch lediglich "ich habe einen Fehler in encoder counts, also verstärke diesen und K und mache N (Mikro-) Schritte in entsprechende Richtung", sodass das trotzdem nur schrittweise geht, oder? Nochmal zur Info, ich benötige keine definierte Drehzahl und muss auch keine beliebigen Positionen anfahren, ich muss nur das N-fache einer gegebenen Quantisierung anfahren können. Diese Position muss möglichst genau und ohne Stottern gehalten werden, weil dort ein paar hochsensible Messungen durchgeführt werden. Vielen Dank!
Ich habe nochmal nachgelesen, was du mit quasi Servo Betrieb meinst. Ist es dann normalerweise so, dass direkt der Strom geregelt wird, sodass keine Mikroschritte mehr "auftauchen"? Ich verwende einen Motortreiber mit TMC453 IC als PID Regler, Ramp Generator und Mikrostep Sequencer. Datenblatt siehe http://www.trinamic.com/_scripts/download.php?file=_articles%2Fproducts%2Fdiscontinued-products%2Ftmc453%2F_datasheet%2FTMC453_DataSheet_v23.pdf . Figure 3-1 zeigt das Blockdiagramm. Da sieht man, dass der PID Regler nur den Ramp Generator speist und der wiederrum den Mikroschritt Sequenzer. Somit kann ich doch auch nur in diskreten Schritten fahren, oder? Sollte dann die Encoderauflösung immernoch genauer gewählt werden? Wir stehen gerade vor einer Neuanschaffung und hätten die Möglichkeit, die Encoderauflösung mit der des Motors bis auf ein Vielfaches (1,2 oder 4) anzupassen. Macht das Sinn oder ist es egal? Es hätte für uns in der Konstruktion kleine Nachteile, da sich der Encoder Ring Durchmesser ändern würde. Hat es deutliche Vorteile? Die Auflösung des Encoders liegt dann immer noch bei 1µ°. Danke und schöne Grüße!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.