PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Inkrementalgeber zählt zuviele Impulse



max!
02.11.2009, 16:47
Hallo Forum,
ich hab versucht einen Inkrementalgeber zu basteln, welcher soweit ganz gut klappt. Leider zählt er bei langsamen Drehzahlen zuviele Schritte.
Der Sensor funktioniert optisch mit einem Fototransistor. Als elektronische Schaltung habe ich die Tastenentprellerschaltung verwendet.
Habe das Problem jetzt per delay gelöst, aber das muss doch auch irgendwie funktionieren ohne den controller zu pausieren.
Wäre schön wenn jemand einen Vorschlag hat.
Gruß Max

Besserwessi
02.11.2009, 17:10
Um festzustellen in welche Richtung sich der geber bewegt, muß man ja den neuen mit dem Alten Zustand vergleichen. Wenn man für jede Abtastung, also z.B. im PinChange Interrupt den Zustand nur 1 mal Ausliest, für den neuen Schritt und zum merken für den nächsten Schritt, sollte in der Summe nichts falsches rauskommen. Es kann höchstens passieren das man beim Prellen eines Signals eine schnelle hin und her bewegung mitkreigt, das kostet aber nur ein bischen Rechenzeit, in der Summe paßt es wieder.

Wenn man das hin und her nicht haben will, dann könnte man ähnlich wie bei der Tastenentprellung die Port nur periodisch, z.B. alle 2 ms abfragen.

PICture
02.11.2009, 17:18
Hallo max!

Damit der µC immer was nutzliches tut, habe ich als delay (ca. 10 ms) ein Unterprogramm für Displayausgabe verwendet. Man könnte dafür auch mehrere andere nacheinander laufende Unterprogramme nutzen, deren gesamte Ausführungszeit dem nötigen delay gleich ist.

MfG

max!
02.11.2009, 17:45
Danke für die schnellen Antworten.

Dann lasse ich es mit dem delay.

Das mit dem PinChange Interrupt hab ich nicht verstanden.Die Drehrichtung ist aber eigentlich egal.

mfg

Besserwessi
02.11.2009, 20:51
Bei vielen neueren µCs kann man ein Interrupt auslösen lassen wenn sich einer von den Gwählten Eingangspins ändert. Das bietet sich an für einen Incrementalgeber. In der ISR zu dem Interrupt kann man dann den Incrementalgeber aktualisieren. Das Hauptporgramm kann dann den Zählerstand einfach aus einer variablen auslesen (allerdings als atomarer Block mit CLI/SEI).