Forum: Mikrocontroller und Digitale Elektronik Problem mit Inkrementalgeberauswertung per ISR (Mega88-20)


von Markus G. (mgdelta)


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

von Stefan B. (stefan) Benutzerseite


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?

von WEIF (Gast)


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

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.