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