mikrocontroller.net

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


Autor: Markus Groh (mgdelta)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: WEIF (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.