-
-
Erfahrener Benutzer
Begeisterter Techniker
Drehgeber aus Optomechanischer Kugelmaus verwenden
Guten Tag
Ich habe hier ein Modell eines Flugzeuges, welches mechanisch so befestigt ist, dass es um alle drei Achsen beweglich ist. An jeder Achse befidet sich ein Potetiometer. Somit konnte (früher) per Software die Lage des Flugzeuges grafisch dargestellt werden.
Das einzige Problem hierbei war, dass das Flugzeug nur um jeweils die 270° der Potentiometer gedreht werden konnte.
Nun möchte/soll ich das so lösen, dass man das gesamte Flugzeug immer um 360° drehen kann (für jede Achse). Dazu sollten bereits vorhanden Schlitzscheiben aus alten Computermäusen verwendet werden.
Jedoch habe ich ein kleines Problem, das ganze Softwaretechnisch zu realisieren.
Wenn ich das richtig verstehe, wird für jeweils eine Schlitzscheibe eine LED und ZWEI Fototransistoren verwendet. Somit kann man auch die Richtung bestimmen, in welche sich die scheibe bewegt. (Soweit richtig?).
Da es sich um zwei Transistoren handelt, geben sie jeweils ein um 90° verschobenes Signal heraus.
Aber nach meinem verständniss müssen dann die Transistoren in einem gewissen Winkel zur LED stehen? also einer währe dann "senkrecht" zur LED und einer z.B. um 45° verschoben?
Wie schaut das ganze schlussendlich aus? ich habe dann immer ein Signal, das 90° nach vorne oder hinten verschoben ist?
Danke für euere Hilfen
Gruss JeyBee66
-
Erfahrener Benutzer
Robotik Einstein
Also vom Winkel her (mechanische Ausrichtung) ist da eigentlich nix verdreht, sondern eher verschoben.
D.h. wenn ein Transistor abgedeckt ist, kanns sein, dass der andere noch ein Signal kriegt. Durch die zeitliche Abfolge, wann welcher Transistor Licht abkriegt, kann man dann sagen, ob, wie schnell und in welche Richtung sich das Ganze dreht.
Vom aussehen her:
http://www.qsl.net/pa3ckr/bascom%20a...ry-encoder.gif
-
Erfahrener Benutzer
Begeisterter Techniker
Ah, jetzt verstehe ich das.
Ich nehme an, das wenn ich die Lichtschranke aus der Maus nehme, ich da nur noch die richtigen Pins finden muss, und dann kann ich das einfach per uC auswerten? Ich habe dann zwei pins am AVR, und der eine ist früher 1 als der andere?
Gruss JeyBee66
-
Erfahrener Benutzer
Robotik Einstein
"Idealerweise" könnte so ne Lichtschranke 6 Pins haben (evtl auch nur 5)
Die LED zu finden, sollte einfach sein: Gegenüber den Fototransistoren und meistens nur 2 Pins. Die restlichen 3 oder 4 Pins sind dann die Transistoren.
Bei den Transistoren und der LED aber immer Vorwiderstände verwenden. Sonst geht das Ding nicht lang oder gibt die Drehrichtung mit unterschiedlichen Rauchfarben aus...
Wenn du ein Signal dann an nen Interrupt-Eingang legst, da dann z.B. auf eine fallende Flanke reagierst, brauchst du für die einfachste Möglichkeit nur zu schauen, welchen Pegel das andere Signal zu dem Zeitpunkt hat.
Also bei Verwendung des Bildes von oben ist z.B. A mal am Interrupt.
Wenn A fällt und B ist high: Schritt nach rechts.
Wenn A fällt und B ist low: Schritt nach links.
Es gibt noch die Möglichkeit, die beiden Leitungen per Timer-Interrupt abzufragen, aber ich bin da irgendwie kein Freund davon (nur meine Meinung, kein fachlicher Rat!). Zum einen hat man da immer ne Interrupt-Last, auch wenn das Ding nicht gedreht wird, zum anderen kanns passieren, dass bei ner bestimmten Drehzahl in die eine Richtung eine andere Drehzahl in die andere Richtung erkannt wird
(Alias-Effekt; kennt man als "rückwärts" drehende Reifen in Filmen)
-
Erfahrener Benutzer
Begeisterter Techniker
Hi,
Leider habe ich noch nie was mit exzternen Interrupts gemacht. Ich kann also einfach beide Leitungen an die Pins des externen Interrupts legen (Pullup benötigt?) und kann das dann in dem Interrupt im Programm (ISR?) vergleichen und eine z.B. eine 1 für links und eine 0 für rechts ausgeben?
Hat denn eine Mega8 z.B. genug anschlüsse für die internen interrupts? ich brauch ja dann eigentlich 6 Anschlüsse?
Gruss JeyBee66
-
Erfahrener Benutzer
Lebende Robotik Legende
Hallo!
@ JeyBee
Vielleicht hilft dir http://www.rn-wissen.de/index.php/PI...w._Drehencoder beim Verstehen der Arbeitsweise vom Drehencoder. Es enthält zwar ein Code für PIC, aber der Programmablaufdiagramm (PAD) ist allgemein.
Es wurde für handgedrehten Drehgeber erstellt und für schnellere/langsamere Impulsfolgen muss der Zeitabstand zwischen Ablesungen entsprechend angepasst werden.
MfG
-
Erfahrener Benutzer
Begeisterter Techniker
Okay, vielen Dank leute!
Ich weiss jetzt, wie das ungefähr funktioniert.
Demfall werde ich wohl mit den Externen Interrupts anfangen. Sollte ja nicht all zu schwer sein...
Gruss JeyBee66
-
Erfahrener Benutzer
Robotik Einstein
Am AVR brauchst du nur 2 Pins. Einen für den "Interrupt-Takt" (Signal A z.B. an INT0) und einen für Signal B (muss kein Interrupt sein, beliebiger Pin).
Sobald der INT0 durch eine Flanke ausgelöst wird, nachschauen, welchen Pegel die andere Leitung hat.
6 Anschlüsse brauchst du da nicht, da die anderen jeweils nur die Stromversorgung für die LED bzw. die Transistoren sind.
Vom Anschluss her sieht das so ähnlich aus wie hier: http://www.ioproz.de/images/sch_optokoppler.gif
Der Widerstand zieht die Leitung auf 5V; fällt Licht auf den Transistor leitet dieser und das Signal geht auf (fast) 0V runter.
Das 2x für jeden Transistor, die LED kriegt ebenfalls nen Vorwiderstand; würd mal schätzen so zwischen 270-1k. Aber müsste man eh von der ursprünglichen Mauselektronik abschauen können, welcher da drinhängt.
(In der Hoffnung, dass die Elektronik darin dann auch mit 5V lief)
-
Erfahrener Benutzer
Begeisterter Techniker
Achso, also wenn ich drei drehgeber brauche (für jede Achse einen), dann brauche ich trotzdem DREI Interrupt pins? Soweit ich weiss hat z.B. ein mega 16 nur zwei, oder?
Gruss JeyBee66
-
Erfahrener Benutzer
Robotik Einstein
Genau, in dem Fall für jede Achse einen Int und einen normalen.
Der Mega16 hat aber sogar 3:
INT0 an PD2
INT1 an PD3
INT2 an PB2
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen