Probleme bei der Verwendung eines Drehgebers

Hallo,

ich habe einen Wisamic Drehgeber von Amazon und ein Adafruit Feather M0 Adalogger.
Ich versuche zum ersten Mal etwas mit einem Microcontroller zu machen und muss mich deswegen noch in sehr viel Einlesen. Ich bitte deswegen um Verständnis, wenn ich dumme Fragen stellen sollte.

Ich möchte für den Anfang nur einen incrementellen Wert über die Zeit aufgetragen im Seriellen Monitor und Plotter anzeigen. Wenn ich in die eine Richtung drehe soll der Wert erhöht werden, in die andere soll er verringert werden. Das Problem dabei ist lediglich, dass ich die Geschwindigkeit von 5000 rpm voll ausnützen muss. Das ganze muss also verhältnismäßig schnell laufen.
Deswegen wollte ich die Bibliothek digitalWriteFast verwenden. Leider schaffe ich es nicht, die Bibliothek mit dem Adafruit Feather zum Laufen zu bringen. Kann mir vielleicht jemand helfen?

Zum Encoder:
Pulse pro Umdrehung: 600p/r
Eingangsspannung: 5-24V
Geschwindigkeit: (mehr als) 5000rpm
Ausgabe: AB 2Phasen Rechtecksignal, NPN Ausgang, offener Kollektor
Anschluss:
Rot: Vcc
Schwarz: GND
Weiß: A
Grün: B
Angeschlossen hab ich ihn mit 10K pull-up Widerständen. Wie groß sollte ich die Widerstände idealerweise dimensionieren um die schnellsten Schaltzeiten (mit noch vernünftiger Störsicherheit) zu erreichen?

Und als letztes: Was ist denn eigentlich die größte Eingangsspannung die an den Pins des Microcontrollers anliegen darf? Dazu habe ich nirgendwo was gefunden. Je nach pull-up Widerstand liegt an den Eingängen zwischen 3.786V (2.2K) und 3.577V (660K) an.
Das Board braucht 3.3V...

Vielen Dank!

600*5000rpm=50000 Interrupts/s, das ist schon ganz schön sportlich, sollte aber mit dem M0 mit 46MHz zu bewältigen sein.

Zu digitalWriteFast kann ich nichts sagen, funktioniert diese Bibliothek überhaupt mit dem M0? Geht's nicht auch ohne?

Pullup Widerstände werden immer mit der Versorgungsspannung des Controllers verbunden, dann können sie keine zu hohe Spannung erzeugen.

Ich habe bisher zwei Codes getestet und leicht abgeändert, die ich online gefunden habe und damit hat es nicht geklappt. Ich setze mich morgen nochmal dran und versuche was zu erreichen und poste dann die Codes hier, vielleicht kann mir dann jemand helfen.
Konkret war das Problem, dass zum einen manche Pulse nicht gezählt wurden, zum anderen die Drehrichtung teils falsch interpretiert (besonders am Anfang und Ende einer Drehbewegung).

Deswegen hab ich mal nach einem sehr schnellen Code gesucht und bin auf die digitalWriteFast gestoßen - ich hab aber noch keinen Bericht von jemandem gefunden, der es so verwendet hätte.

Vielen Dank für den Hinweis mit den Widerständen, das ist natürlich eine tolle Idee!

DrDiettrich:
600*5000rpm=50000 Interrupts/s

Fast.

600*5000=3.000.000

Gruß

Gregor

gregorss:
600*5000=3.000.000

pro Minute!

Falsche Zählungen am Ende einer Drehbewegung könnten vom Schwingen um den Endpunkt stammen. Dann muß man auf beide Flanken triggern, um die Umschaltung der Drehrichtung sicher mitzukriegen.

Ist die Drehrichtung konstant, kann man auf ein Signal (als Takt) triggern, und das andere Signal einfach ignorieren. Letzteres reicht z.B. für die Drehzahlregelung von Motoren, könnte jedoch für eine exakte Positionierung nicht ausreichen.

Ich befürchte daß die digitalWriteFast auf diesem Kontroller nicht funktioniert. Nicht alle Bibliotheken funktionieren mit allen Kontrollern.

Normalerweise vertragen Eingänge maximal die Versorgungsspannung. Es gibt Außnahmen aber die mußt Du explizit im Datenblatt des Kontrollers nachschauen.

Grüße Uwe

DrDiettrich:
pro Minute!

Was selbstverständlich auf 50.000 Interrupts pro Sekunde hinausläuft.

Gruß

Gre-lesenSollteManKönnen-gor

Was willst Du uns mit Deinen Kommentaren sagen? Daß ich die richtige Rate vorher schon gepostet habe?