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  21:40:18      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 ( Vorherige Seite 1 | 2 | 3 Nächste Seite )      


Autor
Encoder (Drehknopf) Verständnisproblem.

    







BID = 714003

martix

Neu hier



Beiträge: 37
Wohnort: Stuttgart
 

  


@Nachthimmel:

Das wird vermutlich die Lösung sein!
Kann durchaus sein, dass ich die Kabel vertauscht habe.

Der Encoder ist eingespachtelt. Habe die Kabel einfach nach hinten rausgeführt und weiß nichtmehr, welches welches ist.

Da werde ich mal ansetzen!

Übrigens ein dickes Lob ans gesamte Forum.

So schnelle, kompetente Antworte hätte ich mir nicht erträumt!
Vielen, vielen Dank!



BID = 714006

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

 

  

Moin,

deswegen fragte ich ja auch

Zitat :

Hmmm.
Wie ist denn der Encoder genau angeschlossen?





Grüße

_________________

BID = 714008

Rafikus

Inventar

Beiträge: 4150

Hallo,


Zitat :
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


Nun, so stimmt das nicht (oder ich verstehe es falsch). Wenn sich der Zustand nicht ändert, dann gibt es keine Bewegung, egal bei welcher Kombination.

Wenn nun A die Wertigkeit 1 hat und B die Wertigkeit 2, dann kann man folgendes sagen (im Datenblatt eindeutig so dargestellt)
Wechsel von
1 -> 3 oder
3 -> 2 oder
2 -> 0 oder
0 -> 1 dann wurde im Uhrzeigersinn gedreht.

Bei Wechsel von
0 -> 2 oder
2 -> 3 oder
3 -> 1 oder
1 -> 0 dann wurde gegen den Uhrzeigersinn gedreht

Zwischen zwei unterschiedlichen Zuständen hat man 1/4 von 1/8 Umdrehung gemacht.

Wenn die EIN/AUS Zeit in jedem Kanal 50/50 wäre und die Kanäle 90° versetzt, dann hätte man bei 60 Umdr/min 31,25ms zwischen jedem Zustandwechsel. Angegeben sind aber zwischen 8ms und 2,5ms, also schon ganz schön mies. Und das Prellen ist mit 5ms angegeben - das vereinfacht die sache auch nicht.
Das Teil hat mechanisch 16 Rastungen, macht zwei Zustandswechsel pro Rastung - das sollte für eine Erkennung reichen.
Problematisch ist die Drehgeschwindigkeit. Man macht vielleicht nicht mit einer Handbewegung die vollen 360°, aber je nach Drehknopfdurchmesser doch locker 120°. Bei den angegebenen 60 Umdr/min wären das 1/3 sekunde - da muss man sich also beim Drehen schon sehr zurückhalten um vor lauter Prellen nicht Alles zu übersehen.

Prüfe also, ob die Verdrahtung in Ordnung ist. Schaltest Du eigentlich von 5V über den Taster direkt auf den Eingang, oder hast du das so aufgebaut wie in der Testschaltung vom Datenblatt?

Rafikus

BID = 714009

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika


Offtopic :

Nun, offenbar ist meine tolle Tabelle nicht sonderlich verständlich.

Wir gehen nun erstmal davon aus, dass wir in diskreten Zeitabständen den Wert der Signale A und B erfassen.

00 wenn beide low sind,
01 wenn A low und B high ist,
10 wenn A high und B low ist und
11 wenn beide high sind.

Beide Zwischenpostionen, nämlich 10 und 01 treten dabei nur auf, wenn gerade aktiv gedreht wird. Danach stellt sich entweder 00 oder 11 ein.
Und hätte man meine vorherigen Beiträge zu der Tabelle gelesen, hätte man auch sehen können, dass diese Werte nicht direkt in die entsprechende Drehrichtung transformiert werden. Betrachtet diese Tabelle lieber als "Augenblickszustand"
(wie soll man das nun wieder erklären ) und nicht als Tabelle, anhand der ich die Drehrichtung bestimme, indem ich die erfassten Bitkombinationen damit vergleiche.

Ihr nehmt nun diese Bitkombination und berechnet daraus direkt eine Dezimalzahl; während ich diese Bitkombination als Graykode betrachte und ihn zuerst mal in eine Binärzahl wandle, bevor ich diese dann wiederum dezimal ausdrücke.

Daher kommt auch das Missverständnis.

Ist die Graykode-Zahl erstmal in eine Binärzahl gewandelt, kann man nämlich einfach sagen: beim Drehen nach links wird hochgezählt: 2,3,0,1,2, ... und beim entgegengesetzen Drehen wird nach unten gezählt, also 2,1,0,3,2,1, ... .

Wenn ich dann, bääm, einfach das Vorzeichen der 1 bestimme, die ich hinzuaddiere, dann kann ich, nur aus dem Vorzeichen allein, die Drehrichtung bestimmen.


Mit dem Prellen hatte ich erwähnt, das stellt speziell bei diesen Dingern von Pollin ein Problem dar. Ich hatte auch schon einen, der nur geprellt hat, man konnte auch beim besten Willen nicht 100% reproduzierbar die Drehrichtung bestimmen.


_________________


[ Diese Nachricht wurde geändert von: DonComi am 15 Sep 2010  0:28 ]

BID = 714013

Rafikus

Inventar

Beiträge: 4150

Nun, bei Deinem Wechsel von 0 nach 3 oder von 3 nach 0 sehe ich keine 1 bei der man das Vorzeichen bestimmen kann.
Eigentlich würde ich das in Hardware machen mit Richtung und Puls, aber es soll eben mit Software direkt im Rechner geschehen.
Du gehst davon aus, daß bei einer Raste 00 oder 11 ausgelesen wird. Mit der 11 bin ich einverstanden. Die 00 kann ich aber aus dem Datenblatt nicht entnehmen und wenn es gerade mal so ist, dann wird sich das bei der "Langzeitstabilität" von dem Teil bestimmt noch ändern.

Der Weg über den Greycode ist für mich ein Umweg, dessen Vorteil ich nicht erkennen kann.

Rafikus

BID = 714096

martix

Neu hier



Beiträge: 37
Wohnort: Stuttgart

@Rafikus:
Also die Verkabelung hat gestimmt.
Habs gestern Nacht noch umgelötet. Wenn ich einen der beiden andern Kabel als Masse definiert hatte, gabs nur noch 0 oder 2.

Bei der momentanen Verkabelung gibts 0,3 oder 1.

Ich habe den Encoder direkt über 5V des Gameports angeschlossen.

Wenn ich es nach der vorgeschlagenen Schaltung aufbaue kann ich es vermutlich nicht mehr abfrage, da 10kOhm doch eine Menge sind.

Ich muss zugeben, ich verstehe nicht wirklich was die Schaltung macht.
(Hatte sowas leider nie in der Schule - bereue es sehr).
Sind die Kondensatoren da, die Preller abzufangen?

Würde es denn einen Unterschied machen, wenn ich es so aufbaue?

Also mein Program erkennt inzwischen zu 80% die Drehrichtung richtig.
Nur beim Richtungswechsel braucht er komischerweise 3-4 Umdrehungen bis er ihn registriert.

Gruß Martin

BID = 714099

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Wie siehtn dein Programm aus?

Gerade bei 2 Bit pro Abtastung kann man sowas sogar per Lookup-Tabelle erledigen
(man erspart sich die Sonderfälle der Überläufe 3->0 und 0->3):

Man sampelt einen Wert (n), legt in an Bit0 und Bit1 ab, holt sich den Wert vom vorherigen Sample (n-1), schiebt in zwei Bits nach links und verknüpft ihn ODER mit dem aktuellen.
Dann hinterlegt man für sämtliche Möglichkeiten (sind bloß 8*2, also 16, also auch 24) die Drehrichtung kodiert in eine Tabelle.
Den wie beschrieben zusammengebauten Wert nutzt man als Tabellenindex und kann dann ganz einfach die Werte auslesen.


Das schafft ein µC in ein paar Taktzyklen, wenn man sich ein wenig beim Programmieren anstrengt (Assembler).

Also, der Möglichkeiten sind verdammt viele. Irgendwo habe ich auch mal eine Library gesehen, die das so implementiert, wie ich beschrieben habe. Sooo doof kanns dann wohl nicht sein...

_________________

BID = 714106

martix

Neu hier



Beiträge: 37
Wohnort: Stuttgart

Also das Program erkennt die Drehrichtung eigentlich gut.
Ich habs so gemacht, dass wenn nur 0 oder 3 pro Raststellung kommt, er einfach die Drehrichtung behält.

Wenn ich schön fein langsam drehe, kriegt er den Richtungswechsel mit, aber nur dann.
Ansonsten dauerts immer ein paar Drehungen, bis einmal wieder eine "2" mitkommt.

So kann ichs also nicht lassen.

Da hilft es auch nix, das Programm umzustricken.

Der Rechner bekommt die Zwischenschritte nicht zuverlässig genug mit.
Assembler kann ich nicht. Deshalb würde ich den µController gern erstmal weglassen. Und sonderlich gut programmieren kann ich auch nicht.


Wie siehts denn mit der Beispielschaltung aus. Was macht die genau?

Ich poste jetzt einfach mal meinen Quellcode (Basic).



Code :

Private Sub Timer1_Timer()

counter = counter + 1

If counter <= 60 Then 'Soll anhand der Zeitdifferenz feststellen ob es sich um eine Drehung handelt, wenn 2 Ziffern reinkommen

counter = counter + 1
End If

Dim JInfo As JOYINFO

ppstate = pstate 'state ist aktuell, pstate ist der Status im Schritt davor
pstate = state
GetJoystick 0, JInfo
state = JInfo.Buttons
If JInfo.Buttons <> pstate And counter > 20 Then
List1.AddItem (Str$(JInfo.Buttons))


If state = 2 And pstate = 3 Then 'Fall für rechts
List2.AddItem "rechts"
List2.AddItem "-----------------------------"
dirstate = "rechts"
counter = 0

ElseIf state = 0 Or state = 3 Then 'Fall wenn nur eine Zahl reinkommt (0 ist ok, 3 kommt normalerweise immer mit einer 2 oder 0 zusammen -> 3 alleine heißt, dass er den Zwischenschritt nicht mitbekommen hat)
List2.AddItem dirstate
List2.AddItem "-----------------------------"
counter = 0


ElseIf state = 2 And pstate = 0 Then 'Fall für links
List2.AddItem "links"
List2.AddItem "-----------------------------"
dirstate = "links"
counter = 0


Else
List2.AddItem "weiß nicht " & state & pstate
End If





End If
End Sub





BID = 714158

Rafikus

Inventar

Beiträge: 4150


Zitat :
Wenn ich einen der beiden andern Kabel als Masse definiert hatte, gabs nur noch 0 oder 2.


Zitat :
Ich habe den Encoder direkt über 5V des Gameports angeschlossen.


Versteht das Jemand?

Jetzt mach doch endlich eine Skizze Der Verbindungen oder warte bis Alle die Geduld verlässt.

Rafikus

BID = 714229

martix

Neu hier



Beiträge: 37
Wohnort: Stuttgart

Entschuldigung, ich will auf keinen Fall, dass euch die Geduld verlässt.

Ich habe mal ein Schaubild gemalt, das hoffentlich Klarheit schafft.


Nochmals vielen Dank allen!



BID = 714235

martix

Neu hier



Beiträge: 37
Wohnort: Stuttgart

Hallo nochmal,

ich habe ein wenig gegooglet und dabei folgendes gefunden:
http://www.rn-wissen.de/index.php/Drehencoder

Leider bin ich nicht in der Lage einen der Codes so zu übersetzten, dass ihn Visual Basic annimmt.

Ich verstehe allein schon nicht, was "shift" macht.
Ganz zu schweigen davon, dass ich das mit den 0 Bits, 4 Bits nicht verstehe.

Aber scheinbar kann man die Beispielschaltung zum Entprellen weglassen und die Entprellung in der Software vornehmen.
Leider gehen meine Programmierkenntnisse nicht mal annähernd so weit.

BID = 714288

Rafikus

Inventar

Beiträge: 4150

Auf der verlinkten Seite steht doch, daß der Encoder Aussetzer hat.
Wenn Deine Schaltung tatsächlich so aufgebaut ist und Du nie Den Wert 2 bekommst, dann kannst Du das Teil in (vorausgesetzt, das Programm macht da keinen Fehler).

Das Beste wäre mit zwei Messgeräten zu messen, oder zwei Leuchtdioden mal da dran zu hängen und dann gaaaanz langsam drehen. Wenn Du auch dabei nicht Alle Zustände siehts, dann wird es auch nix.

Rafikus

BID = 714298

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
(vorausgesetzt, das Programm macht da keinen Fehler).
Daran wirds wohl liegen.
Keine Entprellung, zu langsames Programm und dann auch noch die Pushbuttons mit den Encodersignalen zusammengelegt. Irgendwann hilft dann auch kein Graycode mehr.

Andererseits wäre es auch denkbar, daß diese Teile vielleicht nicht ganz grundlos beim Pollin in der Wühlkiste gelandet sind ...

BID = 714335

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Ja, einmalig über das Programm schauen hat bei mir auch nicht zum Verständnis beigetragen.

Ich gehe weiterhin davon aus, dass das Programm die schnellen Signale nicht richtig registrieren kann bzw. mehr oder weniger zufällig dann doch mal in der richtigen Zeit die Übergänge mitbekommt.

Eventuell bringt es etwas, die D-Flipflop-Schaltung zu modifizieren. Sprich: die Drehrichtung in einem Flipflop zu speichern (statisch) und die Drehimpulse auf z.B. 10ms verlängern.

Dann würde die Software das schon registrieren und müsste auch nur zwei Werte einlesen: einmal vom Monoflop, DASS überhaupt gedreht wurde und dann zusätzlich die in einem Flipflop gespeicherte Drehrichtung.


Was perl meinte deutete ich auch schon an: ein Encoder, den ich mal bei Polin bestellte, prellte quasi nur und es war fast nicht möglich, die eigentliche Information aus den Prellsignalen zu filtern.

Ein anderer Encoder gleichen Typs und funktionierte jedoch 100% reproduzierbar mit der Software.
Kann also durchaus sein, dass der Encoder schlichtweg im Eimer ist. Wenn du jemanden mit Oszilloskop kennst (Speicheroszi!), kannst du den dort mal anschließen und schauen, ob die Phasen wirklich sauber geschaltet werden.

Zusätzlich fehlen für meinen Geschmack dort Kondensatoren (100nF-1µF) und Widerstände nach Masse, auch wenn evtl. intern Pulldownwiderstände vorhanden sind.

Damit fängt man schon einiges an Murks ab.


Übrigens, zwei der Methoden, die da in deinem Link stehen, habe ich bereits geschildert. Witzigerweise die mit Graykode und jene mit 4-Bit-Lookup-Tabelle...

_________________

BID = 714337

martix

Neu hier



Beiträge: 37
Wohnort: Stuttgart

Hallo.

Ich behaupte auf keinen Fall, dass das Programm perfekt ist.
Nur: Besser kann ichs nicht.

Das Programm erkennt durchaus 3 Zustände. Nämlich 3(beide Pins haben Durchgang),2(ein Pin hat Durchgang) und 0(kein Pin hat Durchgang


Wenn ich den Drehknopf ganz langsam drehe, kriegt das Programm den Zwischenschritt immer mit. Dann erkennt es die Richtung.

Beim normalen Drehen (also wie man eben einen Lautstärkeknopf drehen würde), kriegt das Programm den Zwischenschritt nur zu ca. 40% mit.

Ich war gerade beim Conrad und werde mal die Widerstände und Kondensatoren einlöten. Ich kann nicht voraussagen, ob der Gameport dann noch verwendbar ist (wegen dem großen Widerstand). Aber ich werde es versuchen. Vielleicht hilft es ja.

Ich danke euch, dass Ihr mir helft, auch wenn ich mich scheinbar mit dem Projekt übernommen habe.

Könntet ihr mir evtl. noch erklären, wie das Prinzip des Entprellens softwareseitig zu lösen ist?(Möglichst einfach).

Das wäre nett.

Gruß Martin


Vorherige Seite       Nächste Seite
Gehe zu Seite ( Vorherige 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 26 Beiträge verfasst
© x sparkkelsputz        Besucher : 182392263   Heute : 7002    Gestern : 6874    Online : 654        24.11.2024    21:40
9 Besucher in den letzten 60 Sekunden        alle 6.67 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0377240180969