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
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!