Problem mit Inkrementalgeberauswertung per ISR (Mega88-20)

#1294596
Lesenswert?

Hallo an alle,

 ich habe ein seltsames Problem. An der Hochschule arbeite ich an einem 
kleinen Projekt, eine Implementierung von einem ABS-System in einem 
Modellauto (elektrohydraulische Bremse).

An den Rädern sind Inkrementalgeber installiert mit 1200 Strichen. Diese 
senden ihr Signal an einen ATMega88-20 an die Eingänge INT0 und INT1. 
Eine Auswertung der Drehrichtung ist nicht nötig.

Im Programm selbst werden die Signale per ISR detektiert (rising edge). 
Tritt ein solcher Event auf, wird einfach ein uint16_t Variable 
(natürlich volatile) hochgezählt.

Den aktuellen Wert lasse ich per USART auf eine Konsole ausgeben. Bin 
noch beim Debuggen. Mein Problem ist aber, daß bei sehr langsamer 
Bewegung des Rades meine Zählvariable nicht hochgezählt wird. Erst bei 
schnellerer Drehung reagiert es. Steht das Rad anschließend wieder und 
wird erneut nur ganz leicht bewegt, geht der aktuelle Zählwert verloren, 
wird zu 0.

Ein ganz merkwürdiges Verhalten, brauche auch eine Auswertung von 
kleinen Drehraten. Die Pull-Ups für die Eingänge sind ebenfalls 
aktiviert.

Kennt jemand ein solches Verhalten bzw hat jemand Tipps für mich? Wäre 
klasse für meine Nerven :-)

Danke! Grüße, Markus
Persönliche Seite #1299047
Lesenswert?

Markus Groh schrieb:

> Im Programm selbst werden die Signale per ISR detektiert (rising edge).
> Tritt ein solcher Event auf, wird einfach ein uint16_t Variable
> (natürlich volatile) hochgezählt.

Ausschluss einer fehlerhaften Software: Hast du einen minimalen 
Sourcecode mit dem sich das Problem reproduzieren lässt?

> Den aktuellen Wert lasse ich per USART auf eine Konsole ausgeben. Bin
> noch beim Debuggen. Mein Problem ist aber, daß bei sehr langsamer
> Bewegung des Rades meine Zählvariable nicht hochgezählt wird. Erst bei
> schnellerer Drehung reagiert es. Steht das Rad anschließend wieder und
> wird erneut nur ganz leicht bewegt, geht der aktuelle Zählwert verloren,
> wird zu 0.

Ausschluss einer fehlerhaften Hardware: Wurde das Signal schon 
oszilloskopiert? Kann es sein, dass ein unerwartetes Signal angeliefert 
wird?
Gast #1299102
Lesenswert?

Zitat :

An den Rädern sind Inkrementalgeber installiert mit 1200 Strichen. Diese
senden ihr Signal an einen ATMega88-20 an die Eingänge INT0 und INT1.
Eine Auswertung der Drehrichtung ist nicht nötig.

Zitat Ende

Wenn die Drehrichtung nicht ausgewertet wird, genügt es doch, einen 
Ausgang des Drehgebers zu zählen.

Ansonsten wie oben erwähnt, Software-Listing schicken und Signalqualität 
überprüfen.

ciao

WEIF

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