RasPi Pico: Frequenz GPIO IN > 4kHz?
Verfasst: Dienstag 29. März 2022, 21:16
Hallo zusammen,
ich versuche mich gerade an einem Drehzahlsensor mittels einer Gabellichtschranke und einer Lochscheibe.
Um zu schauen, wie viele Löcher die Lochscheibe haben darf, hab ich die LED der Gabellichtschranke an den Funktionsgenerator und den Fototransistor an den Pico angeschlossen.
Wenn ich nun die Frequenz hoch drehe, merke ich ab ca. 4,2kHz, dass er anfängt, sich zu verschlucken (das passiert übrigens auch, wenn ich den FUG direkt an den Pico anschließe - am verwaschenen Transistorsignal liegts also nicht).
Jetzt meine Frage an euch: ist es normal, dass der Pico nicht mehr als rund 4kHz schafft, oder hab ich einfach einen saumäßig langsamen Code?
Hier mal noch meinen Code (ist noch nicht der Weisheit letzter Schluss, aber zum Testen reichts erstmal):
Viele Grüße,
D-Platoon
ich versuche mich gerade an einem Drehzahlsensor mittels einer Gabellichtschranke und einer Lochscheibe.
Um zu schauen, wie viele Löcher die Lochscheibe haben darf, hab ich die LED der Gabellichtschranke an den Funktionsgenerator und den Fototransistor an den Pico angeschlossen.
Wenn ich nun die Frequenz hoch drehe, merke ich ab ca. 4,2kHz, dass er anfängt, sich zu verschlucken (das passiert übrigens auch, wenn ich den FUG direkt an den Pico anschließe - am verwaschenen Transistorsignal liegts also nicht).
Jetzt meine Frage an euch: ist es normal, dass der Pico nicht mehr als rund 4kHz schafft, oder hab ich einfach einen saumäßig langsamen Code?
Hier mal noch meinen Code (ist noch nicht der Weisheit letzter Schluss, aber zum Testen reichts erstmal):
Code: Alles auswählen
from machine import Pin
import utime
from functions import int2bool
iPulse = Pin(2, Pin.IN)
LED = Pin(25, Pin.OUT)
bTimeStarted = False
bPulse = False
bPulseLastCycle = False
nTimeStarted = 0
nTimeLastPulse = 0
nPulses = 0
nResult = 0
cnZykluszeit = 1000000
cnMinute = 60000000
nTastgrad = 0
while True:
bPulse = int2bool(iPulse.value())
if bPulse and not bTimeStarted:
nPulses = 0
bTimeStarted = True
nTimeStarted = utime.ticks_us()
if bPulse and not bPulseLastCycle:
nTimeLastPulse = utime.ticks_us()
nPulses = nPulses + 1
bPulseLastCycle = bPulse
if bTimeStarted and (utime.ticks_us() > (nTimeStarted + cnZykluszeit)):
nTastgrad = (nTimeLastPulse - nTimeStarted) / cnZykluszeit
nResult = ((cnMinute * nTastgrad) / 50) / ((nTimeLastPulse - nTimeStarted) / nPulses)
bTimeStarted = False
print("#######")
print(nTastgrad, "%")
print(nPulses, "Hz")
print(nResult, "U/min")
D-Platoon