Forum: Mikrocontroller und Digitale Elektronik Microcontroller verstehen / A/D Wandler


von Kai S. (freewarehookie)


Lesenswert?

Hallo,

ich habe nur ein Grundverständnis von Mikrocontrollern; ich möchte 
lernen und bin für Beantwortungen dankbar.

Ich habe bereits mit einem RFID Tag überlegt die Übertragung nach ISO 
Norm über einen Mikroprozessor aufzubauen, was theoretisch möglich sein 
müsste und von mir ggf. noch experimentell gemacht wird (da brauche ich 
aber keine weitere Hilfe zu).

Nun sollte es doch auch, nebst der in Microcontrollern eingebauten 
Analog-Digital-Wandler, vor allem in Anlehnung an frühere Generationen 
von Microcontrollern, wo man den A/D Wandler noch nicht im Chip 
integriert hatte, möglich sein, einen A/D Wandler, zum Beispiel für 
Audio-Signale (z.B. Sound-Karte) mit einem Microcontroller aufzubauen.

Ich bekomme, beispielsweise als Musik, div. Sinuskurven die sich 
überlagern geliefert und muss diese jetzt digitalisieren.
Dazu werde ich, laut meiner theoretischen Überlegung, den Wert der in 
der Zeiteinheit zu hörenden Sinuskurven (mehrere oder der gemeinsamen?) 
in digitale 0101010 Bit-Schreibweise umwandeln müssen.
Ein IC A/D macht dies über integrierte Schaltkreise.
Wie würde das mit einem Microcontroller aussehen? Wäre dieser 
hypothetisch genau so schnell?

Es wird doch ziemlich schwierig sein die analoge Datenmenge in Echtzeit 
in Binärcode umzuwandeln, oder? Zumindest stelle ich mir dies als sehr 
schwierig vor.

Für einen Ausblick, auch und vor allem in die Funktionsweise der 
Zeiteinteinheit und Umsetzung mit Bezug zu Audio-Signalen und eine 
Erklärung, die ich verstehe, bedanke ich mich im Voraus.


Mit freundlichem Gruß,

   Freewarehookie

: Bearbeitet durch User
von Andras H. (kyrk)


Lesenswert?

"Es wird doch ziemlich schwierig sein die analoge Datenmenge in Echtzeit
in Binärcode umzuwandeln, oder? Zumindest stelle ich mir dies als sehr
schwierig vor."
Gucken wie viel Samples pro Sekunde der jeweilige AD Wandler liefern 
kann. Die Sampels musst du ja auch abholen, also wenn es extern über 
SPI/I2C/Parallel ist musst du die Datenrate auch entsprechend hoch 
haben.

Für audio brauchst du ja eventuell 40kHz. Und ca 12 bits. Dass heisst 
dann 40kSamples/Sec und jeweils 12 bit (mono). 12bits sind leider 2 
bytes meist. 80kByte/sec. I2C mit 100kHz wird vermutlich eng werden, 
eher so 400kHz oder noch mehr. SPI gleich. Parallel ist ja auch gleich 
wobei hier hast ja meist 8 oder 12 oder 16 bit zum übertragen. Dann muss 
der uC intern alles noch verarbeiten können.
Wenn der AD Wandler im uC selbst ist, dann hast ja nur ein Interrupt 
oder musst ein Fifo Ringspeicher lesen. Interrupt mit 40kHz sollte 
machbar sein. Wird aber an anderen Stellen probleme machen. Würde lieber 
hier ein AD Wandler haben der einen Ringspeicher füllt. Dann alle X ms 
ein Interrupt und die Datenreihe abholen.

Suche dir doch eine uC mit internen AD Wandler. Wird viel einfacher.
https://www.olimex.com/Products/PIC/Development/PIC32-EMZ64/open-source-hardware
Hier das Ding hat Audio Input und Output. Ist zwar limitiert aber ich 
meine damals konnte ich da MP3 zurückspielen. War halt mit 8 bit. Aber 
immer hin. Den AD Wandler habe ich nicht ausprobiert. Kannst mal machen 
:)

von Hanni (Gast)


Lesenswert?

Moin,
hast du dir mal angeguckt welche Methoden es für eine Analogmessung 
gibt? Klar kann man das auch auf einem uC selber implementieren.

Viel zeitintensiver/kritischer ist aber die Auswertung via DFT. Umso 
höher die Abtastung sein muss (>2f) desto mehr Systemtakt brauchst du. 
(Der ADC muss dann natürlich auch mitkommen)

von Olaf (Gast)


Lesenswert?

> integriert hatte, möglich sein, einen A/D Wandler, zum Beispiel für
> Audio-Signale (z.B. Sound-Karte) mit einem Microcontroller aufzubauen.

DAs ist theoretisch kein Problem, praktisch nicht moeglich.

Bei Audiosignalen legst du wert auf wenigstens 96dB Rauschabstand bei 
mindestens 44.1khz Samplerate. Es gibt sogar Leute die glauben mehr zu 
brauchen.

Das kann man aber nicht in einen Mikrcontroller integrieren weil dessen 
Herstellungsprozess auf digitale Logic optimiert ist. Das sind die 
ueblichen 12-14Bit das maximum und selbst da musst du schon sehr 
aufpassen das dir der laufende Digitalteil nicht stoerungen in den 
Analogteil rueberkoppelt.
Wer das nicht glaubt muss nur mal die AD oder DA-Wandler bei den 
gaengigen STM32 genauer anschauen und sieht dann wie schwer sich der 
Hersteller da schon tut.

Wenn du dagegen sowas mit einem externen Wandler aufbaust duerfte es 
etwa 10x einfacher sein als in einem Controller. Trotzdem werden die 
meisten hier das nicht schaffen. 16Bit Rauschabstand ist etwas anderes 
als zwei Arduinoboards zusammenstoepseln.

Olaf

von Sebastian R. (sebastian_r569)


Lesenswert?

Zwei Zahlen, die du brauchst:
- Samplingrate vom ADC
- Abtastheorem nach Shannon/Nyquist-Grenze

Ersteres ist abhängig von deinem Mikrocontroller und dessen AD-Wandler.
Zweiteres beschreibt die maximale Frequenz, die dein Audio-Signal in 
Abhängigkeit der Samplingrate haben kann.


Es gibt Controller (besonders DSPs), die problemlos mit Audio 
klarkommen. Ein 8bit-Atmel-AVR eher nicht.

Und AD-Wandler in Controllern sehen im Prinzip genau so aus, wie 
ADC-ICs. Nur halt auf dem gleichen Die.

von Falk B. (falk)


Lesenswert?

Kai S. schrieb:
> Ich bekomme, beispielsweise als Musik, div. Sinuskurven die sich
> überlagern geliefert und muss diese jetzt digitalisieren.

Naja, eine sehr akademische Beschreibung.

> Dazu werde ich, laut meiner theoretischen Überlegung, den Wert der in
> der Zeiteinheit zu hörenden Sinuskurven (mehrere oder der gemeinsamen?)
> in digitale 0101010 Bit-Schreibweise umwandeln müssen.

Dito.

> Ein IC A/D macht dies über integrierte Schaltkreise.
> Wie würde das mit einem Microcontroller aussehen?

Praktisch genau so.

> Wäre dieser
> hypothetisch genau so schnell?

Ja. Auch praktisch, wenn gleich natürlich die AD-Wandler in 
Mikrocontrollern im Allgemeinen nicht so vielfältig und schnell sind wie 
die unzähligen diskreten AD-Wandler.

> Es wird doch ziemlich schwierig sein die analoge Datenmenge in Echtzeit
> in Binärcode umzuwandeln, oder?

Nö.

> Zumindest stelle ich mir dies als sehr
> schwierig vor.

Falsche Vorstellung.

Der AD-Wandler des AVR schafft 15.000 Umwandundlungen pro Sekunde, 
spricht 15ksps (kilo samples per second) mit 10 Bit Auflösung. Wenn man 
will, geht noch mehr, dann aber mit reduzierter Auflösung. Diskrete 
AD-Wandler schaffen 100ksps- viele Msps, die richtig schnellen mehrere 
Gsps (ja, Giga samples per second, Milliarden Meßwerte pro Sekunde!).

> Für einen Ausblick, auch und vor allem in die Funktionsweise der
> Zeiteinteinheit und Umsetzung mit Bezug zu Audio-Signalen und eine
> Erklärung, die ich verstehe, bedanke ich mich im Voraus.

Die etwas größeren 32 Bit Controller haben oft einen AD-Wandler, der je 
nach Typ 10-12 Bit Auflösung bei einigen hundert ksps bis wenige Msps 
schafft. Beispielsweise der PICCOLO, der schafft ca. 4,6Msps. Damit 
kann man Audio mit z.B. 44,1kHz digitalisieren. Diverse STM32 und viele 
andere können das auch, ggf. sogar besser. Der ADC arbeitet im Großen 
und Ganzen selbstständig, d.h. die CPU hat nichts zu tun, um die 
AD-Wandlung durchzuführen und nicht viel zu tu, um die Daten abzuholen 
und zu speichern. Beim kleinen AVR muss das die CPU noch für jeden 
Meßwert selber machen, bei größeren Controllern macht das ein DMA 
Kanal selbstständig.

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


Lesenswert?

Kai S. schrieb:
> Ein IC A/D macht dies über integrierte Schaltkreise.
> Wie würde das mit einem Microcontroller aussehen?
Genau so: über einen im µC integrierten Schaltkreis.

> Wäre dieser hypothetisch genau so schnell?
So schnell wie was sollte der denn hypothetisch sein müssen?

> Es wird doch ziemlich schwierig sein die analoge Datenmenge in Echtzeit
> in Binärcode umzuwandeln, oder?
Ja, in der Tat. Da haben schon einige tausend Ingenieure viele Millionen 
Mannstunden damit zugebracht. Allerdings haben die gute Arbeit gemacht 
und du bekommst inzwischen fertige Wandler, die recht einfach anzuwenden 
sind.
Und "Echtzeit" bedeutet ja nur, dass du ein schneller sein musst als die 
höchste Frequenz, die du erfassen willst. Bei Audio reichen da 44kHz.

> Zumindest stelle ich mir dies als sehr schwierig vor.
Offenbar musst du dir mal die "Grundlagen der Signalerfassung und 
Signalverarbeitung" genauer anschauen. Dann entspannt sich die Sache ein 
wenig.

von Falk B. (falk)


Lesenswert?

Olaf schrieb:
>> integriert hatte, möglich sein, einen A/D Wandler, zum Beispiel für
>> Audio-Signale (z.B. Sound-Karte) mit einem Microcontroller aufzubauen.
>
> DAs ist theoretisch kein Problem, praktisch nicht moeglich.

Was für ein Unsinn! Natürlich geht das!

> Bei Audiosignalen legst du wert auf wenigstens 96dB Rauschabstand bei
> mindestens 44.1khz Samplerate. Es gibt sogar Leute die glauben mehr zu
> brauchen.

Nö. Du hast den CD-Standard im Kopf. Kann man machen, ist aber nicht 
zwingend. Man kann eine allgemeine Soundkarte auch mit 10-14 Bit bauen, 
auch wenn die aktuell üblichen in PCs eher 16 Bit und mehr haben.

von Olaf (Gast)


Lesenswert?

> Nö. Du hast den CD-Standard im Kopf. Kann man machen, ist aber nicht
> zwingend. Man kann eine allgemeine Soundkarte auch mit 10-14 Bit bauen,

Da hast du recht. Wenn damit zufrieden ist wird vieles einfach. Und
wenn man sich den Dynamikumfang heutige Musik so anschaut reichen 
vermutlich
sogar 8Bit, aber trotzdem wenn man Audio liesst hat man erst immer so
das gefuehl das es 16Bit sein sollten. :-)


> Mikrocontrollern im Allgemeinen nicht so vielfältig und schnell sind wie
> die unzähligen diskreten AD-Wandler.

Es gibt einen Mikrocontroller der hat einen 80Msp AD-Wandler. 
Geschwindigkeit ist nicht das Problem. Rauschabstand ist es. Oder 
vielleicht auch linearitaet.
Und natuerlich Stoerungen aus anderen Teilen. Es gibt ja Controller wo 
du den Core fuer die Wandlung besser anhalten solltest wenn das letzte 
Bit im AD nicht wackeln soll.

Olaf

von Kai S. (freewarehookie)


Lesenswert?

1000 Dank!

1000 Dank für den Input, die weiterführenden Infos und die Erklärungen.
Ich habe jetzt eine Menge nachzulesen.
Die Erklärungen sind teilweise echt top!


Beste Grüße,

 Freewarehookie

von Max M. (Gast)


Lesenswert?


von Wolfgang (Gast)


Lesenswert?

Kai S. schrieb:
> Wie würde das mit einem Microcontroller aussehen? Wäre dieser
> hypothetisch genau so schnell?
>
> Es wird doch ziemlich schwierig sein die analoge Datenmenge in Echtzeit
> in Binärcode umzuwandeln, oder? Zumindest stelle ich mir dies als sehr
> schwierig vor.

Dann guck dir z.B. mal das Teensy4.0 Board. Das macht das nebenbei auf 
zwei Kanälen.
https://www.pjrc.com/teensy/td_libs_Audio.html

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?


von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Nebenbei erwähnt:

Es gibt von sehr vielen µC Hersteller, Evalboards sogar mit fertigen 
Audioapplikationen zu kaufen.

Inkl. FFT usw.

Hast du dich den schon für einen speziellen µC Entschieden, oder ist 
noch alles offen?

: Bearbeitet durch User
von NXP (Gast)


Lesenswert?

> Es gibt einen Mikrocontroller der hat einen 80Msp AD-Wandler.
> Geschwindigkeit ist nicht das Problem. Rauschabstand ist es.

Kann ja nicht so das grosse Problem sein.
Besagter AD wandelt mit 12 Bit.

> Hast du dich den schon für einen speziellen µC Entschieden, oder ist
> noch alles offen?

Der gezeigten Kompetenz folgend, vermute ich, dass er auf ino endet.
Es handelt sich dabei nicht um die Suppenwuerze.

von Kai S. (freewarehookie)


Lesenswert?

Patrick L. schrieb:
> Nebenbei erwähnt:
>
> Es gibt von sehr vielen µC Hersteller, Evalboards sogar mit fertigen
> Audioapplikationen zu kaufen.
>
> Inkl. FFT usw.
>
> Hast du dich den schon für einen speziellen µC Entschieden, oder ist
> noch alles offen?

Nee, ich will das eigentlich nur generell wissen, um zu lernen.
Die Umsetzung folgt später; die Artikel speichere ich sorgfältig, mit 
allen Links und Inhalten, designe mir dann PCBs (was ich eh muss, in 
China ist das recht günstig) und beginne dann zu experimentieren, um mir 
irgendwann dann mal eine Anwendung dafür zu bauen wenn ich es brauche.


Beste Grüße,

  Freewarehookie

von Kai S. (freewarehookie)


Lesenswert?

NXP schrieb:
>> Es gibt einen Mikrocontroller der hat einen 80Msp AD-Wandler.
>> Geschwindigkeit ist nicht das Problem. Rauschabstand ist es.
>
> Kann ja nicht so das grosse Problem sein.
> Besagter AD wandelt mit 12 Bit.
>
>> Hast du dich den schon für einen speziellen µC Entschieden, oder ist
>> noch alles offen?
>
> Der gezeigten Kompetenz folgend, vermute ich, dass er auf ino endet.
> Es handelt sich dabei nicht um die Suppenwuerze.


Nenee, das geht weit über Ino hinaus!!!

BG

von MAX (Gast)


Lesenswert?

hallo leute ich arbeite ean einem project und ich muss pitch,roll, YAW 
winkelbestimmen ich habe soweit alles bekommen außer YAW da ich die 
verzögerungszeit T zwischen zwei messungen nicht auslesen kann , es 
sollte von  dem Timer tick ausgelesen wird könnte ihr mich damit 
weiterhelfen. das sensor ist soweit kalbrieriert durch 1000 messungen 
20ms pause zwischen 2 messungen und  funktionert einwandfrei problem nur 
die delay time (verzögerungszeit) auszulesen

            roll = atan2(accy,accz) * RAD_TO_DEG;
            pitch = atan2(accx,accz) * RAD_TO_DEG;
            gyroZ = (rawgyroz - gyrobiasz) / 131.0;
            yaw += (-gyroZ*T);

#pragma vector=WDT_VECTOR
__interrupt void tick(void)
{
     if(tick_0_5_ms > 0)
     {

         tick_0_5_ms++;

         if(tick_0_5_ms == 0)
         {
              LPM0_EXIT;
         }
     }
}

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.