mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32F446 ADC schnellste Variante


Autor: Simon Reutter (iporuss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe einen STM32F446RC. Im Rahmen meiner Anwendung möchte die 
Spannungswerte von 6 Sensoren mit Hilfe der ADCs wandeln.

Hierbei sollte die Wandlung möglichst schnell und genau erfolgen [was 
auch sonst ;)].

Der STM32F446 verfügt über 3 ADCs.

Ich würde behaupten die schnellste Möglichkeit ist alle 3 ADCs im 
ScanMode und DMA zu betreiben. Sehe ich das richtig?

Kann mir einer der erfahrener Programmierer helfen, wie ich die 
Performance meines µC optimiere. Auf welche Punkte sind zu achten?

Autor: Jan Heynen (jan_h565)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Laut spec shaft der 467  :   12-bit ADCs reaching 2.4 MSPS or 7.2 MSPS 
in interleaved mode. Jetzt is die wichtige Frage : wass wollst du machen 
mit diese Datenmenge ? Rausspucken ueber USB / USART ? Mittelwerte 
bilden ? Meistens ist die Verarbeitung das Problem bei diesen hohe MSPS. 
Bei 184 MHZ hast du gerade 25,5 cycli für jedes Sample zu verarbeiten ! 
Meistens ist es nicht sinnfoll ein Sensor auszulesen mit 1.2 MSPS 
(7.4/6). Der Bandbreite von den Sensor ist selten zo gross. So, 
beschreibe erst ihre Problem etwas genauer, moglich bekommst du dan auch 
bessere Antworten.

Autor: Simon Reutter (iporuss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie bereits erwähnt sollen die Spannungswerte von 6 Sensoren gewandelt 
werden. Die Digitalwerte werden mittels eines Algorithmus (Laufzeit ca. 
10ms) in eine Positionskoordinate umgerechnet.
Nachfolgend wird diese Positionskoordinate mittels USART über eine 
RS232-Schnittstelle an einen Computer übertragen.

Heißt lieber eine einfache ADC-Wandlung, da diese sich nicht sonderlich 
auf die Latenzzeit auswirkt?

Autor: Nico W. (nico_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine einfache ADC-Wandlung ist bei den STM nicht so schön umzusetzen. 
Viele andere µC haben für jeden ADC ein eigenes Register und man kann 
dort mittels Freerun die Werte einfach auslesen, wenn man sie braucht 
und der µC startet automatisch eine neue Konvertierung.

Ich würde definitiv auf DMA setzen. So wie ich es rauslese bei dir, 
möchtest du einfach schnell mit dem eigentlichen Programm fortfahren.

Bei mir lese ich pro ADC-Kanal X Werte aus über DMA. Sobald das fertig 
ist stoppe ich den ADC, sodass ich alle 10ms oder so, müsste ich jetzt 
nochmal genauer gucken, alle ADCs ausgelesen habe (das eigentliche 
Auslesen geht natürlich schneller). Sobald das durch ist, schmeiße ich 
meinen Filter drüber und spucke die Werte aus. Nach 10ms starte ich den 
ADC wieder und bekomme kurze Zeit später wieder meine Werte. Über nen 
DualDMA komme ich auch nicht in Schwierigkeiten sollte der neue ADC 
etwas früher starten.

Autor: Thomas Forster (igel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon R. schrieb:
> Die Digitalwerte werden mittels eines Algorithmus (Laufzeit ca.
> 10ms) in eine Positionskoordinate umgerechnet.

Na dann reichen doch eigentlich 100 Samples/s pro Kanal und keine 
MegaSamples da du sowieso nicht mehr umgerechnet bekommst.

> Nachfolgend wird diese Positionskoordinate mittels USART über eine
> RS232-Schnittstelle an einen Computer übertragen.

Und wieviel Nutzdaten pro Sekunde und Kanal bekommst du so übertragen? 
Das wäre ein weiteres Auslegungskriterium für das ganze Vorhaben.

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nico W. schrieb:
> Ich würde definitiv auf DMA setzen.

Man hat m.W. gar keine andere Wahl. Jeder ADC hat nur ein Ergebnis 
Register, und es wird nicht zwischen den einzelnen ADC Mux Kanälen 
unterschieden. Der  DMA muss also zumindest 2 Kanäle pro ADC auf 2 
Speicherstellen verteilen.
Wenns auf Geschwindigkeit ankommt, also alle 3 ADC mit je zwei Kanälen 
im Interleaved Mode und DMA.

Autor: Nico W. (nico_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias S. schrieb:
> Man hat m.W. gar keine andere Wahl.

Man hat schon eine Wahl. Man kann auch die Konvertierung starten und 
kurze Zeit später gucken, ob der Kanal schon fertig ist. Den dann 
auslesen und zum nächsten Wechseln. Ob man das so wirklich will, ist 
eine andere Frage :)

Mein STM32F411RE hat sogar nur einen ADC. Aber mittels DMA geht das 
Prima. Man sollte aber auch den Hardwaredebugger nutzen. Ich habe es 
ganz am Anfang ohne versucht und mich immer gewundert warum es nicht 
funktioniert. Nach ein paar Wochen rumprobierens habe ich mich dann 
einmal genauer damit befasst. Ne Stunde später lief es. \o/

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.