Drehimpulsgeber

Gast #302474
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.
Gast #302476
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?
Gast #302480
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?
Angehängte Dateien:
Gast #302482
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
Angehängte Dateien:
Gast #302483
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren