mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32F0 Multi Channel ADC mit DMA problem


Autor: Stefan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Ich hab mal eine Frage was das Sampeln mehrerer ADC Kanälen mit DMA auf 
einem STM32F051 betrifft.

Mein Ziel wäre es 16 Kanäle mit dem ADC & DMA aufnehmen und das ganze so 
schnell wie möglich.
An den 16 Kanälen hängen Schiebepotentiometer die an einer 
Referenzspannungsquelle hängen. Die Spannung am Mittelabgriff habe ich 
bereits mit dem Oszi kontrolliert, die sieht sauber aus.

Nun zu dem Problem.... Die Werte schwanken, und das nicht gerade wenig.

Konfiguriert ist das ganze auf 12bit Auflösung, Continuous Mode, der ADC 
bekommt intern seinen Takt und Sample Time habe schon alle 
durchprobiert.

Der DMA ist entsprechend im Circular Mode konfiguriert mit TC Interrupt 
der dann den ADC kurz stoppt bis die Daten verarbeitet sind und nach dem 
Verarbeiten wird weitergemacht.

Vielleicht kann ja jemand mal über den Source im Anhang schauen ob ich 
da Mist gebaut hab ?

Hatte auch schon den ADC Mux im Verdacht und überlegt ob es etwas bringt 
wenn man erst einen Kanal x-mal sampelt und mittelt un dann den nächsten 
anstelle von nach jedem Sample den Kanal zu wechseln.

Hat jemand schonmal ähnliche Probleme beim ADC vom STMF0 gehabt ?

Vielen Dank schonmal und viele Grüße,

Stefan

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleines Update.

Auch erst 16 mal den selben Kanal einzulesen und danach zu wechseln 
bringt leider nichts.
Sehr wohl aber nur einen einzelnen Kanal einzulesen und den ADC nicht 
muxen zu lassen.

Vielleicht liegts ja am DMA ... das werd ich nun mal testen.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Bei mir schankt da bei 8 Kanälen nichts (STM32F072).
Code kannst Du Dir hier bei mir abgucken:
https://github.com/fishpepper/OpenGround/blob/master/adc.c

Grüße,
Simon

Autor: Nico W. (nico_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich mache das zwar auf einem STM32F411, allerdings stoppe ich den ADC 
über das continues-flag. Restart über SWSTART und CONT.
void DMA2_Stream4_Handler(void) {
  if ((DMA2->HISR & DMA_HISR_TCIF4) == DMA_HISR_TCIF4) {
    DMA2->HIFCR = 0;  // clear flag
    ADC1->CR2 &= ~(ADC_CR2_CONT);
  }
}

void start_adc() {
  ADC1->CR2 |= ADC_CR2_SWSTART | ADC_CR2_CONT;
}

https://github.com/Traumflug/Teacup_Firmware/blob/...

: Bearbeitet durch User
Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sooo. Erstmal Danke für euere Antworten :)

Hab jetzt mal wieder ein wenig Zeit gefunden damit zu experimentieren.

Das was anscheinend das Problem verursacht hat war das ständige starten 
und stoppen des ADCs.
Ich hatte das mal gemacht weil ansonsten der Interrupt von der DMA ISR 
nur einmal kam und danach nicht mehr. (Das er nicht mehr kam war aber 
ein Bug in meiner damaligen FW... Jetzt tut das.)

Schwanken tut es jetzt immernoch etwas. So ca +- 20, aber das ist jetzt 
nichts was sich nicht durch ein bisschen Mitteln in den Griff bekommen 
lasst.
Die krassen Ausreisser sind jetzt endlich weg :)

Ich werd jetzt mal noch ein bisschen weiter experimentieren und sobald 
ich den Source wieder etwas aufgeräumt hab hier reinstellen. (Im Prinzip 
so wie der von Simon gepostete, nur das bei mir noch die DMA ISR genutzt 
wird)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.