Raspberry Pi Pico: Frequenz messen

Mit dem Raspberry Pi Pico und MicroPython lässt sich ein Frequenzmesser programmieren. Das Programm misst nacheinander die HIGH- und LOW-Zeit des Signals. Aus der Summe beider Zeiten wird die Periodendauer berechnet, woraus sich die Frequenz in Hertz ergibt. Das Messergebnis wird fortlaufend in der Kommandozeile angezeigt.

Zum Testen des Frequenzmessers wird ein PWM-Signal mit 10 Hz erzeugt, das man nach Bedarf anpassen kann.

So lässt sich der Raspberry Pi Pico einfach für Frequenzmessungen einsetzen.

Aufbau und Bauteile

Aufbau: Raspberry Pi Pico: Frequenz messen

Schaltung: Raspberry Pi Pico: Frequenz messen

Programmcode

Das Programm erzeugt auf einem Mikrocontroller (z. B. Raspberry Pi Pico) ein PWM-Signal und misst dessen Frequenz mithilfe eines Eingangs-Pins.

  • PWM-Erzeugung: Auf GPIO 1 wird ein PWM-Signal mit 50 % Duty Cycle und 10 Hz ausgegeben. Die Frequenz ist beispielhaft auf 10 (Hz) voreingestellt.
  • Signaleingang: GPIO 0 wird als Eingang konfiguriert, um ein Signal auszuwerten.
  • Messprinzip: Die Funktion machine.time_pulse_us() misst nacheinander die HIGH-Zeit (T_high) und die LOW-Zeit (T_low). Aus beiden wird die Periodendauer berechnet, woraus sich die Frequenz ergibt.
  • Ausgabe: Die berechnete Frequenz wird fortlaufend im Terminal angezeigt.
  • Beenden: Mit dem STOP-Button oder mit Strg + C wird das Programm gestoppt, und das PWM-Signal sauber deaktiviert.

Die typischen Messergebnisse sollten bei 10 (Hz) zwischen 9.99 und 10.01 Hz liegen.

# Bibliotheken laden
import machine
import time

# Konfiguration: Pins und GPIOs
PIN_PWM = 1          # GPIO 1 / Pin 2
PIN_IN  = 0          # GPIO 0 / Pin 1

# PWM-Signal initialisieren (GPIO 1 / Pin 2)
pwm = machine.PWM(machine.Pin(PIN_PWM))
pwm.duty_u16(65535//2)  # 50 % Duty Cycle
pwm.freq(10)            # Frequenz in Hertz (Hz)

# Signal-Eingang initialisieren (GPIO 0 / Pin 1)
pin_in = machine.Pin(PIN_IN, machine.Pin.IN)

# Hauptprogramm
print('Frequenzmessung wird gestartet')
print('STOP oder STRG + C zum Beenden')
print()

try:
    while True:
        time.sleep(1)
        # Messung HIGH- und LOW-Zeit (jeweils in µs)
        T_high = machine.time_pulse_us(pin_in, 1, 2_000_000)  # Timeout = 2 s
        T_low  = machine.time_pulse_us(pin_in, 0, 2_000_000)
        
        # Wechselsignal vorhanden?
        if T_high < 0 or T_low < 0:
            print("Timeout", end="  \r")
        else:
            T_periode = T_high + T_low        # gesamte Periodendauer
            f = 1_000_000 / T_periode         # Hz, da 1 s = 1e6 µs
            print(f"{f:.2f} Hz", end="  \r")  # Datenausgabe
except KeyboardInterrupt:
    pass
except:
    pass

# PWM-Signal abschalten
pwm.deinit()
print()
print('Ende')

Erweiterung

Da der Programmcode die High- und Low-Zeit separat erfasst, könnte man noch das Puls-Pausen-Verhältnis berechnen und ausgeben.

Weitere verwandte Themen:

Elektronik-Sets für das Hardware-nahe Programmieren

Elektronik-Sets für das Hardware-nahe Programmieren

Programmieren mit dem Raspberry Pi Pico
Online-Meeting

Programmieren mit dem Raspberry Pi Pico

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

Frag Elektronik-Kompendium.de