Forum: Mikrocontroller und Digitale Elektronik STM32F429: Externer ADU-SPI-DMA-Externer Ram


von opcode69 (Gast)


Lesenswert?

Sehr geehrte Forum User,

nach einiger Recherche wende ich mich nun an euch:

Ich möchte ein kleines (1-Kanal) Datenerfassungsgerät mit dem STM32F429 
Discovery Board (STM Board) realisieren. Zu diesem Anlass verwende ich 
den 24-Bit Delta-Sigma Analog-Digital-Umsetzer (ADU) ADS1271 [1, siehe 
unten] von TI. Die "hohe" Auflösung möchte ich deswegen, da ich mit 
einem Beschleunigungsaufnehmer (MEMS oder auch IEPE), angeschlossen an 
den ADU, mechanische Schwingungen erfassen möchte um ggf. auch eine 
experimentelle Modalanalyse durchführen zu können.

Der oben aufgeführte ADU kommuniziert mit dem STM Board über die SPI 
Schnittstelle. Nun ist bekannt, dass für die "richtige" Auswertung des 
Signals im Frequenzbereich die Abtastperiode (T_A) zwischen den Samples 
stets äquidistant sein muss. Damit diese Bedingung gewährleistet werden 
kann, muss ich die Samples "schnell" irgendwo unterbringen und daher 
denke ich an den Einsatz des DMA Controllers. Dieser soll die Daten im 
Empfangsbuffer des SPIs "schnell" in den externen RAM auf dem STM Board 
laden. Wenn ich das richtig verstanden habe, wird der externe RAM auf 
dem STM Board m.H. des FSMC angesteuert. Falls dies stimmt ist die 
Frage: Hängt der FSMC und der SPI des STM32F429 Controllers auf einem 
gemeinsamen DMA Bus und würde der beschriebene Vorgang funktionieren ? 
Dies habe ich aus dem Reference Manual [2] des STM32F429 Controllers 
nicht richtig herauslesen können.

Alternativ habe ich mich gefragt ob ich die Daten direkt an den PC über 
die USB Schnittstelle schicke. Wie man im Datenblatt des ADUs [1] 
entnehmen kann, beträgt die Abtastrate im High-Resolution Mode c.a. 
52kHz. Klappt das mit USB oder wäre das zu langsam ? Wie macht man hier 
überhaupt eine Überschlagsrechnung um genau diese Frage beantworten zu 
können ?

Wenn ich den ADU nun "befeuere" und dieser die Daten an den Controller 
sendet, kann ich dann davon ausgehen, das alle Daten mit äquidistanten 
Abtastzeiten ankommen oder soll ich dies lieber mit einem internen Timer 
im Controller erledigen um sicher zu sein, dass die Timings stimmen ? 
Dann würde ich bei jedem Timer Interrupt genau einen Wert abtasten und 
diesen in den RAM speichern bzw. über USB an den PC senden.

Ich würde mich über jede Hilfe freuen.

mfGruß und ein schönen Samstag,
opcode69

[1]: http://www.ti.com/lit/ds/symlink/ads1271.pdf
[2]: 
http://www.cs.hs-rm.de/~kaiser/1313_canacademy/STM42F4xx_Reference_manual_DM00031020.pdf

von Eiermann (Gast)


Lesenswert?

Zu 1:
Der st32f4 hat eine "multi-AHB bus matrix".
(http://www.st.com/content/ccc/resource/technical/document/datasheet/03/b4/b2/36/4c/72/49/29/DM00071990.pdf/files/DM00071990.pdf/jcr:content/translations/en.DM00071990.pdf)
Oder hier steht auch was dazu:
http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f4-series/stm32f429-439.html?querycriteria=productId=LN1806
>Easily extendable memory range using the flexible 90 MHz
>memory controller with 32-bit parallel interface,
>and supporting Compact Flash, SRAM, PSRAM, NOR,
>NAND and SDRAM memories

Zu2:
Der stm hat full speed 2.0 an Bord (12mbps). LAN kannst du auch nehmen.

Du musst nicht warten bis dein RAM überfüllt wird. Sende die Daten in 
Paketen ab (4096 bytes). Die Bearbeitung der Daten findet am Rechner 
statt. Außer du willst die Daten am µC bearbeiten?

mfg

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.