Forum: Mechanik, Gehäuse, Werkzeug Schrittmotor mit Encoder richtig einstellen


von dbdb (Gast)


Lesenswert?

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

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

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

von uwe (Gast)


Lesenswert?

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.

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

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

von dbdb (Gast)


Lesenswert?

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

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

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
von dbdb (Gast)


Lesenswert?

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!

von dbdb (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.