mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit den Signalen von optischen Encoders


Autor: Luca Bertoncello (lucabert)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, Leute!

Endlich habe ich von einem Freund ein Oszilloskop bekommen, und einige 
Messungen durchgefürht.

Ich beziehe mich auf dem Thread 
Beitrag "ATMega8: INT0 und INT1 funktionieren sehr komisch"

Damals habe ich mich gewundert, warum der µC die Interrupts INT0 und 
INT1 so komisch verwaltet hat (unregelmäßig gelesen).

Mehrere Leute haben mir gesagt, daß ich unbedingt eine Hysterese 
implementieren soll, denn ansonsten die Signale des LM339s wackeln.

Wenn ich mich aber die Signale vom Encoders (siehe Anhänge 
oszi_encoder1.jpg und oszi_encoder2.jpg, Kanal 2 [Blau]) und die 
Ausgänge des LM339s (Kanal 1 [Rot]) würde ich wirklich sagen, daß keine 
Hysterese nötig ist.

Ich frage mich aber, ob vielleicht diese wackeln des höhes und tiefes 
Signales vom LM339 (bestimmt wegen des langen Kabels) das Problem sein 
kann.

Was meint ihr? Habt ihr Vorschläge, um mein Problem zu lösen?

Besten Dank
Luca Bertoncello

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Solange sich der Encoder nur schnell genug dreht, scheint eine Hysterese 
nicht zwingend notwendig. Aber überleg mal was passiert, wenn der 
Encoder steht und durch Vibrationen o.ä. minimal bewegt wird...

Und generell sollte man Encoder (genau wie Taster) nicht per Interrupt 
abfragen, onsdern per Polling im Timer-Interrupt.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Luca Bertoncello (lucabert)

>Beitrag "ATMega8: INT0 und INT1 funktionieren sehr komisch"

>Damals habe ich mich gewundert, warum der µC die Interrupts INT0 und
>INT1 so komisch verwaltet hat (unregelmäßig gelesen).

>Was meint ihr? Habt ihr Vorschläge, um mein Problem zu lösen?

Ersten wertet man einen Drehgeber NICHT mit Pin Change Interrupts 
aus. Warum das so ist, steht im Artikel.

Zweitens kannst du dir die Schaltung mit den Komparatoren sparen, der 
AVR hat schon Schmitt-Trigger Eingänge, die haben Hysterese.

Dann läuft das auch alles tuti paletti.

MfG
Falk

Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uwe ... schrieb:
> Solange sich der Encoder nur schnell genug dreht, scheint eine Hysterese
> nicht zwingend notwendig. Aber überleg mal was passiert, wenn der
> Encoder steht und durch Vibrationen o.ä. minimal bewegt wird...
>
> Und generell sollte man Encoder (genau wie Taster) nicht per Interrupt
> abfragen, onsdern per Polling im Timer-Interrupt.

Also, das war wirklich den entscheidenden Tipp! Dieser Artikel hätte ich 
viel früher finden müssen. Ich hätte mich wirklich viel Ärger sparen 
können!
Jetzt lese ich die Werte der Encoders in der Interruptsfunktion des 
Timers, alle Millisekunde (da die Motoren maximal 30 Umdrehungen/Minute 
schaffen, und jede Umdrehung 200 Encodersschritte sind, ist jede 
Millisekunde sogar übertrieben, aber lieber mehr als weniger).

Und funktioniert! Egal wie schnell ich die Motoren drehen lasse, bin ich 
in der Lage sie in genau eine Umdrehung zu halten.

Nun weiter mit der PID-Funktion, so daß die Motoren endlich gleichmäßig 
sich drehen...

Nur 'ne Frage noch: was meint ihr über die Störungen, die in der 
Graphiken zu sehen sind? Meint ihr, sie können mir Ärger verursachen? 
Bestimmt kommen sie wegen der Länge des Kabels.
Habt ihr Vorschläge, wie ich sie weg kriege (wenn sie stören können)?

Danke
Luca Bertoncello

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich gehe mal davon aus, dass du einen 1:10-Tastkopf verwendet hast. Dann 
bricht das Signal dort um etwa 0,3V ein. Der AVR erkennt alles ab 
0,7*VCC zuverlässig als high, also bei VCC=5V ab 3,5V. Daher sind hier 
keine Probleme zu erwarten.

Als Ursache kämen auch Spannungsschwankungen durch Lastwechsel auf der 
Versorgungsspannung in Frage.

An welche Stelle ist denn das (wie lange?) Kabel? Zwischen Encoder und 
OP, oder zwischen OP und AVR?

Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uwe ... schrieb:
> Ich gehe mal davon aus, dass du einen 1:10-Tastkopf verwendet hast. Dann
> bricht das Signal dort um etwa 0,3V ein. Der AVR erkennt alles ab
> 0,7*VCC zuverlässig als high, also bei VCC=5V ab 3,5V. Daher sind hier
> keine Probleme zu erwarten.
>
> Als Ursache kämen auch Spannungsschwankungen durch Lastwechsel auf der
> Versorgungsspannung in Frage.
>
> An welche Stelle ist denn das (wie lange?) Kabel? Zwischen Encoder und
> OP, oder zwischen OP und AVR?

Es gibt zwei Kabel (mal 2 noch, also insgesamt 4).
Ein Kabel pro Encoder bis zum LM339, circa 15cm lang, und ein anderes 
Kabel pro Encoder, circa 40cm lang, zwischen LM339 und µC.

Sind die zu lang?

Grüße
Luca Bertoncello

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Luca Bertoncello (lucabert)

>Sind die zu lang?

Nein.

Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> @  Luca Bertoncello (lucabert)
>
>>Sind die zu lang?
>
> Nein.

Ok, dann ist erledigt! Ich danke dir!

Und nun weiter mit dem Programm fluchen... :)

Grüße
Luca Bertoncello

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> denn ansonsten die Signale des LM339s wackeln.

Wenn man mit RICHTIGER Software die Encoder ausliest,
stört wackeln (prellen) beim Übergang nicht.

http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29

Wenn man es - wie du - trotz mehrfacher Belehrung immer
noch mit unzuverlässigen FALSCHEN Algorithmen probiert,
muss man natürlich die Anfälligkeit kaschieren.
Wirklich zuverlässig wird es aber nie.

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.