Hallo zusammen,
ich bräuchte einmal von euch Rat bezüglich meiner "Aufgabenstellung":
Ich wil eine drucksensitive Folie auswerten, habe über 1000 Messpunkte
zu messen. Ohne großartig auf die Schaltung einzugehen: Ich switche mit
mehreren Multiplexern und will die Ausgangsspannungen (zwischen 0-5V)
eine nach der anderen jeweils an einen oder mehrere ADC's führen, den
DC-Spannungswert auslesen und ihn speichern.
Bei der Masse an Messungen:
Wie würdet ihr da vorgehen? Ich will natürlich das Ergebnis für eine
Darstellung in der GUI so schnell es geht ablesen können.
Empfehlt ihr dafür eigene ADC's für die Messungen oder kann/soll ich die
integrierten des Mikrocontrollers nehmen (noch keiner gewählt)?
Stephan schrieb:> Ich will natürlich das Ergebnis für eine> Darstellung in der GUI so schnell es geht ablesen können.
Ich schätze mal hier ist der Knackpunkt. Wie schnell soll es denn sein?
Ich hab da nicht genug Erfahrung, das mal eben im Kopf zu überschlagen,
aber vielleicht macht hier sowas wie eine Lösung auf CPLD/FPGA-Basis
Sinn, wenn es wirklich schnell sein soll. Der Flaschenhals dürfte dann
die Verbindung zum PC sein.
Wie siehts mit der Auflösung aus?
Stephan schrieb:> Wie würdet ihr da vorgehen? Ich will natürlich das Ergebnis für eine> Darstellung in der GUI so schnell es geht ablesen können.
Für eine Darstellung einer Gui reicht ja wohl 1/10s dicke als Sampling
Zeit für alle Punkte, schneller kann eh niemand etwas erkennen.
Also hast du 1/10 s Zeit für 1000 samples oder pro Sample 100µs incl.
umschalten der MUX.
Also such dir was passendes.
Wie schnell soll das denn alles gehen? Der ADC eines AVR schafft 15kSPS.
Du könntest also die 1000 Messungen in 1/15 Sekunde durchführen. Die
Daten kannst du nebenbei noch per UART an den Rechner schicken. Wäre dir
das schnell genug?
Stephan schrieb:> Empfehlt ihr dafür eigene ADC's für die Messungen oder kann/soll ich die> integrierten des Mikrocontrollers nehmen (noch keiner gewählt)?
Das ist zeitlich kein Problem, ob sich mehrere ADCs lohnen, hängt eher
vom realen Aufbau der Hardware ab, also ob z.B. entfernte Messstellen
hast - da kann es sinnvoll sein, bzw. ist es meistens, einen lokalen ADC
zu verwenden und die digitalen Daten zu übertragen.
Ausserdem müsstest du mal nachrechnen, welcher Fehler jeweils durch eine
MUX-Stufe eingeführt wird, Analog Multiplexer sind ja keine perfekten
Bauteile (ausser du nimmst 1000 Reedrelais, aber das hat auch so seine
Probleme). Ich würde nicht mehr als 8 x 8 Eingänge auf einen ADC
schalten.
Gruss Reinhard
Hallo zusammen und vielen Dank schon mal für euer Feedback!
Ich habe mal einen schematischen Schaltplan angehangen. Stellt euch vor
ich habe eine Folie, mit der ich die Druckbelastung einer flach
aufgelegten Hand messen will. Die Messfolie soll direkt per Stecker an
die Platine angeschlossen werden, die Messpunkte werden alle erfasst,
per Funk weitergesandt und über einer GUI am PC angezeigt. Ich stelle es
mir grob so vor, dass ich das per Funk versandte Array an Daten "nur
noch" mit Balken visualisieren muss dann.
Meine Unsicherheit ist halt darin begründet, dass ich diese Masse an
Messungen habe. Bis jetzt habe ich mit einem ADC immer ein einziges
Signal gesampled, jetzt sind es >1000.
Die Genauigkeit ist nicht soo wichtig, da reichen die integrierten (egal
ob TI oder Atmel) locker. Natürlich habe ich auch einen zusätzlichen
Messfehler durch den R_on der Muxer, aber damit kann ich leben. Die
transition-Zeit liegt im nano-Bereich.
Also ihr meint, da reicht der integrierte ADC?
Stephan schrieb:> Die> transition-Zeit liegt im nano-Bereich.
Wer sagt das? Nach dem Auswählen einer Spalte muss der Verstärker erst
mal auf einen stabilen und genauen Wert einschwingen, das geht bestimmt
nicht in ein paar ns. Das ist aber die für das System wesentliche
Umschaltzeit, der ADC ist nicht das Problem.
Gruss Reinhard
Falk Brunner schrieb:> @ Stephan (Gast)>>>Also ihr meint, da reicht der integrierte ADC?>> Liest du auch mal die Antworten?>> http://www.mikrocontroller.net/articles/Netiquette...
Hi Falk,
ähm, ja?!
Ich bin auf die "entfernten Messstellen" eingegangen, auf den Fehler der
MUX-Stufen, auf die Genauigkeit, also die Auflösung, etc pp.
Wo ist jetzt Dein Problem?
@die anderen:
Über die Anzahl der Samples/s habe ich mir noch keine Gedanken gemacht.
Letztlich sind es ja nur DC-Spannungs-Signale, welche ich erfassen will.
Reinhard Kern schrieb:> Stephan schrieb:>> Die>> transition-Zeit liegt im nano-Bereich.>> Wer sagt das? Nach dem Auswählen einer Spalte muss der Verstärker erst> mal auf einen stabilen und genauen Wert einschwingen, das geht bestimmt> nicht in ein paar ns. Das ist aber die für das System wesentliche> Umschaltzeit, der ADC ist nicht das Problem.>> Gruss Reinhard
Hi Reinhard,
siehst Du, das wusste ich nicht. Deswegen wollte ich die Community um
Rat bitten. Bis jetzt bin ich nur von der Transition-Zeit des
Multiplexers und der Messdauer des ADC's ausgegangen.
D.h. ich benötige bestenfalls auch einen sehr schnellen OP?
Gruß,
Stephan
Stephan schrieb:> @die anderen:> Über die Anzahl der Samples/s habe ich mir noch keine Gedanken gemacht.> Letztlich sind es ja nur DC-Spannungs-Signale, welche ich erfassen will.
Du hast dir noch keine Gedanken über die erfolderliche Samplerate
gemacht, aber willst wissen, ob der integrierte DAC eines noch
unbekannten uC dafür taugt?
--> du bist lustig..
Das ist in etwa so, wie wenn du sagst: Ich will 100km fahren. Über´s
Gelände kann ich noch keine Aussage machen und auch nicht, wie schnell
ich ankommen will, aber soll ich lieber ein Fahrrad oder ein Auto
nehmen?
Stephan schrieb:> Falk Brunner schrieb:>> @ Stephan (Gast)>>>>>Also ihr meint, da reicht der integrierte ADC?>>>> Liest du auch mal die Antworten?>>>> http://www.mikrocontroller.net/articles/Netiquette...>> Hi Falk,>> ähm, ja?!>> Ich bin auf die "entfernten Messstellen" eingegangen, auf den Fehler der> MUX-Stufen, auf die Genauigkeit, also die Auflösung, etc pp.>> Wo ist jetzt Dein Problem?>> @die anderen:> Über die Anzahl der Samples/s habe ich mir noch keine Gedanken gemacht.> Letztlich sind es ja nur DC-Spannungs-Signale, welche ich erfassen will.
Weil wenn z.B. du weist, wie viele Samples du brauchst kannst Du Dir
überlegen:
- ob eine uart usb verbindung reicht oder lieber dann doch eine USB 2.0
Full-Speed/High-Speed benötigst.
- und was vielleicht am wichtigsten ist, du dimensionierst den analog
teil dementsprechend richtig
Stephan schrieb:> die Messpunkte werden alle erfasst,> per Funk weitergesandt und über einer GUI am PC angezeigt.
Als erstes solltest du dir klarwerden wie oft du messen willst (meine
Beispielrechnung ist oben).
Und dann solltest du dir klarwerden wie oft du messen darfst, so daß
du die gemessene Datenmenge überhaupt übertragen kannst.
Die Verarbeitung auf dem PC sollte bei heutigen PCs dann eher nicht das
Problem sein.
Stephan schrieb:> Die transition-Zeit liegt im nano-Bereich.
Wessen? Die Folie wird dir was husten, wenn du mit ihr versuchst, über
Nanosekunden zu verhandeln.
Coder schrieb:> hab überlesen, dass er Funken will, aber egal.
Hier ist eine ganz schön unfreundliche Grundstimmung irgendwie.
Wenn ich alles könnte, dann würde ich ja hier nicht um Hilfe bitten,
oder?
Könnt ihr mir etwas erklären?
Welchen Unterschied macht es, ob ich das DC-Signal eines Messpunktes
10.000x oder nur 100x/s sample? Ich will ja keinen Sinus, o.ä. abtasten,
bei dem die Anzahl der Messpunkte wichtig ist?
Ich habe mir deshalb noch keine Gedanken um die genaue Samplerate
gemacht, weil ich u.a. noch am überlegen bin, welche Verzögerungszeiten
das Gesamtsystem überhaupt hat. Von der "Einpegelzeit" des OP's wusste
ich z.B. noch gar nicht.
Theoretisch wäre der Programmablauf ja folgender:
-Spalte 1 auswählen
--Zeile 1 auswählen
--Messen
--Speichern
--Zeile 2 auswählen
--Messen
--Speichern
and so on....
Ist da die Samplerate nicht mehr oder minder "egal", wenn sie nicht
völlig extrem ist?
Stephan schrieb:> Ist da die Samplerate nicht mehr oder minder "egal", wenn sie nicht> völlig extrem ist?
"Völlig extrem" ist ein weites Feld, je nach dem, was man für einen
Wandlertyp einsetzt.
Überleg dir doch einfach mal, wie oft du ein komplettes neues
"Druckbild" brauchst. Dann kann man drüber nachdenken, was für Wandler
man einsetzen kann und ob so ein Ding im µC vorhanden ist.
Die möglichen Abtastraten heutiger Datenerfassungen reichen von 1s bis
0.01ns und da muss man schon irgendwie gucken, wo man hin will.
Stephan schrieb:> Hier ist eine ganz schön unfreundliche Grundstimmung irgendwie.
Na ja, du fragst, aber gehst auf die Antworten nicht ein, sondern kommst
stattdessen mit neuen Erkenntnissen um die Ecke.
Letztendlich willst du, dass dir geholfen wird und daher ist es auch als
Hilfe zu betrachten, wenn dir die Leute sagen, dass du die
Leistungsfähigkeit deines Aufbaus erstmal eingrenzen musst, bevor du dir
um Lösungsansätze Gedanken machst.
Stephan schrieb:> Ist da die Samplerate nicht mehr oder minder "egal", wenn sie nicht> völlig extrem ist?
Wenn du NIE einen Wert abfragen willst, dann brauchst auch NIE sampeln.
Er ist also bekannt und du brauchst gar nicht sampeln und übertragen.
Aber offensichtlich hast du ja nen berechtigten Grund anzunehmen, dass
dieser DC sich irgendwann mal ändern wird. Und genau diese Änderung
willst du erfassen.. Und dann stellt sich doch als erstes die Frage: WIE
OFT willst soll dein System auf den DC schauen und den Wert
aktualisieren, also sampeln....
Alle paar Minuten mal? Oder einmal pro Sekunde? Oder alle 14 Tage? Oder
100mal pro Sekunde? oder was?
Stephan schrieb:> Ist da die Samplerate nicht mehr oder minder "egal", wenn sie nicht> völlig extrem ist?Stephan schrieb:> Wie würdet ihr da vorgehen? Ich will natürlich das Ergebnis für eine> Darstellung in der GUI so schnell es geht ablesen können.
Was willst du jetzt?
Ich habe dir oben eine Beispielannahme vorgerechnet. Du musst schon
wissen was du willst, wir können es dir nicht sagen.
Daraus ergibt sich was du brauchst
Bei deinem Ablauf fehlt das Versenden der Daten zum PC.
und das Warten zwischen setzen des Mux und dem Einpendeln der Spannung
so daß der A/D Wandler korrekt wandeln kann.
Michael schrieb:> Stephan schrieb:>> Ist da die Samplerate nicht mehr oder minder "egal", wenn sie nicht>> völlig extrem ist?>> "Völlig extrem" ist ein weites Feld, je nach dem, was man für einen> Wandlertyp einsetzt.>> Überleg dir doch einfach mal, wie oft du ein komplettes neues> "Druckbild" brauchst. Dann kann man drüber nachdenken, was für Wandler> man einsetzen kann und ob so ein Ding im µC vorhanden ist.> Die möglichen Abtastraten heutiger Datenerfassungen reichen von 1s bis> 0.01ns und da muss man schon irgendwie gucken, wo man hin will.
Hi Michael,
danke für Deinen Ansatz. Ich denke, dass ich das Gesamt-Druckbild alle
100-200ms aktualisiert haben will.
Ich unterscheide da zwischen drei Phasen:
1. Hand auflegen, Kraft baut sich auf
2. Maximalkraft wird ermittelt
3. Hand wird wieder von der Folie genommen
Ich denke, dass man den Kräfteverlauf auf der Gesamtfläche gut mit 10
Bilder/s bzw. 100ms darstellen kann. Gehen wir vielleicht davon aus.
Wie gehe ich von da weiter?
Entschuldige wenn ich ich unfreundlich war, aber ich habe den Eindruck,
dass Du Dir noch nicht genug Gedanken gemacht hast oder es uns nicht
sagen möchtest oder kannst.
Nur als Beispiel:
Du möchtest die Daten auf dem PC anschauen. Du sagt aber nicht, ob du
alle sensoren 1x, 10x oder 100x pro Sekunden auf dem Bildschirm
aktualisiert haben möchtest/musst. Damit hasst Du z.B. eine Sample-Rate
von 200/s bis 200000/s. Oder machts Du vieleicht nur eine Einzelmessung.
Und das ist für deine Analog-Schaltung auch nicht unwichtig.
Stephan schrieb:> Wie gehe ich von da weiter?
Als nächstes muss man sich das Zeitverhalten der einzelnen Komponenten
angucken und überlegen, ob es da irgendwo eng wird und man am Konzept
drehen muss, also:
- wie schnell ist das Spaltenansteuersignal aufgebaut
- wie lange braucht das Ausgangssignal der Matte, um daraufhin stabil
zu sein
- wie lange braucht der ADC (µC intern typisch 25/100000s)
- wo landen die Daten (reicht der µC RAM)
- wie lange dauert die Übertragung zum PC
- wie lange braucht das µC Programm
Für jeden der Schritte gibt es verschiedene Lösung, man kann Sachen
parallel erledigen (Spaltensignal, Zeilensignal wandeln, Daten
übertragen) anlegen, und , und, und...
Da muss man einfach mal ein paar Dinge ausprobieren/simulieren und
rechnen, wie das alles paßt
@ Stephan (Gast)
>Ich denke, dass man den Kräfteverlauf auf der Gesamtfläche gut mit 10>Bilder/s bzw. 100ms darstellen kann. Gehen wir vielleicht davon aus.
Das ist ja schon mal was.
>Wie gehe ich von da weiter?
10 Hz Bildwiederholrate x Anzahl Punkte = Samples / s.
Jetzt weiß man wieviel Zeit man für das Umschalten der Matrix, der
Multiplexer, Einschwingen der Verstärker und zur Abtastung hat. Im
einfachen Ansatz macht man das alles nacheinander, wenn es sehr schnell
gehen muss und man keine Zeit hat auch parallel, sprich, während der ADC
das abgetastete, und damit intern "eingefrorene" Signal digitalisiert,
kann man die MUX schon wieder umschalten. Das ist aber was für die
höheren Semester. Mach es erstmal einfach.
Hallo zusammen,
vielen lieben Dank für die Denkanstöße soweit.
Ich gehe aktuell von ca. 3000 Messpunkten aus, damit hätte ich bei 10 Hz
Bildwiederholrate um die 3000 Samples/s.
Die Switching Zeiten des ADG706-Multiplexers liegen bei 40ns. Das
bedeutet, dass ich pro Durchlauf 3000x umschalten muss und somit
3000x40ns = 120µs Verzögerung alleine durch die Umschaltzeiten habe.
@Falk:
Du redest von "pipelining", oder?
@Michael:
-Zu der Messfolie kann ich aktuell noch nichts genaues sagen, da dort
eine andere Gruppe dransitzt. Gehen wir davon aus, dass es direkt stabil
ist.
-Beim AVR ADC habe ich gelesen, dass er bei 1MHz ADC_Clock-Freq. 13
Cycles braucht. Mit Deinen angenommenen 25µs sollte ich also auf der
sicheren Seite sein, oder?
-Die Daten gehen erst einmal in den RAM des µC's.
-Die Verzögerung durch die RF-Übertragung ist erstmal nicht so wichtig.
Das ist für mich erst der nächste Schritt.
Welcher Parameter der OP's ist für meine Messungen wichtig?
Viele Grüße!
@ Stephan (Gast)
>Ich gehe aktuell von ca. 3000 Messpunkten aus, damit hätte ich bei 10 Hz>Bildwiederholrate um die 3000 Samples/s.
Da fehlt eine Null. 30.000 Sample/s
>Du redest von "pipelining", oder?
Ja.
>-Beim AVR ADC habe ich gelesen, dass er bei 1MHz ADC_Clock-Freq. 13>Cycles braucht.
Ist auch bei jedem anderen Takt so. 13 Takte.
>-Die Daten gehen erst einmal in den RAM des µC's.
Macht mal locker 3kB. Damit sind die meisten AVRs schon fast voll.
>Welcher Parameter der OP's ist für meine Messungen wichtig?
Kommt drauf an, was du wie genau messen willst. Offsetspannung und
Bandbreite sind so der erste Ansatz.
Dein Problem wird sich nur am konkreten Fall lösen lassen.
-Da ist zum einen die Auflösung.
Die eingebauten A/D-Wandler sind hier nicht besonders herausragend.
-Multiplexen wirst Du ja in jedem Falle müssen, da meistens die
Anzahl an eingebauten Wandlern nicht ausreichend ist.
-Bei externen Wandlern kommen zu den Umschaltverzögerungen auch noch
Abfragen nach: "Are you ready" hinzu.
-Darüberhinaus wollen die Daten auch noch in die CPU geschaufelt
werden. Meist seriell, aber für beliebig viele I²C Schnittstellen
reicht's auch nicht. Also ein Eigenbauprotokoll. Dasy Chain dürfte
wohl, bei so vielen Kanälen, zu langsam werden.
-Benutzt Du A/D-Wandler mit mehreren Kanälen, so musst Du in beiden
Richtungen babbeln.
Wenn's nur um's Anschauen geht, kann man oft sowohl bei der
Geschwindigkeit, als auch bei der Auflösung, kräftige Abstriche machen.
Hi,
@Falk:
Ja, die für die letzte Null hat der Tastenanschlag nicht mehr gereicht -
merci ;)
Tendenziell wollte ich eh zu einem größeren µC greifen.
Wohin sollte ich Deiner Meinung nach die Daten am sinnvollsten
speichern? EEPROM ist langsamer oder? Gerade wenn ich ein externes
einsetzen würde, dann müssten die Daten ja auch wieder dorthin
geschrieben und evtl. gelesen werden....
Bzgl. ADC's: Ist die Bandbreite für mich auch wichtig, wenn ich nur
DC-Messungen mache?
Eigtl. wollte ich auf externe Wandler verzichten, das war zumindest mein
erster Ansatz - aber ich frage ja nicht umsonst hier nach...
Die "neuen" XMegas haben ein recht leistungsfähiges Speicherinterface,
womit Du dann "richtig" viel RAM zur Verfügung haben kannst.
Ich glaube ein paar von denen können sogar 12Bit analog - was auch immer
das heißt - auflösen.
amateur schrieb:> Die "neuen" XMegas haben ein recht leistungsfähiges Speicherinterface,> womit Du dann "richtig" viel RAM zur Verfügung haben kannst.> Ich glaube ein paar von denen können sogar 12Bit analog - was auch immer> das heißt - auflösen.
Die 12bit waren sicherlich auf die Auflösung des ADC bezogen....
Kann ich eigentlich auch SRAM als Datenspeicher verwenden?
Stephan schrieb:> Bzgl. ADC's: Ist die Bandbreite für mich auch wichtig, wenn ich nur> DC-Messungen mache?
Du misst kein DC. Du misst 10000 mal pro Sekunde einen Messwert der
völlig verschieden vom vorherigen sein kann.
je nach dem wie schnell du deine Daten wegbringst, gehts ja auch so.
30.000 Samples x 8Bit = ~240kbit
d.h. wenn du mit mehr als 240.000Baud auf dem Funkkanal übertragen
kannst bringst du die Daten so schnell weg wie sie kommen.
Protokolloverhead nicht mit eingerechnet.
Dann ist nur noch die Frage wie oft du wie große Pakete wegschicken
willst/kannst. Also mindestens alle 100ms, also sind die Pakete zum
zwischenspeichern maximal 3kB, umso öfter du wegschickst umso kleiner.
Da brauchst du nicht unbedingt einen externen Speicher.
>Kann ich eigentlich auch SRAM als Datenspeicher verwenden?
Ja - keine Ahnung ob DRAM überhaupt geht.
'Ne 1/4 Pupille ins Manual werfen hilft hier aber.
Ich würde nicht nur einen ADC benutzen. Mal angenommen du benutzt 2
externe ADCs dann kannst du bei einem messen, ja das dauert auch eine
Weile, und bei dem anderen kannst du in der Zeit den Mux umschalten.
Also eine PingPong-Messung. Wenn du das gleiche mit einem internen ADC
machen willst musst du schauen ob der zwei getrennte ADC Peripherien
hat. Wenn nicht, kannst du auch immer nur auf einem Kanal messen.
Den uC würde ich an deiner Stelle nach der externen Beschaltung
auswählen. Wenn du noch funken willst, dann kann es bei so einer 70er
8Bit Krücke schnell an Rechenleistung fehlen.
Dann solltest du auch über eine geeignete Komprimierung der 12Bit Daten
nachdenken, immer 6Bit Overhead macht bei 3000 Samples und 10 Messungen
pro Sekunde 22KB Overhead. Deine Nettodatenübertragung (12Bit) liegt bei
45KB/s.
Gruß.
Höchstgeschwindigkeit wirst Du bei Deiner Schaltung sowieso nicht
erreichen. Die heutigen Schalter sind zwar recht schnell, aber der
Innenwiderstand deiner "Spannungsquellen" sieht nicht besonders niedrig
aus.
Zusammen mit den Lastkapazitäten dürfte das Signal ganz schön lange
rumwackeln.