Forum: Mikrocontroller und Digitale Elektronik mikrocontroller, FPGA oder arduino mit ADC\DAC


von J. E. (eggord)


Lesenswert?

Hi,

ich bin auf der Suche nach einem mikrocontroller, FPGA oder arduino mit 
ADC\DAC.

Ich möchte einige analoge Schaltungen digitalisieren und neuen 
Funktionen hinzufügen.

Es kann auch sein, dass ich für die verschiedenen Funktionen 
verschiedenen boards brauche. Es muss also nicht alles mit einem Board 
realisiert werden aber es wäre schon schön.

Aufgabe 1: Ich habe zwei analoge Signale. Das eine wird in Abhängigkeite 
von der anderen verändert. Dabei muss das Timing unbedingt 
gleichbleiben. Also es sollte keine Verzögerung entstehen. Das liegt 
daran, dass es noch ein drittes Signal gibt welches synchron mit dem zu 
veränderden Signal ist. Die geschwindigkeit der adc und dac muss nicht 
so groß sein. 100ksps sollte ausreichen. Allerdings überlege ich ob ich 
zusätzlich eine Mittelung machen soll um das Rauschen zu minimieren.

Aufgabe 2: Ich möchte einen PID Regler für einen Galvo motor 
digitalisieren. Da sich der Hebel des Motors manchmal ändert muss man 
die konstanten anpassen. Ist eine automatische optimierung der PID 
konstanten möglich.

Als erstes dachte ich an den arduino due weil er bereits DAC hat und 
mehr power wie die normalen. aber wegen der synchronisation dachte ich 
an einen FPGA.Oder halt einen anderen mikrocontroller.

Wäre über Vorschläge dankbar.

Und guten Rutsch ;)

von Joe F. (easylife)


Lesenswert?

J. E. schrieb:
> Ich habe zwei analoge Signale. Das eine wird in Abhängigkeite
> von der anderen verändert. Dabei muss das Timing unbedingt
> gleichbleiben. Also es sollte keine Verzögerung entstehen.

(...)

>Die geschwindigkeit der adc und dac muss nicht
> so groß sein. 100ksps sollte ausreichen.

Denke darüber nochmal nach. Tipp: 100ksps = 0.01ms (x2)

von J. E. (eggord)


Lesenswert?

erstmal danke für die Antwort. Aber ich verstehen sie nicht :-D :-D

was  (...) bedeutet ist mir schleierhaft. Ich dachte ich hätte es recht 
eindeutig beschrieben.

und 100ksps = 0,01ms ist mir auch klar. Hätte ich das noch extra 
dazuschreiben müssen? oder meinst du, dass ich das nicht für schnell 
halte? ich kenne adc die Gsps machen....

Es wäre super wenn du deine Antwort ein wenig ausführlicher schreiben 
könntest denn im Moment kapier ich die gar nichts. Danke

von Joe F. (easylife)


Lesenswert?

J. E. schrieb:
> Ich habe zwei analoge Signale. Das eine wird in Abhängigkeite
> von der anderen verändert. Dabei muss das Timing unbedingt
> gleichbleiben. Also es sollte keine Verzögerung entstehen.

Es soll also keine Verzögerung geben.

Andererseits ist dir offenbar bewusst, dass in der digitalen Variante 
min. 0.02ms Verzögerung entstehen müssen (ADC/DAC).

Mir ist unklar, was du unter "keine" Verzögerung vestehst. Ist 1 ms auch 
noch okay?

von Mathe-Anfänger (Gast)


Lesenswert?

Joe F. schrieb:
> Tipp: 100ksps = 0.01ms

Seltsame Rechnung. Kann mir das mal jemand plausibel machen?

von Peter (Gast)


Lesenswert?

Mathe-Anfänger schrieb:
> Joe F. schrieb:
> Tipp: 100ksps = 0.01ms
>
> Seltsame Rechnung. Kann mir das mal jemand plausibel machen?

Das ist die Periodensauer nicht die Verzögerung!

von Mathe-Anfänger (Gast)


Lesenswert?

Peter schrieb:
> Das ist die Periodensauer nicht die Verzögerung!

Das ist eine seltsame Erklärung .... und schon gar keine Rechnung.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

J. E. schrieb:
> Als erstes dachte ich an den arduino due weil er bereits DAC hat und
> mehr power wie die normalen
Ich würde hier nicht auf einen uC mit unbekannter Klassenbibliothek 
setzen, sondern ziemlich "bare" in C programmieren.

> aber wegen der synchronisation dachte ich
> an einen FPGA.Oder halt einen anderen mikrocontroller.
Es gibt ADC, die von extern gestartet werden können. Nimm 2 solche und 
du kannst die Signale sogar gleichzeitig wandeln.

> Oder halt einen anderen mikrocontroller.
Der ARM Cortex 3 reicht bei halbwegs durchdachter Programmierung locker 
aus.

von J. E. (eggord)


Lesenswert?

Mathe-Anfänger schrieb:
> Peter schrieb:
>> Das ist die Periodensauer nicht die Verzögerung!
>
> Das ist eine seltsame Erklärung .... und schon gar keine Rechnung.

100ksps = 100kilo samples per second = 100000 Datenpukte pro sekunde

1/100000 s= 0.01 ms

Es ist die Periodendauer. Einfach den Quotienten ziehen würde ich nicht 
mal richtig als Rechnung bezeichnen.






Lothar M. schrieb:
> J. E. schrieb:
>> Als erstes dachte ich an den arduino due weil er bereits DAC hat und
>> mehr power wie die normalen
> Ich würde hier nicht auf einen uC mit unbekannter Klassenbibliothek
> setzen, sondern ziemlich "bare" in C programmieren.

Boar das klingt aber nahc sehr viel Arbeit. Sind die Biliotheken nicht 
zuverlässig?

>> aber wegen der synchronisation dachte ich
>> an einen FPGA.Oder halt einen anderen mikrocontroller.
> Es gibt ADC, die von extern gestartet werden können. Nimm 2 solche und
> du kannst die Signale sogar gleichzeitig wandeln.

Ok das verstehe ich nicht so ganz. Wie meinst du das von extern 
gestartet werden? Die clock?
Das problem sind nicht die zwei Signale sondern das Dritte, welches 
nicht durch den µC geht(zumindest war es nicht vorgesehen)

>> Oder halt einen anderen mikrocontroller.
> Der ARM Cortex 3 reicht bei halbwegs durchdachter Programmierung locker
> aus.
Also ein arduino due? oder kannst du ein anderes board empfehlen?

von Alexander S. (alex998)


Lesenswert?

Schau dir mal den PSoC5LP von Cypress an, speziell das CY8CKIT-059:
http://www.cypress.com/documentation/development-kitsboards/cy8ckit-059-psoc-5lp-prototyping-kit-onboard-programmer-and

Ist ein Cortex-M3 mit zusätzlichen analogen und digitalen Blöcken, 
ähnlich CPLD. ADC, DAC, Filter usw. lassen sich richtig gut damit 
machen, die IDE (PSoC Creator) ist exzellent gemacht.

Dürfte für deine Zwecke genau das richtige sein.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

J. E. schrieb:
> Boar das klingt aber nahc sehr viel Arbeit.
"Wenig Arbeit" stand nicht in deinem Anforderungsprofil. Und wenn das 
Schreiben einer effizienten Wandlerroutine bei dir eine solche Reaktion 
hervorruft, dann kannst du das Thema FPGA komplett vergessen. Denn dort 
musst du tatsächlich ALLES selber machen.

> Sind die Biliotheken nicht zuverlässig?
Es geht nicht darum, ob die zuverlässig sind, sondern ob sie effizient 
und schnell sind. Und das letztere ist garantiert der unkomplizierten 
und universellen Anwendung zum Opfer gefallen...

J. E. schrieb:
> Das problem sind nicht die zwei Signale sondern das Dritte, welches
> nicht durch den µC geht(zumindest war es nicht vorgesehen)
Wenn das dritte Signal eine relevante Information enthält, die nicht 
auch in einem der beiden ersten steckt, dann muss es eben auch 
ausgewertet werden.

Und was bedeutet denn "durch den uC gehen"? Fehlen uns da noch relevante 
Informationen?

: Bearbeitet durch Moderator
von J. E. (eggord)


Lesenswert?

Joe F. schrieb:
> J. E. schrieb:
>> Ich habe zwei analoge Signale. Das eine wird in Abhängigkeite
>> von der anderen verändert. Dabei muss das Timing unbedingt
>> gleichbleiben. Also es sollte keine Verzögerung entstehen.
>
> Es soll also keine Verzögerung geben.
>
> Andererseits ist dir offenbar bewusst, dass in der digitalen Variante
> min. 0.02ms Verzögerung entstehen müssen (ADC/DAC).

Also im ADC sollte keien Verzögerung entstehen. Sobald der einen 
Messwert hat gibt er ihn weiter.

> Mir ist unklar, was du unter "keine" Verzögerung vestehst. Ist 1 ms auch
> noch okay?

keine Verzögerung ist natürlich nicht möglich. Entschuldige wegen des 
unpräzisen Ausdrucks. also 0.02 ms Verzögerung ist grenzwertig.
Aber der arduino due läuft doch mit 84MHz da sollte doch eine 
Verzögerung von 1 MHz möglich sein.(ja ich weiß das kommt auf meine 
Verarbeitung an)


Lothar M. schrieb:
> J. E. schrieb:
>> Boar das klingt aber nahc sehr viel Arbeit.
> "Wenig Arbeit" stand nicht in deinem Anforderungsprofil. Und wenn das
> Schreiben einer effizienten Wandlerroutine bei dir eine solche Reaktion
> hervorruft, dann kannst du das Thema FPGA komplett vergessen. Denn dort
> musst du tatsächlich ALLES selber machen.

sorry sollte nicht so blöd klingen. Natürlich bin ich bereit die 
Wandlerroutine selber zuschreiben. Falls du mit Wnadlerroutine das 
verarbeiten des analogen Signals meinst.  Ich dachte irgendwie an eine 
ganze DSP bilbiothek selber schreiben.
Bei den FPGA dachte ich einfach, dass ich meine analogen Schaltkreise 
relativ einfahc digital darstellen lassen(Gates, counter usw.)


>> Sind die Biliotheken nicht zuverlässig?
> Es geht nicht darum, ob die zuverlässig sind, sondern ob sie effizient
> und schnell sind. Und das letztere ist garantiert der unkomplizierten
> und universellen Anwendung zum Opfer gefallen...

Hm ja das klingt logisch. Habe eben mal geschaut: vll ist ein M4 besser 
weil er schon ein paar DSP Funktionen dabei hat und die CMSIS von ARM 
relativ schnell läuft.

von J. E. (eggord)


Lesenswert?

Lothar M. schrieb:
> Wenn das dritte Signal eine relevante Information enthält, die nicht
> auch in einem der beiden ersten steckt, dann muss es eben auch
> ausgewertet werden.

Das wird so nicht gehen. Wieso ist erstmal egal.

> Und was bedeutet denn "durch den uC gehen"? Fehlen uns da noch relevante
> Informationen?

Nicht durch den µC gehen bedeutet, das das dritte Signal nicht an den µC 
angebunden ist.

Also alle Infos habe ich extra nicht geschrieben, da die eigentlich 
irrelevant sind und dann irgendjemand schreibt ich solle es doch bitte 
auf das relevante Zusammenfassen. Zum Beispiel von wo die Signale 
herkommen und so.

Ich werde morgen mal ein wenig ausführlicher beschreiben in wie weit die 
Signale verarbeitet werden sollen und ob Sie vo Sensoren oder so kommen.

von Thomas E. (picalic)


Lesenswert?

J. E. schrieb:
> Also im ADC sollte keien Verzögerung entstehen. Sobald der einen
> Messwert hat gibt er ihn weiter.

Das geht nur mit einem Flash-Wandler - die üblichen Wandler in 
Microcontrollern sind aber Successive approximation ADCs. Die brauchen 
erstmal eine gewisse Aquisitions-Zeit um den internen Sample-Kondensator 
zu laden, und dann noch min. einen A/D-Wandlertakt pro Bit für die 
Wandlung. Der A/D-Wandlertakt darf auch nicht beliebig hoch sein - meist 
ein Bruchteil des CPU-Taktes. Manchmal kann man den Takt erhöhen 
und/oder die Auflösung verringern, um die Wandlungsrate auf Kosten der 
Genauigkeit zu erhöhen. Auf jeden Fall muss man sich die ensprechenden 
Daten vom jeweiligen Wandler genau angucken und entscheiden, ob das für 
die Anwendung als "keine Verzögerung" betrachtet werden kann...

: Bearbeitet durch User
von M. K. (sylaina)


Lesenswert?

J. E. schrieb:
> keine Verzögerung ist natürlich nicht möglich. Entschuldige wegen des
> unpräzisen Ausdrucks. also 0.02 ms Verzögerung ist grenzwertig.
> Aber der arduino due läuft doch mit 84MHz da sollte doch eine
> Verzögerung von 1 MHz möglich sein.(ja ich weiß das kommt auf meine
> Verarbeitung an)

Nunja, wenn du mit 100 ksps abtastest willst, und auch Nyquist erfüllen 
willst/musst, dann hast du ganz automatisch eine Verzögerung von 0.02 
ms. Erklärung hierzu: Das Signal kommt an den ADC an, er beginnt die 
Wandlung. Nach 0.01 ms ist die Wandlung beendet und der Wert liegt für 
die Mikrocontroller bereit. Gemäß Nyquist brauchst du aber mindestens 
einen 2. Wert (genauer: man tastet mit einer Frequenz > 2 mal der 
maximalen Signalfrequenz ab, also eigentlich soll man min. 5-10 mal 
schneller abtasten), also musst du umgehend die 2. Wandlung starten. Das 
dauert auch wieder 0.01 ms. Bis du also irgend etwas mit den gewandelten 
Werten machen kannst sind 0.02 ms vergangen.
Daher: Ist keine Verzögerung erlaubt ist das mit Digitaltechnik 
schlicht nicht umsetzbar (ich hab das bisher allerding auch noch nicht 
erlebt, dass wirklich keine Verzögerung erlaubt war).
Du hast dir ja schon Gedanken darum gemacht und gesagt, dass die 100 
ksps in deinem Fall grenzwertig aber noch OK sind. Hast du bedacht, dass 
bei Rechenaktionen im Mikrocontroller (oder FPGA usw.) auch noch Zeit 
verstreicht? Daher kommt die Frage: Welche Verzögerung wäre denn in 
deinem Falle noch OK? ;)

von J. E. (eggord)


Angehängte Dateien:

Lesenswert?

So nun mal etwas genauer zu dem Aufbau:

Ich habe mal eine kleine Zeichnung gemacht da ist die Verdrahtung 
abgebildetet und hier noch ein paar Eckdaten:
DAQ ist eine Datenerfassungskarte die mit dem Computer gekoppelt ist. 
Dort kommen das "Trigger"signal und das Motorsignal synchron raus. Das 
Triggersignal sorgt im System für eine Änderung im Sensor. Das 
Sensorsignal steigt. Ab einem bestimmten Schwellenwert des Sensorsignal 
soll nun durch den µC das Motorsignal verändert werden.
Das Motorsignal kommt mit 50ksps aus dem DAQ mit 12 bit( Deswegen auch 
100ksps in meinem vorherigen post; wegen nyquist; Danke M. Köhler für 
den Hinweiß)

Das Sensorsignal ist also das direkte Resultat von Triggersignal und 
Motorsignal.

Also im Moment sind 0.02ms Verzögerung das Maximum was ok wären.

Wenn ich das richtig sehe ist die µC Geschwindigkeit nicht das Problem 
sondern die ADC/DAC. Also alle boards die ich bis jetzt gesehen habe 
haben immer nur einen flash oder sigma delta ADC/DAC oder die Auflösung 
ist zu geringer.

Danke Alexander S. der PSoC5LP von Cypress ist ein cooles Ding aber er 
hat lediglich 8 bit DAC und auch nur einen sigma delta ADC. Die anderen 
sind SAR ADCs.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

J. E. schrieb:
> Das Motorsignal kommt mit 50ksps aus dem DAQ mit 12 bit( Deswegen auch
> 100ksps in meinem vorherigen post; wegen nyquist; Danke M. Köhler für
> den Hinweiß)
Das hast du aber noch nicht richtig verstanden.
Interessant ist nämlich überhaupt nicht, wie "schnell" das Signal aus 
dem "DAQ" kommt, sondern welche Frequenz es höchstens enthält...

von J. E. (eggord)


Lesenswert?

Lothar M. schrieb:
> J. E. schrieb:
>> Das Motorsignal kommt mit 50ksps aus dem DAQ mit 12 bit( Deswegen auch
>> 100ksps in meinem vorherigen post; wegen nyquist; Danke M. Köhler für
>> den Hinweiß)
> Das hast du aber noch nicht richtig verstanden.
> Interessant ist nämlich überhaupt nicht, wie "schnell" das Signal aus
> dem "DAQ" kommt, sondern welche Frequenz es höchstens enthält...

Das habe ich schon verstanden ;) Ist aber hier völlig egal, da das 
Signal bereits digitalisiert ist. ich könnte sogar 50ksps nehmen und 
hätte keinerlei Verlust aber ich könnte eine Verschiebung erhalten wenn 
der adc vom µC um fast eine Periodendauer verschoben ist. Deswegen die 
100ksps. Damit ist die max Verschiebung nur halb so groß. Das "wegen 
nyquist" bezog sich nur auf den Post von Köhler(vll ein wenig blöd 
geschrieben von mit)

von A. S. (Gast)


Lesenswert?

So ganz verstehe ich das nun nicht mehr:

Ist die DAQ schon Fix, oder Teil der Entwicklung?

Du solltest also schreiben,
- was für eine Signal aus dem Motor kommt (vermutlich ein Analoges, mit 
einer Grenzfrequenz zwichen 20kHz..50kHz, je nach Filter)
- welche Verarbeitung notwendig ist (einfach Multiplikation/Addition 
oder komplexer)
- welche zeitlichen Abhängigkeiten es gibt, also wie schnell ein 
(verändertes) Motorsignal sich über den Sensor zurück im µC auswirkt. 
Gleiches Gilt für das Triggersignal (also: macht es evt. Sinn, das 
Triggersignal auch an den µC zu legen, damit dieser die Info früher 
hat?)
Wenn DAQ und µC parallel das Sensorsignal auswerten...kann die DAQ den 
Wert nicht digitla an den µC senden?

von J. E. (eggord)


Lesenswert?

Achim S. schrieb:
> So ganz verstehe ich das nun nicht mehr:
>
> Ist die DAQ schon Fix, oder Teil der Entwicklung?

Das DAQ ist fix.

>
> Du solltest also schreiben,
> - was für eine Signal aus dem Motor kommt (vermutlich ein Analoges, mit
> einer Grenzfrequenz zwichen 20kHz..50kHz, je nach Filter)
Jap ein analoges. ich kenne aber die Grenzfrequenz nicht ist nicht bei 
dem Servotreiber angegeben.

> - welche Verarbeitung notwendig ist (einfach Multiplikation/Addition
> oder komplexer)

etwas komplexer ist es schon. Aber das schlimmste sind e funktionen

> - welche zeitlichen Abhängigkeiten es gibt, also wie schnell ein
> (verändertes) Motorsignal sich über den Sensor zurück im µC auswirkt.
fast sofort. Also genauer gesagt liegt das am Objekt zwischen Motor und 
Sensor. Dieses reagiert aber sofort auf das veränderte Motorsignal. 
Somit ist der begrenzente Faktor hier eher der adc.

> Gleiches Gilt für das Triggersignal (also: macht es evt. Sinn, das
> Triggersignal auch an den µC zu legen, damit dieser die Info früher
> hat?)
der kann es zwar "sehen" aber nicht weiter senden. Ansonsten müsste das 
gesamte System umkonstruiert werden.

> Wenn DAQ und µC parallel das Sensorsignal auswerten...kann die DAQ den
> Wert nicht digitla an den µC senden?

Die DAQ nimmt es nur auf und stellt es im pc dar. Wenn die Verarbeitung 
aber über den pc läuft ist die Verzögerung riesig. Und vorallem nicht 
konstant.

von M. K. (sylaina)


Lesenswert?

Wie genau schaut denn das Motorsignal aus? Ich nehme mal an es wird was 
Sinus-förmiges sein.
Ich würde hier Richtung 1 Msps zum abtasten des Motorsignals aus dem DAQ 
gehen, dann hat man mehr Abtastpunkte ( = Signal lässt sich besser 
rekonstruieren ) und man hat auch mehr Zeit zum Rechnen bezogen auf die 
0.02 ms zulässige Verzögerung. Ein ATXMega könnte deinen Anforderungen 
wohl genügen.

J. E. schrieb:
> Die DAQ nimmt es nur auf und stellt es im pc dar. Wenn die Verarbeitung
> aber über den pc läuft ist die Verzögerung riesig. Und vorallem nicht
> konstant.

Ah, ein Windows-Rechner... :D

: Bearbeitet durch User
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.