Frequenzmessung mit dem Raspberry Pi

  • Hallo liebe Raspi-Freunde,


    wie ihr ja vielleicht aus meinem letzten Posting wisst, nutze ich einen Raspberry Pi als Wetterstation.


    Für diese Wetterstation konnte ich für einen sehr guten Preis ein professionelles Anemometer der Firma Thies Clima bekommen (Datenblatt siehe Anhang).


    Wie so häufig bei „Angeboten“, so gibt es auch hier einen Haken. Das Anemometer erzeugt seinen Messwert nicht mittels Magnet+Reed-Kontakt wie bei vielen anderen, sondern anhand einer Rechteckfrequenz, die proportional zur Windgeschwindigkeit ist.

    Laut Datenblatt entspricht dabei eine Windgeschwindigkeit von 50 m/s einer Frequenz von 1082 Hz.


    Ich habe nun schon mehrere Abende das Netz nach einer einfachen Methode durchsucht, wie man mit dem Raspi eine Frequenz messen kann. Leider ist meine Suche noch nicht von Erfolg gekrönt worden.

    Versteht mich nicht falsch, „Tante G“ hat mir dutzende Ergebnisse auf meine Suchanfrage geliefert, aber immer gab es etwas, das den Artikel für mich unpassend machte. Mal war ein Arduino vorgeschaltet, mal ein anderer µ-Controller, oder das Programm war in C geschrieben (was ich nicht lesen kann), an anderer Stelle hieß es der Raspi könne gar keine Frequenzen messen / einlesen / verarbeiten, wieder an anderer Stelle hieß es, Frequenzen bis in den MHz-Bereich wären möglich. usw…


    Daher habe ich jetzt erstmal folgende grundlegende Fragen an euch:


    1. Kann der Raspi (direkt, also ohne zusätzliche Hardware) Frequenzen messen?

    2. Falls ja, bis zu welcher Frequenz (1000 Hz würden mir helfen)

    3. Falls ja, gibt es besondere GPIOs, oder ist es egal?

    4. Kann man ein Programm dafür auch in Python schreiben?

    5. Darf die Amplitude der Frequenz auch 5 V sein, oder muss sie zwingend 3,3 V sein?


    Wenn all diese Fragen (1 - 4)mit ja beantwortet werden können, habe ich natürlich noch die wichtigste Frage, ob jemand ein Tutorial kennt, in dem dieses Vorhaben beschrieben wird (muss ja nicht exakt für ein Anemometer sein, wichtig wären die ersten 4 vorangegangenen Punkte).

    Ein Link dahin wäre auf jeden Fall klasse!


    Vorab schon mal vielen Dank für eure Antworten!


    Beste Grüße

    U-32

  • > 1. Kann der Raspi (direkt, also ohne zusätzliche Hardware) Frequenzen messen?

    Im Prinzip ja


    > 2. Falls ja, bis zu welcher Frequenz (1000 Hz würden mir helfen)

    So genau weiss ich das jetzt nicht, aber das duerfte knapp werden


    > 3. Falls ja, gibt es besondere GPIOs, oder ist es egal?

    Es gibt keine GPIOs mit Countern dahinter


    > 4. Kann man ein Programm dafür auch in Python schreiben?

    Ja, aber dann sinkt die maximale Frequenz


    > 5. Darf die Amplitude der Frequenz auch 5 V sein, oder muss sie zwingend 3,3 V sein?

    ZWINGEND 3.3V


    Genau wegen diesen Antworten nimmt man lieber einen Arduino oder aehnlich um eine Frequenz zu messen. Der hat keinen Linux-Kernel und keine Prozesse die bei der Reaktion auf einen Eingang zu Verzoegerungen fuehren koennen.

  • 1ms IRQ am PI könnte mit der passenden LIB klappen, aber sicher bin ich nicht, ich würde auf Nr. Sicher gehen, das auch wegen der 5V einem Arduino oder AVR überlassen und nur auf Anfrage an dem PI ausliefern.

    Einfach ist es mit Arduino am PI USB, der Arduino wird versorgt, erledigt die Aufgaben und der PI hat keinen stress mit 5V und über Serial.read/.print am Arduino können Befehle und Daten getauscht werden. Der Arduino kann sogar vom PI programmiert werden Arduino IDE 1.8.5 auf dem PI

    lasst die PIs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hallo zusammen!


    Zuerst mal vielen Dank für die vielen, schnellen Antworten!


    @Leroy:

    Es hat tatsächlich geklappt… ich bekomme Daten! Vielen Dank!!!

    Ich habe aber noch 3 Fragen:


    1. Warum bekomme ich immer gleich 29 Messungen (Messwerte) pro Programmausführung?

    2. Was ist mit „Run_Time“ gemeint?

    3. Was ist mit „Sample_Time“ gemeint?


    Nochmals vielen Dank an alle, die geantwortet haben!


    Viele Grüße

    U-32

    (:

    Fluuuten!

  • Da in der Schleife time.sleep(SAMPLE_TIME) steht und SAMPLE_TIME = 2 ist, wird 2 gewartet, je Durchlauf. RUN_TIME legt vermutlich fest, wie oft die Schleife ausgeführt werden soll.

  • So ist es. 2 Sekunden warten zwischen den Messungen, 60 Sekunden lang Zeitfenster Messzyklus. Macht 29 :conf:. Warum ? Jede Messung braucht Zeit, Irgendwann sind die 60 Sekunden des Messzeitfensters abgelaufen und Dein langsamer pi hat in dieser Zeit eben nur 29 Durchläufe geschafft. (:

    Man soll nicht alles glauben was man denkt!
    (Zitat aus 'Die Anstalt')

  • Aber 30 (60/2) Durchläufe wären auch gar nicht möglich. Da kann die CPU noch so schnell sein. Wenn man irgendwas in der Schleife macht braucht das Zeit. Wenn du 30 oder eine andere Anzahl Messungen haben möchtest, dann die Schleife entsprechend anpassen.

  • Ich nehme an, es geht immernoch um die Frequenzmessung am Raspberry Pi, nicht wahr?

    Dann kann ich sagen, dass man bis ca 100 kHz recht zuverlaessig die Frequenzen messen kann. Allerdings nicht mit den (pseudo) Interruptsa, sondern mit Polling. (Was den Raspberry Pi dann zu 100% auslastet, aber was solls.)


    Dazu musst Du ein C-Programm schreiben, und ich würde die bcm2835 library verwenden.


    Der code, der die Messung macht, sieht dann etwa so aus:



    In dt ist dann die Zeit in Mikrosekunden. (Der Code muss noch etwas in Form gebracht werden, aber so in etwa läuft bei mir eine Anwendung, die Kurze Umschaltzeiten auf dem GPIO misst. Eine EInzelne Messung der Periodendauer der Frequenz ist ungenau, da der Prozess ja vom taskmanager auch unterbrochen werden könnte. Deshalb empfielt es sich, mindestens 16 Messungen zu machen und die jeweils kleinsten Zeiten zu nehmen.


    Folgende Quelle nennt sogar 5.4 MHz als höchste Frequenz:

    http://codeandlife.com/2012/07…-raspberry-pi-gpio-speed/

    Edited once, last by wend ().