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
> Über eine Messung
Was meinst du mit "einer Messung"? Einen Kanal?
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.
Ich will mit dem DMA für jeden benötigten ADC-Kanal einen Puffer von 256 Messungen pro Kanal anlegen um damit schnell Mittelwerte bilden zu können, ohne dass der Prozessor die ganze Zeit auf die Messungen warten muss.
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.
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.
STM Programmierer schrieb: > 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.
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.