Signalverarbeitung mit STM32G431: Verbesserungen

OP #7453941
Lesenswert?
• ▲
▼

Hallo zusammen,

ich suche nach strukturellen Verbesserungen für eine Signalvrarbeitung, die ich derzeit auf einem G431 erledige, hinsichtlich dem Einsatz weitere HW-Komponenten.

Die Signalverarbeitung sieht konzeptionell folgendermaßen aus:

  1. CPU-Takt fcpu = 170MHz
  2. SysTick fs = 48KHz
  3. mit fs läuft dann: 3a) simultanes Sampling zweier Analogeingänge via ADC1/2 (Master / Slave) 3b) insgesamt 4 FIR-Filter 3c) weitere (einfache) Signalverarbeitungsschritte zur Bildung zweier Bitfolgen 3d) Zustandsmaschinen für die Bitfolgen zur Protokollauswertung, die dann bei erfolgreicher Auswertung von N Bits ein Ausgabe (4) parametriert.
  4. Ausgabe ist derzeit CPU unabhängig mit Timern

Wie man vllt erkennen kann, läuft das ganze ohne Interrupts und DMA.

Meine Frage ist eigentlich die nach dem Einsatz von DMA bzw. des FMAC. Da die gesamte Verarbeitung mit fs läuft, gibt es m.E. keine Notwendigkeit zur Verwendung von Interrupts bzw. das würde nur kontraproduktiv sein.

Aber auch für DMA oder leider auch den FMAC finde ich keine sinnvollen Einsatzgebiete.

Von den 20,8µs eines Zyklus sind derzeit 1,5µs für die AD-Wandlung und 13,1µs für (3)+(4) verbraucht. Es ist also noch genügend Luft, trotzdem würde ich mich über Anregungen freuen.

Persönliche Seite #7453947
Lesenswert?
• ▲
▼

Wie genau triggerst du das ADC-Sampling? Manuell im SysTick-Interrupt oder mit Delay? Das würde einen kleinen Jitter produzieren. Besser wäre mit den Hardware-Timern direkt den ADC triggern, um eine exakte Sampling-Frequenz für die Signalverarbeitung zu erhalten.

Du kannst mittels DMA eine Reihe Samples vom ADC in ein Array schreiben und das "am Stück" im Filter verarbeiten. Das würde den Overhead reduzieren und CPU-Last einsparen. Allerdings hast du dadurch auch mehr Latenz.

OP #7453961
Lesenswert?
• ▲
▼

Niklas G. schrieb:

Wie genau triggerst du das ADC-Sampling? Manuell im SysTick-Interrupt oder mit Delay?

Es gibt keinen SysTick-Interrupt! Das Status-Register des SysTick wird abgefragt, und dann der ADC getriggert.

Das würde einen kleinen Jitter produzieren.

Gemessen habe ich 0,1µs, und das spielt für die Auswertung keine Rolle.

Besser wäre mit den Hardware-Timern direkt den ADC triggern, um eine exakte Sampling-Frequenz für die Signalverarbeitung zu erhalten.

Sicher. Dann würde der gesamte Schritt (3) vom Polling des ADC_ISR_ADRDY abhängen. Das wird sicher im Bereich von <0,1µs was bringen und den Jitter eliminieren. Beides gut aber nicht wirklich bedeutend.

Du kannst mittels DMA eine Reihe Samples vom ADC in ein Array schreiben und das "am Stück" im Filter verarbeiten. Das würde den Overhead reduzieren und CPU-Last einsparen. Allerdings hast du dadurch auch mehr Latenz.

Die Latenz wird dann schon zu einem Problem. Und die tatsächliche Einsparung wäre das N-fache Lesen des ADC-Datenregisters.

OP #7454027
Lesenswert?
• ▲
▼

Andreas M. schrieb:

Randy B. schrieb:

Und was soll das genau bringen?

Weniger Stromverbrauch?

Interessiert nicht.

Weil du dann die 1.5µs statt mit dem Warten auf den ADC als Rechenzeit zur Verfügung hättest?

Die Zeit gewinne ich, wenn ich den ADC mit einem Timer triggere, nicht wenn ich die ganze Verarbeitung in eine ISR verlagere.

Weils schlechter Stil ist?

Argumente?

Du schaffst es eine 170MHz CPU mit lächerlichen 4 FIR Filtern zu gut 60% auszulasten.

Die FIR nehmen 40% ein. Und ja, die FIR sind einfach als Faltung mit Ringbuffer realisiert.

Vielleicht nochmal zurück ans Reisbrett?

Reis? Schmeckt sicher ganz gut, aber Du meintest bestimmst Reißbrett ;-)

OP #7454468
Lesenswert?
• ▲
▼

Christoph M. schrieb:

Randy B. (rbrecker)

ich suche nach strukturellen Verbesserungen für eine Signalvrarbeitung, die ich derzeit auf einem G431 erledige, hinsichtlich dem Einsatz weitere HW-Komponenten.

Warum suchst du nach einer Verbesserung? Ist diese wirklich notwendig?

Nein, notwendig ist sie nicht (s.o.) (die Angabe bzgl. der FIR waren falsch, es sind nur 29%).

Ich werde noch die ADC-Triggerung auf Timer6 umstellen.

Ich hätte gerne den FMAC eingesetzt, da ich aber 4 Filter habe, sehe ich auch keinen Weg, wie ich da etwas gewinnen könnte. Oder doch?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.