Forum: Mikrocontroller und Digitale Elektronik Simultanabtastung mit STM32


von STM32 Beginner (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
ich würde gerne mit dem Nucleo-F303RE simultan Strom und Spannung mit 
dem ADC1 & 2 (nur jeweils Channel1) abtasten und per DMA in zwei 
separaten Arrays ablegen. Dazu würde ich nach AN4195 den Dual regular 
simultaneous mode mit zwei separaten DMAs nutzen. Kann mir jemand sagen, 
mit welcher HAL-Funktion ich dann die ADCs bzw. DMAs starten soll?
In der Note von HAL_ADC_START_DMA() steht „This function is for 
single-ADC mode only. For multimode, use the  dedicated MultimodeStart 
function.“
Wenn ich also die HAL_ADCEx_MultiModeStart_DMA() nutze, dann kann ich 
damit lediglich die beiden ADCs mit einer gemeinsamen DMA (32 bit-Werte: 
16 bit Spannung, 16 bit Strom) aus dem ADC1_2 common data register lesen 
und in gemeinsames Array schreiben, was so auch bei mir funktioniert 
hat. Die MultiDMA wäre demnach aber nicht das, was ich benötige um zwei 
getrennte Arrays zu füttern, oder?
Zu guter Letzt gäbe es dann noch die Möglichkeit einfach die 
HAL_ADC_START() zu benutzen, in der Note steht dazu: „Case of multimode 
enabled (for devices with several ADCs):         if ADC is slave, ADC is 
enabled only (conversion is not started). if ADC is master, ADC is 
enabled and multimode conversion is started.“, was ja dem entspricht, 
was ich eigentlich tun möchte. Nur wird dabei keine DMA gestartet, ich 
komme also nicht an die Daten ran…
In der Konfiguration vom Multimode habe ich den DMAAccesMode auf 
ADC_DMAACCESSMODE_DISABLED gestellt, was laut HAL-reference „DMA 
multimode disabled: each ADC will use its own DMA channel“ bedeutet.

Ich bin über jede Hilfe zur Thematik dankbar, die Aufgabe sollte an sich 
eigentlich nicht sonderlich schwer zu lösen sein, bin trotzdem schon 
seit einer Woche am verzweifeln…
Anbei der Code der main.c.
Es grüßt
ein blutiger STM32-Einsteiger

von geb (Gast)


Lesenswert?

Das Ergebnis von ADC1&2 steht im selben Register. Daher gibt es nur 
einen DMA Kanal. Du musst die Werte (hi und lo word für ADC2/1) nach der 
DMA Geschichte trennen.

Grüsse

von STM32 Beginner (Gast)


Lesenswert?

geb schrieb:
> Daher gibt es nur einen DMA Kanal

Bist du dir da sicher? In der Application Note steht ja extra drin: 
"When using the DMA, there are two possible cases:
*Use of two separate DMA channels for master and slave.
*Use of the dual mode DMA.

Und in der ADC_MultiModeTypeDef wird sogar ausdrücklich empfohlen, mit 
zwei DMAs zu arbeiten:
"Configures the DMA mode for multi ADC mode:
                                   selection whether 2 DMA channels 
(each ADC use its own DMA channel) or 1 DMA channel (one DMA channel for 
both ADC, DMA of ADC master)
                                   This parameter can be a value of @ref 
ADCEx_Direct_memory_access_mode_for_multimode
                                   Caution: Limitations with multimode 
DMA access enabled (1 DMA channel used): In case of dual mode in high 
speed (more than 5Msps) or high activity of DMA by other peripherals, 
there is a risk of DMA overrun.
                                            Therefore, it is recommended 
to disable multimode DMA access: each ADC uses its own DMA channel.
                                            Refer to device errata sheet 
for more details. */"


Weiß nur nicht mit welcher DMA-Funktion ich das machen kann, die einzige 
die halt bei mir funktioniert, ist die HAL_ADCEx_MultiModeStart_DMA()...

von geb (Gast)


Lesenswert?

Ich habe mich auf den STN32F103 bezogen, das ist ja offenbar ein F3. Ob 
das dort anders ist weiss ich jetzt nicht, aber du solltest das einmal 
im Reference Manual nachlesen und nicht in dem HAL.

Grüsse

von void (Gast)


Lesenswert?

Hallo zusammen

Ich bin auch an der Thematik interessiert und würde gerne Erfahren ob 
schon neue Erkenntnisse gewonnen wurden. Ich stehe vor der selbigen 
Problematik beim STM32F407 die ADCs im "Triple injected simultaneous 
mode" betreiben zu wollen und die Daten per DMA in einen Buffer zu 
schreiben. Leider bin ich bis heute auch nur an die Stelle von STM32 
Beginner gekommen.

Gruss

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.