Hallo zusammen, ich arbeite zur Zeit an einem Projekt, bei dem ADC-Daten (2 mal 12 Bit) mit 5 MSPS eingelesen und dann per UDP über das Netzwerk verschickt werden sollen. Bis jetzt wurde dies mit einem Raspberry Pi realisiert, das Problem ist allerdings die fehlende Echtzeitfähigkeit und daraus resulierende fehlende Werte. Um die Daten mit 5 MSPS erfassen zu können, habe ich an einen Fifo gedacht, welcher zwischen ADC und Raspberry Pi geschaltet wird. Gibt es dafür brauchbare und auch lieferbare Bauteile? Ich habe z.B. die SN74V36xx Serie von TI gefunden, aber den findet man auch kaum bei gängigen Anbietern... Als Alternative zu den schwer erhältlichen Fifo-ICs, habe ich an einen Mikrocontroller gedacht. Ich habe schon öfters mit den ATXmega gearbeitet, allerdings habe ich Zweifel ob ich mit dem maximalen Takt von 32 MHz Daten (parallel) mit 5 MHz einlesen kann und diese gleichzeitig an einem anderen Port wieder parallel ausgeben kann, ohne den Controller zu überfordern. Schafft man dies in 6 Takten? Gibt es noch andere Möglichkeiten um das Problem zu lösen? Viele Grüße, Markus
Ein FPGA wäre hier wohl die technisch beste Lösung. Viele FPGAs haben Speicherblöcke eingebaut, und wenn die nicht reichen, nimmst Du beispielsweise ein externes 128k oder 512k SRAM. fchk
Markus schrieb: > Als Alternative zu den schwer erhältlichen Fifo-ICs, habe ich an einen > Mikrocontroller gedacht. Ein µC mit Taktfrequenz >= 100 MHz und internem DMA-Controller würde gehen. Favoriten dafür wären RX µCs von Renesas, die vernünftige DMA-Controller auf dem Chip haben. Leider schreibst Du nichts über Breite und Länge des FIFOs. Auslaufmodelle gäbe es noch hier: https://www.schukat.com/schukat/schukat_cms_de.nsf/index/CMSDF15D356B046D53BC1256D550038A9E0?OpenDocument&wg=Y8251&refDoc=CMSA34D83FF9A8B7149C12570DE003C273D und https://www.schukat.com/schukat/schukat_cms_de.nsf/index/warengruppe?OpenDocument&wg=Y8258&refDoc=CMSA34D83FF9A8B7149C12570DE003C273D Unter Umständen geht auch ein STM32F40x, je nachdem, wie man die zerklüfteten Ports organisieren kann/muß.
m.n. schrieb: > Leider schreibst Du nichts über Breite und Länge des FIFOs. Ich lese 2 ADC Werte mit 12 Bit ein, d.h. 24 bit sollte der Fifo breit sein (oder 12, dann einfach 2 nebeneinander) und die Länge weiß ich auch noch nicht wirklich. Kommt ja drauf an wie lang der Raspberry Pi hängt, aber 1k 24bit Werte sollten vermutlich reichen. Je nachdem was es überhaupt gibt.. Der Atxmega hat ja auch einen eingebauten DMA, allerdings weiß ich nicht wie ich da einen Buffer aufbauen soll bei dem ich den leeren und vollen Status detektieren soll. Bei einem "fremden" µC stellt sich dann ja auch wieder die Frage wie man sie programmiert (Tools, Programmer?)
Markus schrieb: > Der Atxmega hat ja auch einen eingebauten DMA, allerdings weiß ich nicht > wie ich da einen Buffer aufbauen soll bei dem ich den leeren und vollen > Status detektieren soll. Der ATXmega ist einfach zu langsam. Aus µC-Sicht müssen ja 2 x 16 Bit in 200 ns erfaßt werden. > Bei einem "fremden" µC stellt sich dann ja auch wieder die Frage wie man > sie programmiert (Tools, Programmer?) Schon klar! Aber damit wäre man recht flexibel.
Markus schrieb: > ADC-Daten (2 mal 12 Bit) mit 5 MSPS eingelesen und dann per UDP über das > Netzwerk Bei 24 Bit pro Sample und 5 MSPS sind das also 120 MBit/sec. Damit ist bereits GBit-Ethernet erforderlich. Wie wurde das mit dem Raspberry Pi erreicht? Irgendwie beschleicht mich das Gefühl, daß das Projekt noch so einige ... interessante Problemstellungen haben wird. Was soll mit den anfallenden Daten geschehen?
Rufus Τ. Firefly schrieb: > Bei 24 Bit pro Sample und 5 MSPS sind das also 120 MBit/sec. Damit ist > bereits GBit-Ethernet erforderlich. > > Wie wurde das mit dem Raspberry Pi erreicht? Ja das ist richtig, das wären 120 MBit/s. Die 5 MSPS sind noch nicht fest, erst mal als grobes Ziel angenommen. Die Daten können auch kurzzeitig gespeichert werden und dann nur ein Zeitfenster von ein paar ms über das Netzwerk übertragen werden. Kontinuierlich wäre schön (dann mit geringerer Geschwindigkeit, z.B. 2 MSPS), aber eine möglichst schnelle zeitweise Erfassung sollte auch möglich sein. 1 MSPS kontinuierlich zu übertragen hat bis auf ca. 0,8% fehlende Werte geklappt. Der Raspberry kommt ohne Buffer ja durch Taskwechsel etc. ins Stocken und verliert dann Werte... Die Daten werden dann später von einem "Server"-PC weiterverarbeitet und Berechnungen durchgeführt.
Rufus Τ. Firefly schrieb: > Bei 24 Bit pro Sample und 5 MSPS sind das also 120 MBit/sec. Damit ist > bereits GBit-Ethernet erforderlich. Bislang war nicht zu erkennen, daß kontinuierlich erfaßt werden soll. Falls doch, wäre eine Einsteckkarte für den PC sinnvoll, die die Daten von Anfang an parallel verarbeiten kann.
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.