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
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
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.