Kalibrierung DC-Encoder-Motor

Hallo zusammen,

ich habe diesen DC-Encoder-Motor

den ich mit einem H-Brücken-Controller-Modul an meinem Arduino für eine Positionieraufgabe (gut eingestellte PID-Regelung) nutze. Auf der Motorwelle des DC-Motors sitzt ein kleines Zahnrad, das wiederum ein großes Außenverzahntes Rad antreibt, das auf einer Welle sitzt. Das außenverzahnte Zahnrad kann 52 Positionen an seinem Umfang (360°) anfahren. Also alle 6,9° eine anzufahrende Position.

Problem:
Die Wiederholgenauigkeit der angefahrenen Positionen ist nicht gut genug (mal trifft er exakt die Stelle, die er soll, mal nicht),

Frage: Wie kann ich die Positionier-Wiederholgenauigkeit verbessern?

  • Kann ich den DC-Motor intern irgendwie kalibrieren? (Bibliothek)
  • Die Antriebswelle des DC-Motors hat recht großes Spiel und wackelt ca. 5° hin und her (Gibt es gute/bessere DC-Encoder-Motoren wie den oben angegebenen)
  • Was kann man sonst noch machen?

PS.: Es existiert bereits eine Art Kalibrierung, die folgender Maßen funktioniert:

  • Motor dreht sich, bis ein Schalter über einen Anschlag betätigt wird --> Interrupt-Signal --> Motor auf eine feste Position einregeln (sollte eigentlich immer in etwa die gleiche Position sein)
  • Von dieser Position fährt der Motor dann auf die gewünschte Winkelposition, indem ein fester Ziel-Encoder-Wert vergeben wird (z.B. 90 Grad)
  • Ist das überhaupt eine Kalibrierung im strengeren Sinne oder bringt das eigentlich gar nichts?

Viele Grüße

Hallo,

das mit den beiden Zahnrädern hab ich nicht verstanden. Soll heisen das kleine Zahnrad, wieviel Zähne ?, auf der Motorwelle treibt ein grossses mit 52 Zähnen an , ist also eigendlich ein Getriebe. Der Encoder auf der Motorwelle hat wohl 11 Imp/Umd. Du schreibst was von Spiel , vermutlich das Spiel zwischen den beiden Zahnrädern ?

Getriebe für Positionieraufgaben sollten eigendlich spielfrei sein, wenn das nicht geht, dann bleibt nur eine Position immer von der gleichen Richtung anfahren.
Zudem kommmt eventuell noch hinzu das Du eine endliche Messzeit hast, Was macht der PI Regler, der ist ja dann als Positionsregler ausgelegt. Die endliche Messzeit ist für den Regelkreis eigendlich eine Totzeit also ziemlich ungünstig.

Eventuell kommst Du auch besser zurecht wenn Du eine andere Variante zur Positionierung wählst. z.B schnell / langsam /stop. z.B 50 inc vor der Sollposition schaltest Du auf eine langsame Geschwindigkeit und dann bei Erreichen auf Stop. Üblicherweise geht das ganz gut mit 1:10 für die Geschwindigkeit.

Heinz

Hallo,

ich packe mal ein Bild in den Anhang.

  • Ein Zahnrad auf Motorwelle treibt ein außenverzahntes Rad auf einer Welle an.
  • Positionierung durchführen
  • Servo schiebt Zufallskarte raus

Problem:
Manchmal fährt er die Position gut an (z.B. Herz Ass), aber je nach Lage der Karte am Umfang positioniert er teilweise auch knapp daneben, was natürlich blöd ist... Es ist oft einfach ein Durcheinander. Mal klappts, aber oft nicht. Mal klappts nur beim ersten mal, dann wieder 3x gar nicht. Also es ist kein System zu sehen, warum es nicht geht (Spiel der Motorwelle, Unwucht, Batteriespannung für den DC-Motor,.......)

Getriebe haben fast immer ein Spiel.

Wieviel Kraft muß der Motor haben?
Ein Schrittmotor ohne Getriebe hätte kein Spiel, ist aber bei weitem nicht so stark wie ein Gleichstrommotor mit Reduziergetriebe von 1:75.

Grüße Uwe

Kraft wird eigentlich kaum gebraucht. Das Ding ist super gelagert. Aber gibt es Schrittmotoren mit exakt 52 Schritten? Allerdings braucht er schon ein gewisses Haltemoment und darf natürlich niemals einen Schritt auslassen oder ähnliches.

Hallo,

Also das Kleine rad hat etwa 16 Zähne, das Grosse hat doch mehr wie 52, sind doch sicher 100, Du hast 52 Positionen Die Du anfahren willst. Der Encoder hat 11 Imp/Umdr.

Wieviel Spiel hat das Grosse zum kleinen Rad ? , ich denke das ist nicht viel. Der Getriebemotor hat 1:20 . Eigendlich sollte der Antrieb elektrisch genau genug sein um das auf eine Karte genau zu fahren. Ich würde Impulse zählen und fahren und den PI Regler weg lassen, irgendwie verstehe ich den Sinn von dem nicht.

Eigendlich hast Du den falschen Antrieb, ein Schrittmotor wäre das besser geeignet.

Heinz

oppaernst:
Aber gibt es Schrittmotoren mit exakt 52 Schritten?

Nee, die lösen höher auf, sonst würde keine 3D-Drucker funktionieren können. 200 Schritte (1.8°) ist wohl untere Grenze.
Mit Mikroschritten sollte es möglich sein, den gewünschten Winkel einzustellen.
Im allerschlimmsten Fall alle X Karten mal einen Korrekturschritt dazu oder wegnehmen.

Und die Dinger stehen wenn sie sollen; Schrittverluste erwarte ich bei der Anwendung nicht (die MoBaTools fahren da schöne Rampen).

Gruß Walter

Moin.
Was soll die Apparatur denn können? Also eine genaue Funktionsbeschreibung.
Daraus abgeleitet dann die Beantwortung folgender Einzelthemen:
Wie weit soll gefahren werden können? Mehrere Umdrehungen oder nur 360° oder noch weniger?
Wie stark muss der Antrieb sein?
Wie schnell soll gedreht werden?
Muss absolut positioniert werden, oder reicht relativ?
'Darf' eine Referenzfahrt gefahren werden, oder nicht?

...ich bin bei DC-(Getriebe-)Motor mit AS5600 zum absoluten positionieren.

Lieben Gruß,
Chris

oppaernst:
ich habe diesen DC-Encoder-Motor
Gear-Motor-6V-100210300RPM-Encoder-Motor

Ja und welchen davon? Das sind drei Typen zur Auswahl...

Auf der Motorwelle des DC-Motors sitzt ein kleines Zahnrad, das wiederum ein großes Außenverzahntes Rad antreibt, das auf einer Welle sitzt. Das außenverzahnte Zahnrad kann 52 Positionen an seinem Umfang (360°) anfahren. Also alle 6,9° eine anzufahrende Position.

Nicht kann, sondern soll(!)
Das grosse graue Teil hat irgendwas um 104 Zähne.
Das Kleine irgendwas um 18 Zähne.

  • Btte korrigieren, auf die genaue Zahl.

Und dazu kommt der Encoder ins Spiel.

Die Wiederholgenauigkeit der angefahrenen Positionen ist nicht gut genug (mal trifft er exakt die Stelle, die er soll, mal nicht),

Das wird es auch nie werden.
Die Übersetzung zwischen weissem Zahnrad und grauem Zahnrad macht Dir alles kaputt, was der Encoder liefern kann.
Das Problem ist, das Du vom "Idealfall" ausgehst. Überdenke, wieviel Abweichung Du haben kannst, wenn Du eine Encoderposition überfahren hast und wie gross die Abweichung eigentlich sein darf.
Die Karte(n) lieg(t/en) fest an einer Position. Nur 1° Abweichung reicht vermutlich aus, das die nicht gezogen wird. (Las mich raten, der Abstand der Karten untereinander am Auslöser ist etwa 10mm.
Bitte korrigiere mich ggfls.

Frage: Wie kann ich die Positionier-Wiederholgenauigkeit verbessern?

Ich hätte auf der Welle mit dem grauen Zahnrad einen optischen Geber angeditscht.
So mit Gabellichtschranke...
Alternativ ggfls. beim 3D druck schon dafür gesorgt, das im Aussenring (des grauen Zahnrades) Durchlässe sind, deren Durchmesser die Toleranz der Position berücksichtigen.
Kann man sicher auch noch versuchen mit einem Bohrer...
Was bei DC-Antrieb zu berücksichtigen ist ... - ich hab tatsächlich suchen müssen, wo ich das schon mal gelesen habe...

Hinweis: Links dienen nur der Information, ich bin weder an den Seiten bzw. den Unternehmen beteiligt noch erhalte ich Provisionen aus Affilateprogrammen oder ähnlichem.

Sinn des ganzen:
-Per App Karten mischen
-Daten an Mikrocontroller senden und 2 Pokerkarten für Spieler 1 ausgeben

Funktionsbeschreibung:

  • Ja, es gibt derzeit eine Referenzfahrt (siehe oben), die aber irgendwie glaube ich keinen Sinn hat
  • Es muss eigentlich nur eine Umdrehung gefahren werden, aber der DC-Motor schafft es nicht, zwei nebeneinanderliegene Karten nacheinander anzufahren, das schafft die Regelung nicht (Abstand zu klein)
    -momentan wird absolut positioniert

Infos DC-Motor:
-Es ist der Motor mit 100 U/min von dem Link

Infos zu den Zahnrädern:
-Modul ist bei beiden Zahnrädern exakt 3,0
-kleines Zahnrad: 17 Zähne
-großes Zahnrad: 100 Zähne

Kartenabstand:
52 Karten auf 360° = 6,9° pro Karte // Abstand der Karten Aussen ist ca. 2cm

Ich denke auch, dass das System eigentlich ausreichen müsste, um sauber die einzelne Karte anzufahren. Ich kann immer so Impulse vorgeben, die er anfahren kann, z.B. auf den Wert von 1000 Impulsen, was dann einer Umrehung entspricht oder so.

oppaernst:
nebeneinanderliegene Karten nacheinander anzufahren, das schafft die Regelung nicht (Abstand zu klein)

Nein!

52 Karten auf 360° = 6,9° pro Karte // Abstand der Karten Aussen ist ca. 2cm

Also hat mich mein Schätz-Sinn nicht verlassen.

Dein Problem ist, das Du mit dem Encoder eine Auflösung hast, die Deine physisch mögliche Abweichung nicht abbildet.

Ok, ich versuche das mal vorzurechnen...

Ich habe 823,13 PPR (pulses per revolution = Pulse pro Umdrehung).
Ich habe 52 Anfahrpositionen.
Also ist der Abstand zwischen jeder Position erst mal 823,13/52=15,8294 Pulse.
Das ist wohl erst mal zu wenig. Aber ich habe ein Getriebe mit 100/17=5,88 Zähnen im Verhältnis.
Also würde sich das erweitern auf 15,8294*5,88= 93,114 Pulse, die zwischen 2 Karten liegen. Und das ist zu wenig, oder?

Allerdings darf ich ja auch ein gewisses Spiel haben, sodass es trotzdem noch funktioniert. Aber die Realität scheint zu zeigen, dass ich doch irgenwie Probleme habe. Was kann ich denn dann tun?

oppaernst:
Kannst du mir das mal vorrechnen? Ich verstehen das überhaupt nicht.

Bist Du meiner Lektüre oben schon nachgegangen?
Was erwartest Du für eine Genauigkeit bei 52 (Karten-)Positionen mit 100 Zähnen anzufahren.
Wenn Du den Saft vom Motor nimmst, wieviel läuft das System noch nach?
Du hast oben geschrieben, das es vollkommen leichtläufig ist...

Ja es läuft schon um einiges nach, wenn ich den Saft abschalte. Und auch bei der Regelung merkt man schon, dass das System durch die Trägheit irgendwie noch weiter läuft. Man kann sicher noch an den Regelparamtern drehen und das ganze System deutlich schärfer machen.

Momentan sind das hier meine Regelparamter:

#include <PIDController.h> // Inkludieren Bibliothek fuer PID-Controller
PIDController pos_pid;


pos_pid.begin(); // Beginn PID
pos_pid.tune(15, 0, 2000); // Tuning Anteile P I D
pos_pid.limit(-255, 255); // Grenzen Motor-Wert

oppaernst:
Man kann sicher noch an den Regelparamtern drehen und das ganze System deutlich schärfer machen.

Momentan sind das hier meine Regelparamter:

Da bin ich dann raus - ich gehe das von der Logik/physikalischen Abweichungen her an.
Vielleicht noch Lektüre - dann aber english:

Mehr geht dann aber meinerseits auch nicht…

Ja ich hab jetzt einige Regelparameter auch nochmal getestet. Es bleibt einfach eine gewissen physikalische Abweichung von +/-5mm vorhanden. Das kann sich einfach ggf. derart wüst auswirken, dass die einzelne Position nicht genau genug angefahren werden kann.

Wie ich bereits sagte, kann man die Motorwelle bereits um ein paar grad drehen, weil diese etwas Spiel hat komischerweise (ist das normal?). Die beiden Zahnräder haben auch ein klein bisschen Spiel. Wsl summieren sich die Toleranzen einfach zu stark auf.

oppaernst:
kann man die Motorwelle bereits um ein paar grad drehen, weil diese etwas Spiel hat komischerweise (ist das normal?). Die beiden Zahnräder haben auch ein klein bisschen Spiel. Wsl summieren sich die Toleranzen einfach zu stark auf.

Ah ja - Du hast es jetzt vermutlich verstanden...
Ich sage nochmal:
Gabelllichtsschranke.
Wenn Du es ganz gut machst, kannst Du auch mit 100 Zähnen auf dem Kranz 52 Karten auswählen.
Wären da 104 drauf, könnte die LS auch die durchlaufenden Zähne zählen.. Und die Steuerung könnte bei "überfahren" wieder zurück.
Das geht auch mit 100 - aber vieel aufwändiger.

Ich würde das Kartenrad nicht das andere Rad mittels Schrittmotor drehen. Entweder direkt oder über einen Zahnriemen.
Schlage vor einem GT2 mit 2 mm Zahnmodul 6mm breit zu wählen. Wenn Du ein 20 Zähne Ritzel am Motor montierst könnte am Kartenrad 260 oder 520 Zähne haben. Das wären dann 520mm bzw 1040mm Umfang und damit 165,5mm bzw 331,1mm Durchmesser.

Mit einem GT2-1350 hättest Du mit dem 520 Zähne Zahnrad einen Achsabstand von 370,85mm.

Ein Zahnriemenrad kannst Du auch einfach 3D ausdrucken.
So hast Du am Motor 90 bzw 180° Drehung. Das geht mit einem Schrittmotor super; das sind 50 bzw 100 Schritte bei einem 200 Schritt Motor.
Außerdem würde ich auch eine Lichstschranke so montieren, daß die Karte in einer bestimmten Position erkannt wird. So kannst Du
Bei einem Schrittmotor brauchst Du eine Nullposition für das Kartenrad.

Grüße Uwe

...mit einem AS5600 hätte man sehr einfach eine Auflösung von 1024 Positionen am Kartenrad. So kann man exakt auf 0,35° bzw. 19,7x genauer als gefordert die Position anfahren. Oder anders ausgedrückt. Zwischen zwei Karten hast du dann 19,7 Positionen, die angefahren werden könnten. Da kannst du denn selber das Totband von z.B. 3-4 Positionen in der Software einstellen.
UND du brauchst keine Referenzfahrt mehr.
Die Vorteile dabei sind, dass du mechanisch nur einen kleinen Magneten Stirnseite auf die Kartenradwelle befestigen musst = sehr einfache mechanische Änderung. Und dass du dann die exakte Position ohne Spiel des Kartenrad misst und darauf regelst und nicht die spielbehaftete Motorposition.

@uwefed: Meinst du so einen Schrittmotor?

@themanfrommoon:
So ganz habe ich das nicht verstanden

Grüße