Encoder (Drehknopf) Verständnisproblem. Im Unterforum Projekte im Selbstbau - Beschreibung: Selbstbau von Elektronik und Elektro
Autor |
Encoder (Drehknopf) Verständnisproblem. |
|
|
|
|
BID = 713934
martix Neu hier
Beiträge: 37 Wohnort: Stuttgart
|
|
Hallo, ich bin neu und will mich deshalb erstmal vorstellen.
Ich heiße Martin, bin 20 und komme aus dem Raum Stuttgart.
Ich bin bin momentan dabei, mir einen Car-PC in mein Auto zu bauen.
In die Mittelkonsole kommt ein Touchscreen.
(Ich weiß, in den Forenregeln steht, dass man sich an die StVO halten muss, aber ich wüsste nicht, was dagegenspricht).
Damit ich beim Fahren nicht ständig auf den Bildschirm schauen muss, habe ich mir folgenden Drehknopf neben den Touchscreen gebastelt, um die Lautstärke zu regeln und Vor-/Zurückspringen kann.
http://www.pollin.de/shop/downloads/D240313D.PDF
Dessen Status rufe ich über den Gameport ab.
Das funktioniert auch ganz gut.
Das Drücken lässt sich ganz einfach abrufen. (Pin E und D).
Jedoch habe ich mit dem Drehen Probleme.
Auf Pin A/B & Com(Masse) sollte "abwechselnd" (nicht ganz, eine Welle ist scheinbar "länger") (aber versetzt) Durchgang oder kein Durchgang gemessen werden können.
Aus das funktioniert - jedoch nicht versetzt. Wenn an Pin A Durchgang gemesse wird, wird an Pin B auch Durchgang gemessen. Bei "kein Durchgang" ebenso.
Ich habe mal geschaut, ob ich beim Verlöten zufälligerweise Pin A/B zusammengelegt habe. Dabei ist mir aufgefallen, dass man zwischen A und B ebenfalls abwechselnd Durchgang / kein Durchgang messen kann.
Ich finde keine Pins die zu irgend einem Zeitpunkt(bzw. Zustand) unterschiedliche Werte liefern.
So kann ich natürlich die Drehrichtung nicht herausfinden, sondern nur OB gedreht wurde.
Was mache ich falsch? Oder ist das so wie ichs mir vorstelle gar nicht möglich?
Es würde mich sehr freuen, wenn ihr mir helfen könntet.
Vielen Dank im Vorraus.
Gruß Martin
|
|
BID = 713936
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
|
Zitat :
| So kann ich natürlich die Drehrichtung nicht herausfinden, sondern nur OB gedreht wurde. | Doch.
Schau dir mal das vorletzte Bild im Datenblatt an: Die beiden Signale sind phasenverschoben.
Computermäuse machen das übrigens genauso, nur sind da zwei Codierer drin, da ja auch zwei Richtungen ausgewertet werden.
P.S.:
Zitat :
| , in den Forenregeln steht, dass man sich an die StVO halten muss, aber ich wüsste nicht, was dagegenspricht | Die StVZO !
[ Diese Nachricht wurde geändert von: perl am 14 Sep 2010 20:00 ] |
|
BID = 713938
martix Neu hier
Beiträge: 37 Wohnort: Stuttgart
|
Ups, ich meinte natürlich die StVZO.
Ganau das mit der Phasenverschiebung ist eben mein Problem.
Die Phasen sind nicht verschoben.
Wenn A 1 zurück gibt, gibt B auch 1 zurück.
Wenn A 0 zurück gibt, gibt B auch 0 zurück.
Also ich bekomme immer 2 identische Signale, egal wie ich an den 3 (Masse, A, B) messe.
Übrigens vielen Dank für die prompte Antwort.
Gruß Martin
|
BID = 713939
ElektroNicki Inventar
Beiträge: 6429 Wohnort: Ugobangowangohousen
|
Offtopic :
| Wenn der Spannungswandler ein entsprechendes Prüfzeichen hat, gibt es eigentlich keine Probleme.
Bei mir scheiterte es nur an der Erlaubnis durch den Fahrzeughalter...
Rein interessehalber:
Um was für ein Auto geht es, wenn ich fragen darf?
Welche Software verwendest du? |
Es gibt auch Touchpads, bei denen man z.B. den Rand als Scrollfläche definieren kann (Synaptics).
Das sieht dann mitunter etwas edler aus....
_________________
|
BID = 713940
martix Neu hier
Beiträge: 37 Wohnort: Stuttgart
|
Ich finde einen Drehknopf besser als ein Touchpad, da man da was in der Hand hat. Man muss sich nicht erst zum Rand eines Touchpads tasten.
Außerdem empfinde ich eine Drehbewegung für die Lautstärke als äußerst intuitiv.
Der Drehknopf ist auch schon verbaut... wäre schwierig den wieder rauszureißen.
Gruß Martin
|
BID = 713941
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Hallo,
diese Phasenverschiebung dauert nicht sehr lang, es ist daher völlig klar, dass du dort nicht wirklich was messen kannst, so schnell wie das geht.
Es gab mal eine nette Schaltung mit einem D-Flipflop, die die Drehrichtung erkennen konnte. Leider weiß ich nicht mehr, in welchem Zusammenhang ich die gesehen habe.
Meistens wertet man so ein Ding mit einem µController aus.
Genaugenommen zählt so ein Ding im sogenannten Gray-Kode, vielleicht finest du da was, wie man das mit dem Gameport eventuell auswerten kannst
_________________
[ Diese Nachricht wurde geändert von: DonComi am 14 Sep 2010 20:18 ]
|
BID = 713943
martix Neu hier
Beiträge: 37 Wohnort: Stuttgart
|
Ohjeee... ich hatte mir das einfacher vorgestellt.
Aber jetzt weiß ich schonmal, wo der Fehler liegt.
Ich werde jetzt mal versuchen, ob ich ohne zusätzlich Schaltung ablesen kann, welches Signal zuerst kommt.
(Am PC sieht man immer entweder 0 oder 3. Jedoch taucht manchmal für einen Bruchteil einer Sekunde eine 1 auf. Das heißt, dass doch nicht beide gleichzeitig ankommen. Ich hielt das bis jetzt für einen Fehler. Aber dann ist dieses Phenomän ja genau das, was ich auslesen werde.
Ich werde berichten.
Vielen Dank!
Gruß Martin
|
BID = 713945
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Ja, genau das ist der Punkt
Im Datenblatt steht etwas von 8ms, du müsstest also mit 4ms Periodendauer, also mit 250Hz den Port einlesen und die Werte jeweils mit den alten vergleichen, um
zuverlässig die Drehrichtung bestimmen zu können.
Edit: und da kommt der Graykode ins Spiel:
Drehe ich konstant in eine Richtung, z.B. links, zählt der Encoder (im Graykode) nach oben, also neuer Wert = alter Wert + 1.
Dreht man in die andere Richtung lässt sich das so beschreiben: neuer Wert = alter Wert - 1.
(Mit Überlauf von 0 -> 3 und von 3 -> 0)
Um besser rechnen zu können, wandelt man den Graykode in Binärkode (das ist einfach bei zwei Bits) und bestimmt dann das Vorzeichen + oder -, siehe fettgedruckte Bereiche der tollen Gleichung oben. Das Vorzeichen enthält dann direkt die Information, in welche Richtung gedreht wurde
[ Diese Nachricht wurde geändert von: DonComi am 14 Sep 2010 20:33 ]
|
BID = 713947
ElektroNicki Inventar
Beiträge: 6429 Wohnort: Ugobangowangohousen
|
Zitat :
DonComi hat am 14 Sep 2010 20:17 geschrieben :
|
Es gab mal eine nette Schaltung mit einem D-Flipflop, die die Drehrichtung erkennen konnte. Leider weiß ich nicht mehr, in welchem Zusammenhang ich die gesehen habe.
|
Ich kannte sie iirc aus einem Elektorbuch über Digitalschaltungen.
Bei Bedarf kann ich sie mal abfotografieren...
Bei mir funktionierte sie nicht
_________________
|
BID = 713954
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
http://profmason.com/?p=775
Da kommen natürlich nur Impulse raus, muss man also entweder mit weiteren Flipflops abfangen oder schnell genug mit dem Rechner sampleln.
_________________
|
BID = 713959
martix Neu hier
Beiträge: 37 Wohnort: Stuttgart
|
Ah... also ich kann den Port sogar jede Millisekunde abrufen.
Das ist der kleinste Wert.
Ich lasse die Werte, sobald sie sich ändern untereinander in eine Liste schreiben. Er kennt also durchaus den Zustand "1", nicht nur "3" und "0".
Ich meine festgestellt zu haben, dass bei links immer 013 dasteht und bei rechts 03. Jedoch leider nicht mit 100%iger Genauigkeit
@DonComi: Deine Erklärung ist sehr gut! Das Prinzip habe ich verstanden.
Leider hat der Drehknopf aber 2 Signalausgänge.
Diese Tatsache bekomme ich nicht mit deiner Erklärung zusammen.
Trotzdem vielen Dank,
ich denke, wir kommen näher...
Ich habe jetzt ein paar mal nach links gedreht.
Folgendes wird ausgegeben:
(1 steht dafür, dass port a zuerst Durchgang hat, 3 dafür, dass beide gleichzeitig Durchgang haben, 0 dafür, dass keiner Durchgang hat)
01010303013013013013
Edit:
Also ich habs.
Bei einer Linksdrehung wechseln sich "0" und "31" ab.
Bei einer Rechtsdrehung wechseln sich "0" und "13" ab.
Leider nicht zuverlässig. Funktioniert nur, wenn ich nicht zu schnell drehe. Und "nicht zu schnell" heißt in dem Fall Schneckentempo...
Ich werde jetzt ein wenig mit der Abtastrate spielen.
Vielleicht ist es ja bei einem bestimmten Wert besonders präzise.
Gruß Martin
[ Diese Nachricht wurde geändert von: martix am 14 Sep 2010 21:01 ]
|
BID = 713971
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Hmmm.
Wie ist denn der Encoder genau angeschlossen?
Außerdem ist das doch kein Gameport, oder? Vielmehr der LPT, hab ich recht?
Graykode: Binär Dezimal Bedeutung am Encoder (Phase A und B)
00 00 0 beide Leitungen führen low -> keine Bewegung
01 01 1 Phase A low, Phase B high -> Drehung z.B. nach links
11 10 2 beide Leitungen führen high -> keine Bewegung
10 11 3 Phase B low, Phase A high -> Drehung z.B. nach rechts
Ich gehe davon aus, dass beide Phasen (A und B) am Port am LSB (niederwertigsten Bit) und ein Bit höher (also Bit0 und Bit1) angeschlossen sind.
Der Rest des Ports wird zu 0 maskiert (Pseudokode: PORT AND 00000011).
Du musst nun folgendermaßen vorgehen:
Neuen Wert einlesen, von 2bit Graykode nach 2bit Binärkode wandeln, Differenz zwischen altem und neuem Wert ermitteln. Das Vorzeichen dieser Differenz gibt die Drehrichtung an.
Beispiel:
alter Wert 2, neuer Wert 1, Sign(1-2) = -1 -> Drehung nach links
alter Wert 1, neuer Wert 2, Sign(2-1) = +1 -> Drehung nach rechts
Nachtrag:
Mich wundert, dass nie '2' angezeigt wird. Das wäre nämlich 10 binär und würde der Wert sein, den man erwartet, wenn der Encoder in die andere Richtung gedreht wird. Aber bei Pollin weiß man sowieso nie... Ich habe auch einige dieser Encoder und einer prellt wie verrückt, sodass man ihn nicht zuverlässig auswerten kann (nicht ohne großen Rechenaufwand ).
_________________
[ Diese Nachricht wurde geändert von: DonComi am 14 Sep 2010 21:07 ]
|
BID = 713975
martix Neu hier
Beiträge: 37 Wohnort: Stuttgart
|
Nein, ich habe ihn tatsächlich am Gameport angeschlossen.
Und zwar hab ich das "Gerät" als 2 Achsen, 4 Knöpfe Joystick in Windows eingestellt.
Bei der X/Y-Achse hab ich Widerstände eingelötet, sonst wird der "Joystick" nicht erkannt.
Jetzt habe ich noch 4 Buttons übrig. Einer ist der Druckknopf, und die andern beiden jeweils das Signal. Einer ist übrig.
Ich habe zwar noch eine I/O-Board für den Druckeranschluss da, aber die Eingänge wollte ich mir sparen.
Mich wundert auch, dass 2 nie angezeigt wird.
Übrigens ist die Tabelle meiner Meinung nach falsch.
Eingang A hat den Wert 0 oder 1
Eingang B hat den Wert 0 oder 2
Beide werden addiert und es ergibt sich eine einzige Zahl. Deshalb:
0 : Beide low
1 : A high, B low
2 : A low, B high
3 : A high, B high
Wie wird der Graykode in den Binärcode ungewandelt?
Das Problem ist außerdem, dass bei einer bestimmten Drehgeschwindigkeit nur 0 oder 3 angezeigt werden. Das heißt, die Phasendifferenz wird nicht erkannt.
|
BID = 713979
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Die Tabelle stimmt schon (deine übrigens auch, sie widersprechen sich nicht).
Die Bits stellen jeweils dar, ob der Kontakt geschlossen (Bit ist 1) oder geöffnet (Bit ist 0) ist.
11 wird zu 10 und 10 wird zu 11.
00 bleibt und 01 auch.
Daraus folgt, dass du in diesem Fall einfach testest, ob der eingelesene Wert 1x ist, also das Bit gesetzt ist und wenn ja, dann führst du einmal XOR durch:
if( n & 0x2 ) n ^= 1;
Danach liegt n im Binärkode vor und du kannst damit rechnen.
(Das gilt selbstverständlich nur in diesem speziellen Fall, da es nur zwei Bits sind!)
Edit:
Wenn niemals 2 angezeigt wird (sich die beiden Phasen also unterscheiden, genau wie bei 1), dann ist die Abstastfreuqnez wohl zu klein oder der Encoder im Eimer (unwahrscheinlich).
Im Datenblatt steht ja auch, dass die Zeit mit zunehmendem Alter kürzer wird.
Daher taste ich meine Geber mit einer wesentlich höheren Rate ab, als jemals gedreht werden könnte.. Ist die Differenz 0, ist halt nicht passiert. Der Unterschied ist, dass mein ein Echtzeitsystem ist, und daher auch 10000 Abtasttungen pro Sekunde inkl. der kleinen Rechnerei kein Problem ist. Bei dir sieht das anders aus, dafür ist so eine Schnittstelle nicht gemacht.
Daher wäre eine Hardwarelösung gar nicht verkehrt.
_________________
[ Diese Nachricht wurde geändert von: DonComi am 14 Sep 2010 21:39 ]
|
BID = 713999
Nachthimmel Gerade angekommen
Beiträge: 3 Wohnort: Villingen-Schwenningen
|
Also ich werte diese Encoder mit µC´s aus (die sind normalerweise schnell genug, vor allem über Interrupt) und hatte auch schon mal das Problem, dass immer nur 00, 01 oder 11 ankam. Problem: Ich hatte die gemeinsame Versorgungsleitung mit einem Ausgang vertauscht. Daher konnte der andere Ausgang nie alleine ein Signal ausgeben. Vielleicht ist das ja auch hier das das Problem.
Das Problem mit dem durchmessen ist vermutlich ganz einfach zu erklären: Beim Zustand 11 und beim Zustand 00 rastet der Encoder ein. Wenn man immer in den Einrastungen misst, gibt es keine Übergänge, in denen nur ein Ausgang aktiv ist. Die Übergänge sind nur in einem sehr kleinen Bereich zwischen den Einrastungen.
_________________
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag heute wurden bisher 20 Beiträge verfasst © x sparkkelsputz Besucher : 182391571 Heute : 6307 Gestern : 6874 Online : 602 24.11.2024 19:51 3 Besucher in den letzten 60 Sekunden alle 20.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0493578910828
|