Forum: Mikrocontroller und Digitale Elektronik ADC Dynamikumfang 46dB mit Atmega?


von Thomas H. (darth_fader)


Lesenswert?

Hallöchen,

nachdem ich schon einige "analoge" Spitzenpegelmessgeräte mit LM3915 und 
LM3916 gebaut habe bin ich nun am Pläne schmieden, wie man das ganze 
digital mit einem Mikrocontroller lösen könnte, damit es etwas 
günstiger, kompakter und vorallem auch programmierbar wird.

Ich möchte 50 - 60 Leds pro Kanal ansteuern, wobei die Auflösung im 
Bereich 0dB bei ~0,6dB liegen soll und gegen unterem Ende des 
Messbereichs dann gröber wird. Es sollen Pegel von etwa +6dB bis -40dB 
angezeigt werden.


Meine Frage ist nun, ob der standart 10Bit ADC so einen Dynamikumfang 
überhaupt zuverlässig abdecken kann? Das Eingangssignal würde ich 
natürlich extern Spitzenwertgleichrichten und verstärken, sodass bei 
maximalem Pegel 5V am ADC anliegen würden. Wenn die untersten Led's pro 
Schritt 2dB anzeigen, sollte es ja theoretisch von der ADC Auflösung 
geraaaade so langen. Aber wie sieht es denn praktisch aus? (Offsetfehler 
usw.)

Danke und Gruß,
Thomas


Achja, ich beschäftige mich noch nicht so lange mit Mikrocontrollern und 
hoffe mal, meine Frage ist nicht allzu doof :)

von Purzel H. (hacky)


Lesenswert?

Aeh. Ja. Der dynamische Bereich ist 1024:1, macht 20*log(1024)= 60dB.

von Helmut L. (helmi1)


Lesenswert?

Jedes ADC Bit bringt dir 6dB Dynamik. Also bei 10Bit hast du rund 60dB.
Wenn du das ganze sauber aufbaust sollte das auch nutzbar sein.

von Thomas H. (darth_fader)


Lesenswert?

Danke erstmal für eure Antworten! Aber ich fürchte versteh das nicht so 
ganz. Sorry Leute, falls ich jetzt nen fetten Denkfehler habe, aber, 
dass der ADC insgesamt 60dB Dynamik schafft ist mir ja schon klar,(meine 
Frage war vielleicht etwas blöd gestellt) nur die Einteilung des 
Messbereichs ist ja linear in 2^10 gleiche Schritte oder?

Also bei 5V AREF / 1024 Schritte = 4,9mV pro Schritt.

Jetzt soll meine Skala ja aber logarithmisch sein. Die unterste Led 
beginnt also bei 5V - 46db = 25mV zu leuchten. Wenn im unteren Bereich 
2dB pro Led angezeigt werden sollen liegt die Schwelle für die nächste 
Led also bei 31,5mV was ja gerade so einem "ADC-Schritt" entsprechen 
würde.

von B e r n d W. (smiley46)


Lesenswert?

Hallo Thomas

Pegel  Digits  dB/Digit
-----------------------
+ 6dB   1023     0,0085
  0dB    512     0,017
- 6dB    256     0,034
-12dB    128     0,068
-18dB     64     0,135
-24dB     32     0,27
-30dB     16     0,53
-36dB      8     1,0
-42dB      4     1,9
-48dB      2     3,5
-54dB      1     6,0

Ich hab versucht, das Ganze übersichtlich darzustellen. Wie Du siehst, 
sind die Auflösungen bis -42dB denkbar. Da der Fehler aber ~2 Digits 
beträgt, kann man sich auf die untersten 2 LEDs nicht mehr verlassen. 
Ich geh davon aus, daß das schon auch ein wenig Show sein soll. Dann 
wäre das nämlich egal, denn gut aussehen wird das trotzdem.

Wie kalibrierst Du? Signalgenerator, 1kHz, mit dem Oszi auf eine 
definierte Amplitude einstellen und dann mit einem Poti auf den Sollwert 
drehen?

Es gibt noch eine Möglichkeit, den Dynamikbereich zu erweitern. Man kann 
einem zweiten ADC-Eingang ein nochmals ein um Faktor 8/10 oder 16 fach 
verstärktes Signal zuführen. Sobald der feine Bereich keinen Overflow 
meldet, kann man bei kleineren Signalen nochmals auf die volle Auflösung 
zurückgreifen. Das entspräche in etwa einem manuellen PGA (programable 
gain amplifier).

Dann benötigst Du aber einen Spitzenwertgleichrichter, der bis <= 50 
µVolt funktioniert und einen Dynamikumfang von > 10000 verarbeiten kann. 
Falls der Gleichrichter genau das macht, wozu er geschaffen wurde, macht 
er das dann halt auch auch mit Rauschen und jeder dahergelaufenen 
Störung.

Gruß, Bernd

von user (Gast)


Lesenswert?

einige AtMegas haben noch einen Programmable Gain Amplifier vor dem ADC, 
somit kannst du bei kleinen Spannungen die Verstärkung erhöhen, und 
somit bei kleinen Spannungen die Auflösung erhöhen (20dB und 46dB bei 
AtMega32)

von B e r n d W. (smiley46)


Lesenswert?

Ich schon wieder

>Jetzt soll meine Skala ja aber logarithmisch sein
Du erstellst entweder eine Tabelle mit 50 Elementen. In jedem Eintrag 
der Tabelle steht die Schwelle in Digits für die entsprechende LED.

Oder Du benötigst eine mathematische Funktion (Parabel?), welche Dir die 
Anzahl der leuchtenden LEDs berechnet. Die Funktion kannst Du zuvor in 
Excel ausprobieren. Eventuell findet dann Excel schon eine entsprechende 
Kurve in der Form: y = a0 + a1*x + a2*x^2 + a3*x^3 ...

Einen richtigen Logarithmus würde ich nicht verwenden, denn dieser 
benötigt viel Speicher und Rechenleistung.

Bernd

von Michael A. (Gast)


Lesenswert?

Eine andere Möglichkeit wäre, einen Analogrechner zu verwenden. Für den 
Logarithmus wäre das also einfach ein OP mit einem Transistor in der 
Gegenkopplung. Dann reichen die 10-Bit des ADC locker für den 
Dynamikbereich aus.

Gruß
Michael

von Thomas H. (darth_fader)


Angehängte Dateien:

Lesenswert?

Sorry, dass ich mich erst jetzt zurück melden kann. Vielen Dank 
jedenfalls für die Ansätze (Analogrechner) und Tipps!

Nachdem ich mir jetzt mal noch ein paar Gedanken gemacht habe, habe ich 
beschlossen das Ganze erstmal nur mit 2x40 Leds von +6dB bis -30dB zu 
bauen. Immerhin habe ich mit dem ADC noch nie was gemacht und das wird 
Softwaremäßig dann schon schwer genug für mich werden.

B e r n d W. schrieb:
> Du erstellst entweder eine Tabelle mit 50 Elementen. In jedem Eintrag
> der Tabelle steht die Schwelle in Digits für die entsprechende LED.

Das mit der Tabelle hatte ich mir auch schon überlegt. Sollte sich ja 
auch in Assembler (denn mit C hab ich bis jetzt noch gar nichts am Hut) 
relativ einfach machen lassen, indem man das Z-Register verwendet. Oder? 
Muss mir die Tage dann mal noch detailierte Gedanken über das Programm 
machen.


Die Ansteuerung/Multiplexen der Leds dachte ich mir wie im angehängten 
Schaltplan. Ist das denn OK so (kann ich das mit der Kollektorschaltung 
überhaupt so machen?) oder wie könnte man das effektiver lösen? Auch in 
bezug auf die Software.

Das hat jetzt zwar nicht mehr viel mit dem ursprünglichen Thema zu tun, 
aber ich hoffe trotzdem noch auf ein paar gute Antworten :)


Danke und Gruß,
Thomas

von Ulrich (Gast)


Lesenswert?

Die Schaltung für die LEDs ist reichlich kompliziert. Wenn die LED Typen 
keine schlimmen Funzeln sind, die wirklich 20 mA brauchen um sinnvoll zu 
leuchten, kann man die LEDs an der einen Seite auch direkt vom AVR aus 
ansteuern. An die Seite gehören dann auch die Widerstände.

Wenn immer nur einige wenige LEDs gleichzeitig leuchten sollten (Punkt 
statt Band) kann man auch Charlipixling nehmen. Das geht dann auch ganz 
ohne Transistoren, nur mit mehr Widerständen.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

> Wenn immer nur einige wenige LEDs gleichzeitig leuchten sollten (Punkt
> statt Band) kann man auch Charlipixling nehmen. Das geht dann auch ganz
> ohne Transistoren, nur mit mehr Widerständen.

Bei der Anzahl an LEDs? Die LEDs müssen bei einer 8x10-Matrix mit 
10-fachem Strom angesteuert werden, bei superhellen LEDs, die normal mit 
5mA auskommen, also mit 50mA * 8 LEDs macht satte 400mA pro 8er 
LED-Block,wenn alle LEDs leuchten. Durch das Multiplexen braucht die 
Gesamtschaltung also im schlimmsten Fall 400mA.

von Icke (Gast)


Lesenswert?

Bei Punktanzeige kann man auch statisch ansteuern.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wer will Punktanzeige auf ´nem Bargrafen für Musik? Wenn schon, dann als 
Spitzenpegel (Peak hold) zuzüglich zur VU-Anzeige. Nichts ärgert mehr, 
als am falschen Ende gespart zu haben und die LEDs funzeln dann so hin 
oder werden mit zunehmender Bandlänge immer dunkler... Alternative zu 
Einzeltransen wäre da noch der alte Bekannte ULN2803.

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.