Forum: Mikrocontroller und Digitale Elektronik Drehimpulsgeber


von Thomas R (Gast)


Lesenswert?

Hallo,

ich habe hier ein Problem welches ich zunächst völlig unterschätzt
habe. Und zwar muss ich 4 Drehimpulsgeber an einen Mega32 angeschlossen
werden. Es soll möglichst nur 1 Interrupt verwendet werden. Eine reine
Softwarelösung habe ich bis jetzt nicht zufriedenstellen hinbekommen,
weshalb ich jetzt eher zu mehr Hardware tendiere. Wie macht man das am
günstigsten? Sollte man einen zusätzlichen Controller verwenden? Ein
CPLD ? Ober gibt es gar etwas fertiges?

Die Impulsgeber haben 30 N/U und werden von Hand betätigt, also max.
1U/s.

von (geloescht) (Gast)


Lesenswert?

(Dieser Beitrag wurde geloescht)

von Thomas R (Gast)


Lesenswert?

Das klingt interessant. Auf den Mega32 bin ich nicht festgelegt. Der
Mega169 unterstützt Interrupt on Pin Change wenn ich mich richtig
entsinne. Kannst du genauer sagen was du mir "Interrupt Maske
auf den Port mit den Drehencodern" meinst? Du meinst dann vermutlich 8
Interrupts auf die 4 Drehcoder legen und dann jeweils auf die rising
Flanken an A und B reagieren?

von (geloescht) (Gast)


Lesenswert?

(Dieser Beitrag wurde geloescht)

von Thomas R (Gast)


Lesenswert?

Ok hab ich noch nie gemacht aber wieso nicht. Hast du oder sonst jemand
ein C Programm zur Hand in dem das geamcht wurde?

Vielen Dank schon mal für die bisherige Hilfe

von Markus (Gast)


Lesenswert?

das geht ohne interrupt, benutze einfach einen d flipflop und schließe
die beiden drehgeber bei q und t an. das speichert der ff den letzten
zustand.  so hatte ich es gemacht, läuft super

von Thomas R (Gast)


Angehängte Dateien:

Lesenswert?

Von dieser Möglichkeit habe ich un auch schon öfter gelesen. Jedoch
verstehte ich die Funktion nicht wirklich. Meinen Ausführungen liegt
das Timing Diagramm im Anhang zu Grunde.
Ich gehe jetzt davon aus dass der DIG in Position 1 steht. An A ist der
Takt des FFs angeschlossen. Jetzt drehe ich gegen den Uhrzeigersinn
weiter auf Position 2. Dann passiert am FF doch gar nichts, da nur eine
fallende Flanke ankommt. drehe ich jetzt wieder im Uhrzeigersinn zurück
auf 1 bekommt ich eine high Flanke und das FF schaltet 0 auf Q. Jetzt
stehe ich wieder am Anfang, habe aber nur 1 Signal bekommen? Wo ist
mein Denkfehler?

von Unbekannter (Gast)


Lesenswert?

Drehimpulsgeber per Interrupt auswerten, ist ein großer Fehler, wegen
dem Prellen!

Details, wie man es richtig macht, unter:

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

von Michael Nagler (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Thomas,
über das Auslesen von Drehimpulsgebern habe ich mir auch lange den Kopf
zerbrochen. Mit Hilfe von Peter Danneggers großartigem Grundlagenthread
ist es mir dann gelungen, das Problem perfekt mit minimalem
Ressourcenverbrauch zu lösen:
http://www.mikrocontroller.net/forum/read-4-37992.html#new

In dem Thread steht leider einiger Müll, aber die wertvollen Teile
lassen sich bei aufmerksamem Lesen aber gut extrahieren.

Ich habe die Routine in Assembler übernommen und steuere zum Test nur
die Pulsbreite des PWM. Mit dem Beispiel kann man auch die Auswirkung
unterschiedlicher Abtastraten testen. Bei mir hat sich eine Abtastrate
von ca. 1 kHz bewährt. Ich kann keinerlei Prellen feststellen. Ein
Erweitern auf 4 Drehimpulsgeber sollte den Controller nicht stressen.

Gruß
Michael

von Johnny (Gast)


Lesenswert?

Habe mich auch viel mit dem Thema beschäftigt. Per Interrupt von einem
Port IO funktioniert es definitiv nie so ganz einwandfrei.

Daher bin ich auch auf die Lösung mit einem Timerinterrupt / Polling
gekommen. Im Timerinterrupt wird dann eine ganz kleine State-Machine
aufgerufen um herauszufinden, ob der Inkrementalgeber bewegt wurde und
in welche Richtung.

Hier ist die Doku / Source Code in C zu einem Projekt wo ich das
verwendet habe (ab Seite 33 im PDF File):
http://www.circuitcellar.com/renesas/winners/Entries/H3210.zip

Projekt homepage:
http://www.circuitcellar.com/renesas/winners/3210.htm

von peter dannegger (Gast)


Lesenswert?

@Thomas

"Eine reine Softwarelösung habe ich bis jetzt nicht zufriedenstellen
hinbekommen"


Dann hast Du bestimmt noch nicht das hier probiert:

http://www.mikrocontroller.net/attachment.php/87902/ENCODE.C



Peter

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.