Frequenzmessung eines TTL-Rechtecksignals mit Arduino

Hallo,

ich habe einen 2-Kanal Drehzahlsensor am Rad (gegenüber der Lochscheibe) des Roboters. Das Ausgangssignal des Sensors ist ein rechtecksignal (2-Kanal Rechtecksignale mit 90° Phasenversatz und deren inversen Signale 5 V TTL).

Ziel: Mein Ziel ist die Geschwindigkeit und die Drehrichtung (vorwärts oder rückwärts) des Rades am PC zu ermitteln.

Idee: Dafür will ich erst die Frequenz des Signals berechnen. Wenn ich die Frequenz permanent haben kann, kann ich die Geschwindigkeit auch aktuell berechnen, da die Impulszahl pro Umdrehung und der Radumfang bestimmt sind.

Meine Frage: Kann man mit Arduino so ein System programmieren? Ich habe schon über die pulseIn()-Funktion gelesen, aber es war mir nicht so klar. Kann die Frequenz zwischen 2 Impulsen und auch die Drehrichtug ermittelt werden? Da ich zur Zeit ein Arduino-Board bestellen werde, brauche ich auch ein paar Empfehlungen: Welche Board ist in diesem Fall geeignet? usw...

2 Signal-Interrupts und eine USB serielle Verbindung kann der UNO
oder neuerdings auch der Leonardo locker.

Wenn du zwei Signale mit 90° Versatz hast, solle die Zeit zwischen den zwei Impulsen entweder 1/4 oder 3/4 der Zyklus-Zeit eines Signals sein, je nach Drehrichtung. Das sollte doch ohne Klimmzüge zu unterscheiden sein, für "normale" Drehzahlen ...

Danke für die Empfehlungen! Ich habe ein Arduino Uno R3 bestellt.
Leider ist es ist mir immer noch nicht klar, wie ich die Drehrichtung kriegen werde. Ich habe zwei Rechtecksignale (mit 90° Versatz) direkt vom Sensor.
Es gibt eigentlich für die vorwärts- und Rückwärtsbewegung insgesamt 8 unterscheidende Fälle:
Kanäle A/B vorwärts rückwärts
0/0 -> 0/1 1/0
0/1 -> 1/1 0/0
1/1 -> 1/0 0/1
1/0 -> 0/0 1/1
Wie viele und welche Pins (digital, PWM,..) werde ich dafür verwenden? Ich kenne mich sehr gut mit C++, aber zum ersten mal werde ich einen Mikrokontroller programmieren. Könnte jemand mir bitte über die Codes und Anschlüsse ein paar Empfehlungen geben?

PWM ist eine Ausgabe und interessiert dich hier nicht.

Der Arduino Uno hat 2 Pins (2 und 3), an die du direkt eine Interrupt-Routine anschliessen kannst. Damit kriegst du einfach den Zeitpunkt jeder Pulsflanke mit ( wahlweise kommend oder gehend ).
Ob die Pulse kurz sind oder so lang dass beide Kanäle gleichzeitig 1 sind, ist eigentlich egal.

Jeder Puls stellt also fest, wann der letzte Puls war --> Geschwindigkeit
und ob der andere Kanal seinen letzen Puls kurz vorher, oder kurz nach dem vorigen hatte --> Richtung

millis() oder micros() und attachInterrupt() sind die Funktionen, die dich interessieren.