Forum: Mikrocontroller und Digitale Elektronik STM32F4 ADC mehrere Kanäle stromsparend


von Martin (Gast)


Lesenswert?

Ich habe ein STM32 Discovery vor mir liegen und möchte mal testen, ob 
und wie man den STM32 als leistungsfähigen Ersatz für AVRs verwenden 
kann.
Eine häufige Anwendung ist bei mir, mehrere Kanäle (z.b. 8) mit 
unterschiedlicher Geschwindigkeit abzutasten. Also z.B. zwei Signale mit 
10KSPS, jede Sekunde zwei Temperaturwerte und 1x pro Minute die 
Batteriespannung.
Was ist der sinnvollste Weg für sowas beim STM32? Da es 
batteriebetrieben sein soll, ist ein Stromsparmodus zwischen den 
Messungen notwendig.

Ein anderer Anwendungsfall wäre die Aufnahme eines Signals über z.b. 10s 
und dann eine Verarbeitung (Mittelwertbildung, Extrema suchen etc.). In 
der Zwischenzeit soll das Signal aber weiterhin in einen anderen 
Speicher gesampelt werden.
Das müsste man mit DMA und ADC hinbekommen, aber ich habe nicht 
herausgefunden, wie man damit eine "langsame" (z.B. 1ksps) Messung 
hinbekommt und wie man dann eine Funktion aufrufen lässt, sobald der 
Speicher voll ist. Oder ist DMA in diesem Fall nicht sinnvoll? Auch hier 
soll es möglichst stromsparend sein.
Hat jemand einen Tipp für einen Ansatz für mich?

von Tilo (Gast)


Lesenswert?

Ist eigentlich ganz einfach.

Einen Timer verwenden um den ADC zu starten. Diesen kann man so 
einstellen, dass der ADC die gewünschten Kanäle sequentiell abarbeitet.
Die Daten jedes Samplevorgangs werden per DMA in den Speicher kopiert. 
Wenn der DMA fertig ist gibts einen Interrupt.

Schwierig ist eher, dass du völlig verschiedene Abtastraten haben 
willst. Das kannst du entweder dadurch lösen, dass du dafür verschiedene 
ADCs nimmst, den ADC jedes mal neu konfigurierst oder einfach trotzdem 
die anderne Kanäle sampelst und die Daten wegschmeißt.

Im Datenblatt steht relativ gut beschrieben, was wie viel Energie 
benötigt. Trotzdem sind das nur vage Werte und im Zweifellsfall gilt 
nachmessen.

Der STM ist eigentlich ganz nett. Man kann relativ viel machen, ohne 
dass die CPU gebraucht wird.

von Martin (Gast)


Lesenswert?

Danke. Gibt es irgendwo ein Beispiel wie man per DMA mehrere Kanäle 
abtastet? Wäre eigendlich genau das, was ich gesucht habe, wirklich 
gefunden habe ich dazu aber leider nichts.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Hier ist ein Beispiel:
Beitrag "Re: STM32 für Einsteiger - der Artikel zum Krieg (µC Wahl)"

Einen weiteren Kanal fügt man damit hinzu:
ADC_RegularChannelConfig()

Die Anzahl stellt man damit ein:
ADC_InitSt.ADC_NbrOfChannel

Das ganze sollte auch als Demo-Projekt in der ST Lib vorhanden sein.

von Jan B. (berge)


Lesenswert?

Moin, du kannst hier zumindest ein Beispiel für einen Kanal per DMA 
kriegen:
http://mikrocontroller.bplaced.net/wordpress/?page_id=667

Wenn du das entsprechend auf die anderen Kanäle erweiterst, dann hast du 
deine Lösung.

LG Jan

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
Noch kein Account? Hier anmelden.