Ich plane, die Drehzahl eines RC-Car zu zählen, das mit einem PI B + gesteuert wird.
Bei der Planung stellt sich jedoch die Frage, wie die Drehzahl zu zählen ist. Meine Idee ist über einen Sensor, der jede Runde einen Impuls gibt, und diesen über Software zu zählen.
Mein aktuelles Problem ist, dass ich keine zuverlässigen Informationen darüber gefunden habe, wie schnell ich GPIO-Änderungen zählen kann, und ich weiß nicht, wie ich das effizient tun kann.
Im Moment möchte ich Python mit RPI.GPIO verwenden, da die meisten Dinge, die Sie finden, so gemacht sind.
Nach dieser Antwort ist es möglich, bis zu 1 MHz zu erreichen (das sollte 1 M RPS sein, was ich nicht erreichen sollte).
Andere geben ein Maximum von 9 kHz (9 k RPS) an, was eine völlig andere Dimension darstellt, und ich denke, ich habe bei der Recherche auch niedrigere Werte gelesen ...
Meine Idee des Codes ist es noch, einer Funktion einen Ereignisrückruf hinzuzufügen, der einfach einen Zähler hochzählt, und im Hauptthread lese und setze ich diesen Zähler ungefähr alle 0,5 Sekunden zurück (und messe die Zeit). Außerdem würde ich die letzten drei Werte behalten und einen Durchschnitt berechnen.
Ich hoffe also, jemand kann mir Ratschläge geben, wie man die Drehzahl am besten erreicht und wie viele Impulse pro Sekunde ich maximal / sicher zählen kann
Antworten:
Sie haben den Beitrag, in dem 1 MHz erwähnt wird, falsch verstanden. Alles, was tatsächlich gesagt wird, ist, dass das Python-Zeitmodul die aktuelle Zeit auf eine Mikrosekunde zurückgeben kann. Es sagt nichts darüber aus, wie viele GPIO-Übergänge in einer Sekunde erkannt werden können.
Ich glaube, dass meine Zahl von etwa 9 K gpio-Zustandsänderungen pro Sekunde für Python, das auf dem Pi ausgeführt wird, immer noch korrekt ist. Wie in dem anderen verlinkten Beitrag erwähnt, können Sie viel besser abschneiden (ca. 100.000 Ereignisse pro Sekunde), wenn Sie die Ereigniserfassungen auf dem Pi durchführen, aber die Verarbeitung auf einen PC laden.
Mit C auf dem Pi sollten Sie 250 K Ereignisse pro Sekunde oder mehr erreichen können.
http://www.raspberrypi.org/forums/viewtopic.php?f=37&t=90243&p=632413&hilit=+hall#p632413 zeigt Python, wie Hall-Sensoren zum Zählen von Motorumdrehungen verwendet werden. Die maximale Drehzahl betrug ca. 9000.
Das Folgende ist ein künstliches Beispiel, zeigt jedoch, wie Pigpio 260 k Ereignisse pro Sekunde zählt (und wie die erfassten Daten angezeigt werden). Das Capture (Pigpio Daemon) befindet sich auf dem Pi. Python und Piscope laufen auf einem Laptop.
http://abyz.me.uk/videos/pig_cb.webm
Das Skript richtet einen Standardrückruf für mehrere GPios ein und startet PWM mit der maximalen Frequenz auf jedem. Die Rückrufe zählen standardmäßig die Pegelübergänge zu einer steigenden Flanke.
Die maximale PWM-Frequenz wird eingestellt, indem ein zu hoher Wert von 100000 angefordert wird. Die nächstgelegene erreichbare Frequenz wird eingestellt. Die erreichbaren Frequenzen hängen von der Abtastrate ab, mit der der Pigpio-Daemon gestartet wurde.
quelle
Welchen Bereich erwarten Sie? Welche Genauigkeit benötigen Sie?
Ich würde einfach die Zeit jedes Impulses messen, die Dauer seit dem vorherigen ableiten und diese invertieren.
Wenn der Motor mit 6000 U / min läuft, würde dies alle 10 ms 1 Impuls geben, was machbar sein sollte. Sie müssen wissen, dass Linux kein Echtzeitbetriebssystem ist. Daher würden auftretende Interrupts die Genauigkeit beeinträchtigen.
quelle