Forum: Mikrocontroller und Digitale Elektronik STM32, triple mode Interleaved mode, periodisch falsch


von Gerald G. (gerald_g)


Angehängte Dateien:

Lesenswert?

Hallo,

ich lasse gerade die 3 ADCs des STM32F429 Discos im tripl mode 
interleaved laufen. Habe mich dabei an der Vorlage von ST orientiert.
Hierbei werden die ADC Werte in ein word-array gespeichert. im lower 
half word wird ADC1 gespeichet, im upper half word ADC2, dann in der 
nächsten Zeile ADC3 im lower half word und ADC1 im upper half word.
Das funktioniert auch, nur bekomme ich immer nur 3 elemente der 
Hintereinander mit korrekten Daten gefüllt (also 6 ADC-Werte), die 
nächsten 3 Elemente sind die Kopie von Element 2. Dann ist bi Elementen 
6-8 wider alles in Ordnung, und bei den Elementen 9-11 ist wieder nur 
die Kopie von Elelemt 8 darin usw.
Auf dem Bild soll eigentlich ein 300kHz Sinus zu sehen sein.

Wenn ich die Daten auf dem Display anzeigen lasse:
1
for (i=0; i<240/2;i++){
2
UB_Graphic_DrawPixel(2*i,320-(uint8_t) ((aADCTripleConvertedValue[i] & 0xFFFF)>>4),RGB_COL_RED);
3
UB_Graphic_DrawPixel(2*i+1,320-(uint8_t)(aADCTripleConvertedValue[i]>>20),RGB_COL_RED);
4
}

also die 12bit Werte auf 8bit Werte reduziere und direkt als Höhe so 
ausgebe, erhalte ich das selbe Bild. Die Daten sind also wirklich so auf 
dem Controller.
Wo ist mein Fehler?

von Lukas H. (1uk3)


Lesenswert?

Hi!

Hast du eine Lösung gefunden? Hab gerade das selbe Problem.

lg
Lukas

von Gerald G. (gerald_g)


Lesenswert?

Hi,

ich hatte ich nach einigen Versuchen das Problem zu lösen, einfach 
beschlossen immer nur die korrekten Werte zu nehmen.
Durch die Regelmäßigkeit war das ein einzeiler.
Ich denke es war irgendwo ein Problem mit der Zielgröße.

von Hendrik B. (Firma: NONE) (inventor-y)


Lesenswert?

Sorry for writing in English. I can read German but writing German is an 
other story.

I know this toippic is a half year old. But it might be useful to the OP 
or somebody else.

About your sample problem.

I'm using the STM32F405 with an external RAM. The ADC has been 
configured in triple interleaved ADC mode and the samples are 
transferred to the external RAM under DMA control.

What I have noticed, is that the ADC and DMA start to behave erratic 
when the DMA controller is enabled by writing the EN bit in the DMA_SxCR 
to 1 when some flags in the DMA_LISR or DMA_LISH are still set.


Probing the RAM EN line (nothing else is accessing the RAM) when this 
occurs shows the following:
-The ADC is not sampling anymore at regular intervals.
-The ADC is sampling at a wrong sample rate.
-The RAM content shows that the sample order is not always ADC2-ADC1, 
ADC1-ADC3, ADC3-ADC2 and sometimes erratic as if all ADC sample at the 
same time.

Clearing the flags in the DMA_LISR or DMA_LISH before enableing the DMA 
solves this problem.

More information can be found in RM0090 (for the STM32F405) under 
register descriptions for the DMA controller.(page 330 for REV12 of 
RM0090)

Best regards, Inventor-y

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.