Forum: Mikrocontroller und Digitale Elektronik Gedanken zur Auswahl eines µ-Controllers


von gelenkeharald (Gast)


Lesenswert?

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!

von plop (Gast)


Lesenswert?

ATMEL, ATMEL, ATMEL!!!

von Udo S. (urschmitt)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

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?

von Ben _. (burning_silicon)


Lesenswert?

> 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.

von gelenkeharald (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Ben _. (burning_silicon)


Lesenswert?

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ß.

von Andi Ü. (and0riz0r)


Lesenswert?

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.). :-)

von gelenkeharald (Gast)


Lesenswert?

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?

von Carsten S. (dg3ycs)


Lesenswert?

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

von Carsten S. (dg3ycs)


Lesenswert?

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

von Verwirrter Anfänger (Gast)


Lesenswert?

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.

von gelenkeharald (Gast)


Lesenswert?

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?

von gelenkeharald (Gast)


Lesenswert?

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 ;-)

von Thomas O. (robibauer)


Lesenswert?

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.

von Thomas O. (robibauer)


Lesenswert?

Hmm... Wozu die Schaltung benötigt wird ist nun klarer.

von Udo S. (urschmitt)


Lesenswert?

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.

von Verwirrter Anfänger (Gast)


Lesenswert?

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.

von Carsten S. (dg3ycs)


Lesenswert?

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

von Carsten S. (dg3ycs)


Lesenswert?

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

von gelenkeharald (Gast)


Lesenswert?

vielen vielen dank für euer feedback
ich werd das alles mal in ruhe verdauen und mich nochmal melden sobald 
ich wieder ein problem habe :-)

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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

von Wolfgang M. (womai)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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.

von THaala (Gast)


Lesenswert?

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

von gelenkeharald (Gast)


Lesenswert?

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

von Willi (Gast)


Lesenswert?

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.

von Carsten S. (dg3ycs)


Lesenswert?

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

von Willi (Gast)


Lesenswert?

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 :-)

von Otto N. (gelenkeharald)


Lesenswert?

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

von Otto N. (gelenkeharald)


Angehängte Dateien:

Lesenswert?

also insgesamt so wie im bild
(trigger hab ich jetzt einfach mal weggelassen, würde wenn dann eh so 
aussehen wie clock, mosi oder ss)

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.