Forum: FPGA, VHDL & Co. Jogdial Dekoder in VHDL


von Thomas (Gast)


Lesenswert?

Hallo,

ich habe mal eine Frage zu einer Implementierung eines Jogdial Dekoders 
wie sie hier gemacht wurde: 
http://www.mikrocontroller.net/articles/Drehgeber#Beispielcode_in_VHDL

So wie ich das sehe, wird dort pro Signal A bzw. B die fallende und 
steigende Flanke ausgewertet. Wenn eine Flanke erkannt wurde, wird der 
Pegel des anderen Signals betrachtet. Je nachdem welche Flanke erkannt 
wurde und welchen Pegel das entpsrechend andere Signal hatte, wird die 
Drehrichtung bestimmt.

Soweit so gut. Was mich jetzt aber wundert ist, wenn ich die 
Flankenerkennung für beide Signale A und B mache, wird doch von einem 
Rastpunkt zum nächsten zwei mal die gleiche Drehrichtung erkannt. Also 
wenn ich z.B. im Uhrzeigersinn Drehe wird erst die Flanke von Signal A 
erkannt. Dann, dass der Pegel von B '0' ist -> up_down und ce wird 
gesetzt und wir haben somit eine Drehbewegung im Uhrzeigersinn. Noch im 
gleichen Rastpunkt wird die steigende Flanke von Signal B erkannt, der 
Pegel von A ist '1' und es wird wieder up_down und ce gesetzt -> eine 
weitere Drehung im Uhrzeigersinn. Das gleiche auch für die Drehung gegen 
den Uhrzeigersinn.

Soll das so sein? Oder ha ich da irgendwo nen Denkfehler? Wenn ich nen 
Counter dahinter habe dann will ich doch, dass der pro Rastpunkt auch 
nur um eins hoch- bzw runtergezählt wird.

Grüße,
Thomas

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


Lesenswert?

Thomas schrieb:
> wird doch von einem Rastpunkt zum nächsten zwei mal die gleiche
> Drehrichtung erkannt.
Was, wenn der Encoder keine Rastungen (oder ganz andere) hat?

> Soll das so sein?
Ja.
Die Rastungen sind ja leidiglich mechanische "Hilfsmittel", ein 
industrieller Drehgeber für eine Motorposition hat z.B. keine Rastungen. 
Oder irgendwelche Hifi-Geräte haben x Rastungen bei y Schritten pro 
Umdrehung. Das Eine (Schritte) hat mit dem Anderen (Rastung) nicht 
zwingend was zu tun...

> Wenn ich nen Counter dahinter habe dann will ich doch, dass der pro
> Rastpunkt auch nur um eins hoch- bzw runtergezählt wird.
Dann brauchst du auch keine aufwendige 4-fach Auswertung...

von Franz (Gast)


Lesenswert?

Lothar Miller schrieb:
> Das Eine (Schritte) hat mit dem Anderen (Rastung) nicht
>
> zwingend was zu tun...

Ich bevorzuge im Zweifel solche Drehgeber, die keine harten Rastungen 
haben, weil die nämlich genau zum dem ungewünschten Schwingen neigen, 
was zum Prellproblem führt. Unverständlicherweise sitzen nämlich die 
Rastpunkte bei den meisten Billigtypen genau an den Grenzen, statt in 
der Mitte zwischen zwei Stellungen, was mechanisch aufwändiger ist.

von Christian R. (supachris)


Lesenswert?

Thomas schrieb:
> Soll das so sein? Oder ha ich da irgendwo nen Denkfehler?

Der VHDL Core da wertet eben gerade nicht die Flanken aus, sondern die 
Übergänge zwischen gültigen Zuständen. Alles was dazwischen passiert und 
eventuell prellt, stört nicht. Ich hab diesen VHDL Code im industriellen 
Umfeld im Einsatz, der läuft vollkommen zuverlässig. Vor jedem Eingang 
noch ein Minimal-Spike-Filter, wie im Datenblatt des HCTL2032 auf Seite 
13 beschrieben: http://www.avagotech.com/docs/AV02-0096EN

von Franz (Gast)


Lesenswert?

Dieser spike Filter mit 3 FFs ist aber sehr willkürlich. Mit welcher 
Frequenz tastest Du den ab?

Wenn man das auf die erreichbare Drehfrequenz anpasst, reicht ein FF, 
ansonsten ist das doch willkürlich.

von Christian R. (supachris)


Lesenswert?

Natürlich ist das willkürlich und ein FF reicht in der Regel aus. Ich 
hab dac vor Jahren so übernommen und es tut anstandslos seinen Dienst. 
Abtastung erfolgt mit 30...50MHz, die Geber-Frequenzen können schon mal 
in die 100kHz Bereiche gehen.

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.