Forum: Mikrocontroller und Digitale Elektronik Drehimpulsgeber entprellen


von Uwe H. (uwe1981)


Lesenswert?

Servus :-)
Hat jemand eine Idee, wie man einen Drehimpulsgeber entprellet? Ich hab 
hier so ein Sch...ßteil, welches derart prellt, dass sich garnichts 
damit anfangen lässt. Springt pro Impuls germ mal 1-8 Schritte vor oder 
auch zurück, egal welche Richtung man dreht. Nur wenn man gaaaaaanz 
langsam dreht, dann läuft er in die Richtung, wo er soll. Aber immer 
noch mit teilweise gewaltigen Schritten. Hier ist der Link zum 
Hersteller, der noch nichtmal n vernünftiges Datenblatt hat:

http://www.tokyoden.com/product/html/encoder/EC11-e.htm

Ich empfehle jedem, das Ding NICHT zu kaufen. Leider hatten Sie im 
Bastlerladen nix anderes, sonst hätt ich nen optischen Geber gekauft. 
Mein Testprogramm dazu, vielleicht hat ja jemand ne Idee, wie man das 
anders lüsen kann:



$regfile = "m32def.dat"
$crystal = 16000000

$swstack = 50
$hwstack = 50
$framesize = 50

Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , _
   Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2

Config Lcd = 16 * 4

Cls
Cursor Off




Config Pinb.2 = Input
Portb.2 = 1
Config Pinb.4 = Input
Portb.4 = 1
Config Pinb.5 = Input
Portb.5 = 1

Dim Zustand As Byte
Dim Flag As Bit
Dim Wert As Byte

Flag = 0

Do
Zustand = Encoder(pinb.4 , Pinb.5 , Linksroutine , Rechtsroutine , 1)
Cls
Locate 1 , 1
Lcd Zustand
Locate 2 , 1
Lcd Wert
Locate 3 , 1
Lcd Flag
Loop
End

Rechtsroutine:
Incr Wert
Return

Linksroutine:
Decr Wert
Return

von David .. (volatile)


Lesenswert?


von Peter D. (peda)


Lesenswert?

Ein Encoder liefert Gray-Code, der ist quasi selbst entprellend, da sich 
immer nur ein Signal zur Zeit ändert.
Der Trick ist, daß man alle 4 Phasen auswerten muß, auch wenn nur alle 2 
oder 4 Phasenwechsel eine Rastung erfolgt.
Für manuelle Encoder ist ein Timerinterrupt oder ein 
Pin-Change-Interrupt auf beide Signale dazu optimal.


Peter

von Achim Hussel (Gast)


Lesenswert?

>Für manuelle Encoder ist ein Timerinterrupt oder ein
>Pin-Change-Interrupt auf beide Signale dazu optimal.

optimal ja - aber es würde sogar ausreichen, wenn man das per Polling 
abfägt. Man muss lediglich sicherstellen, dass man pro 90° mindestens 
ein mal die Auswertung durchführt.

von Stefan W. (wswbln)


Lesenswert?

Jack Ganssle hat zu dem Thema eine ganz andere Meinung: Prellende 
Signale sollte man NIEMALS auf Interrupt-Eingänge geben:
http://www.ganssle.com/debouncing.htm (falls Englisch kein Hindernis 
ist)

von Bastler (Gast)


Lesenswert?

Uwe Heydemann schrieb:
> Ich empfehle jedem, das Ding NICHT zu kaufen.

Nur weil du den Gray-Code nicht ausgewertet kriegst?

von Uwe H. (uwe1981)


Lesenswert?

Bastler schrieb:
> Uwe Heydemann schrieb:
>> Ich empfehle jedem, das Ding NICHT zu kaufen.
>
> Nur weil du den Gray-Code nicht ausgewertet kriegst?

Nee, weil das Ding auch qualitativ Müll ist.
Dann erklär mir doch bitte mal jemand, wie man den Gray-Code mit Bascom 
auswertet. Ich dachte eigentlich, dass das mit der ENCODER-Routine bei 
Bascom entfällt...

von Falk B. (falk)


Lesenswert?

@  Uwe Heydemann (uwe1981)

>auswertet. Ich dachte eigentlich, dass das mit der ENCODER-Routine bei
>Bascom entfällt...

Eigentlich schon, manchmal nicht. Als erste Aktion könnte man A und B 
vertauschen, klingt unsinnig, ist es aber bisweilen nicht. Siehe 
Artikel. Wenn das nicht hilft, muss man weiter sehen.

MFG
Falk

von MaWin (Gast)


Lesenswert?

Ich weiß nicht, wie die Encoder-Funktion in Bascom definiert ist

> Encoder(pinb.4 , Pinb.5 , Linksroutine , Rechtsroutine , 1)

aber ich weiß, wie man es richtig macht, so daß Encoderprellen keinerlei 
Rolle spielt:

http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29

von Michael (Gast)


Lesenswert?

MaWin schrieb:
> http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29

Dort ist in der Tabelle von Michael Biere die Reihenfolge der Zustände 
allerdings etwas gewürfelt. So stellt das keine Gray-Code dar. ;-)

von MaWin (Gast)


Lesenswert?

So wie ich das sehe soll das auch keine Tabelle der im Laufe
einer Umdrehung nacheinander auftretenden Zustände sein,

sondern einfach eine Auflistung der 4 möglichen Zustände,
also Binärzahl sortiert.

Aber dein Vorschlag, das anders anzuordnen, ist angenommen.

von Platinenbastler (Gast)


Lesenswert?

MaWin schrieb:
> So wie ich das sehe soll das auch keine Tabelle der im Laufe
> einer Umdrehung nacheinander auftretenden Zustände sein,

Stimmt. Die richtige Reihenfolge würde auch besser zum nachfolgenden 
Beispiel passen. Und wenn du schon am Ändern bist: Das Stichwort 
"Gray-Code" würde da auch irgendwie hingehören.

von Utah (Gast)


Lesenswert?

Mit 100nf gegen Masse entprellen wirkt Wunder !

von Michael (Gast)


Lesenswert?

Utah schrieb:
> Mit 100nf gegen Masse entprellen wirkt Wunder !

Löst das Problem aber nicht, sondern begrenzt nur unnötig die 
Schrittfrequenz. Spätestens bei einer Maschinensteuerung geht man damit 
fürchterlich baden.

von Utah (Gast)


Lesenswert?

Die Kondensatoren natürlich zusätzlich zur Softwareentprellung!
Das funktioniert bei Handbetrieb nachensicher und verlangsamt nichts .

von Michel (Gast)


Lesenswert?

Utah schrieb:
> Die Kondensatoren natürlich zusätzlich zur Softwareentprellung!

1. Wenn die Softwareentprellung funktioniert, ist ein Kondensator 
einfach überflüssig.

2. Jeder Schaltvorgang auf "0" stellt einen Kurzschluß des zum Ausgang 
parallel geschalteten Kondensators dar, d.h. es fließen hohe 
Spitzenströme, die zu Kontaktabbrand führen und die Kontaktlebensdauer 
verringern.

von Klaus Heissler (Gast)


Lesenswert?

Hi Uwe,

such dir doch eine von den vieren hier aus:
http://www.rn-wissen.de/index.php/Drehencoder

Ich persönlich bevorzuge die vierte.

Gruß KH

von Achim Hussel (Gast)


Lesenswert?

Es gibt einen einfachen Test, ob der Algorithmus was taugt:

Eine Leitung A oder B abziehen.
Wenn beim Drehen der Zähler weiter hoch zählt, ist es ein 
"Sparalgorithmus", der immer noch viel zu oft verwendet wird.

von Anja (Gast)


Lesenswert?

Klaus Heissler schrieb:
> Ich persönlich bevorzuge die vierte.

ich würde vor Eingang in die Sprungtabelle nicht die Pin-Werte direkt 
verwenden sondern den Entprellten Status der Pins. z.B. mit entprellter 
Zustand = nur setzen falls letzter Pinzustand und aktueller Zustand 
gleich sind.

Gruß Anja

von Achim Hussel (Gast)


Lesenswert?

@Anja
Die Entprellung braucht man beim richtigen Algorithmus nicht.

von Uwe H. (uwe1981)


Lesenswert?

Danke für die Tipps, ich hab mir von der Seite RN-Wissen einen Code 
gezogen, der funktioniert. Das Ganze hat nur einen Nachteil: Der Timer0 
ist nun besetzt. Ich bräuchte eigentlich für mein Projekt die drei Timer 
für andere Aufgaben. Kann man eigentlich einen Timer für mehrere 
Aufgaben nebeneinander nutzen? Ich wollte den Timer0 eigentlich zum 
Wecken des Prozessors aus dem Powerdown-Modus verwenden. Timer1 ist für 
PWM reserviert und Timer2 für Drehzahlmessung. Nun ist Timer0 mit dem 
Encoder belegt und ich rätsel nun, wie ich den Prozessor wecke...

Hat da jemand ne Idee?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Uwe Heydemann schrieb:
> Kann man eigentlich einen Timer für mehrere Aufgaben nebeneinander
> nutzen?
Windows kann das.
Es ist also nur eine Frage der Programmierung.

> Nun ist Timer0 mit dem
> Encoder belegt und ich rätsel nun, wie ich den Prozessor wecke...
Solang der uC schläft, kannst du sowieso keinen Geber einlesen.
Und wenn der Controller läuft, brauchst du den Timer nicht zum 
Aufwecken.

von Uwe H. (uwe1981)


Lesenswert?

Zweite Frage: Wird eigentlich jeder Drehencoder mit dem gleichen Code 
entprellt oder muss man für verschiedene Encoder den Quellcode 
modifizieren?

von ich (Gast)


Lesenswert?

Das kommt drauf an, ob sie auch 2-bit Gray-Code liefern.

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.