Forum: Mikrocontroller und Digitale Elektronik Hardware zur Auswertung 3x 500kHz


von John (Gast)


Lesenswert?

Hallo zusammen,

ich habe die Aufgabe, 3 Signale im Bereich bis ca. 500kHz
abzutasten (>1MS/S) und diese einer digitalen Signalverarbeitung 
zuzuführen und möglichst in Echtzeit auszuwerten.


Dabei ist ein zeitlicher Bereich von ca. 1s zu überwachen, wobei
sich das zu erfassende Ergebnis innerhalb 1ms abspielt.
Meine Idee ist dazu, dass der Erfassungsbereich von 1s permanent 
abgetastet und im (externen) RAM als Ringpuffer vorgehalten wird. Bei 
Überschreitung eines bestimmten Schwellwertes wird dann die weitere 
Signalverarbeitung durchgeführt.

Dazu bin ich z.Zt. auf der Suche nach einer Hardware-Plattform, die 
dieses ermöglicht.

Meine ersten Überlegungen gehen in die Richtung STM32F7,
da dieser wohl genug Performance(FPU, DSP-Funktionalität) zur digitalen 
Signalverarbeitung (z.B. FFT-Länge von 1024...4096) bieten sollte.
Zudem enthält er bereits 3 AD-Wandler mit 12Bit und 2.4MS/S.
Der Temperaturbereich beträgt im übrigen -40C...+85°C

Was meint Ihr, bzw. habt ihr evtl. Alternativen oder
evtl. eine ähnliche Aufgabe schonmal gelöst?

Besten Dank vorab!
Viele Grüße,
John

von John (Gast)


Lesenswert?

ich mach mal einen PUSH

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

John schrieb:
> ich mach mal einen PUSH
Hilft nix, offenbar fehlen noch Informationen...

John schrieb:
> möglichst in Echtzeit auszuwerten.
Wie korrelierst du einen Puffer, der 1 Sekunde zwischenspeichert, mit 
dem Begriff "Echtzeit"?

> Dabei ist ein zeitlicher Bereich von ca. 1s zu überwachen, wobei
> sich das zu erfassende Ergebnis innerhalb 1ms abspielt.
Wie oft tritt dieses Ereignis während dieser Sekunde auf?

von Christopher J. (christopher_j23)


Lesenswert?

Die Idee mit dem externen RAM klingt für mich ganz vernünftig. Was die 
Performance angeht kann ich auch nur spekulieren, also lasse ich es 
einfach. Jedenfalls musst du bei den ADCs aufpassen, dass dein 
Platinenlayout ordentlich ist und du Analog- und Digitalteil fein 
säuberlich trennst, weil nämlich sonst von den angepriesenen 12Bit nicht 
mehr so viel übrig bleibt. Leider ist das Layout bei vielen Dev-Boards 
von ST (bei allen?) sehr dürftig was das angeht.

von Der Andere (Gast)


Lesenswert?

Kommt halt darauf an was da alles berechnet werden muss.
Wenn für jedes neue Abstastergebnis eine komplizierte mathematische 
Funktion über 3 x 1 Million Werte berechnet werden soll, dann kann man 
das vergessen.

Ich werfe jetzt mal das Stichwort "FPGA" in die Runde.

von Peter D. (peda)


Lesenswert?

John schrieb:
> Was meint Ihr, bzw. habt ihr evtl. Alternativen oder
> evtl. eine ähnliche Aufgabe schonmal gelöst?

Was für eine Aufgabe?
Was willst Du denn auswerten (Amplitude, Frequenz, Wellenform, 
Phasenlage usw.)?

von asdf (Gast)


Lesenswert?

wie schon von Vorrednern gesagt: Du musst mehr Informationen liefern

> ich habe die Aufgabe, 3 Signale im Bereich bis ca. 500kHz
> abzutasten (>1MS/S) und diese einer digitalen Signalverarbeitung
> zuzuführen und möglichst in Echtzeit auszuwerten.
>
> Dabei ist ein zeitlicher Bereich von ca. 1s zu überwachen, wobei
> sich das zu erfassende Ergebnis innerhalb 1ms abspielt.

* Wie sehen die Signale aus? Vielleicht hast Du ja ein Bild von einem 
Signal.
* Hängen die Kanäle zusammen?
* Echtzeit = ? (z.B. fertig, bevor das nächste Signal kommt -> dann 
wären das nach Deiner Beschreibung und meinem Verständnis 1s)
* Wie soll die Auswertung aussehen (also welcher Algorithmus, welche 
Genauigkeit)?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Der Andere schrieb:
> werfe jetzt mal das Stichwort "FPGA" in die Runde.
Kam mir auch kurz in den sinn, aber das ist unnötig, wenn z.B. pro 
Sekunde nur 1 solche Berechnung durchzuführen ist.
Dann ist aber auch so ein langer Puffer unnötig, denn wenn das zu 
untersuchende Ereignis nach 1ms vorbei ist, warum sollte man dann die 
tausendfache Datenmenge speichern?

John schrieb:
> da dieser wohl genug Performance(FPU, DSP-Funktionalität) zur digitalen
> Signalverarbeitung (z.B. FFT-Länge von 1024...4096) bieten sollte.
Mit welcher Genauigkeit? Warum in Fließkommaarithmetik?

von John (Gast)


Lesenswert?

Vielen Dank für Eure Rückmeldung und die konstruktiven Kommentare!
Regt doch sehr zum Nachdenken über weitere Thematik an ;-)

Peter D. schrieb:
> Was willst Du denn auswerten (Amplitude, Frequenz, Wellenform,
> Phasenlage usw.)?

Frequenz wird bei max. 500kHz liegen.
Die Signalform ähnelt einer SI-Funktion
Die Amplitude liegt im Bereich von 1...50 mV (ja wird per OpAmp 
verstärkt).

asdf schrieb:
> * Echtzeit = ? (z.B. fertig, bevor das nächste Signal kommt -> dann
> wären das nach Deiner Beschreibung und meinem Verständnis 1s)
> * Wie soll die Auswertung aussehen (also welcher Algorithmus, welche
> Genauigkeit)?

Korrekt. Echtzeit würde ich in dem Fall auf 1 Sekunde "spezifizieren".
Das Ereignis tritt max. 1x pro Sekunde auf.
Wie der Algorithmus im Details aussieht, kann ich noch nicht sagen.
Jedenfalls sind FFT und trigonometrische funktionen erforderlich.
Die absoulute Genauigkeit der einzelnen Kanäle ist nicht entscheidend. 
Eher der zeitliche Abstand untereinander.

Lothar M. schrieb:
> Mit welcher Genauigkeit? Warum in Fließkommaarithmetik?
Ich bin ja noch in einer frühen Konzeptphase ;-)
Fließkomma ist nicht zwingend erforderlich, aber beim M4/M7
praktisch gratis enthalten.

von asdf (Gast)


Lesenswert?

>> * Wie soll die Auswertung aussehen (also welcher Algorithmus, welche
>> Genauigkeit)?
>
> Korrekt. Echtzeit würde ich in dem Fall auf 1 Sekunde "spezifizieren".
> Das Ereignis tritt max. 1x pro Sekunde auf.
> Wie der Algorithmus im Details aussieht, kann ich noch nicht sagen.
> Jedenfalls sind FFT und trigonometrische funktionen erforderlich.
> Die absoulute Genauigkeit der einzelnen Kanäle ist nicht entscheidend.
> Eher der zeitliche Abstand untereinander.
Mir ging es eher darum: Was willst Du über die Signale in Erfahrung 
bringen? Daraus ergibt sich dann der Algorithmus (und ggf. auch die 
erforderliche Präzision (also float vs int)). Hatte ich nicht gut 
formuliert, 'tschuldigung.

Um Dir einen brauchbaren Rat geben zu können ist es für uns wichtiger zu 
verstehen was Du machen willst und nicht wie.

Aus Deiner Ursprungbeschreibung ergibt sich ja jetzt, dass Du ein 
si(x)-ahnliches Signal von ca. 1ms Dauer verarbeiten musst. Wenn das 
Signal jetzt quasi-periodisch also regelmäßig, innerhalb eines 
wiederkehrenden 1s Intervalls, hättest Du ja u.U. exakt 0s Zeit für die 
Verarbeitung. Daher die Bitte: Kannst Du das mal für die 3 Kanäle und 
einen Zeitverlauf von mehreren Sekunden mal als Bild darstellen?

von Volle2 (Gast)


Lesenswert?

du musst schon konkreter werden was du über die Signale wissen willst
und in welchen Bereich.

Zeitliche Informationen ( Frequenz, Phase) können viele µC mit 
Bordmittel
Spannungen( Amplitude, Signalform) geht über ADC und da wird es bei 
500kHz sehr speziell

von Christopher J. (christopher_j23)


Lesenswert?

John schrieb:
> Fließkomma ist nicht zwingend erforderlich, aber beim M4/M7
> praktisch gratis enthalten.

In AN4841 gibt es ein paar Kenndaten zu FFT- und FIR-Performance für 
F429 und F746:
http://www.st.com/content/ccc/resource/technical/document/application_note/group0/c1/ee/18/7a/f9/45/45/3b/DM00273990/files/DM00273990.pdf/jcr:content/translations/en.DM00273990.pdf

Interessanterweise sind Float-FFT tatsächlich schneller als Q31 und nur 
10% langsamer als Q15. FIR-Filter sind in F32 am schnellsten.

von John (Gast)


Lesenswert?

Christopher J. schrieb:
> In AN4841 gibt es ein paar Kenndaten zu FFT- und FIR-Performance für
> F429 und F746:

Ah sehr coole App-Note. Die hilft ja schonmal weiter.
Auf Seite 23 gibt es auch einen Vergleich mit anderen Serien (M0...M7).

Meint Ihr, könnte evtl. die Datenmenge (3 Ch, AD-Wandler mit 2.4 MSPS @ 
12Bit -> ca. 10 MByte pro Sekunde) auf so einem System (externes SDRAM) 
zum Problem werden?

von Peter D. (peda)


Lesenswert?

Für mich klingt die Aufgabenstellung ungefähr so:
Ich weiß zwar nicht, was ich überhaupt will, also mache ich mal ne FFT.

Mal als grobe Abschätzung: Um überhaupt minimale Informationen zur 
Signalform zu gewinnnen, sollte man je Viertelwelle wenigstens 4-mal 
abtasten, d.h. bei 500kHz mit 8MSPS. Hat man keine 3 parallelen ADCs, 
braucht man für 3 Signale hinter dem MUX einen ADC mit 24MSPS.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Christopher J. schrieb:
> Interessanterweise sind Float-FFT tatsächlich schneller als Q31
Sie sind natürlich auch ungenauer, denn float hat nur 6..7 signifikante 
Stellen. Man sollte also nicht blind statt einem int32 ein float 
einsetzen.

John schrieb:
> Meint Ihr, könnte evtl. die Datenmenge (3 Ch, AD-Wandler mit 2.4 MSPS @
> 12Bit -> ca. 10 MByte pro Sekunde)
1. Kann der da überhaupt noch 12Bit?
2. War nicht anfänglich die Rede von >1MSps?
3. Du hast diese Datenmenge eigentlich nicht, denn du willst ja nur 1 
Promille dieser Sekunde auswerten.

John schrieb:
> Ich bin ja noch in einer frühen Konzeptphase ;-)
Deshalb fragen wir ja nach dem, was das werden soll, wofür das gebraucht 
wird, woher das Signal kommt und welche Information in dem Signal 
versteckt ist.

von Stefan F. (Gast)


Lesenswert?

> Hat man keine 3 parallelen ADCs,
> braucht man für 3 Signale hinter dem MUX einen ADC mit 24MSPS.

Hier muss man aufpassen. Ich weiß nicht wie gut die hier genannten µC 
sind, aber einige benötigen nach Dem Umschalten des Kanals signifikant 
Zeit, bevor sie die Spannung messen können.

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.