STM32F4 - DMA zum puffern des ADC verwenden

OP #3494111
Lesenswert?
• ▲
▼
Hallo alle zusammen,

gibt es eine Möglichkeit, den DMA des STM32F429 so einzurichten, dass er 
beispielweise 256 Werte von einem ADC-Channel ansammelt. Und das dann 
mit mehreren Channeln.

Über eine Messung ist das kein Problem, aber kann ich auch mehrere 
machen.

Der Gedanke dahinter ist ein einfache Glättung des ADC.

Gruß
Sam
Gast #3496592
Lesenswert?
• ▲
▼
Du kannst mit dem ADC und DMA permanent messen und die Werte in einer 
variablen ablegen. Dies geht auch mit mehreren Kanälen. Beantwortet dies 
deine Frage? Wenn nein erkläre Bitte genauer was du möchtest.
Gast #3496621
Lesenswert?
• ▲
▼
Naja wenn du bspw. im ms-Takt einen ADC-Wert misst, kannst du im 
einfachsten Fall ja mit einem Timer in einem beliebigen Abstand (in 
Abhängigkeit) von deinen gewünschten Filter-Eigenschaften z.B. alle 10 
ms einen Wert auslesen, aufaddieren und Mittelwert bilden (moving 
average etc.). Sicherlich bietet der DMA und/oder der ADC auch ein Bit, 
welches anzeigt, wenn ein Wert gemessen/fertig kopiert ist. Das 
aufaddieren und berechnen wirst du wohl alle 256 Werte selber machen 
müssen.
Gast #3496671
Lesenswert?
• ▲
▼
Geht doch relatif einfach. Du muss einfach ueber die DMA in ein Array 
schreiben die genugend gross ist. Bei 4 ADC-Kanalen schreibts du in ein 
Array von 4*256 = 1024 Werte. Die 4 Mittelwert mussen dan berechtnet 
werden aus diesen Array.
OP #3496996
Lesenswert?
• ▲
▼
STM Programmierer schrieb im Beitrag #3496621:
> Naja wenn du bspw. im ms-Takt einen ADC-Wert misst, kannst du im
> einfachsten Fall ja mit einem Timer in einem beliebigen Abstand (in
> Abhängigkeit) von deinen gewünschten Filter-Eigenschaften z.B. alle 10
> ms einen Wert auslesen, aufaddieren und Mittelwert bilden (moving
> average etc.). Sicherlich bietet der DMA und/oder der ADC auch ein Bit,
> welches anzeigt, wenn ein Wert gemessen/fertig kopiert ist. Das
> aufaddieren und berechnen wirst du wohl alle 256 Werte selber machen
> müssen.

Ich brauche alle 100ms 256 neue Werte, einen gleitenden Mittelwert will 
ich nicht machen, das wäre auch einfach, da müsste ich nicht fragen.


conradrp6 schrieb:
> Geht doch relatif einfach. Du muss einfach ueber die DMA in ein
> Array
> schreiben die genugend gross ist. Bei 4 ADC-Kanalen schreibts du in ein
> Array von 4*256 = 1024 Werte. Die 4 Mittelwert mussen dan berechtnet
> werden aus diesen Array.

Das ist eine beschreibung meines Problems, nicht der Lösung. Mein 
Problem ist ja eben, wie ich die DMA dahingehend konfigurieren muss.
Gast #3497190
Lesenswert?
• ▲
▼
>Mein
>Problem ist ja eben, wie ich die DMA dahingehend konfigurieren muss.

Eben und das will dir keinen abnehmen. Das Datenblatt und Beispiele 
musst du schon selber studieren.

>> Geht doch relatif einfach. Du muss einfach ueber die DMA in ein
>> Array
>> schreiben die genugend gross ist. Bei 4 ADC-Kanalen schreibts du in ein
>> Array von 4*256 = 1024 Werte. Die 4 Mittelwert mussen dan berechtnet
>> werden aus diesen Array.

Deine Fragen war so unpräzise gestellt, dann noch ohne jeglichen Code - 
das der geneigte Programmierer erstmal die Rahmenbedingung absteckt.

Gruß Jonas

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.