Forum: Mikrocontroller und Digitale Elektronik Positionserkennung Drehbewegung


von Norbert S. (norberts)


Angehängte Dateien:

Lesenswert?

Hi,

ich habe einen Lenkung für Schottelantriebe in einem Modell gebaut.
Ein umgebautes Servo (jetzt ein simpler Getriebemotor) dreht über eine 
Untersetzung die Schottelantriebe gemeinsam um 180°.
Die Drehbewegung erkenne ich per Codierscheibe und Lichtschranke (das 
Teil wo "D" markiert ist).
Am Anfang macht das Ding eine Referenzfahrt von Anschlag zu Anschlag 
(Endschalter rechts auf dem Bild unter den grauen Zahradsegmenten).
Gesteuert wird das Ganze von einem Tiny841. Lichtschranke wird mit PCINT 
eingelesen und je nach aktueller Drehrichtung des Getriebemotors rauf 
oder runtergezählt. Das wird mit dem Signal vom Empfänger verglichen und 
der Getriebemotor per SI9986 Endstufe angesteuert.
Funktioniert soweit erstmal prima.
Bis die Antriebe ins Spiel kommen. Das Drehmoment auf die Propeller 
stützt sich komplett an der Lenkung ab und das kompensiert sich wenn 
beide vor oder zurück laufen. Es addiert sich aber, wenn die Antriebe 
gegenläufig laufen.
Da gibt es natürlich auch mal Lastwechsel.
Jedenfalls zappelt das Signal vom Optokoppler dann gelegentlich mal 
fürchterlich rum, wenn er gerade an der Erkennungsschwelle ist und die 
Software verliert Schritte oder zählt welche wo gar keine sind.
Das passiert natürlich auch, wenn der Getriebemotor aus ist und dann 
zähle ich gar nicht, ich wüsste ja auch gar nicht in welche Richtung.
Ursache dafür ist das Spiel im Getriebemotor, das offensichtlich 
deutlich größer als die Hysterese der Erkennung ist. Das Spiel ist etwa 
10-20% der Teilung der Codierscheibe.
Ich habe schon ein RC-Glied an der Lichtschranke und daran herumgedreht 
aber auf dem Oszi kann man sehen, daß man das damit nicht in den Griff 
bekommt, das Spiel ist im Vergleich zur Teilung einfach zu groß.
Verbessern kann man es damit, lösen aber nicht.
Mir fällt auch keine Idee ein, wie ich das per Software lösen könnte.

Kurz noch ein paar Angaben, warum ich das so gemacht habe wie es jetzt 
ist:
Das Drehmoment ist beachtlich, deswegen die Untersetzung und die 
riesigen Zahnradsegmente. Modul 1 weil ich das 3D-drucken kann und alles 
toleranter beim Zahnflankenspiel wird.
Das Ganze ist Bastelei und soll möglichst günstig sein bzw. aus dem 
Fundus gelöst werden.
Mechanisch ist das ja auch ok so (bereits der zweite Ansatz).

Naheliegend wäre ein Poti direkt an einem der Zahnradsegmente.
Das wäre aber mechanisch sehr schwierig umzusetzen.
Ein normales Poti dürfte das auch nicht lange mitmachen, fürchte ich.

Meine erste Idee ist jetzt:
Ich mache erstmal die Codierscheibe etwas gröber. Momentan sind das 25 
Fenster, ich gehe runter auf 18. Die Auflösung mit der gegebenen 
Übersetzung wäre dann 2,67°, womit ich noch leben könnte. Weniger sollte 
es dann aber nicht mehr sein.
Dann baue ich eine zweite Lichtschranke dazu, um eine halbe Teilung 
versetzt. Wenn die eine Lichtschranke auf der Schwelle rumzappelt, 
sollte die andere einen stabilen Pegel liefern.
Damit lässt sich dann eine echte Drehbewegung von dem Gezappel 
unterscheiden. Erst die Flanken von beiden Sensoren in der richtigen 
Reihenfolge wären ein wirklich Schritt.
Hat jemand Einwände gegen diesen Plan?


Am schönsten wäre natürlich ein absoluter Geber. Ev. ein verrecktes 
Servo soweit ausnehmen, daß ich nur noch das Poti mit der Lagerung habe. 
Dann mit 1:6 untersetzt das Poti des Servos von dem Getriebemotor 
antreiben (anstatt der Codierscheibe). Damit hätte ich einen Winkel von 
225° am Servopoti, das sollte gehen. Ich hab mal ein verrecktes 9g-Servo 
drangehalten, das müsste gehen.
Im Gegensatz zu einem normalen Poti ist das Servopoti für diese Art der 
Bewegung ausgelegt.

Was meint Ihr, welchen Weg sollte ich verfolgen?

Ich bin auch offen für alle anderen Lösungsansätze, wie ich die 
Drehbewegung mit der gegeben Mechanik machen könnte.

Gruß,
Norbert

von Max D. (max_d)


Lesenswert?

Also was mit so einfallen würde:

1. "Drehencoder-style" mit 2 Lichtschranken abtasten und so Drehrichtung 
mit erfassen. Sollte mit minimalem AUfwand gehen, erfordert aber etwas 
Trickserei in der SW damit gezappel nicht als Drehung erfasst wird 
(grade wenn alles noch etwas vibriert und nicht 100% ausgerichtet ist).

2. Absolutwert-Encoderscheibe auf die großen Zahnräder kleben (und mit 
mehreren LS abtasten). Kostet halt u.U. heftig Geld (man braucht für 2^n 
Schritte n Lichtschranken).

3. Antrieb über einen Motor mit mehr Haltemoment (oder evtl. selber 
aktiv gegenhalten, in Verbindung mit 1.).

von Norbert S. (norberts)


Lesenswert?

Hi,

1. ist so etwa mein erster Ansatz.
Die Drehrichtung kann ich damit aber eher nicht erkennen, wenn eine von 
beiden Lichtschranken zappelt.
Muß aber auch nicht. Wirkliche Drehbewegungen passieren nur, wenn die 
Steuerung angetrieben wird.

Das Selbsthaltemoment ist absolut. Drehmoment von den Antrieben bewegt 
den Getriebemotor nicht aber klappert an dem Spiel herum, das ist das 
Problem.

2. fällt aus weil Bastelei. Natürlich kann man das mit professionellen 
Drehgebern perfekt lösen aber 1. darf (oder besser soll) das nichts 
kosten und ausserden kann das ja jeder ;-)

3. Haltemoment ist nicht das Problem sondern das Spiel.

Ich probiere jetzt erstmal meine zweite Lösung mit ausgeschlachtetem 
Servo als Poti.

Gruß,
Norbert

von Max M. (jens2001)


Lesenswert?

Würde das mit einem Schrittmotor mit ausreichend großem Haltemoment 
machen.
Du sparst den ganzen Aufwand mit dem Enkoder(n) und eine aktiven 
Regelung.

von Max M. (jens2001)


Lesenswert?

Norbert S. schrieb:
> Die Drehrichtung kann ich damit aber eher nicht erkennen, wenn eine von
> beiden Lichtschranken zappelt.

Doch!
Die Lichtschranken müssen natürlich um einen halben Impuls versetzt 
angebaut sein!
wie bei einem Drehencoder mit 2Bit-Gray-Code

von Norbert S. (norberts)


Lesenswert?

Max Mustermann schrieb:
> Norbert S. schrieb:
>> Die Drehrichtung kann ich damit aber eher nicht erkennen, wenn eine von
>> beiden Lichtschranken zappelt.
>
> Doch!
> Die Lichtschranken müssen natürlich um einen halben Impuls versetzt
> angebaut sein!
> wie bei einem Drehencoder mit 2Bit-Gray-Code

Hi,

urgs, hast natürlich recht.
Zappeln ist keine Flanke wenn sich danach die andere Lichtschanke nicht 
rührt.
Das ist aber nicht das primäre Ziel.

Ich versuche jetzt aber den Königsweg: Wieder untersetzen und dann ein 
Servo das nur noch als Poti fungiert. Dann habe ich immer die absolute 
Position, das wäre am schönsten.
Ich drucke jetzt mal Modul 0,7 Zahnräder dafür, das müsste noch gehen. 
Leider muß ich 1:8 untersetzen weil das Servopoti nur gut 180° macht.
Mit Modul 1 wird mir das zu gewaltig aber da ist kein Drehmoment, das 
müsste mit 3d-Druck mit Modul 0,7 noch gehen.

Kann jetzt etwas dauern, bis ich das Ergebnis posten kann, ich muß auch 
noch wählen gehen (HH).

Gruß,
Norbert

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.