Hallo
Für ein neues Projekt suche ich ein paar Anregungen für einen geeigneten
Mikrocontroller.
Ich bin nicht ganz neu auf dem Gebiet der Mikrocontroller. Ich habe auf
dem XE167 von Infineon eine 3-phasige PWM für einen Asychronmotor
programmiert. Und darauffolgend mit dem Anschluss des in der Maschine
integrierten Drehgebers eine einfache Drehzahlregelung realisiert.
Damals habe ich jedoch den Versuchsaufbau komplett vorgesetzt bekommen
und musste "nur" programmieren.
Für dieses neue Projekt, was den Aufbau eines komplexen Messsystems
beinhaltet, beginne ich quasi bei null und stehe vor der Auswahl eines
Mikrocontrollers.
Ich habe ca. 24 analoge Messsignale die digitalisiert werden wollen,
dabei wäre eine Abtastrate im Mikrosekundenbereich wünschenswert.
Desweiteren soll noch ein Triggersignal an eine externe Messbox geführt
werden, um die Messwertaufnahme zu synchronisieren. Die Messwerte sollen
dann im PC ausgewertet werden.
Über was sollte ich mir noch Gedanken machen um einen geeigneten
Mikrocontroller aus der unendlichen Fülle zu finden?
Wie sind die Grenzen für Taktrate, SRAM und Programmspeicher zu finden?
Vielen Dank für eure Hilfe!
gelenkeharald schrieb:> Ich habe ca. 24 analoge Messsignale die digitalisiert werden wollen,> dabei wäre eine Abtastrate im Mikrosekundenbereich wünschenswert.> Desweiteren soll noch ein Triggersignal an eine externe Messbox geführt> werden, um die Messwertaufnahme zu synchronisieren. Die Messwerte sollen> dann im PC ausgewertet werden.
Was brauchst du für Schnittstellen
Wieviele Daten fallen an
Welche Bandbreite müssen die Schnittstellen haben
Latenzzeiten
....
Quantifiziere das mal. Solange du von "wünschenswert" sprichst und nicht
sagen kannst xxx ist die untere Grenze ist das rumgequatsche.
gelenkeharald schrieb:> Ich habe auf> dem XE167 von Infineon eine 3-phasige PWM für einen Asychronmotor> programmiert.
War das die einzige Anwendung die Du je programmiert hast?
Wenn ja, dann wird es etwas schwierig, ein 'eigenes' System auf die
Beine zu stellen.
Kannst Du nicht beim XE167 oder anderen Derivaten bleiben?
> Ich habe ca. 24 analoge Messsignale die digitalisiert werden wollen,> dabei wäre eine Abtastrate im Mikrosekundenbereich wünschenswert.> Desweiteren soll noch ein Triggersignal an eine externe Messbox geführt> werden, um die Messwertaufnahme zu synchronisieren.
Das schreit nach 24 ADCs und einem Bussystem an dem diese 24 ADCs
hängen.
Abtastrate im µs-Bereich... Das wird lustig... sagen wir mal Du willst
alle 5µs abtasten. Macht wenn ich mich nicht verrechnet habe 200kHz. Mal
24 Kanäle und 8 Bit Auflösung macht das ein Datenvolumen von 4,8
MEGAbyte pro Sekunde... Da freut sich der USB. Mal ganz davon abgesehen,
daß Du auch schnelle ADCs brauchst, die 200.000 Wandlungen pro Sekunde
schaffen.
m.n. schrieb:> War das die einzige Anwendung die Du je programmiert hast?> Wenn ja, dann wird es etwas schwierig, ein 'eigenes' System auf die> Beine zu stellen.>> Kannst Du nicht beim XE167 oder anderen Derivaten bleiben?
Programmiert habe ich schon einiges, darüber mach ich mir keine Sorgen.
Mir gehts halt erstmal nur darum wie ich an die Planung eines eigenen
Systems herangehe. Welche Firma ist mir dann auch egal.
Ben _ schrieb:> Abtastrate im µs-Bereich... Das wird lustig... sagen wir mal Du willst> alle 5µs abtasten. Macht wenn ich mich nicht verrechnet habe 200kHz. Mal> 24 Kanäle und 8 Bit Auflösung macht das ein Datenvolumen von 4,8> MEGAbyte pro Sekunde... Da freut sich der USB. Mal ganz davon abgesehen,> daß Du auch schnelle ADCs brauchst, die 200.000 Wandlungen pro Sekunde> schaffen.
du hast dich nicht verrechnet ;-) 5µs sind auf jedenfall gut, ob das
dann die USB Schnittstelle auch schafft muss man dann halt am laufenden
System checken, ansonsten muss eben doch die Abtastrate verändert werden
(dann wäre es für eine andere lösung eh zu spät...)
Ben _ schrieb:> Das schreit nach 24 ADCs und einem Bussystem an dem diese 24 ADCs> hängen.
Muss ich unbedingt ein Bussystem verwenden? Der Versuchssaufbau ist
relativ klein ca 400x400x700 (Wege zwischen Sensoren nicht sonderlich
groß). Ich wollte alle Signale direkt auf die Platine vom µ-Controller
führen. Natürlich noch geeignete Schaltungstechnik davor usw.
Und dann vom Board per USB Anschluss zum PC. Stell ich mir das zu
einfach vor?
Was ich noch nicht ganz geschnallt hab ist der Einfluss der Latenzzeit.
So wie ich das verstanden habe ist das die Zeit, die eine ADU benötigt
um das analoge Signal in ein digitales umzusetzen. Also muss die
Latenzzeit kleiner als ein Abtastintervall sein. Natürlich so klein dass
ich noch Zeit für ein paar Rechenschritte habe. Ist das richtig? Was
sind denn so übliche Latenzzeiten von ADUs?
ich habe hier
http://www.infineon.com/dgdl/xe167x_ds_v2.1_2008_08.pdf?folderId=db3a3043156fd5730115b3a665650d23&fileId=db3a3043156fd5730116100ef1b41b52
ein rechenbeispiel gefunden, habe ich auch nochmal angehangen
Beispiel A mit 10-Bit wäre dann bspw. schnell genug?
Na irgendwie mußt Du ja die 24 ADCs die Du für eine synchrone Wandlung
brauchst an den µC drankriegen. Wenn Du das ohne Bussystem schaffst
okay, aber das wird 'ne heiße Nummer. Okay, es wird auch mit Bussystem
eine heiße Nummer.
Damit Dir der Spaß am Basteln nicht vergeht:
Wenn Du 4,8 Mbyte über einen 8 bit breiten parallenen Bus schicken
willst muß dieser bereits mit 4,8 MHz Taktfrequenz laufen. Störungsfrei
wäre schön!
Ein serieller Bus braucht minimal das 8fache, eher das 9fache wegen dem
Protokoll... 9x4,8 sind 43,2 MHz. Uups, das ist doch ganz schön viel für
selber bauen.
Alles vorausgesetzt für 8 Bit ADCs... bei 10 Bit Auflösung machts halt
noch ein wenig mehr Spaß.
gelenkeharald schrieb:> Ich wollte alle Signale direkt auf die Platine vom µ-Controller> führen.
Wie soll der eine bzw. die zwei ADCs vom µC das synchron hinkriegen? Das
geht nur seriell
> um die Messwertaufnahme zu synchronisieren.
Sicher, dass das wirklich synchron sein muss? Wenn ja, dann kauf dir
lieber was. Ich glaub das wird sonst hart, wenn man wenig Plan hat (so
wie ich z. B.). :-)
Ben _ schrieb:> Na irgendwie mußt Du ja die 24 ADCs die Du für eine synchrone Wandlung> brauchst an den µC drankriegen. Wenn Du das ohne Bussystem schaffst> okay, aber das wird 'ne heiße Nummer. Okay, es wird auch mit Bussystem> eine heiße Nummer.>> Damit Dir der Spaß am Basteln nicht vergeht:> Wenn Du 4,8 Mbyte über einen 8 bit breiten parallenen Bus schicken> willst muß dieser bereits mit 4,8 MHz Taktfrequenz laufen. Störungsfrei> wäre schön!>> Ein serieller Bus braucht minimal das 8fache, eher das 9fache wegen dem> Protokoll... 9x4,8 sind 43,2 MHz. Uups, das ist doch ganz schön viel für> selber bauen.>> Alles vorausgesetzt für 8 Bit ADCs... bei 10 Bit Auflösung machts halt> noch ein wenig mehr Spaß.Andi Ü. schrieb:> Wie soll der eine bzw. die zwei ADCs vom µC das synchron hinkriegen? Das> geht nur seriell
Ich brauch doch theoretisch "nur" die spannungsangepassten Signale (24
in der Zahl) an die 24 Pins der 24 ADUs anschließen. Die ADUs sind
pheriphere Einheiten, d.h. einmal durch einen Interrupt angestoßen
arbeiten sie selbstständig und parallel. Das heißt sie setzen alle
gleichzeitig, das am jeweiligen Pin anliegende Signal digital um. Wozu
brauch ich da noch einen seriellen Bus?
Hi,
Die Frage mit der Synchronisierung ist in der Tat eine "wichtige" Frage.
Ein absolute Synchronität in der Form das alle 5µs Zeitgleich
24MEsssignale gewandelt werden müssen ist in der Tat mit hoher
Wahrscheinlichkeit nur mit externen Wandlern zu erreichen. Mit viel
Glück könnte es höchstens noch eine "Spezielle" Exotenlösung untern den
hier eher weniger bekannten "Industriecontrollern" geben die ich aber
noch nie gesehen habe und die man selber ja erst einmal finden muss.
(Oki, NEC usw... einige Infinium Serien mal abgrasen)
Wenn es aber auch einfach darum geht "feste" Messinterwalle zu haben, es
also durchaus in Frage kommt die Messung in 3-6 Gruppen zu Unterteilen,
dann sieht es viel besser aus. Wobei der Abstand zwischen zwei Messungen
einer Gruppe natürlich immer gleich ist und auch unter 5µs liegen kann.
Dann würde ich mal einen Blick entweder über diverse ARM Derrivate oder
aber über die 16Bit PICs von Microchip schweifen lassen. (MC hat keinen
32Bitter mit mehr als 16ADC/IO)
Der dsPIC33EP256MU810 hat z.B. 32 ADC Channels, von denen er jeweils 4
Gleichzeitig Samplen kann. Bei 10Bit Auflösung mit 1,1MSP/s. Damit bist
du bei einem Zyklus von unter 6µs, kannst allso Kanäle zusammen mit
183KSP/s erfassen. Nur halt das du Kanal 5-9 immer erst eine µs nach
KAnal 1-4 bekommst. Ob das reicht musst du selbst entscheiden.
Die datenmenge zum PC bringt der aber über die integrierte USB
Schnittstelle spielend. Und wenn wegen der Einsatzumgebung CAN
sinnvoller erscheint, da hat er auch noch zwei Ports von.
Gibt aber von Microchip noch einige mehr, hatte diesen nur gerade im
Kopf.
Bei den ARM musst du selber mal alles durchschauen, die gibt es von den
verschiedensten HErstellern. Microchip hat aber den Vorteil das die
HArdwaretools sehr günstig sind, (ab 30Euro geht es mit DEBUGFÄHIGEN
Programmern los) und selbst wenn man dann statt der kostenlosen doch die
etwas besser optimierende Compilerversion einsetzen will diese auch noch
"Aus der Portokasse" zu bezahlen ist. Zudem kommt alles, incl
Codebeispiele und gutem Support, aus einer HAnd.
Bei den ARM gibt es entweder nur OpenSource sw mit teilweise recht
umfangreich zu konfigurierbaren Toolchains udn verschiedenster freier
HArdware zum NAchbauen oder günstig kaufen, -funktioniert, oder auch
nicht- oder aber super geeignete IDEs fürs Kommerzielle Umfeld mit
Professionellen Debug Tools, wobei das "Super" auch jeweils für den
Preis dieser Hilfsmittel gilt. Und das nicht im "positiven" Sinn des
Anwenders...
Und wie schon erwähnt: Es gibt noch eine Menge anderer µC HErsteller,
vielleicht hat da ja jemand noch einen "heißen" Tip für einen mit 24
"echten" ADCs
Gruß
Carsten
Hi,
gelenkeharald schrieb:> Ich brauch doch theoretisch "nur" die spannungsangepassten Signale (24> in der Zahl) an die 24 Pins der 24 ADUs anschließen. Die ADUs sind> pheriphere Einheiten, d.h. einmal durch einen Interrupt angestoßen> arbeiten sie selbstständig und parallel. Das heißt sie setzen alle> gleichzeitig, das am jeweiligen Pin anliegende Signal digital um. Wozu> brauch ich da noch einen seriellen Bus?
Ich glaube da unterliegst du einem -nicht seltenen- Irrtum.
Wie oben in meinem Beitrag schon angedeutet haben die µCs zwar teilweise
weit über 20 AD-In, aber dahinter stecken keine 20+ Wandler. Oft hat so
ein µC nur einen oder zwei Wandler, wenns umfangreich wird auch mal drei
oder vier. Aber alles darüber hinaus findest du nur noch bei Exoten.
Es ist so, das sich hinter diesen 20+ Pin nur ein Multiplexernetzwerk
befindet, das all diese Eingänge auf ein und dasselbe Modul leitet.
Du kannst also mit einem Modul problemlos 32 Signale wandlen, aber immer
nur eines auf einmal. Bei zwei Modulen halt "zwei" auf einmal. -usw-
Gruß
Carsten
Wieviel darf das ganze den kosten?
Ich denke einfacher wird das mit externen AD Wandlern, die könnte man
dann auch alle zeitgleich anstoßen, und wenn es noch schneller sein
muss, nimmt man flash wandler, dann wären auch 1µs kein Problem. Kann
dann aber auch durchaus 5 Euro pro Wandler kosten.
Außerdem braucht man trotzdem noch einen Controller, der das ganze
schnell genug ausliest und weiter schickt. Da denke ich bräuchte man
schon was oberhalb von 20 MHz, am besten mit direkter USB Unterstützung.
Carsten Sch. schrieb:> Ich glaube da unterliegst du einem -nicht seltenen- Irrtum.>> Wie oben in meinem Beitrag schon angedeutet haben die µCs zwar teilweise> weit über 20 AD-In, aber dahinter stecken keine 20+ Wandler. Oft hat so> ein µC nur einen oder zwei Wandler, wenns umfangreich wird auch mal drei> oder vier. Aber alles darüber hinaus findest du nur noch bei Exoten.>> Es ist so, das sich hinter diesen 20+ Pin nur ein Multiplexernetzwerk> befindet, das all diese Eingänge auf ein und dasselbe Modul leitet.> Du kannst also mit einem Modul problemlos 32 Signale wandlen, aber immer> nur eines auf einmal. Bei zwei Modulen halt "zwei" auf einmal. -usw->> Gruß> Carsten
Jetzt wo du mir das so erklärst klingt das natürlich voll und ganz
logisch. Danke dafür:-)
Die Sache ist die, dass es für die Messung von essentieller Wichtigkeit
ist, dass wirklich alle Werte synchron aufgenommen werden. (Nebenbei, es
sollen Mikrobürstenfeuer an Schleifringen untersucht werden, es handelt
sich also um hochdynamische Vorgänge).
Ich werde jetzt mal deine Tipps vom vorhergehenden Beitrag durchgehen,
vielleicht finde ich einen µC mit 24 echten ADCs
Mir fällt gerade noch ein, was haltet ihr von dieser Idee
ADCs wird es doch sicher auch als einzelne ICs geben, wenn ich mir ein
Board baue welches explizit 24 von diesen ICs aufweist und diese über
I/O-Ports an den µC anschließe? Bleibt nur wieder die Frage, ob ein µC
24 parallele Eingänge hat...sonst würde ja das Problem auftreten was Ben
_ geschildert hat oder?
Verwirrter Anfänger schrieb:> Wieviel darf das ganze den kosten?> Ich denke einfacher wird das mit externen AD Wandlern, die könnte man> dann auch alle zeitgleich anstoßen, und wenn es noch schneller sein> muss, nimmt man flash wandler, dann wären auch 1µs kein Problem. Kann> dann aber auch durchaus 5 Euro pro Wandler kosten.> Außerdem braucht man trotzdem noch einen Controller, der das ganze> schnell genug ausliest und weiter schickt. Da denke ich bräuchte man> schon was oberhalb von 20 MHz, am besten mit direkter USB Unterstützung.
sry hab dein beitrag jetzt erst gelesen
also Geld ist in diesem Fall zweitranging ;-)
Kann es sein, dass nicht ein AD-Wandler benötigt wird, sondern nur eine
fest definierte Spannung als Trigger benutzt werden muss. In diesem Fall
kann man an jedem Eingang ein Operationsverstärker setzten, dessen
Vergleichspannung mit einem Spannungsteiler definiert wird.
Ein ATMega32 könnte die 24 Pins pollen und mit UART zum Rechner die
Events senden.
Falls dem nicht so ist, sollte gelenkeharald mal genauer die Aufgabe
beschreiben. Vielleicht liegt in der Aufgabenstellung das Problem. Also
für was benötigst du die Schaltung? Was soll mit den Messwerten
passieren. Ist es eine Steuerung von einer komplexen Maschine oder
sollen Messdaten visualisiert werden? usw.
gelenkeharald schrieb:> sry hab dein beitrag jetzt erst gelesen> also Geld ist in diesem Fall zweitranging ;-)
Bei deinem Hardware Kenntnisstand würde ich mal schauen was es da an
fertigen Messsystemen oder Messkarten für den PC gibt.
Weder 200kHz Signale sauber zu messen noch 24 Signale parallel zu
verarbeiten und dann in Echtzeit an den PC zu senden sind nicht mehr
ganz trivial.
Und wie lange soll gemessen werden? Wenn es nur um relativ kurze Zeiten
(im Sekundenbereich) geht könnte man die Daten zwischenspeichern und
dann langsamer an den Computer senden.
Hi,
gelenkeharald schrieb:> Mir fällt gerade noch ein, was haltet ihr von dieser Idee> ADCs wird es doch sicher auch als einzelne ICs geben, wenn ich mir ein> Board baue welches explizit 24 von diesen ICs aufweist und diese über> I/O-Ports an den µC anschließe? Bleibt nur wieder die Frage, ob ein µC> 24 parallele Eingänge hat...sonst würde ja das Problem auftreten was Ben> _ geschildert hat oder?
Natürlich gibt es ADCs als Einzelbausteine ;-) Lange Zeit war es der
Einzige Weg um AD Wandler in sein µC System zu implementieren und auch
bei hochspeziellen Anforderungen (Auflösung, Zeit/Geschwindigkeit, oder
Genauigkeit) ist es auch heute noch der einzige Weg.
Externe AD Wandler gibt es von ein paar Cent für 8Bit/100KSP Wandler
aufwärts, über 1-2 Euro für 10Bit Wandler bis hin zu fast unbezahlbar
wenn man 16Bit Aufwärts und sehr viel schneller als Schnell braucht.
Es gibt auch Bausteine mit mehr als einem Wandler. Wobei man dann darauf
achten muss ob der Baustein wirklich 2 Wandler, oder nur zwei
umschaltbare Eingänge hat.
Nach der Wandlung spielt die hochgenaue Parallelität ja nun nicht mehr
wirklich die Rolle. Du musst nur dafür sorgen das du alle Messergebnisse
vor der nächsten Wandlung "wegbekommen" hast.
Ohne Einsteckkarte mit direktem Transfer auf den PCI bus würdest du eh
niemals 24Messergebnisse direkt in den PC bekommen, das geht nur
nacheinander...
für den Kontakt zwischen µC und den Wandlern hast du zwei Möglichkeiten.
Entweder nimmst du Wandler mit Parallelbus und Fragst die nacheinander
ab, oder aber du nimmst (heute Üblicher) Wandler mit seriellem Bus.
Bei Wnadler mit Seriellem BUS hast du wieder die Möglichkeit zwischen
Paralleler Abfrage oder Serieller Abfrage zu wählen.
Die "gängige" Methode währe es die Wandler alle Parallel z.B. an den SPI
Bus zu hängen und dann mit einer hohen SPI_CLK Geschwindigkeit die Daten
nacheinander auslesen. Die CS des Wandlers hängt natürlich für jeden
Wandler an seinem eigenen Portpin. Das muss so schnell sein das man alle
24Ergebnisse vor der nächsten Wandlung eingelesen hat. (der Wandler muss
das natürlich auch können)
Als erste Idee würde ich das jetzt vielleicht etwas Trickreicher
angehen:
(Vorsicht, das ist ein Schnellschuss, nur 2minuten Nachgedacht, nicht
verifiziert!)
ICh würde einen "schnellen" µC mit USB nehmen, PIC32 wahrscheinlich.
Evtl. geht aber sogar noch ein "kleiner" Pic18F4550, müsste man schauen.
Als Wandler 24Gleiche Einfachwandler mit SPI.
Die HArdware SPI des µC würde ich Links liegen lassen und eine
"besondere" Soft-SPI routine schreiben:
Es gibt EINEN Clk. Ausgang der an alle Wandler parallel geht. Es gibt
EINEN Daten_Out, der an alle Wandler Parallel geht.
Es gibt aber 24Daten_IN, jeder wadnler hat seinen Eigenen.
(Evtl. gibt es noch einen Trigger für alle Parallel zum Anstossen der
Messung)
Die Wandler erwarten ja alle dieselben Komandos. Die gebe ich allen
Gleichzeitig. Beim Auslesen werden dann ab einem bestimmten Punkt die
Wandeldaten für jeden Wandler einzeln kommen. Die schiebe ich einach für
jeden Pin/Wandler dann in eine Einzelne Variable (Wandler1-Wandler24).
NAchdem ich dann alles Eingelesen habe kopiere ich die Variable Zusammen
in den USB Ausgangsbuffer und Weg damit!
Da aber im Extremfall das Device nur einmal alle 1ms seine USB Daten los
wird hat man natürlich auf dem Übertragungsweg µC Rechner eine
Verzögerung, überträgt die Daten mehrerer Messungen Gleichzeitig. Aber
für eine Visiualisierung ist eine Latenz von 1ms ja egal, da man die
Daten ja mit einem "Zeitstempel" versehen kann...
Aber wie gesagt, das ist nur eine schnelle Idee. Bei einem 32Bit µC,
oder aber einem 16Bit DsPic hätte man dabeit wenn möglich sogar noch die
Zeit eine rudimentäte Aufbereitung/Auswertung der Daten schon im µC
vorzunehmen!
Gruß
Carsten
P.S:
Ob das oben geannte oder anderes für deine MEssanforderungen überhaupt
funktionieren, das musst du aber selbst herausfinden. Zu dem
Einsatzzweck kann ICH dir zumindest nichts genaues sagen, auch wenn das
anderen da anscheinend anders geht.
Bin halt "Schwachströmer" (NAchrichtentechniker) und habe daher mit
Motoren und deren Verhalten naturgemäß eher wenig zu tun, zumindest
nicht in der Tiefe das ich mir jemals über "Mikrobürstenfeuer" gedanken
gemacht hätte ;-) (Ich weiß das es Funkenbildung an Bürsten/Kohen gibt,
das dies "ungewollt" ist und auch das es bei verbrauchten Schleifern
stärker ausgeprägt ist, aber das war es dann schon)
Gruß
Carsten
Der STM32Fxxx hat 3 12-Bit AD-Wandler drin, die auf bis zu 24 IO-Kanäle
gelegt werden können.
Schaue Dir mal das Datenblatt näher an.
Hier der Artikel: STM32
Carsten Sch. hat schon mal einen möglichen Zugang skizziert. Trivial ist
das Problem aber nicht. Vor allem nicht vergessen:
SPI hat fast immer einen bestimmten Overhead - z.B. zusätzliche
Befehlsbytes, die dem ADC sagen, ob nun die Digitalisierung gestartet
werden soll etc. Kannst also sicherheitshalbe annehmen, dass die
Erfassung eines einzelnen 8-bit-Wertes mehrere Bytes an Datentransfer
benötigt. Sagen wir einmal 4 Bytes total. Um dann z.B. 200 kHz
Abtastrate zu erreichen, muesste man den Bus schon mal mit
0.2 MHz 4 Bytes 8 Bits/Byte = 6.4 MHz
laufen lassen. Dazu kommt dann noch Overhead für Chip enable ein/aus,
Daten ins Ram transferieren usw. Da muss der uC (und der SPI-Bus) schon
ordentlich schnell laufen, um das zu bewältigen. Meiner Einschätzung mit
einem 16- oder 32-Bitter aber noch machbar.
Zum Thema USB, die Leute lassen sich immer von den spezifizierten
MAXIMAL-Datenraten blenden. Bei USB gibt's aber keine Garantie, dass man
diese Raten auch nur annäheren erreicht: Wenn mehrere Geräte am Bus
hängen, teilen die sich die Bandbreite. Wenn der PC die Daten nicht
schnell genug abholt weil er anderweitig beschäftigt ist, sinkt die
effektive Datenrate. Usw usf. Je nach USB-Gerät ist die Datenrate auch
viel geringer als das Maximum (HID z.B. kann bloss max. 64 kB/sec).
Ausserdem ist bis USB2 der Bus gepollt, ein Gerät bekommt also u.U.
(abhängig vom Übertragungsmodus) bloss einmal pro msec (oder seltener)
die Chance, ein Datenpaket abzusetzen.
Insgesamt ist also das Ansinnen, die Daten mit mehreren MByte/sec in
Echtzeit zu übertragen, sehr sportlich. Machbar (siehe z.B. den
Saleae-Logikanalysator), aber nix für Anfänger oder mäßig
Fortgeschrittene. Viel besser wäre es daher, die Daten
zwischenzuspeichern und dann nach Abschluß der Erfassung ohne Zeitdruck
zu übertragen.
Wolfgang
Hab nicht alles gelesen, aber an Stelle von synchroner Wandlung mit
vielen externen A/Ds kann man auch synchron sampeln (S&H) und
nacheinander wandeln.
Wäre es für dich nicht besser eine verteilte Applikation zu basteln?
Evtl. nimmst du dir 24 kleine Controller die lokale Intelligenz besitzen
und die AD-Wandlung vornehmen und den (einen) Großen Bruder nur im
Bedarfsfall informieren ?
Kommt ja ganz auf deine Anforderungen an!
Gruß,
THaala
Zum Update des Themas. Nach längerer Überlegung habe ich mich jetzt auf
8 Bit AD-Wandler und einer Abtastrate um die 50µs(!) festgelegt.
Die Idee mit dem SPI-Bus zur Anbindung der 24 ADCs finde ich gut. Da
jedoch bei 24 ADCs an einem Bus die Taktrate relativ hoch sein muss, ist
mir noch was anderes eingefallen.
Viele µ-Controller haben ja mehrere SPI-Module, man könnte doch dann
bspw. an drei SPI-Busse jeweils 8 Kanäle/ADCs anschließen.
Für dieses Beispiel würde sich jetzt ergeben:
Datenaufkommen an einem ADC: 16kbit/s 20kByte/s
Datenaufkommen aller Kanäle: 480kByte/s
pro Bus wären das dann: 160kByte/s
demnach müsste die taktfrequenz eines busses mindestens 1,2Mhz betragen
praktisch ja noch mehr wegen overhead usw. (also vielleicht 3Mhz?)
ist die ganze struktur sinnvoll?
mit welcher tasächlichen taktfrequenz sollte ich den bus am besten
betreiben?
ab wann müsste ich dann auf die leiterlängen aufpassen (hf-design...)?
vielen dank
gelenkeharald schrieb:> pro Bus wären das dann: 160kByte/s> demnach müsste die taktfrequenz eines busses mindestens 1,2Mhz betragen
Das kann ich nicht nachvollziehen, die Rechnung ist ja wohl recht
willkürlich :-)
gelenkeharald schrieb:> Datenaufkommen aller Kanäle: 480kByte/s
Du solltest Dir einen Prozessor aussuchen, der diese Datenmenge
überhaupt verarbeiten kann. Simuliere doch einmal Deine
Verarbeitungsroutinen auf einem Intel-ATOM, ob der das überhaupt
schafft.
Hi,
gelenkeharald schrieb:> Zum Update des Themas. Nach längerer Überlegung habe ich mich jetzt auf> 8 Bit AD-Wandler und einer Abtastrate um die 50µs(!) festgelegt.
OK, das reduziert die zu übertragenen Datenraten erheblich...
Damit kommen drei der vier Übertragungsarten in Frage. Musst halt
aussuchen ob dir eine garantierte MAximallatenz oder aber eine
Fehlerkorrektur wichtiger ist.
gelenkeharald schrieb:> Die Idee mit dem SPI-Bus zur Anbindung der 24 ADCs finde ich gut. Da> jedoch bei 24 ADCs an einem Bus die Taktrate relativ hoch sein muss, ist> mir noch was anderes eingefallen.
Nunja, müsste man schauen was "relativ hoch" bedeutet. Es gibt Bausteine
die einen SPI Bus mit 20MHz schaffen. Allerdings müssen das natürlich
beide seiten können, also µC und die AD Wandler.
gelenkeharald schrieb:> Viele µ-Controller haben ja mehrere SPI-Module, man könnte doch dann> bspw. an drei SPI-Busse jeweils 8 Kanäle/ADCs anschließen.
Hier musst du wieder aufpassen. Es gibt Controller mit mehreren SPI
Modulen, aber auch welche die nur EIN SPI modul haben und die I/Os
Multiplexen...
Die verteilung auf drei SPI Module, sofern es eigenständige Module sind,
KÖNNTE eine Minimale Geschwindigskeiterhöhung bedeuten, aber auch ein
Ausbremsen. Das kommt ganz auf dein Programm an. Auf jeden Fall ist so
etwas deutlich schwieriger Effizient zu Programmieren als nur ein Modul.
An dieser Stelle würde ich jetzt noch einmal meinen Vorschlag weiter
oben ins Spiel bringen:
Carsten Sch. schrieb:> Als Wandler 24Gleiche Einfachwandler mit SPI.> Die HArdware SPI des µC würde ich Links liegen lassen und eine> "besondere" Soft-SPI routine schreiben:> Es gibt EINEN Clk. Ausgang der an alle Wandler parallel geht. Es gibt> EINEN Daten_Out, der an alle Wandler Parallel geht.> Es gibt aber 24Daten_IN, jeder wadnler hat seinen Eigenen.> (Evtl. gibt es noch einen Trigger für alle Parallel zum Anstossen der> Messung)> Die Wandler erwarten ja alle dieselben Komandos. Die gebe ich allen> Gleichzeitig. Beim Auslesen werden dann ab einem bestimmten Punkt die> Wandeldaten für jeden Wandler einzeln kommen. Die schiebe ich einach für> jeden Pin/Wandler dann in eine Einzelne Variable (Wandler1-Wandler24).> NAchdem ich dann alles Eingelesen habe kopiere ich die Variable Zusammen> in den USB Ausgangsbuffer und Weg damit!
Wenn du hohe Taktfrequenzen vermeiden willst würde ich so vorgehen.
Daher:
Entweder ALLES PARALELL, oder aber ALLES SERIELL.
Dieses von dir vorgeschlagene Mischverfahren bringt meiner Ansicht nach
mehr Nachteile als Vorteile.
gelenkeharald schrieb:> ab wann müsste ich dann auf die leiterlängen aufpassen (hf-design...)?> vielen dank
Also von diesem Punkt bist du noch SEHR WEIT ENTFERNT.
Einstellige MHz Zahlen sind doch im grunde nur etwas nervöser
Gleichstrom...
gelenkeharald schrieb:> vielen dank
Keine Ursache ;-)
Willi schrieb:> gelenkeharald schrieb:>> Datenaufkommen aller Kanäle: 480kByte/s>> Du solltest Dir einen Prozessor aussuchen, der diese Datenmenge> überhaupt verarbeiten kann. Simuliere doch einmal Deine> Verarbeitungsroutinen auf einem Intel-ATOM, ob der das überhaupt> schafft.
Das ist jetzt nicht dein Ernst, oder?
480kBaud - Das schafft doch noch jeder heute übliche 8Bitter ohne sich
anzustrengen... Bei einem IntelAtom würde das noch nicht einmal eine
änderung der angezeigten Prozessorauslastung bewirken!
Gruß
Carsten
Carsten Sch. schrieb:> 480kBaud
Das ist jetzt nicht Dein Ernst, oder?
480kB/s mit 480kBd zu übertragen bräuchte ein sehr gutes
Kompressionsverfahren.
Aber ich sehe gerade, dass die Daten extern auf einem PC ausgewertet
werden sollen. Da wird wohl dann mehr als ein ATOM drin stecken :-)
so jetzt hab ich mich hier auch mal angemeldet ;-)
ich war hier schon so oft unterwegs und jetzt wurde es endlich mal zeit
Carsten Sch. schrieb:> OK, das reduziert die zu übertragenen Datenraten erheblich...> Damit kommen drei der vier Übertragungsarten in Frage. Musst halt> aussuchen ob dir eine garantierte MAximallatenz oder aber eine> Fehlerkorrektur wichtiger ist.
insgesamt ist mir eine Fehlerkorrektur wichtiger
ich hab dein (Carsten Sch.) vorschlag jetzt so verstanden, dass alles
über die I/O ports läuft mit
CLK: 1 pin
MOSI: 1 pin
MISO: 24 pin
SS: 1 pin
Trigger (zum Anstoßen der Messung): 1 pin
macht 28 gesamt
Das würde bedeuten, dass erst alle ADC durch den Trigger angestoßen
werden zur Messung.
Danach aktiviere ich SS, damit die Slaves im Takt von CLK die Daten an
den µ-Controller schicken. Das geschieht parallel da ich ja 24 MISO
Leitungen zum Controller habe. Mhh cool, das würde ja relativ flott
gehen (Achtung Erkenntnis^^)
Damit könnte CLK auch mit geringerer Taktfrequenz laufen oder aber das
ganze System, mit einer höheren Abtastfrequenz. Ich glaub so mach ichs.
Muss ich mich jetzt "nur" noch auf ADC und µ-Controller festlegen...
Das ganze wäre also dann keine "übliche" Struktur, wie Kaskade oder
Stern, wie man sie im Wikipediaartikel zu SPI finden kann.
Grüße GH