Forum: Mikrocontroller und Digitale Elektronik frequenz messung 8-16 Kanäle


von Joachim J. (felidae)


Lesenswert?

Ich möchte mit dem Raspberry Pi auf 8 oder mehr Kanälen die Frequenz 
messen und logen.
Der Frequenzbereich der Signale liegt bei etw. 50-1000 Hz.
Es sollen 5 bis 10 Werte pro Sekunde ermittelt werden.

Da ich den Pi benutze ist das mit der Frequenzmessung schon mal nicht so 
leicht wie bei einem µC und selbst wenn das geht, geht es schon mal 
nicht auf 8 Kanälen gleichzeitig.

Ich suche daher eine Fertige Schaltung, die diese Aufgabe übernimmt und 
mit dem Pi via UART SPI oder I²C kommuniziert.

Kennt da jemand was passendes?

: Bearbeitet durch User
von Christoph db1uq K. (christoph_kessler)


Lesenswert?

http://abyz.me.uk/rpi/pigpio/examples.html
Joan hat hier zwei Beispiele "Frequency counter" 1 und 2 in C

Im Raspi-Forum gab es auch einen Thread
https://www.raspberrypi.org/forums/viewtopic.php?f=32&t=78835&p=1541383&hilit=frequency+counter#p1541383

Externe Frequenzzählermodule haben normalerweise schon Displays und 
keinen Datenausgang, https://www.lcd-module.de/produkte/funktion.html
und für 8 Stück wir das etwas kostspielig. Vielleicht gibt es ein 
Arduino-Programm.

: Bearbeitet durch User
von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Sample einen  8 Gpio Pins mit 2 KHz und zaehle entsprechen hoch.

von Axel S. (a-za-z0-9)


Lesenswert?

Christoph db1uq K. schrieb:
> Externe Frequenzzählermodule haben normalerweise schon Displays und
> keinen Datenausgang

Och, die Module von m.n. (http://mino-elektronik.de/) können den Meßwert 
per UART ausgeben. Muß man bloß noch mit dem RasPi verknüppern. OK, bei 
16 Kanälen ist UART eine eher blöde Schnittstelle. Sollte besser ein 
serieller Bus sein. Könnte man sicher umstricken, macht aber Arbeit.

von M.A. S. (mse2)


Lesenswert?

Axel S. schrieb:
> OK, bei
> 16 Kanälen ist UART eine eher blöde Schnittstelle.

Kommt darauf an,

Joachim J. schrieb:
> Ich möchte ... auf 8 oder mehr Kanälen die Frequenz messen und logen.
...wie oft pro Zeiteinheit neue Werte gemessen und gesendet werden 
sollen, diese Info sehe ich bisher nirgendwo.

von Joachim J. (felidae)


Lesenswert?

Uwe B. schrieb:
> Sample einen  8 Gpio Pins mit 2 KHz und zaehle entsprechen hoch.

Der Pi ist kein Mikrocontroller! Sampeln mit 2 KHz ist da fast nicht 
möglich. Mann hat keinen direkten Zugriff auf Teimer und kann somit auch 
keine festen Sampel rate realisieren.

von Joachim J. (felidae)


Lesenswert?

M.A. S. schrieb:
> Axel S. schrieb:
>> OK, bei
>> 16 Kanälen ist UART eine eher blöde Schnittstelle.
>
> Kommt darauf an,
>
> Joachim J. schrieb:
>> Ich möchte ... auf 8 oder mehr Kanälen die Frequenz messen und logen.
> ...wie oft pro Zeiteinheit neue Werte gemessen und gesendet werden
> sollen, diese Info sehe ich bisher nirgendwo.


korrekt habe ich vergessen. es sollten schon 5 bis 10 Werte pro Sekunde 
sein.

: Bearbeitet durch User
von Christoph db1uq K. (christoph_kessler)


Lesenswert?

mino hat auch einen reziproken Zähler, das wäre günstig für die niedrige 
Frequenz und kurze Messzeit. 19,2kBd ist aber etwas langsam um mehrere 
abzufragen.

von K. S. (the_yrr)


Lesenswert?

Christoph db1uq K. schrieb:
> Vielleicht gibt es ein
> Arduino-Programm.

Ein Atmega 318 hat bis zu 23 (22 Ohne Reset) Pins mit Pin Change 
Interrupt. Worst case hast du 1kHz  8 Kanäle  2 Interrupts = 16kHz, 
d.h. bei 16MHz Systemtakt solltest du bei deutlich unter 1000 
Instructions in der ISR bleiben. wenn du in der ISR nur Zeit (ein Timer 
als Systemtakt) und veränderten Pin in einen Buffer schreibst, sollte 
das in ca. 30-40 Zyklen erledigt sein. ergibt eine Jitter von 2-3µs 
worst case.

oder du nimmst einen Timer mit externem Takt, davon hat ein Mega328 zwei 
und ein Tiny85 z.b. einen (Tiny 13 hat einen timer zu wenig für die 
Zeitbasis). Braucht zwar mehr µC, dafür wirds genauer und muss (sollte) 
nicht in C oder ASM programmiert werden


Was auch wichtig zu Wissen wäre, soll das Ding die Frequnez gemittlet 
seit der letzten Ausgabe, gemittelt über z.b. 1s oder nur errechnet aus 
dem letzten Takt ausgeben?

von Joachim J. (felidae)


Lesenswert?

Ich hatte gehofft es gibt da vielleicht ein Fertiges Modul mit dem ich 
viel Zeit und Arbeit sparen könnte. Ich kann mir natürlich auch einfach 
ein Mikrokontroller Bord besorgen und was Programmieren. Sollte nicht so 
schwer sein.

Ich bitte euch daher nur noch Hinweise auf Fertiges Modul zu Posten.
sollte für mich nichts dabei sein, werde ich es dann halt selber bauen.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Joachim J. schrieb:
> Ich hatte gehofft es gibt da vielleicht ein Fertiges Modul mit dem ich
> viel Zeit und Arbeit sparen könnte.

Spontan fallen mir dazu diese billigen 8CH Logic Analysatoren ein. Die 
lesen 8 Kanäle in regelmäßigen Intervallen ein und liefern die Rohdaten 
als USB Stream an den Rechner. Passende Software findest du unter dem 
Namen "sigrok", allerdings ist die für einen anderen Anwendungsfall 
gedacht. Vielleicht kannst du trotzdem Teile von dessen Quelltext 
gebrauchen.

https://sigrok.org/wiki/Getting_started_with_a_logic_analyzer

von m.n. (Gast)


Lesenswert?

Axel, Christoph, danke für die Blumen ;-)

@TO
Wie genau sollen denn die Ergebnisse sein?
Eine Lösung für 4 Kanäle gibt es fertig; diese läßt sich auch auf > 8 
Kanäle erweitern: Beitrag "4-Kanal Drehzahlmessung mit ATmega88".
Damit werden 4-5-stellige Ergebnisse erreicht. Die Ausgabe könnte man 
per IIC-Bus erledigen.

Joachim J. schrieb:
> Ich kann mir natürlich auch einfach
> ein Mikrokontroller Bord besorgen und was Programmieren. Sollte nicht so
> schwer sein.

Nur zu!

von Joachim J. (felidae)


Lesenswert?

Stefanus F. schrieb:
> Joachim J. schrieb:
>> Ich hatte gehofft es gibt da vielleicht ein Fertiges Modul mit dem ich
>> viel Zeit und Arbeit sparen könnte.
>
> Spontan fallen mir dazu diese billigen 8CH Logic Analysatoren ein. Die
> lesen 8 Kanäle in regelmäßigen Intervallen ein und liefern die Rohdaten
> als USB Stream an den Rechner. Passende Software findest du unter dem
> Namen "sigrok", allerdings ist die für einen anderen Anwendungsfall
> gedacht. Vielleicht kannst du trotzdem Teile von dessen Quelltext
> gebrauchen.
>
> https://sigrok.org/wiki/Getting_started_with_a_logic_analyzer

gute Idee! Das könnte Funktionieren. Danke

von Stephan (Gast)


Lesenswert?

Wusste gar nicht das die auch als 8 Kanal Zähler laufen können.

von Georg (Gast)


Lesenswert?

Joachim J. schrieb:
> 50-1000 Hz.
> Es sollen 5 bis 10 Werte pro Sekunde ermittelt werden.

Dann kannst du keine Zähler verwenden - bei 50 Hz und 10 Messungen/Sek 
sind da gerade 5 Perioden zu zählen, m.a.W. der Fehler beträgt +-20%, 
die Messung ist unbrauchbar. In dem Fall muss Periodendauermessung 
angewendet werden.

Georg

von Stefan F. (Gast)


Lesenswert?

Stephan schrieb:
> Wusste gar nicht das die auch als 8 Kanal Zähler laufen können.

Was man aus den Signalen macht, ist eine rage der Software. PulseView 
zeigt die Periodendauer an, also kann man wohl auch die Frequenz 
berechnen - irgendwie.

von Stephan (Gast)


Lesenswert?

Na dann. USBEE konnte das nicht, soweit ich das noch weis. Habe den AX 
Pro  selten benutzt.

von Stephan (Gast)


Lesenswert?

Wenn das immer noch die Cypress Dinger sind, wird er es kaum hin 
bekommen. Die Dinger sind von Hause aus doof. Der Cypress bekommt seine 
Soft beim Start des Programms auf dem PC per USB. Deswegen liefen die ja 
mit etlichen Softwaresuiten. USBEE, Saleae etc.pp War ja nur eine Frage 
der VID.

von M.A. S. (mse2)


Lesenswert?

Joachim J. schrieb:
> Ich bitte euch daher nur noch Hinweise auf Fertiges Modul zu Posten.
> sollte für mich nichts dabei sein, werde ich es dann halt selber bauen.
Zu den meisten vorgeschlagenen Mikrocontrollern lassen sich fertige 
Module oder Evalboards finden. Und wenn nicht zu genau einem bestimmten 
Typ dann oft zu einem kompatiblen aus der selben Familie.

von Joe F. (easylife)


Lesenswert?

Bei max. 1000 Hz könnte es auch ein 8 bzw. 16 Kanal USB Audio-Interface 
tun.

von Peter D. (peda)


Lesenswert?

Joachim J. schrieb:
> Der Frequenzbereich der Signale liegt bei etw. 50-1000 Hz.
> Es sollen 5 bis 10 Werte pro Sekunde ermittelt werden.

Dann geht am besten irgend ein Cortex M3 mit 8 Capture-Eingängen, denn 
man muß reziprok messen.

von m.n. (Gast)


Lesenswert?

Peter D. schrieb:
> Dann geht am besten irgend ein Cortex M3 mit 8 Capture-Eingängen, denn
> man muß reziprok messen.

Reziprok sowieso. Für 4 Eingänge hätte ich auch etwas Fertiges: 
http://mino-elektronik.de/FM_407/fmeter_407.htm#a1 Die Vorteiler kann 
man ja weglassen.

Sehr einfach und skalierbar wäre eine Schaltung mit kleinem AVR, der 
schon ein TWI als Hardware auf dem Chip hat. Da reicht pro Kanal der µC 
mit hinreichend stabilem Takt (Quarz); an freien Pins wird die 
IIC-Adresse eingestellt. Ob man 1, 8 oder 16 Kanäle braucht, Schaltung 
und Programm bleiben gleich und beim Auslesen ändert sich nur die 
IIC-Adresse.

Aber was genau gebraucht wird, ist ja noch unbekannt.

von c-hater (Gast)


Lesenswert?

Joachim J. schrieb:

> Da ich den Pi benutze ist das mit der Frequenzmessung schon mal nicht so
> leicht wie bei einem µC und selbst wenn das geht, geht es schon mal
> nicht auf 8 Kanälen gleichzeitig.

Doch, klar geht das. Du musst nur auf Linux verzichten, also bare metal 
programmieren. Dann geht das. Sogar völlig problemlos. Die Hardware kann 
noch weit mehr als nur das. Das ist völlig unkritische Kinderkacke für 
diese Hardware.

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb:
> Du musst nur auf Linux verzichten, also bare metal programmieren.

Wie realistisch findest du deinen eigenen Vorschlag?

von Stephan (Gast)


Lesenswert?

Stefanus F. schrieb:
> c-hater schrieb:
>> Du musst nur auf Linux verzichten, also bare metal programmieren.
>
> Wie realistisch findest du deinen eigenen Vorschlag?

Wie realistisch war es vor Linux, Arduino und Co?
Einen Port einzulesen, das Ergebnis zu speichern und erneut zu lesen ist 
kein Hexenwerk. Zumal es hier nicht um sonderlich hohe Frequenzen geht.

von c-hater (Gast)


Lesenswert?

Stefanus F. schrieb:
> c-hater schrieb:
>> Du musst nur auf Linux verzichten, also bare metal programmieren.
>
> Wie realistisch findest du deinen eigenen Vorschlag?

Meinst du jetzt bezüglich der prinzipiellen Machbarkeit oder bezüglioch 
der Machbarkeit durch den TO?

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb:
>> Wie realistisch findest du deinen eigenen Vorschlag?
>
> Meinst du jetzt bezüglich der prinzipiellen Machbarkeit oder bezüglioch
> der Machbarkeit durch den TO?

Ich meine, wie realistisch das Vorhaben ist, einen Raspberry Pi 
bare-metal zu programmieren. Dafür gibt es andere besser geeignete 
Boards.

von c-hater (Gast)


Lesenswert?

Stefanus F. schrieb:

> Ich meine, wie realistisch das Vorhaben ist, einen Raspberry Pi
> bare-metal zu programmieren.

Absolut realistisch. Mache ich selber seit ca. zwei Jahren.

Ich kann die gesamte verfügbare Hardware nutzen, die Grafik allerdings 
nur eingeschränkt, nur als simples Framebuffer-Device. Alle 
Grafik-Beschleuniger kann ich nicht benutzen. Das liegt wohl vor allem 
daran, dass ich sie für meine Anwendungen schlicht nicht benötige und 
deswegen bisher keinen Anlass sah', mich damit auseinander zu setzen...

Übrigens war es garnicht so schwer, diesen Stand zu erreichen. Alle 
wesentlichen Informationen (mit Ausnahme der Grafik) kann man doch den 
Quelltexten der Linux-Systeme entnehmen. Da ist also nichtmal reverse 
engineering erforderlich.

von m.n. (Gast)


Lesenswert?

c-hater schrieb:
>> Ich meine, wie realistisch das Vorhaben ist, einen Raspberry Pi
>> bare-metal zu programmieren.
>
> Absolut realistisch. Mache ich selber seit ca. zwei Jahren.

Das ist doch mal ne Hausnummer. Du hast also zwei Jahre dafür gebraucht 
;-)

An anderer Stelle werden hier Links gezeigt, unter denen fertige Arduino 
Nano Boards für ca. € 2 zu erhalten sind, die sogar mit einem Quarz 
bestückt sind. Da ist der Aufwand doch wesentlich geringer, ein Programm 
für den Nano zu schreiben - je nach Anforderung für 1 - 8 Kanäle - und 
dann entsprechend viele Boards parallel zu betreiben.

Der zeitliche Aufwand dürfte geringer sein, als allein den Bootvorgang 
beim RPi nachzuvollziehen.

von Stefan F. (Gast)


Lesenswert?

m.n. schrieb:
> An anderer Stelle werden hier Links gezeigt, unter denen fertige Arduino
> Nano Boards für ca. € 2 zu erhalten sind, die sogar mit einem Quarz
> bestückt sind. Da ist der Aufwand doch wesentlich geringer, ein Programm
> für den Nano zu schreiben

Deswegen kam ich auf die 8CH Logic Analyzer mit dem Cypress Chip. Da ist 
nämlich auch alles drin, samt R/C Filter und Firmware.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.