Forum: Mikrocontroller und Digitale Elektronik Drehgeber ohne Prellunterdrückung möglich ?


von Frank D. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich habe zum Testen eines Drehgebers mal einen kleinen Assemblercode 
geschrieben. Jedoch ist, wie auch hier im Forum beschrieben, das Prellen 
des Gebers wohl mein Problem. Mein Programm basiert darauf, dass der 
Geber egal in welche Richtung ich in drehe, einmal den Binären Wert AB = 
11 vorgibt. Das nutze ich um dann einen im vorraus gespeicherten Wert 
auszuwerten. Daran erkenne ich dann ob ich rechts oder links gedreht 
habe. Leider gibt der Geber aber kein sauberes Signal herraus, so das 
hin und wieder mal der Gegenwert erkann wird. Das konnte ich bisher nur 
durch 2 100nF Kondensatoren auf 99% Stabilität bringen. Ich habe auch 
schon mal nur die Flanken auslesen lassen. Jedoch wird der Code dadurch 
wesentlich größer und Fehler werden durch den Geber trotzdem noch 
verursacht. Hat jemand von euch es einmal geschaft in Assembler ein 
stabiles Auslesen von Gebern zu programmieren ohne das ganze in riesen 
Codes ausarten zu lassen ? Würde mich höllisch interessieren.

Gruß Frank

von Frank D. (Gast)


Lesenswert?

Jo,

habe nochmals die 100nF Kondensatoren unmittelbar an den Anschlüssen 
verlötet. Ich sage mal, der Code ist einwandfrei und kann gerne von euch 
verwendet werden. Habe die Stabilität bereits mit 99% beschrieben. 
Jedoch sollte mann nicht wie wild an dem Knopf drehen. Fehler gibts auch 
bei guten Drehgeber gesteuerten Geräten. Jedoch wenn jemand mir zu mehr 
Stabilität verhelfen kann würde ich mich sehr freuen.

Frank

von Thomas B. (detritus)


Lesenswert?

In Assembler hab ich das hier mal geschrieben:

Beitrag "Drehgeber-Auswertung in Assembler für 8051"

Ist allerdings für einen 8051.

Das mit den 100nF kann dir übrigens irgendwann den Drehgeber zerstören.

von vinculum (Gast)


Lesenswert?

Drehgeber oder Drehencoder in der Suchfunktion eingeben.

Bei richtiger Programmierung werden geprellte Impulse wieder 
zurückgezählt und damit neutralisiert. Dein Programm ist da ein wenig 
schlicht.

Die Abfolge ist z.B.

11 - 01 - 00 - 10 - 11 für rechts rum
11 - 10 - 00 - 01 - 11 für links rum

Ein Prellen würde z.B. so aussehen:

11 - 01 - 11 - 01 - 11 - 01 - 00

Das entspricht

rechts 11-01
links  01-11
rechts 11-01
links  01-11
rechts 11-01
rechts 01-00

Also netto 2 Impulse rechts

von Frank D. (Gast)


Lesenswert?

Hallo Thomas und vinculum,

Thomas, das der 100NF zur Zerstörung führen könnte halte ich für nicht 
möglich. Ich denke eher das die Zerstörung durch meine Tests und 
dreherei eher eintreffen wird. :o) Ich werde mir mal deinen Code 
anschauen.

vinculum, ach ja, es hat mir mal jemand gesagt das ein gut durchdachter 
Code nicht unbedingt groß sein muß. Dene Zählung ist korrekt da wir hier 
von meinen Pins ausgehen müssen. Da ist die folge gegenüber der Masse 
natürlich umgekehrt. Auch mein Programm zählt bei einem Fehler den 
letzten Ipuls wieder zurück, zwangsläufig. Wenn man natürlich 100%ige 
sicherheit der Impulse haben möchte gehe ich mal davon aus das ich 
tiefer in die Tasche greifen muß. So schlicht wie das Programm auch ist 
bin ich überrascht wie stabil das bereit läuft.

Vielleicht hat ja noch jemand eine geniale Idee..... Danke......

Gruß Frank

von Jörg (Gast)


Lesenswert?

Ich habe meinen Drehgeber auf meinem FPGA-Board mit 1MHz ausgelesen.
Ist zwar kein mC, wegen der geringen Frequenz aber durchaus
vergleichbar. Ausgelesen habe ich nur die Pegel, nicht die Flanken.
Pegel habe ich nicht entprellt. Da der Drehgeber nicht mit der
Bohrmaschine gedreht wird, lässt sich die Frequenz sicherlich auch
noch weiter runtersetzen.

Der Zähler wurde bei AB=11 hoch/runtergezählt. Der zugrunde liegende
Zustandsautomat hat dabei darauf geachtet, dass z.B. bei einem
Durchgang von 01 nach 11 und dann wieder auf 01 (z.B. wegen Glitches)
nicht wieder zurückgezählt wurde sondern dies als Start einer neuen
Rotation in Gegenrichtung interpretiert wird (also eine Art
Entprellung auf der Zählerebene). Der Automat kam insgesamt mit
9 Zuständen aus.

Gruss

Jörg

von Frank D. (Gast)


Angehängte Dateien:

Lesenswert?

Hier habe ich noch eine Optimierung. Kann man ganz gut in weitere 
Programme einbauen. ;o)

Habe übrigens festgestellt das, wenn ich in eine Richtung drehe, keine 
Fehlmessungen vorkommen. Sobald ich jedoch in die andere Richtung drehe 
bekomme ich halt die naja 1%ige Ungenauigkeit. Habe ich noch nicht 
verstanden warum. Komme ich bestimmt noch drauf. Mir qualmt eh schon der 
Schädel.

von Frank D. (Gast)


Lesenswert?

Hi Jörg,

auch interessant. Im Grunde wird also beim Wechsel der Richtung dann 
immer ein Impuls ausgelassen. Das heisst solange ich in einer Richtung 
drehe wird jeder Schritt gemessen. Sollte dabei ein Rückschritt 
entstehen wird dieser nicht gezählt. Bei einem "echten" Richtungswechsel 
muß erst dieser Rückimpuls gegeben werden bevor dann die anderen Impulse 
gezählt werden.

Wie gesagt interessant. Danke....

Gruß Frank

von Jörg (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe gerade noch mal nachgeschaut. Beim Richtungswechsel werden
keine Impulse ausgelassen, aber schau dir vieleicht am besten die
Skizze an.

Gruss

Jörg

von Jörg (Gast)


Lesenswert?

sorry, zu schnell tab+enter gedrückt..

Als Startzustand kannst du z.B. P11 wählen. P bzw. N stehen für die
beiden Drehrichtungen, die Ziffern für die Pegel AB, die Übergänge
dürften selbsterklärend sein.

Gruss

Jörg

von Spielverderber (Gast)


Lesenswert?

Es ist ja schon eine Frechheit, daß immer noch Drehgeber verkauft werden 
dürfen, deren Kontakte prellen. Für mich ist das ein eindeutiger Verstoß 
gegen die Menschenrechte, wenn Bastler genötigt werden, sich mit solchen 
Problemen zu befassen.

von Peter D. (peda)


Lesenswert?

Spielverderber wrote:
> Für mich ist das ein eindeutiger Verstoß
> gegen die Menschenrechte, wenn Bastler genötigt werden, sich mit solchen
> Problemen zu befassen.

Für mich nicht.
Ich nenne das schlicht "Software entwickeln".

Und dazu gehört eben auch, über reale Probleme nachzudenken oder im Web 
zu stöbern.
In der Codesammlung findet man z.B. entprellende Codebeispiele für 
Drehgeber.


Peter

von Spielverderber (Gast)


Lesenswert?

>Für mich nicht.
>Ich nenne das schlicht "Software entwickeln".


Ja, so ein richtig verbissener Programmierer kennt eben keine Ironie 
oder Selbstkritik.

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.