PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : A/D Wandler mit mehr als 10 Bit gesucht mit 10bis16 Ports



Steffen44
10.01.2007, 16:23
Hallo

wie ich heute feststellen mußte reichen mir 10 Bit auflösung nicht aus. Bisher habe ich den ADC vom ATMEGA32 benutzt wo mein Meßberreich nun aber so groß ist das 10 Bit zu ungenau sind.

Frage wie benutzt man externe A / D Wandler und warum gibt es da Serielle und Parallele ? Bedeutet Seriel das diese Serielle Schnittstelle haben und wenn dem so ist kann ich dann die Serielle Schnittstelle irgendwie mit dem Atmega32 verarbeiten ?

Ich suche einen A / D mit 10 bis 16 Ports meine Analogspannung beträgt momentan 0 bis 5 Volt.

Wo kann ich Schaltpläne darüber finden wie man einen exterenen A/D Wandler am ATMEGA anschließt und benutzt ?

Danke für eure Hilfe

Gruß
Steffen

geronet
10.01.2007, 16:34
Ich verwende z.B. den MAX1148 mit SPI-Interface, im Datenblatt steht ein Beispiel was man auf AVR adaptieren kann.

SPI oder I²C (TWI) ist z.B. ein serieller Anschluss, wo man die Bits hintereinander auf einer Leitung hin-und herschiebt. Ein Paralleler Anschluss braucht meist 4-8 Ports am Mikrocontroller und da werden die Daten gleichzeitig über mehrere Leitungen übertragen. (vergl. z.B. Modem (seriell) mit Drucker (parallel).

Grüsse, Stefan

Steffen44
10.01.2007, 17:01
danke geronet auf seite 12 vom Datenblatt scheint ein µController anschluß hinterlegt zu sein.
http://datasheets.maxim-ic.com/en/ds/MAX1146-MAX1149.pdf

jetzt frage ich mich selbst wenn ich es mit dem atmega32 anschließen könnte wie programmiert man dann einen externen A/D Wandler ?

Zum I²C Bus habe ich im Datenblatt rein gar nichts gefunden. Wenn dann bräuchte ich ja die Port Adresse um diesen auch ansprechen zu können.


Mal eine andere Frage wenn ich ohne µController arbeiten würde und mir die Daten aus dem A/D Wandler direkt auf die Serielle Schnittstelle auf dem PC schicken würde geht sowas ?

Alles was ich vorhabe ist ca. 10 Analogsignale zu verarbeiten und dieser auf dem PC zu visualisieren aber wie ?

Mosi
10.01.2007, 17:01
Hallo,

durch oversampling kannst du die Auflösung der Eingänge fast beliebig erhöhen.
Guckst du hier:
http://www.atmel.com/dyn/products/app_notes.asp?family_id=607

dort das Dokument: AVR121: Enhancing ADC resolution by oversampling
runterladen.
Sehr hilfreich!

Gruß, Rene

Steffen44
10.01.2007, 17:11
ohh man oversampling erscheint mir als zu gewagt für meine Kenntnisse da blicke ich gar nicht mehr durch ich glaube einen externen A/D Wandler anzubinden sollte ich irgendwie hinbekommen. Obwohl mir das bis jetzt auch fast unmöglich erscheint wo alles so schlecht und in englisch beschrieben ist.

Zu Oversampling habe ich noch ein Thema gefunden : https://www.roboternetz.de/phpBB2/viewtopic.php?t=17219

Alles sehr kompliziert auf den ersten Blick aber anscheind wird nur durch ein Filter der Referenzspannung die erhöhte Auflösung errreicht.

Kennt jemand irgendwie eine Bastelseite wo ein externer A / D Wandler mit dem Atmel verbunden wurde und programmiert ?

Gruß
Steffen

Mosi
10.01.2007, 17:23
Das Forum Thema ist ziemlich verwirrend, der Artikel aber klar und eindeutig:
Durch Verrauschen der Quelle oder der Referenzspannung kann man durch entsprechende Mittelwertbildung der Messwerte die Auflösung beliebig verbessern. Alles nur eine Frage der Software. Nachteil ist die verringerte Samplingfrequenz.

Gruß, Rene

Steffen44
10.01.2007, 17:28
um auf die software zurückzukommen. Unter Bascom ist mir soetwas nicht bekannt und C und C++ kann ich nicht oder geht es doch mit Bascom ?

Mosi
10.01.2007, 17:42
klar gehts mit BASCOM, gleitende Summenbildung über 2hoch n Stellen. Danach shift-right um diese n Stellen, fertig!

Steffen44
10.01.2007, 17:56
entschuldige wenn ich wieder fragen muß aber ich kann mir darunter nichts vorstellen wenn ich nun über Bascom mein Get ADC ... für den Port auslöse dann bekomme ich den Wert 0 ... 1023 wie und wo kann ich da über 2hoch n Stellen arbeiten ?

Mosi
10.01.2007, 19:17
Das Prinzip ist:
Es wir die Summe von 2,4,8,16 oder weiter aufeinanderfolgenden ADC-Werten gebildet. Danach durch 2,4,8,16, usw. wieder geteilt. (das geht komfortabel und sehr schnell mit dem Befehl shift, right) Der älteste Messwert fällt dann raus, ein neuer kommt dazu und weiter gehts.

Hier ein Beispiel aus dem Buch Bascom für AVR´s von Kühnel.

Nur die Zeile: Mean_temp = Mean_temp \ Bl

sollte ersetzt werden durch

Shift Mean_temp , Right , Bl

geht aber auch mit normaler Division

Gruß, Rene

Steffen44
10.01.2007, 20:46
wow das ist ja ein File da werde ich ne weile brauchen um durchzublicken so wie ich das sehe ist es für eine andere Anwendung geschrieben der Analogport wird dort auf den ersten Blick nicht einbezogen aber mal sehen ob ich was drauß machen kann.

Dank dir Mosi für deine Hilfe

Gruß
Steffen

Mosi
10.01.2007, 21:18
Ist eigentlich nicht so schwer:
Bl ist die Anzahl der Stützstellen, je nach gewünschter Auflösung aus dem Atmel-Dokument entnehmen,
die Random Funktion soll in diesem Beispiel zufällige Messwerte liefern, natürlich komplett weglassen, dafür die Zeile

Value = Random(&H0f)

ändern in

value= Get ADC

Initialisierungen und Deklarationen nicht vergessen, schon läufts!

Wenn du das Programmfragment nochmal in eine Schleife mit den gewünschten ADC-Kanälen legst, hast du als Ergebnis ein Feld mit Analogwerten genauer als 10bit.
Habe übrigens oben einen Fehler gemacht: Wenn man durch die Anzahl der Stützstellen teilt, hat man ja nur den Mittelwert ohne höhere Auflösung,
man muss bei 4Stellen eine Stelle nach rechts schieben, bei 16 - 2 Stellen, bei 64- 3Stellen usw. so erhält man dann natürlich die hohen Auflösungen.
Einziger Hardwareaufwand ist das Bereitstellen eines Rauschens, das soll auch mit dem AVR selbst gehen, bin aber im Moment überfragt...
Gruß, Rene

Mosi
11.01.2007, 12:29
Ich nochmal,

es geht auch wesentlich einfacher, eine gleitende Mittelwertbildung ist gar nicht notwendig.
Einfach in einer Schleife, die je nach gewünschter Auflösung entsprechend viele Male durchlaufen wird, also z.B. bei 12bit 16Mal, die Summe aus den ADC-Werten bilden, am Ende durch 4 teilen, bzw. shift,right,2 (das ist das gleiche, geht aber viel schneller) fertig! Das Ergebnis hat eine 4fach höhere Auflösung, also 2bit mehr

Gruß, Rene

munkl
11.01.2007, 12:46
Hi zusammen,

es gibt sonst auch PIC mit mehr bit auflösung. ich weis die meisten hier haben ein problem mit pics aber man könnte auch ein i2c device selber entwickeln. zB PIC18F2423 ist so einer. ca 12 AD-Inputs mit 12 Bit auflösung so viel ich weis.

mfG munkl

Steffen44
11.01.2007, 15:25
@munkel
naja einen einfachen Sprut ICSP Brenner habe ich mir schon gebaut aber ich habe noch nie mit Microchip² Produkten gearbeitet und wüßte nichteinmal welche Software ich benötige.


@mosi

cool danke das versuche ich morgen einmal. Was ich mir ausgerechnet habe ist das mir 12 Bit eigentlich schon reichen würden je mehr desso besser aber 12 Bit wäre auch ok.

Da teste ich morgen mal dein Vorschlag und melde mich dann wenn ich es hinbekommen habe.


Gruß
Steffen

munkl
12.01.2007, 06:35
hm also eigentlich ist ein PIC programieren so einfach wie ein atmel auch. was du brauchst ist ein kompiler: für C würd ich den C18 vorschlagen, da CCSC kostet
und dann brauchst du noch die brennsoftware von sprut.
ja die sprut brenner find ich auch klasse :) ich hab den 5er und den 8er im einsatz ;)

shaun
12.01.2007, 08:40
Bei 12 bit musst Du, wenn Du diese auch nutzen willst, bereits ein geeignetes Layout und entsprechende Schaltungsauslegung berücksichtigen. Sonst bleiben von den Bits wieder nur 8-10 übrig.

Blackbird
12.01.2007, 11:59
Der ADuC7026-ARM-Controller von Analog Devices hat einen 12bit-10Kanal-ADU intern.

Blackbird

Steffen44
12.01.2007, 13:26
@shaun

ich habe das RN-Control.
Meinst du ich muß es modifizieren um mit 12 Bit arbeiten zu können ?

https://www.roboternetz.de/wissen/index.php/RN-Control

Ich wollte mir wegen der zuwenigen ADC Ports dann den ATMEGA256 holen der Hat glaube 16 ADC´s. Aber das sind alles fertige Boards wo man doch im normalfall nichts mehr machen muß oder täusche ich mich ?



@Blackbird

der ADUC7026 ist beindruckent.

Serial Interface Ports (UART, SPI, and dual I2C) und 12-Channel, 1 MSPS, 12-Bit ADC. Den muß ich mir genauer anschauen ich hoffe das es den auch irgendwo zu kaufen gibt.

Wenn man einen Max232 anbaut könnte er dann sicher über RS232 kommunitieren. Der wäre spitze :-) Oder ich versuche über I2C anzubinden das erscheint mir einfacher.


Gruß
Steffen

Steffen44
12.01.2007, 14:35
mhh bis jetzt konnte ich nur Preise von über 300€ für den ADUC7026 finden und erhältlich ist er sogut wie nirgends.


So ich habe nun mal versucht das mit diesem 12 Bit hinzubekommen aber leider fehlen mir die Kenntnisse um es zu schaffen.

Ich habe mein normales Programm erstmal mit

do

loop until endwert = 16

ausgestatt dann hab ich erstmal eine Schleife die 16 mal zählt nur wie bekomme ich nun die Summe aus der sich in der Schleife befindlichen Meßwerte ?

Hier ist mein Quellcode :



$regfile = "m32def.dat"
$crystal = 16000000 'Quarzfrequenz
$baud = 38400

Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung


Dim Endwert As Single

Endwert = 0

Do



Dim Volt_a As Single
Dim Volt_b As Single
Dim Volt_c As Single
Dim Volt_d As Single
Dim Volt_e As Single
Dim Volt_f As Single
Dim Volt_g As Single
Dim Volt_h As Single



Const Ref = 5 / 1023 'Für Berechnung


Dim A As Word
Dim B As Word
Dim C As Word
Dim D As Word
Dim E As Word
Dim F As Word
Dim G As Word
Dim H As Word


Config Porta = Input ' Port A als Anlogeingang konfigurieren

Start Adc '
A = Getadc(0)
B = Getadc(1)
C = Getadc(2)
D = Getadc(3)
E = Getadc(4)
F = Getadc(5)
G = Getadc(6)
H = Getadc(7)



'Bit Auflösung in Volt umrechnen
Volt_a = A * Ref
Volt_b = B * Ref
Volt_c = C * Ref
Volt_d = D * Ref
Volt_e = E * Ref
Volt_f = F * Ref
Volt_g = G * Ref
Volt_h = H * Ref

' Varible als String mit 6 Zeichen definieren
Dim Volt_a_2kommastellen As String * 5
Dim Volt_b_2kommastellen As String * 5
Dim Volt_c_2kommastellen As String * 5
Dim Volt_d_2kommastellen As String * 5
Dim Volt_e_2kommastellen As String * 5
Dim Volt_f_2kommastellen As String * 5
Dim Volt_g_2kommastellen As String * 5
Dim Volt_h_2kommastellen As String * 5


'STR() convert a numeric value into a string
Volt_a_2kommastellen = Str(volt_a)
Volt_b_2kommastellen = Str(volt_b)
Volt_c_2kommastellen = Str(volt_c)
Volt_d_2kommastellen = Str(volt_d)
Volt_e_2kommastellen = Str(volt_e)
Volt_f_2kommastellen = Str(volt_f)
Volt_g_2kommastellen = Str(volt_g)
Volt_h_2kommastellen = Str(volt_h)

' Fusing minmize to 2 decimal places
Volt_a_2kommastellen = Fusing(volt_a , "#.###")
Volt_b_2kommastellen = Fusing(volt_b , "#.###")
Volt_c_2kommastellen = Fusing(volt_c , "#.###")
Volt_d_2kommastellen = Fusing(volt_d , "#.###")
Volt_e_2kommastellen = Fusing(volt_e , "#.###")
Volt_f_2kommastellen = Fusing(volt_f , "#.###")
Volt_g_2kommastellen = Fusing(volt_g , "#.###")
Volt_h_2kommastellen = Fusing(volt_h , "#.###")



Print ";" ; Volt_a_2kommastellen ; ";" ; Volt_b_2kommastellen ; ";" ; Volt_c_2kommastellen ; ";" ; Volt_d_2kommastellen ; ";" ; Volt_e_2kommastellen ; ";" ; Volt_f_2kommastellen ; ";" ; Volt_g_2kommastellen ; ";" ; Volt_h_2kommastellen ; ";" ; "0.00" ; ";" 'Ausgabe aller 8 Analogausgänge + 1x Dummy da der letzte Wert im Excel durch den Zeilenumbruch nicht bearbeitet wird




Waitms 120 ' 120ms bis zur nächsten aktualisierung - Zu schnelle Aktualisierung -> Controller hängt sich auf


Loop Until Endwert = 16 'ende der Schleife



Das gesamte Programm macht nichts weiter als wie die ADC Werte aller 8 Ports meines ATMEGA 32 einzulesen und diese auf RS232 auszugeben und das leider nur in 8 Bit :-(

Gruß
Steffen

shaun
12.01.2007, 21:14
2^n-faches Oversampling reicht nicht, damit gewinnst Du nur ein halbes Bit. Da Du durch Überabtastung die Energie des Quantisierungsrauschens und nicht seine Amplitude verringerst, musst Du 2^2n-mal überabtasten!
Ob Du mit dem genannten Board was erreichst kann ich Dir nicht sagen, wenn kein systematischer Fehler eine Tendenz in die Messwerte bringt, so dass Du die Stoachastik nicht für Dich arbeiten lassen kannst, sollte es gehen.
Ich meinte die Schaltungsauslegung für einen externen ADU-Chip.
Der genannte Controller mit allem drum und drin kostet als komplettes Eval-Kit um die 80 Euro netto, für 300 bekommt man ein Devkit mit Echtzeitsimulator oder sowas.

Mosi
13.01.2007, 14:34
Hallo Steffen,

dein Code ist etwas unübersichtlich und nicht sehr effektiv.

Ich würde es etwa so machen: (bitte nicht auf die Syntax achten)

For i = 0 To 7 (Schleife für 8 ADC-Eingänge)

Summe(i) = 0 (löschen)

For n = 0 to 15 (Schleife für 16faches oversampling)

Summe(i) =Summe(i)+ GetADC(i)

next n

Zwölfbitwert(i)=Summe(i)/4 (oder "shift right 2")

next (I)


Im Feld "Zwölfbitwert(i)" hast du dann die Ergebnisse aller Eingänge mit 12bit Auflösung, also 4096 Schritten,

alles weiter hängt davon ab, was du damit machen willst.

Gruß, Rene

Steffen44
14.01.2007, 13:50
danke rene,

ich muß sagen trotz deiner enormen anstrengen mir zu helfen fehlen mir einfach zu viele Kenntnisse um es hinzubekommen. Ich habe es jetzt mal versucht in eine Programm umzusetzen dieses wurde auch fehlerfrei kompiliert aber es kommt irgendwie nur mist dabei raus. Ich habe den Eindruck das er den analogport nun irgendwie gar nicht mehr berücksichtigt.

Auf der RS232 spuckt er mir nun periodisch dies aus :

565
65
65
65
65
65
65
6565


Hier ist der Code den ich versucht habe


' ------------- Hier die üblichen RN-Control Anweisungen --------------
$regfile = "m32def.dat"
$crystal = 16000000 'Quarzfrequenz
$baud = 38400


Config Adc = Single , Prescaler = Auto

Config Porta = Input '
' Port A als Anlogeingang konfigurieren


Start Adc

Dim Summe(64) As Byte
Dim I As Single
Dim N As Single
Dim Zwoelfbitwert(64) As Byte


For I = 0 To 7 'Schleife für 8 ADC-Eingänge
Summe(i) = 0 ' löschen
For N = 0 To 15 ' Schleife für 16faches oversampling
Summe(i) = Summe(i) + Getadc(i)
Next N
Print Zwoelfbitwert(i) = Summe(i) / 4

Waitms 500
Next I


Vermutlich sind die Datentypen oder die Array Zuweisungen falsch.

Gruß
Steffen

Mosi
14.01.2007, 14:20
Sowohl Summe als auch Zwölfbitwert müssen(!!!) schon Integertypen oder Word sein, Byte geht nur bis 256 Werte. Du brauchst aber min 16000!
Dafür kannst du für N und I aber Byte nehmen.

Lasse zum Testen die äußere Schleife weg, aslo nehme nur ein einzigen ADC Eingang.
Gruß, Rene

Mosi
14.01.2007, 14:28
Ich nochmal,

wenn ich mich recht entsinne geht bei Bascom das hier nicht:

Print Zwoelfbitwert(i) = Summe(i) / 4

Du musst erst
"Zwoelfbitwert(i) = Summe(i) / 4 " rechnen lassen dann erst:
"print Zwoelfbitwert(i)"

Aber lasse erstmal die (i) weg, und arbeite nur mit einem ADC,
Gruß, Rene

Steffen44
19.01.2007, 08:02
so ich habe es nochmal mit deinen Verbesserungsvorschlägen probiert aber es liefert leider keine Anzeige auf der RS232.

Ich habe nun selber mal versucht ein Programm zu schreiben welches aus 16 Messwerten die Summe errechnet und dann durch 16 dividiert aber ob das was bringt ist mir ein Rätsel.

Jedenfalls sieht es jetzt so aus :



' ------------- Hier die üblichen RN-Control Anweisungen --------------
$regfile = "m32def.dat"
$crystal = 16000000 'Quarzfrequenz
$baud = 38400


Config Adc = Single , Prescaler = Auto

Config Porta = Input '
' Port A als Anlogeingang konfigurieren


Start Adc

Dim Summe As Word
Dim I As Word
Dim N As Word
Dim Summegeteilt As Word
Dim A As Word






A = Getadc(0)
Summe = 0


For I = 0 To 15

Summe = Summe + A

If I = 15 Then

Summegeteilt = Summe / 16
Print "Die Summe wäre: " ; Summegeteilt


End If
Waitms 100
'Print Summe


Next I


Ist das vom Prinzip her richtig ?

Gruß
Steffen

Mosi
20.01.2007, 12:29
Hallo, das hier ist getestet und funktioniert einwandfrei:

Dim I As Byte
Dim Summe As Word
Dim Zwoelfbit As Word
Dim Zehnbit As Word

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Start Adc

Do
Summe = 0

For I = 0 To 15
Zehnbit = Getadc(0)
Summe = Summe + Zehnbit
Next

Zwoelfbit = Summe / 4


Print Zwoelfbit

Loop

Steffen44
22.01.2007, 13:11
Hallo Mosi,

danke dir für die enorme Hilfe. Nun habe ich noch eine Verständnisfrage zur Summe die du durch 4 teilst.

Wenn ich nur den reinen Mittelwert haben möchte dann teile ich wieder durch 16 das ist klar und wenn man dann durch 4 teilt dann habe ich wohl die 4096 Werte die 12 Bit entsprechen ?

So ganz mit dem Teilungsfaktor habe ich das noch nicht verstanden.

Bis jetzt läuft das Programm einwandfrei. Mit den Arrays bin ich zwar nicht klar gekommen aber es geht auch ohne Arrays ganz gut.

Gruß
Steffen

shaun
22.01.2007, 14:16
Nein, dann hast Du einen mit vier multiplizierten 10bit-Wert, die letzten beiden bits sind Augenwischerei, selbst bei vorausgesetztem stochastischen Eingangssignal wirst Du nie 12bit-Monotonie hinbekommen.

Steffen44
22.01.2007, 15:04
@shaun

meinst du ich hätte mir die Arbeit sparen können ?

Das ich eine Mittelwertbildung habe die mir zumindest ein paar Schwankungen kompensiert sehe ich ja ein. Ich denke das hilft zumindest nur ein klein wenig.

Wo es gar kein Sinn machen würde ist wenn ich einen Meßwert habe der nicht schwankt da hab ich so oder so 10 Bit.

Ich hätte ja noch die option 2 Analogeingänge gleichzeitig zu beschalten und daraus den Mittelwert zu bilden aber letztendlich vermute ich das das nur Augenwischerei ist und nichts bringt.

Nun ja momentan habe ich das ganze Prinzip des hier vorgestellten Codes selber noch nicht 100% verstanden.

Vieleicht kennt ja doch jemand eine eindeutige Antwort ... den Sinn und Nutzen hätte ich nun schon noch irgendwie feststellen wollen.


Gruß
Steffen

shaun
22.01.2007, 15:09
Der Sinn der Mittelwertbildung liegt entweder darin, den Mittelwert eines gestörten Signals zu erhalten (dann aber n bit -> n bit) oder aber aus einem als stochastisch angenommenen bzw sogar absichtlich verrauschtem Signal durch Mittelung die Rausch*leistung* zu eliminieren und weitere Bits zu gewinnen (Du hilfst mit der "zufälligen" Verteilung, die das Rauschen ausmacht, dem Anteil Deiner Messspannung über die LSB-Grenze zu "hüpfen", und zwar statistisch gesehen genau in dem Verhältnis, in dem die Spannung unter dem nächsten LSB liegt...hmja...). Dann erreichst du mit x Wandlungen eine Verbesserung um ld(sqrt(x)) bits. Mit 16 Wandlungen also ld(4)=2 bit.

Steffen44
22.01.2007, 15:21
sorry ich konnte gerade nicht den google translator
"technik-extrem -> deutsch" finden. 8-[


Kannst du das in einfachen Worten beschreiben so tief in der Materie stecke ich nicht um es mit deinen Worten zu verstehen.

Mosi
22.01.2007, 15:31
Hallo Mosi,



Wenn ich nur den reinen Mittelwert haben möchte dann teile ich wieder durch 16 das ist klar und wenn man dann durch 4 teilt dann habe ich wohl die 4096 Werte die 12 Bit entsprechen ?

Gruß
Steffen

Das ist so korrekt, setzt aber vorraus, dass während eines Messzyklus, also während dieser 16 Messungen das Eingangssignal gleichmässig 16 Zwischenwerte mit der Abweichung von mindestens der Auflösungsgrenze von 10bit hat, also 1/1024tel der maximalen Eingangsspannung. Bei vielen Messaufgaben wird das von allein so sein, das Rauschen von OPV´s wird da z.B. ganze Arbeit leisten.
Wenn das nicht der Fall ist, z.B. bei der direkten Messung von Niederohmigen Akkuzellen, inklusive nochmaliger Glättung, sowie HF-mässig abgeschirmt und ohne jegliche Elektronik und kürzeste Leitungswege und keine Brummschleifen usw. dann hat man allerdings schlechte Karten. Dann hilft eine z.B.Sägezahn-Spannung mit min.1/1024tel der zu messenden Eingangsspannung auf die Referenzspannung summiert.

Eigentlich reicht tatsächlich die Summe von 4 Zehnbitwerten, wenn das Eingangssignal oder die Referenzspannung eine definierte Rampe über den Messzyklus beschreibt, bei zufälligen (Rausch-)Signalen braucht man aber eine Mindestmenge an Messzyklen, um eine möglichst gleichmässige Verteilung zu erreichen. Je mehr, je besser...

Übrigens, mit Hilfe der Rampe kann man übrigens recht gut das Prinzip des Oversamplings erklären:
Angenommen du hast eine Spannung von genau 1000,2 (es geht um Relativwerte, V oder mV oder Verhältnis ist egal) dann zeigt dir dein 10bit Prozessor 1000 an, da erst bei 1000,6 der Zehnbitmesswert auf 1001 springt.
Jetzt gibts du einen Sägezahn mit der Amplitude 1 auf die Messspannung,
Die Messspannung schwankt also periodisch zwischen 999,7 und 1000,7,

Angenommen du machst jetzt während einer Periode 10 Messwerte, dann hast du 8* den Messwert 1000 (nämlich von 999,7 in zehntel bis 1000,5 und zweimal den Messwert 1001 (1000,6 und 1000,7), die Summe ist: man sollte es kaum glauben: 10002!! Und schon hast du den genauen Wert gemessen! durch oversampling!
das ist keine Augenwischerei, sondern recht einfache Mathematik
Jetzt ist es eine Frage der Stochastik, wieviel Messzyklen man bei anderen Kurvenformen braucht, um ebenso genau zu werden, das ist allerdings höhere Mathematik, 16 soll wohl ausreichen. Das kann man aber beliebig erhöhen.

Gruß, Rene

Mosi
22.01.2007, 15:37
die Summe ist: man sollte es kaum glauben: 10002!! Und schon hast du den genauen Wert gemessen! durch oversampling!
Gruß, Rene

Ich muss mich hier mal selbst zitieren:
jetzt fehlt natürlich die Operation Kommastelle verschieben um eine Stelle nach links bzw. die Division durch 10

Das Ergebnis ist: 1000,2 !!!! Und nochmal, das ist genau!! und keine Augenwischerei oder Schätzung oder sonstirgendwas, das ist gemessen!

Gruß Rene

Ich hoffe, das ist einigermassen verständlich gewesen...

shaun
22.01.2007, 17:20
Wenn Du es schaffst, dem Messsignal eine entsprechende Rampe zu überlagern meinetwegen. Bei allen anderen Signalformen würde ich die Rauschleistung heranziehen.

Steffen44
22.01.2007, 18:09
wow ok danke das muß ich mir gleich noch 8mal durchlesen ... mindestens O:)


Das zu begreifen fällt schon irgendwie schwer ... da ärgere ich mich als Energieelektroniker nie etwas darüber gelernt zu haben.

Mosi
23.01.2007, 00:09
mit einer Rampe wirds natürlich am genauesten, wobei man eigentlich sagen muss, mit einer Rampe ist das Verhältnis von Genauigkeit zu notwendigen Messzyklen am ökonomischsten. Allerdings ist bei entsprechend hoher Anzahl Messzyklen, verbunden mit einem weissen Rauschen, die statistische Verteilung der Samples linearer als eine Rampe es mit elektronischen Mitteln jemals sein kann. Also man kann auch ohne Nutzung von synchronlaufenden Rampen mit entsprechender Anzahl von Zyklen die gleiche Genauigkeit erreichen.

Eine synchronlaufende Rampe (bzw. einen symmetrischen Sägezahn) kannst du übrigens recht einfach mit dem Prozessor selbst herstellen: am Ende eines Messzyklus toggelt man einen Out-pin, dieser pin steuert einen Dreiecksgenerator, bestehend aus einem OPV, 1Widerstand, ein Kondensator. Die entstehende Dreiecksspannung wird entweder dem Eingangssignal oder der Referenzspannung zugemischt. Das geht aber nur, wenn du nichts anderes als die Mess Schleife laufen lässt. Andernfalls kann man ein pin über einen Timer für so etwas verwenden, aber in aller Regel dürfte das immer vorhandene Rauschen ausreichend sein.

Gruß, Rene

DanDansen
30.01.2007, 09:59
Was ich mich bei dem ganzen Oversampling Kram frage: Eine Mittelwertbildung bei der das Ergebnis als Fließkommazahl dargestellt wird, ist doch genau das gleiche, oder nicht? Also warum so kompliziert?

Mosi
31.01.2007, 16:40
Die Mittelwertbildung als Fließkommazahl ist das kompliziertere, ungenauere und das rechen- und speicherintensivere Verfahren. Für uns, wo wir es gelernt haben, mit Dezimalzahlen umzugehen, scheint es nur das Einfachere zu sein. Für einen Rechner ist es hingegen weitaus effektiver, z.B. 12bit in 4096 Schritte zu zerlegen, das ist das Optimum an Genauigkeit und Schnelligkeit. Erst im allerletzten Schritt, der eventuellen Anzeige des Messwertes lohnt es sich, das Ergebnis entsprechend umzurechnen. Sollte eine Anzeige gar nicht notwendig sein, z.B. für reine Steuerungs- und Regelungsaufgaben, sollte man das Ergebnis nie in eine Fließkommazahl umrechnen, sondern eben mit den relativen 4096 Schritten arbeiten.
Gruß, Rene

Yossarian
31.01.2007, 18:22
Hallo

sonstirgendwas, das ist gemessen

also ich würde das nicht als messen bezeichnen, sondern als interpolieren.

Mit freundlichen Grüßen
Benno

Mosi
31.01.2007, 19:16
Fast alle Digi-Messgeräte arbeiten mit diesem Verfahren der Messung, zugegeben etwas ausgefeilter, aber das Prinzip ist gleich: es wird die Stelle des Umschlagens eines Wertes an einer Rampe gemessen, oder abgezählt. (single-slope, dual-slope, mehrrampenverfahren usw.) Die Geräte heißen trotzdem Messgeräte. Und nicht Interpoliergeräte.
Interpolieren ist was anderes, nämlich das "REKONSTRUIEREN" von unbekannten Punkten auf dem Graphen einer Funktion, die nur durch wenige Stützstellen beschrieben wird.
Man kann übrigens auch mit einem 1bit-AD-Wandler (Also Komporator) und entsprechenden Referenz-rampen bzw. sogar Rauschsignalen als Referenz beliebig hohe Genauigkeiten messen. Alles eine Frage der Zeit...

Gruß, Rene

Yossarian
31.01.2007, 19:35
Hallo
wie soll das funktionieren?
Wenn Rauschen die Schaltschwelle meines Komparators verändert,muß ich doch wissen um welchen Betrag und in welche Richtung die Referenz verschoben wurde, sonst kann ich das gewonnene Bit doch gar nicht interpretieren.Es ist zufällig high oder low, womit auch mein 'Meßergebnis' zufällig ist.Zwischen 0 und 1 kann nicht interpoliert werden.

Mit freundlichen Grüßen
Benno

Mosi
31.01.2007, 19:59
Genau, es kann nicht interpoliert werden, deswegen ist es ja auch keine Interpolation. Wenn ich aber davon ausgehe, dass über eine bestimmte Zeit alle erdenklichen Spannungswerte im Rauschsignal gleichmässig vorhanden sind, brauche ich auch nur zu messen, wieviel Prozent der Samples ein positives, und demzufolge wieviel Prozent der Samples ein negatives Ergebnis erzeugen. Das Verhältnis ist exakt proportional zur messenden Spannung. Erfordert natürlich eine Vielzahl von Messungen. Mit einer einzigen geht das nicht.
Noch einfacher kann man das wieder mit einer Rampe erklären, es wird gemessen, oder abgezählt, wann der Komparator L oder 0 ausgibt. Das Verhältnis zur Gesamtlänge der Rampe ist wiederum exakt proportional zur Eingangsspannung.
Letztendlich arbeiten alle AD-Wandler irgendwie nach diesen Prinzipien, auch die AD-Wandler der AVR, da sitzt nunmal kein kleiner Japaner drin und schaut aufs Zifferblatt eines Analoginstrumentes.
Und je nachdem, wie viele Zyklen dieser alles entscheidende 1bit-Wandler, also Komparator, als Arbeitszeit zugewiesen bekommt, so genau ist unser Ergebnis. Und was spricht dagegen, um auf die Ausgangsproblematik wieder zurückzukommen, diese interne Genauigkeit durch externe Maßnahmen noch weiter zu erhöhen, wir haben ja schon 10 bit, also noch ein paar Zyklen mehr und schon sinds 12 oder noch mehr bit.

Achso, probierts einfach aus, oben von mir gepostetes Programmfragment von mir funktioniert astrein, Die Referenzspannung (im Beispiel habe ich Avcc angegeben, internal ist da schon besser) darf nur nicht zu hoch sein, da sonst das Verhältnis Rauschspannung zur min-Auflösung10bit zu schlecht ist. Denn das effektive Rauschen muss mindestens so groß wie die Auflösung des AD-Wandlers sein. Oder eben bei einem AVR den C am ref-Eingang verkleinern, werde ich demnächst checken.

Gruß, Rene

EDIT: Sorry, ich muss mich berichtigen, oben habe ich geschrieben:

"brauche ich auch nur zu messen, wieviel Prozent der Samples ein positives, und demzufolge wieviel Prozent der Samples ein negatives Ergebnis erzeugen. Das Verhältnis ist exakt proportional zur messenden Spannung"

Es muss aber heissen: Das Verhältnis von positiven Ergebnissen zu GESAMTERGEBNISSEN ist exakt proportional usw.

Yossarian
31.01.2007, 22:41
Hallo
mit einer Rampe kann das funktionieren, wenn ich weiss zu welchem Zeitpunkt der Rampe die Abtastung erfolgt.Damit kenne ich die Spannung der Rampe zu diesem Zeitpunkt und daher auch kann der Komparator mir sagen , ob die Eingangsspannung unter oder über dieser Spannung gelegen hat.Das ist aber auch kein 1bit Wandler.
Bei einer Rauschspannung kann ich einer 0 oder 1 aber nicht entnehmen mit welcher Spannungsgröße dieser Wert verglichen worden ist.
Bei einer AD Wandlung kann ich mir nicht alle Zeit der Welt nehmen,ich will nicht wissen wie der Wert morgen aussieht. D.h. während der Abtastung darf sich der Wert der Spannung nicht ändern, sonst sind Amplitudenfehler die Folge.Wenn ich Gleichspannung abtaste und den Wert mit 8 bit aufnehme, habe ich den Wert in 256 Stufen aufgelöst. Wenn ich das ein paar mal wiederhole, kann ich den aufgenommenen Wert mitteln, die Genauigkeit wird dadurch aber nicht größer.
Der AD Wandler des AVR arbeitet nach der sukzessiven Approximation, zu deutsch schrittweisen Annäherung.
Mit freundlichen Grüßen
Benno

falerion
31.01.2007, 22:53
Da möchte ich widersprechen: Durch die Mittelung einer Vielzahl von Messungen erhöht man sehr wohl die Genauigkeit des Endergebnisses!

Yossarian
31.01.2007, 23:01
Hallo
wenn 5V mit 8bit aufgelöst werden, ergibt das Spannungsstufen von 20mV. Auch wenn diese Messung xmal erfolgt ändert sich nichts daran.
Nur zufällige Störungen und 'Ausreißer' werden eliminiert bzw. eingeebnet.

Mit freundlichen Grüßen
Benno

Mosi
31.01.2007, 23:08
selbstverständlich wird die Genauigkeit größer, gerade durch Schwankungen des Signals kann man eben durch die Mittelung der Ergebnisse auch fein abgestufte Zwischenwerte erhalten. Und: letztendlich ist es egal, ob die Referenzspannung schwankt, oder die Messspannung. Und: es ist egal, ob die Schwankung linear erfolgt, oder durch völlig zufällige Verteilung, das ist letztendlich auch linear, über einen hinreichend großen Zeitraum betrachtet,
ich kann es nur noch einmal betonen:

PROBIERT ES EINFACH MAL AUS

Klar, mit AVR-AD-Wandlern lag ich daneben, sorry...
Gruß, Rene

Mosi
01.02.2007, 07:57
Hallo
wenn 5V mit 8bit aufgelöst werden, ergibt das Spannungsstufen von 20mV. Auch wenn diese Messung xmal erfolgt ändert sich nichts daran.
...
Benno
Bis dahin ist es richtig, nur jetzt musst du mal weiterdenken: überlagere ich der Messspannung einen Sägezahn mit der Amplitude exakt 20mV, und mache während einer Periode eine festgelegte Anzahl von Messungen, erhalte ich ZWEI verschiedene Messwerte, aus dem Verhältnis der Anzahl dieser zwei Messwerte kann ich jeden beliebigen Zwischenwert exakt bestimmen und der ist nunmal außerdem identisch mit dem Mittelwert der Messungen. Und das Beste ist: Es geht auch mit weissem Rauschen, denn die Reihenfolge der Messungen ist völlig egal.

Aber es lohnt sich eigentlich nicht darüber zu diskutieren OB es funktioniert, denn dieses Verfahren wird seit vielen Jahren in der Messtechnik und anderen Einsätzen erfolgreich verwendet. Da kannst du jetzt nicht kommen und behaupten das geht nicht.
Dann musst du mir auch erklären, was ich zu Hause gemessen habe, also woher die Zwischenwerte bei 4096Schritten und einem 10bit Wandler herkommen. Der dürfte dann nur jeden vierten Schritt ausgeben, macht er aber nicht.

Ich sag nochmal: Probier es aus!!!
Die Frage, die es zu diskutieren gilt, ist die Frage WIE es funktioniert

Gruß, Rene

Yossarian
01.02.2007, 22:17
Hallo
Schwankende Referenzspannungen führen natürlich zu ungenauen Ergebnissen! Wenn ich keine Referenz habe, kann ich gar nichts bestimmen.
Durch Schwankungen des Signals und dessen Mittelung bekommt man eben den Mittelwert und keine Zwischenwerte, die außerhalb der Abtastung liegen.Alles was nicht abgetastet wird, ist nicht gemessen sondern berechnet.

Beim Sägezahnverfahren wird nicht die Sägespannung der Eingangsspannung (Ue)überlagert, sondern die Sägespannung wird mit Ue verglichen.
Der Zahn und ein getakteter Zähler werden gestartet.Ein Komparator vergleicht den Zahn mit Ue , bei Gleichheit wird ein Impuls generiert, der den Takt sperrt.Die Zeit zwischen Start und Impuls ist Ue proportional.Wenn Ue von Störspannungen überlagert ist, kann der Komparator unter Umständen viel zu früh schalten und ein großer Meßfehler entsteht.Das kann man mit entsprechenden Filtern oder mehrfaches einlesen vermeiden, wobei die Auflösung nicht steigt!

Beim Delta-Sigma Wandler wird Ue einem Modulator zugeführt,der aus der Spannung einen seriellen Datenstrom macht.Der Mittelwert dieser 0,1 Folgen entspricht dem Mittelwert von Ue.Damit dieser sozusagen digitale Mittelwert möglichst genau dem Mittelwert von Ue entspricht, muß die Abtastrate viel größer sein als die Frequenz von Ue. Das nennt man dann Oversampling.

Jede Wandlung ist ungenau. Ein AD WAndler quantisiert das Eingangssignal.Ein Analogsignal kann unendliche Werte annehmen, ein Digitalsignal nur 2hoch n. Dieser Unterschied zwischen Analogsignal und dessen digitaler Darstellung ist das Quantisierungsrauschen (weißes Rauschen).
Dieses weiße Rauschen ist natürlich unerwünscht und wird im (digitalen) Tiefpaßfilter reduziert.
Da das Signal überabgetastet ist erfolgt eine Reduzierung (Abtast Theorem) und eine Umwandlung in n Bit Digitalwerte.

Ich weiß nicht , wie Dein Labor ausgerüstet ist, aber ich denke 1mV mit Hobbymitteln zu messen ist nur schätzen. Zumal die Meisten die 5V Betriebsspannung als Referenz verwenden.
Für Auflösungen von mehr als 10bit müssen eine genaue Referenz, am besten temperaturstabilisiert, und definierte Umgebungsbedingungen vorhanden sein.
Ich hoffe ich habe nicht allzuviel verkehrtes gesagt.
Mit freundlichen Grüßen
Benno

Mosi
02.02.2007, 12:21
Hallo
Schwankende Referenzspannungen führen natürlich zu ungenauen Ergebnissen! Wenn ich keine Referenz habe, kann ich gar nichts bestimmen.

Das Wort "Schwankend" ist zugegeben recht umgangssprachlich gewählt, ich meine natürlich die Überlagerung der Referenzspannung durch eine Fremdspannung, deren DC-Anteil =0 ist. Bei allen Verfahren, die im weitesten Sinne die Messpannung über den Messzyklus integrieren, ist die Genauigkeit der Abtastung dadurch nicht verringert. Also z.B. bei allen Mehrrampenverfahren. Und es ist in diesem Fall egal, ob die Messpannung, oder die Referenzspannung verrauscht ist. Das hat absolut keinen Einfluss auf die Messgenauigkeit! Und da auch beim Oversampling letztendlich die Messwerte integriert werden, ist selbst bei den AVR´s bei entsprechender Anzahl der Messungen das Rauschen u.ä. Fremdspannungen ohne Einfluss!


Durch Schwankungen des Signals und dessen Mittelung bekommt man eben den Mittelwert und keine Zwischenwerte, die außerhalb der Abtastung liegen.Alles was nicht abgetastet wird, ist nicht gemessen sondern berechnet.
Der Mittelwert ist ein Zwischenwert!, dieser Mittelwert, oder Zwischenwert ist berechnet aus realen Messungen, demzufolge ist auch der berechnete Wert gemessen! Genauso wie man z.B. die Leistung auch misst, indem sie aus zwei andere Messungen berechnet wird (P=U*I)


Beim Sägezahnverfahren wird nicht die Sägespannung der Eingangsspannung (Ue)überlagert, sondern die Sägespannung wird mit Ue verglichen.

Es ist völlig belanglos, ob der Sägezahn der Referenzspannung oder der Eingangsspannung überlagert wird! Das Ergebnis ist exakt das Gleiche!


Der Zahn und ein getakteter Zähler werden gestartet.Ein Komparator vergleicht den Zahn mit Ue , bei Gleichheit wird ein Impuls generiert, der den Takt sperrt.Die Zeit zwischen Start und Impuls ist Ue proportional.Wenn Ue von Störspannungen überlagert ist, kann der Komparator unter Umständen viel zu früh schalten und ein großer Meßfehler entsteht.Das kann man mit entsprechenden Filtern oder mehrfaches einlesen vermeiden, wobei die Auflösung nicht steigt!

Das ist eine Möglichkeit der AD-Wandlung, die einfachste, fehlerbehafteste. Von dieser ist hier nicht die Rede.


Beim Delta-Sigma Wandler wird .... Das nennt man dann Oversampling.

Genau genommen hast du natürlich recht, das was wir hier als Thema eigentlich zu bereden haben ist in diesem Sinne kein Oversampling.
Wenn man aber nur den Sinn des Wortes nimmt, also in etwa "mehrfache Abtastung" dann stimmts wieder. In der Literatur ist jedenfalls in diesem Zusammenhang auch von Oversampling die Rede



Ich weiß nicht , wie Dein Labor ausgerüstet ist, aber ich denke 1mV mit Hobbymitteln zu messen ist nur schätzen. Zumal die Meisten die 5V Betriebsspannung als Referenz verwenden.
Für Auflösungen von mehr als 10bit müssen eine genaue Referenz, am besten temperaturstabilisiert, und definierte Umgebungsbedingungen vorhanden sein.

hier machst du einen entscheidenden Fehler: Du verwechselst Genauigkeit mit Auflösung! Ich habe nicht mit 1mV Genauigkeit gemessen, sondern nachgewiesen, dass der Wandler 4096diskrete Schritte auflösen kann, und zwar folgendermassen:
Ein Kondensator wird über einen Widerstand so langsam entladen, dass man ganz einfach durch die Regelmässigkeit der Änderung der Anzeige Zwischenwerte nachweisen kann, die vorher nicht da waren.
Wenn das Display im Sekundentakt z.B. 3092, 3091, 3090, etc. anzeigt, ist die höhere Auflösung damit schon bewiesen. Anderenfalls hätte das Ergebnis etwa so aussehen müssen: 3092, 3092, 3092, 3092, 3088, 3088, 3088 usw. usf. das wäre wieder eine 10bit-Auflösung.
Was die Genauigkeit der absoluten Werte anbetrifft, da gebe ich dir völlig recht, da müssen schwerere Geschütze an Referenzen aufgefahren werden. Aber das ist ein ganz anderes Thema. Oft braucht man höhere Auflösungen, ohne gleich größere absolute Genauigkeiten zu benötigen. (z.B. in der Audiotechnik)

Gruß, Rene

PS, yossarian kommt mir irgendwie bekannt vor, hat das was mit IKS-Haken zu tun?

Yossarian
02.02.2007, 16:50
Hallo
ja, wenn Du eine reine Gleichspannung messen willst,kannst Du durch unendliches abtasten(oder einlesen) die Rauschspannungen vollkommen eliminieren.Je öfter eingelesen werden muß, desto niedriger ist die meßbare Frequenz.
Eine Rauschspannung ist eine Störgröße, die ausgefiltert werden muß.In diesem Fall wird das weiße Rauschen durch die Quantisierung der Eingangsgröße erzeugt und verfälscht somit die erfaßte Spannung.Deshalb wird die gewonnene Meßspannung einem Tiefpaß zugeführt, was natürlich die Grenzfrequenz herabsetzt.

dieser Mittelwert, oder Zwischenwert ist berechnet aus realen Messungen
Da haben wir wohl verschiedene Anschauungen. Berechnet ist nicht gemessen.

Es ist völlig belanglos, ob der Sägezahn der Referenzspannung oder der Eingangsspannung überlagert wird! Das Ergebnis ist exakt das Gleiche!
nein, eben nicht. Wenn ich z.B die Sägespannung der Referenzspannung überlagere, so kenne ich doch zu jedem Zeitpunkt den Wert der Referenzspannung. Der Wert der Eingangsspannung ist mir aber unbekannt, sonst bräuchte ich ihn nicht zu messen. Ich muß einen mir bekannten Wert mit einem unbekannten Vergleichen, um eine Aussage über das Verhältnis der beiden machen zu können.
Wenn die Spannung 5,5(+-0,1V Rauschen)V beträgt, mein Wandler nur 5V ausgibt, werden nach 10mal messen immer noch nur 5V gezeigt. Wenn ich die Auflösung meines Wandlers steigere , zeigt er mir 5,5V an. Bei mehreren Messungen werden 5,4V;5,5V;oder auch 5,6V angezeigt.Das kann ich mitteln.
Dann würden bei weißem Rauschen und entsprechend hoher Anzahl Messungen wieder 5,5V angezeigt.
Also wenn verrauschte Referenzen zu besserer Genauigkeit führen soll, würde ich ganz gerne wissen wie das funktioniert.

Mit freundlichen Grüßen
Benno

Ja , Captain Yossarian von der 256.Staffel
Soweit mir bekannt ist,bin ich der einzige Captain Yossarian,den ich kenne, aber eben nur, soweit mir bekannt ist.

Mosi
02.02.2007, 18:25
Hallo Captain, dann warst du das, der mit dem merkwürdigen Eierhandel reich geworden ist? :-), (man o man, das muss so vor 20Jahren gewesen sein, als ich das Buch gelesen habe...)

Aber jetzt zum Thema,
um es nochmal zu betonen, es geht mir nicht um eine Erhöhung der Genauigkeit, sondern um die Erhöhung der Auflösung.

Es ist in der Tat belanglos, wo der Sägezahn zugemischt wird.
Hier der praktische Beweis:
Uref soll 2,5V sein, die Rampe 5Vss, Messspannung 1V, Periode 1s
(ok, sehr abartig, aber du verstehst das sicher)
Also Sägezahn von 0-5V, nach 0,2s kippt der Trigger. Soweit alles klar, jetzt mische ich den Sägezahn dem Eingangssignal zu(ich drehe nur mal die Phase des Sägezahns um), d.h. Eingangssignal von +3,5V bis -1,5V, wann kippt der Komparator? Man sollte es kaum glauben, ebenfalls nach 0,2s!!! Nämlich bei 2,5V Uref!
Nehme ich jetzt statt einer Rampe einen symmetrischen Sägezahn ist das zeitliche Verhältnis von off zu on Zeiten in beiden Fällen exakt gleich, nämlich 1:4! Egal ob ich den Sägezahn der Uref oder der Umess zuführe! Lediglich die Phase ist gedreht, oder statt 1:4 eben 4:1.
So jetzt der nächste Gedankenschritt:
Stell dir jetzt bitte den 2,5V Komparator als komplettes, "hochgenaues" 1-bit Messgerät vor, der 1V Messspannung habe ich den 5V-sym-Sägezahn überlagert und gebe per Tastendruck zufällig!! samples des Gemisches an den Komparator und notiere das Ergebnis, es wird nach wenigen Zyklen das Verhältnis 4:1 aufweisen! (4mal weniger als 2,5V, 1mal mehr als 2,5V)
Wenn ich die Messspannung gar nicht kenne, gibt es folgende Möglichkeiten:

1. es gibt lediglich nullen, d.h. die Messpannung ist 0V oder kleiner.
2. es gibt mehr nullen als einsen, d.h. die Messpannung liegt zwischen 0 und 2,5V
3. es gibt genau gleich viele nullen und Einsen, d.h. die Messspannung ist genau 2,5V
usw. usf.
Nach hundert Messungen habe ich so bereits eine beachtliche Messgenauigkeit oder besser gesagt AUFLÖSUNG erreicht!

Langer Rede kurzer Sinn, ich kann mit einem einzigem bit, etwas Zeit und etwas Rechnen und natürlich einer der Messspannung zufällig zugeführten Spannung (denn es ist auch wieder egal, ob ich eine genau definierte Spannung zufällig abtaste, oder in genau definierten Abständen eine Probe einer zufälligen Spannung nehme, also einer Rauschsspannung) sehr viel höhere Auflösungen erreichen. Wenn ich will, auch 10 oder mehr bit. Alles eine Frage der Zeit die man hat.
Und: im unserem praktischen Beispiel geht es "lediglich" um die Erhöhung der Auflösung um z.B. 2Bit! Kein Mensch behauptet, dass wir mit solchen Mitteln mit einigermassen erträglichen Zeitaufwand 12bit erreichen, wir haben doch schon 10 Stück davon :-))

Captain Yossarian, it´s your turn now!

viele Grüße, Rene

Mosi
02.02.2007, 19:35
Ich glaube, der mit den Eiern hieß Metcalf, sorry :-)

Yossarian
03.02.2007, 10:43
Hallo
nein, das war mein Kumpel Milo Minderbinder , der Meßoffizier. Major Metcalf habe ich nie persönlich kennengelernt.

hier komme ich nicht ganz klar. Wenn ich den Sägezahn mit 2.5 ref vergleiche, ergibt das ein Tastverhältnis von 50%. Wenn ich meine Meßspannung 1V mit einem Sägezahn 5V überlagere , ergibt das ein Tastverhältnis von 30%..
Du mischt das Eingangssignal 1V mit dem Sägezahn 5V und bekommst 3,5V;-1,5V , was nahelegt, daß Du mit Meß die Uref meinst. Kannst Du das mal aufdröseln?

Mit freundlichen Grüßen
Benno

Mosi
03.02.2007, 19:13
Klar, Milo Minderbinder, wie konnte ich nur...

Aber jetzt fix zum Thema:
In deinem Diagramm hast du völlig richtig den (DC-freien!!)Sägezahn der Uref=2,5V addiert, so dass letztendlich am Anfang die resultierende Vergleichsspannung Uref-2,5V=0V ist, am Ende Uref+2,5V=5V. Also der Sägezahn hat eine Elongation von0V bis 5V.
Im Fall Umess hast du aber einen Offset von 2,5V dazuaddiert! Das darf man natürlich nicht, nicht schummeln! Auch hier gilt natürlich bei DC-freiem Sägezahn bei x=0: Umess-2,5V=-1,5V und am Punkt x=1: Umess+2,5V=+3,5V.
Im ersten Fall ist das Verhältnis 1:4, oder 20%, im zweiten Fall 4:1, oder 80%. Letztendlich ist beides das Gleiche! Alles eine Frage der Relativität...

Gruß, Rene

Mosi
03.02.2007, 20:02
Hier nochmal mit Grafik:

Fall1, Messspannung direkt an Komparator, anderer Komparatoreingang Sägezahn mit ref
Rot soll Uref (2,5V)sein, blau ist die der Ref überlagerte Sägezahnspannung, Grün die Umess.
Der rote Kringel ist der entscheidende Messpunkt, Umschlag bei 20%, also 1:4 (oder 20% : 80%)

Da ich nicht weiß, wie man eine zweite Grafik einfügt, gehts gleich weiter...

Mosi
03.02.2007, 20:10
Jetzt weiter mit Fall2, Der Messspannung wird der gleiche Sägezahn überlagert, dafür am anderen Komparator-Eingang lediglich die nackte Uref mit 2,5V.

Rot ist wieder Uref (2,5V)sein, violett ist die der Umess überlagerte Sägezahnspannung, Grün die Umess.
Blau ist eine weitere Möglichkeit, die Überlagerung des invertierten Sägezahns auf die Messspannung
Die roten Kringel sind wieder die entscheidenden Messpunkte, Umschlag einmal bei 80%, also 4:1 (oder 80% : 20%)
beim anderen mal wie schon gehabt: Umschlag bei 20%, also 1:4 (oder 20% : 80%)
Damit ist der Beweis erbracht:


Es ist egal, ob ich den Sägezahn der Messspannung, oder der Referenzspannung überlagere, das Ergebnis unterscheidet sich lediglich durch die Invertierung der Verhältnisse

So weit erstmal, noch Fragen?
Gruß, Rene

Yossarian
03.02.2007, 22:39
Hallo
Uref ist meine Referenzspannung! D.h. sie ist fest. Diese Referenz vergleiche ich mit dem Sägezahn.Der Komparator schaltet nach 0,5s.

Uref soll 2,5V sein, die Rampe 5Vss, Messspannung 1V, Periode 1s

jetzt mische ich den Sägezahn dem Eingangssignal zu
und das ist meine zweite Kurve -> Sägezahn + 1V Meßspannung.Der Komparator schaltet nach 0,3s.
Da ist nichts mit 2,5V addiert.-> Sägezahn(SZ) zum Zeitpunkt(ZP) 0s = 0V Meßspannung(MS) = 1V
0V + 1V = 1V, SZ zum ZP 1s=5V Ms=1V 5V+1V=6V
Da hier überall nur positive Spannungen vorkommen, wie kommst Du auf -2,5V ?
Wenn ich in Deinem Diagramm rot mit blau überlager, beträgt die Spannung bei 0s 2,5V und bei 1s 7,5V.
Mit freundlichen Grüßen
Benno

Mosi
03.02.2007, 22:58
Hallo
Sägezahn + 1V Meßspannung.
Der Sägezahn hat am Punkt 0: -2,5V und am Punkt 1: +2,5V
Also DC=0!!!!

Du kannst doch nicht einerseits der Referenz den Sägezahn +/- 2,5V zumischen und andererseits mir beweisen wollen, dass wenn man diesen gleichen Sägezahn der Eingangsspannung zumischt, dieser Zahn urplötzlich 0V/+5V hat, bitte gleiche Bedingungen für alle!!!!
Woher nimmst du die 2,5V offset, die ist nicht vorgesehen!

Gruß, Rene

Mosi
03.02.2007, 23:04
Hallo
Uref ist meine Referenzspannung! D.h. sie ist fest. Diese Referenz vergleiche ich mit dem Sägezahn.

Ich nochmal,

das hier hab ich ja überlesen:

Du liegst komplett falsch:
bei dieser AD Wandlung vergleiche ich niemals den intern erzeugten Sägezahn mit der ebenfalls intern erzeugten Referenzspannung, da kommt natürlich IMMER 50% raus, egal wie groß die Messspannung ist, also kompletter Unfug
sondern:
man vergleicht eine REFERENZSÄGEZAHNSPANNUNG mit der EINGANGSSPANNUNG!!
und die Ref-Sägezahn-U wird gewonnen durch zumischung einer Ref-Gleichspannung zum Sägezahn.
Gruß, Rene

PS. Du musst mir übrigens noch erklären, wie du meinen Messaufbau findest...

Mosi
03.02.2007, 23:13
Ich schon wieder, ich lese nicht ordentlich, das hier fällt mir erst beim dritten Mal auf:





Da ist nichts mit 2,5V addiert.-> Sägezahn(SZ) zum Zeitpunkt(ZP) 0s = 0V


Das ist falsch! sondern:
Sägezahn(SZ) zum Zeitpunkt(ZP) 0s = -2,5V



Meßspannung(MS) = 1V
0V + 1V = 1V, SZ zum ZP 1s=5V Ms=1V 5V+1V=6V
Da hier überall nur positive Spannungen vorkommen, wie kommst Du auf -2,5V ?
Das ist auch falsch! sondern:

Meßspannung(MS) = 1V
(-2,5V)+ 1V = -1,5V, SZ zum ZP 1s=2,5V Ms=1V 2,5V+1V=3,5V

Es gibt hier nicht überall positive Spannungen, sondern der Sägezahn hat +/- 2,5V !! Also DC=0!!

Gruß, Rene

Yossarian
04.02.2007, 00:08
Hallo


Also Sägezahn von 0-5V,
dem entnahm ich die 0-5V...
danach kann der Rest natürlich nicht hinkommen.
Mit dem neuen Sägezahn kann ich Deine Diagramme nachvollziehen, ob das aber alles logisch ist , kann ich heute nicht mehr eruieren.

PS. Du musst mir übrigens noch erklären, wie du meinen Messaufbau findest...
...schön bunt ist er ja schon mal.


Mittelung der Ergebnisse auch fein abgestufte Zwischenwerte erhalten
einer meiner Mathelehrer hat mal gesagt: 10/2= 5,00 wäre falsch, da eine Genauigkeit vorgetäuscht werden würde, die durch die ungenauen(bzw.ungenügend definierten) Ausgangswerte gar nicht erreichbar ist.
Wenn ich mittels Zollstock(auch Gliedermaßstab genannt) einmal 5cm und einmal 6cm messe und daraus das arithmetische Mittel bilde, erhalte ich den Wert 5,5cm; ein Maß, welches ich nie und nimmer auf diese Art bestimmen kann!
Wenn ich den Zollstock auf die Überlagerung mit Rauschen anwende, bedeutet das doch: mit zitternden Händen kann ich genauer messen als mit ruhigen.
Mit freundlichen Grüßen
Benno

Mosi
04.02.2007, 09:51
Hallo


PS. Du musst mir übrigens noch erklären, wie du meinen Messaufbau findest...
...schön bunt ist er ja schon mal.


Oh, Danke, ich meinte aber eigentlich den Aufbau mit dem entladenem Kondensator, also den, womit ich schon den praktischen Beweis erbracht habe...



Mittelung der Ergebnisse auch fein abgestufte Zwischenwerte erhalten
einer meiner Mathelehrer hat mal gesagt: 10/2= 5,00 wäre falsch, da eine Genauigkeit vorgetäuscht werden würde, die durch die ungenauen(bzw.ungenügend definierten) Ausgangswerte gar nicht erreichbar ist.

Hier gehts ja auch nicht um 10/2=5,00, sondern um ca100(also ca.98...102)/20=5,0, die letzte Stelle lass ich einfach weg und Runde

Das mit den Zittern ist übrigens gut gelungen, wenn es ein mathematisch einwandfreies Hand-Zittern ist (also ein hinreichend genaues Rauschen darstellt), dann kannst du tatsächlich durch Mittelwertbildung einen genaueren Messwert bekommen!

Aber wie gesagt, erkläre mir bitte, warum das bei mir funktioniert. Hast du irgendwo einen einsatzbereiten AVR zum experimentieren, dann probier es einfach aus, dauert ne halbe Stunde! Das Programm in Bascom kann ich dir schicken.

Gruß, Rene

Mosi
04.02.2007, 12:38
Ich nochmal, hab mir auf der Fahrt zur Arbeit nochmal Gedanken gemacht.
Mit dem Zollstock ist es nicht so einfach zu erklären, denn der ist ein Analoges Messgerät, sofern der Zollstock aber nur ganze cm misst, geht das. Hier wieder ein praktischer Beweis:
Die zu messende Strecke soll real 5,5cm sein, das Handzittern minimum 1cm Amplitude. Es werden also entweder 5cm oder 6cm gemessen. Das Zittern(=Rauschen) sorgt dafür, dass der Messpunkt sich zufällig (und völlig gleichmässig verteilt) von den realen 5,5cm nach beiden Richtungen verändert. Nach wenigen Messungen ist klar, 50% der Messungen werden 5cm, und ebenfalls 50% werden 6cm als Ergebnis haben. Ich schätze mal, dass vier Messungen reichen, um einen Zwischenwert zu berechnen.
Der Zwischenwert ist natürlich auch wieder ein von-bis Wert! Aber nur noch halb so groß!
Also vor den Messungen hatte ich die Mess-Unsicherheit von 1cm, also z.B. alle Längen zwischen 4,5cm und 5,5cm werden als 5cm interpretiert. Jetzt ist es nur noch eine Unsicherheit von 0,5cm, also von 4,75 - 5,25cm werden als 5cm ausgegeben, der nächste Messwert ist 5,5cm (also von 5,25 bis 5,75cm)
Aber was rede ich, probier es aus! Das es klappt ist keine Frage, das kannst du einfach nicht abstreiten.

Gruß, Rene

Yossarian
04.02.2007, 13:57
Hallo
ich hoffe man kann die Kurven erkennen.
Im oberen Diagramm wurde die Meßspannung Vmeß(1V Sinus,grün) mit der Sägespannung überlagert.
Resultat Vmeß+säge( grau),
Vuref ist die Referenzspannung (pink), liegt am Eingang.
Der Komparator vergleicht die beiden: Ergebnis Vad1 (blau)
Im unteren Diagramm wurde die Meßspannung Vmeß(1V Sinus,rot) an den Eingang gelegt.
Die Referenzspannung 2,5V wurde mit dem Sägezahn überlagert (Vuref+säge ,grün) und dem anderen Eingang zugeführt.
Der Komparator vergleicht die beiden: Ergebnis Vad2 (h.blau)

Mit freundlichen Grüßen
Benno

Yossarian
04.02.2007, 14:36
Hallo
ich habe vergessen den Sägezahn zu invertieren!
Damit sehen die beiden Ausgänge gleich aus.
Mit freundlichen Grüßen
Benno

Manf
04.02.2007, 15:03
Wir hatten hier schon einmal ein Diskussion zu einem solchen Thema, (nur falls das dargestellte Beispiel in der Diskusion hilfreich ist. )
Manfred

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=161391&highlight=#161391

Yossarian
04.02.2007, 16:24
Hallo
Es gibt nichts Neues unter der Sonne.
https://ces.karlsruhe.de/culm/mathematik/filterung/oversampling.htm
Mit freundlichen Grüßen
Benno

Mosi
04.02.2007, 20:46
Ich hab die Lösung:

Die unmögliche Tatsache (Chistian Morgenstern)

Palmström, etwas schon an Jahren
wird an einer Straßenbeuge
und von einem Kraftfahrzeuge
überfahren.

"Wie war" (spricht er, sich erhebend
und entschlossen weiterlebend)
"möglich, wie dies Unglück, ja-:
daß es überhaupt geschah?

Ist die Staatskunst anzuklagen
in bezug auf Kraftfahrwagen?
Gab die Polizeivorschrift
hier dem Fahrer freie Trift?

Oder war vielmehr verboten,
hier Lebendige zu Toten
umzuwandeln, - kurz und schlicht:
d u r f t e hier der Kutscher nicht- ?"

Eingehüllt in feuchte Tücher,
prüft er die Gesetzesbücher
und ist alsobald im klaren:
Wagen durften dort nicht fahren!

Und er kommt zu dem Ergebnis:
"Nur ein Traum war das Erlebnis.
Weil", so schließt er messerscharf,
"nicht sein k a n n , was nicht sein d a r f."

Das Funktionieren der Erhöhung der Auflösung hab ich nur geträumt...

Gruß, Rene

Steffen44
11.02.2007, 17:15
so ich wieder ich wil auch mal das letzte wort haben :-)

Ich überlege an meinem Aref Eingang einen Kondensator anzubauen um die Referenzspannung zu glätten / stabilisieren. Nun ist die Frage ob das vermindern des Rauschen sich eher stördend auf die Meßwertmittelbildung auswirkt oder nicht.

Ich habe außerdem im Web recherchiert und bin auf ein Beispiel gestoßen wo 64 mal gemessen wurde und sich daraus ein 16 Bit Ergebniss ergibt.

Ich komme mit der rechnerei nicht klar wie können 64 Messungen denn 16 Bit ergeben ich sehe da nirgends auch nur annähernd 65535 Werte zusammenkommen.

Mosi
12.02.2007, 09:55
Die Verminderung des Rauschens ist normalerweise immer gut, hier nicht. Die Rauschspannung muss min. eff. 1LSB haben. Ob man allerdings den Kondensator ganz weg lassen kann, keine Ahnung. Ich werds ausprobieren, komme allerdings erst am Do oder Fr dazu.
Mit 64Messungen kann definitiv kein 16bit Ergebnis erreicht werden, jedenfalls nicht bei 10bit "Ausgangslage", kannst du mal den Link posten?

Gruß, Rene

Steffen44
12.02.2007, 15:03
ja die Quelle ist Sprut : http://www.sprut.de/electronic/pic/grund/adc.htm im Abschnitt Messgenauigkeit steht :




Eine unsaubere Eingangsspannung läßt sich durch Mittelwertbildung aus vielen Messungen "glätten". Wenn man die Eingangsspannung 64 mal mißt, und alle 10-Bit-Meßergebnisse zusammenaddiert, bekommt man ein 16-Bit-Ergebnis. Die oberen 10-Bit davon sind gie "gesiebte" Eingangsspannung.


ob das in einem anderem Zusammenhang steht ich denke mal nicht ?!

Das wäre schön wenn du das testen könntest mit dem Kondensator.

Manf
12.02.2007, 15:37
Man erhält in dem Fall ein 16 bit Ergebnis, das Rauschen wird aber beim Mitteln nur um die Wurzel der Anzahl der aufgenommenen Werte reduziert.

Hier ist auch noch einmal des Bild zum Ablauf der Mittelung im oben angesprochenen Beispiel.

https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=851

Steffen44
12.02.2007, 15:51
mhh schade das nirgends steht auf welcher Berrechnungsgrundlage das Ergbniss von 16 Bit ermittelt wird. Ich kann es jedenfalls noch nicht nachvollziehen.

Wenn ich die Theorie nun in die Tat umsetzen möchte würde das bedeuten ich bilde den Mittelwert aus 64 Messungen und habe dann 16 Bit ? Oder stelle ich mir das zu einfach vor.

Manf
12.02.2007, 17:00
Wenn ich die Theorie nun in die Tat umsetzen möchte würde das bedeuten ich bilde den Mittelwert aus 64 Messungen und habe dann 16 Bit ? Oder stelle ich mir das zu einfach vor.
Eigentlich noch einfacher, erst einmal werden die Ergebnisse der 64 Messungen addiert damit erhält man aus den 64 10-bit Zahlen eine 16 bit Zahl.
Zur Mittelwertbildung wird das Ergebnis durch die Anzahl der Messwerte geteilt.

Interessant ist dann eigentlich nur noch wie das Rauschen über die Anzahl der Messungen reduziert wird. (Dazu werden die Häufigkeitsverteilungen der Rauschspannungswerte miteinander gefaltet..., einfacher ist es mit den charakteristischen Werten von Gaußverteilungen zu rechnen da sich die Verteilungsfunktion für größere Zahlen von Messwerten der Gaußverteilung annähert.)
Manfred

Mosi
12.02.2007, 20:30
mhh schade das nirgends steht auf welcher Berrechnungsgrundlage das Ergbniss von 16 Bit ermittelt wird. Ich kann es jedenfalls noch nicht nachvollziehen.

Wenn ich die Theorie nun in die Tat umsetzen möchte würde das bedeuten ich bilde den Mittelwert aus 64 Messungen und habe dann 16 Bit ? Oder stelle ich mir das zu einfach vor.

Hallo,
Ja das ist zu einfach, bist aber auf dem richtigen Weg.
Du verwechselst hier das Ergebnis einer Addition mit der evtl. erreichbaren Auflösung. Wenn hier von einem 16bit-Ergebnis gesprochen wird, dann ist es tatsächlich ein Ergebnis, also die Summe aus 64 10bit-Zahlen. Leider erstmal nicht viel mehr.

Vergleichbar ist das mit der Summe aus 10 fünfstelligen Zahlen, es ist ein sechstelliges Ergebnis.

Wenn du den Mittelwert aus 64 10bit Messungen berechnen willst (also die Summe aus 64Messungen durch 64 teilst), dann hast du als Ergebnis auch wieder "nur" eine 10-bit-Zahl, genauso wenn du oben genannte sechstellige Zahl wieder durch Zehn teilst, es wird wieder eine Fünfstellige.
anders wirds, wenn du das 16bit Ergebnis durch z.B. 32 teilst, dann erhältst du eine 11bit Zahl, oder durch 16, das wird eine 12bit-Zahl, durch 8: 13bit, durch 4: 14bit, durch 2:15bit und gar nicht geteilt: 16bit.
ABER: das ist noch lange nicht eine entsprechend hohe erreichbare Auflösung. Wenn du statt Rauschen eine synchron laufende Rampe, bzw. Sägezahn verwendest, stimmt das auch. Denn wichtig ist, dass diese 64Messungen sich möglichst linear verteilen, und das ist bei 64 zufällig ausgesuchten Messwerten (Der Zufall wird dann durch die der Referenzspannung oder der Messspannung überlagerte Rauschspannung erzeugt) so schnell mit der erforderlichen Linearität nicht der Fall. Wenn ich die App-note richtig im Kopf habe, geht man wohl von einer mindesten 4-fach höheren Abtastung aus, aber nagel mich jetzt nicht fest, musst du mal nachlesen...

vielleicht hilft das hier noch ein wenig:
2 hoch 10 = 1024
2 hoch 6 = 64
demzufolge:
(2 hoch 10) * (2 hoch 6) = 2 hoch (10+6) = 2 hoch 16 = 64*1024


Gruß, Rene

Steffen44
13.02.2007, 15:10
danke rene,

die Beschreibung ist klasse.

Falls du noch Lust und Zeit hast kannst du ja mal an den Kondensator denken am Aref.

Ich habe leider kein Oszi um mir das anschauen zu können.

Gruß
Steffen

Mosi
20.02.2007, 21:45
Sorry für die Verspätung, habe gerade einen 14bit Wandler realisiert, mit der Methode eines durch seinen eigenen Reststrom sich entladenen Kondensator kann man bei verschiedenen Kondensatoren am Ref-Eingang die Auswirkung gut erkennen: bei 100nF, (Standard-Beschaltung) sind deutliche längere "Standzeiten (ca. 3-4mal) bei jeweils vielfachen von 16 erkennbar (Anzeige verharrt deutlich länger, Treppenstufen!) bin jetzt bei 680pF angelangt, so ab etwa unter 10nF ist keine Veränderung mehr wahrnehmbar, die Treppenbildung ist noch ein wenig vorhanden, aber extrem reduziert. Ein deutlicher Hinweis, dass die am Ref-Eingang anliegende Rauschspannung den mindestwert von 1LSB nicht ganz erreicht.
Ich vermute, ein einfacher OPV mit Referenz-U als Rauschquelle dürfte das auf jeden Fall beheben. Werd ich demnächst probieren.
Gruß, Rene

Steffen44
21.02.2007, 05:41
klingt sehr interressant da würde ich am liebsten gleich mitbasteln naja irgendwann werde ich mir mal ein Oszi kaufen.