Encoder (Drehknopf) Verständnisproblem.

Im Unterforum Projekte im Selbstbau - Beschreibung: Selbstbau von Elektronik und Elektro

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 24 11 2024  19:51:13      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Projekte im Selbstbau        Projekte im Selbstbau : Selbstbau von Elektronik und Elektro

Gehe zu Seite ( 1 | 2 | 3 Nächste Seite )      


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.

_________________


      Nächste Seite
Gehe zu Seite ( 1 | 2 | 3 Nächste Seite )
Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


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