Forum: Mikrocontroller und Digitale Elektronik Rechenfehler oder DAC Nicht-Linearität?


von Sebastian B. (mircobolle)


Lesenswert?

Hallo,

ich benutze den TLV5638 12 Bit DAC.

Die Ref.spannung ist 2.048 V intern verdoppelt auf 4.096 V.

Nun reche ich im INIT eine Konstante aus:
1
const u16 k_DAC_Reference_2048      = 2048; /* 2.048 Volt */
2
...
3
u32_Reference = (u32) (0x1000<<19) / (k_DAC_Reference_2048 * 2);

meine DAC Routine bekommt nun einen Wert zwischen 0 ... 4095 [mV]

hier die Berechnung:
1
  /*
2
      CODE = Soll_Spannung * 0x1000 /(2 * REF)
3
  */
4
     u32_dac_code = (u32) (u32_Reference * u16_output_b);
5
     u16_dac_code = (u16) (u32_dac_code >> 19);

Wenn ich nun aber SOLL mit IST mit einem Multimeter prüfe kommt 
folgendes heraus:

SOLL             -->     IST
Uref=2.048               2.057
1.000                    1.083
2.000                    2.054
3.000                    3.030
4.000                    4.012
4.095 (max)              4.106

Wie man sieht ist die Abweichung nicht konstant, sie sinkt mit 
steigender Soll-Spannung.

Was bedeutet das nun?
Ist meine DAC Routine falsch oder liegt der Fehler im DAC selbst?


Danke für die Tipps!
Viele Gruesse

von Ohh (Gast)


Lesenswert?

Oder an der Analogik. Ein Offsetspannung wuerde das auch bewirken. Oder 
ein nicht anz passender GND. Wenn man Strom ueber einen 
unterdimensionierten GND fliessen laesst, so resultiert eine 
Offsetspannung

von Sebastian B. (mircobolle)


Lesenswert?

Ohh wrote:
> Oder an der Analogik. Ein Offsetspannung wuerde das auch bewirken. Oder
> ein nicht anz passender GND. Wenn man Strom ueber einen
> unterdimensionierten GND fliessen laesst, so resultiert eine
> Offsetspannung


Der Offset müsste aber dann über den gesamten Soll-Ist Bereich konstant 
sein, oder? In meinem Fall ist der Fehler ja eher linear.. obwohl im 
Datenblatt die Rede von "nicht linearem" Fehler ist.

von Falk B. (falk)


Lesenswert?

Es fehlt eine Kalibrierung. Pack mal dein Messwerte in Excel und mach 
ein Diagramm draus. Dort wirst du einen Offset- und Verstärkungsfehler 
sehen.

MFG
Falk

von Sebastian B. (mircobolle)


Angehängte Dateien:

Lesenswert?

Falk Brunner wrote:
> Es fehlt eine Kalibrierung. Pack mal dein Messwerte in Excel und mach
> ein Diagramm draus. Dort wirst du einen Offset- und Verstärkungsfehler
> sehen.
>
> MFG
> Falk

Hallo Falk,

ich hab jetzt einfach mal die Soll-Ist Abweichung in Excel grafisch 
dargestellt. Hier zu zu erkennen, dass es sich doch um einen sehr 
linearen Verlauf handelt.

gruesse

von Arc N. (arc)


Lesenswert?

VREF (2.048 V nom) kann laut Datenblatt zw. 2.027 V und 2.069 V liegen 
(bei VDD = 4.75 V)
Code = 1000 -> 0.99 V < Vout < 1.01 V
Code = 2000 -> 1.98 V < Vout < 2.02 V
Code = 4000 -> 3.96 V < Vout < 4.04 V
Code = 4095 -> 4.053 V < Vout < 4.137 V
wären also alleine aufgrund der internen "Referenz" möglich.
Hinzu kommen noch bis zu +-24 mV Offsetfehler und +-0.6 % Gainfehler 
(ohne Drift).
D.h. zu den 4.053 V - 4.137 V können noch mal bis zu etwa +-25 mV 
hinzukommen. Dann die Linearitätsfehler von maximal 6 mV (6 LSB bei 
4.096 V VREF). Sowie die lastabhängigen Fehler (DB S. 7 und 8).
Dazu noch die oben schon genannten Fehler...

von Sebastian B. (mircobolle)


Lesenswert?

Falk Brunner wrote:
> Es fehlt eine Kalibrierung. Pack mal dein Messwerte in Excel und mach
> ein Diagramm draus. Dort wirst du einen Offset- und Verstärkungsfehler
> sehen.

Du meinst, wenn ich die Werte berechne könnte ich die Ausgabefehler 
kompensieren?

Der Verstärkungsfaktor des Fehlers ist etwa -0,029.
Und der Offset bei maximaler Aussteuerung etwa 0,011 V.

Was mich aber etwas wundert ist folgendes:
Ich habe zur Steuerung des Analogausgangs eine digital Anzeige mit 3 
Nachkommastellen. Wenn ich das letzte digit nun um 1 nach oben oder 
unten setze geht die Spannung, die ich mit dem Multimeter messe "analog" 
mit. Also eine veränderung an der 3 nachkommastelle erzeugt auch eine 
veränderung der 3 nachkommastelle des Messwertes am Multimeter. 
(zumindest im oberen Aussteuerbereich)

Ah... ok... ich verwechsle hier wohl gerade Genauigkeit (12 Bit) mit 
kontinuierlichem Fehler. D.h. also, dass der DAC wohl funktioniert und 
tatsächlich die 12 Bit analog richtig umsetzt, aber der analogausgang 
als solcher nicht exakt die gewünschte spannung darstellen / wiedergeben 
kann.

Durch welche Schaltungstechnischen Massnahmen könnte ich diesen 
Ausgabefehler kompensieren?
- Als ein Punkt wurde ja schon die "saubere Masse" genannt.
- Aber wie ich auch schon erwähnt wurde, kann der DAC die Genauigkeit 
nicht voll gewährleisten.. angegebene Messfehler.

Gruss

von Falk B. (falk)


Lesenswert?

@ Sebastian B. (mircobolle)

>Du meinst, wenn ich die Werte berechne könnte ich die Ausgabefehler
>kompensieren?

Ja.

>Durch welche Schaltungstechnischen Massnahmen könnte ich diesen
>Ausgabefehler kompensieren?
>- Als ein Punkt wurde ja schon die "saubere Masse" genannt.

Naja, nicht allein. Man muss am OPV den Offset kompensieren, per Poti.

>- Aber wie ich auch schon erwähnt wurde, kann der DAC die Genauigkeit
>nicht voll gewährleisten.. angegebene Messfehler.

Kein DAC ist perfekt. Siehe Auflösung und Genauigkeit.

MFg
Falk

von Sebastian B. (mircobolle)


Lesenswert?

Guten morgen,

Falk Brunner wrote:

>>Du meinst, wenn ich die Werte berechne könnte ich die Ausgabefehler
>>kompensieren?
> Ja.
Da ich meine Umrechnungsfunktion schon so "optimiert" habe, dass ich 
vollständig bei der Wandlung auf eine Division verzichten, würde eine 
rechnerische Fehlerkompensierung diesen Vorteil wieder zu nicht 
machen...

>>Durch welche Schaltungstechnischen Massnahmen könnte ich diesen
>>Ausgabefehler kompensieren?
>>- Als ein Punkt wurde ja schon die "saubere Masse" genannt.
> Naja, nicht allein. Man muss am OPV den Offset kompensieren, per Poti.
Eine anloge lineare Kompensation mit Poti ist vermutlich die einfachste 
und beste Lösung.

Eine andere Idee zur Kalibrierung wäre gewesen, dass man die 
Referenzspannung per Multimeter misst und dann per Display die neue 
Referenzspannung eingibt.

> Kein DAC ist perfekt. Siehe Auflösung und Genauigkeit.
Netter Beitrag. Danke für den Hinweis.

viele gruesse

von Sebastian B. (mircobolle)


Lesenswert?

gerade ist mir noch folgende Idee gekommen.

Mein DAC Wandler besitzt einen Pin an dem die interne Referenzspannung 
ausgegeben wird. Diesen Pin könnte ich doch mit einem freien 
Analogeingang verbinden und dann zu Beginn des System eine 
"Nachkalibrierung" durchführen?

von Andrew T. (marsufant)


Lesenswert?

Sebastian B. wrote:
> gerade ist mir noch folgende Idee gekommen.
>
> Mein DAC Wandler besitzt einen Pin an dem die interne Referenzspannung
> ausgegeben wird. Diesen Pin könnte ich doch mit einem freien
> Analogeingang verbinden und dann zu Beginn des System eine
> "Nachkalibrierung" durchführen?

Njet.

Ist ungefähr so als ob Du einen ungenauen 2m Meterstab aka Zollstock 
hast (von dem Du bereits weist das er ungenau ist).

Und den neben eine mit eben jemen Zollstock abgemessene Strecke von 1m 
legst. Und dann meinst das Du da irgendwas an Nachkalibrierung hast.

Klaro?

Kalibrierung heißt letztlich immer das man etwas von dem weiß das es 
deutlich genauer ist als das zu kalibrierende System mit eben jenem 
System vergleicht.


hth,
Andrew

von Sebastian B. (mircobolle)


Lesenswert?

Andrew Taylor wrote:
> Ist ungefähr so als ob Du einen ungenauen 2m Meterstab aka Zollstock
> hast (von dem Du bereits weist das er ungenau ist).
>
> Und den neben eine mit eben jemen Zollstock abgemessene Strecke von 1m
> legst. Und dann meinst das Du da irgendwas an Nachkalibrierung hast.
>
> Klaro?

Mhm. Ja, da hast du natürlich recht, wenn ich meine "ungenaue" 
Referenzspannung mit meinem auch nicht 100 % genauen ADC messe dann habe 
ich ja so etwas wie Fehlerfortpflanzung und keine Kompensierung.

Mein Hintergedanke war einfach, dass ich dachte, dass die intern 
erzeugte Referenzspannung von 2.048 V relativ "großen" Schwankungen 
durch Temperatur etc. unterworfen ist. Deshalb dachte ich, dass evtl. 
Vorteile bringt diese ungenaue aber stabile Referenzspannung in meiner 
internen Routine abzugleichen (siehe ersten Beitrag).

Evtl. nehm ich einfach eine stabile möglichst genaue exteren 
Referenzspannung ... aber auch da kann man sich nicht 100pro sicher 
sein.

von Andrew T. (marsufant)


Lesenswert?

100pro vielleicht nicht, aber auf 0.01% genau ist schon billig kaufbar.
Diese Referenz nimmst du dann, läßt sie "gelegentlich2 per 
Kalibrierroutine drüberlaufen und bist schon deutlich besser dran.

Und wie ich Falk seit Jahren kenne, wird er Dir noch eine paar weitere 
Tips geben können, wie man so einen Zyklus sauber durchzieht.


hth,
Andrew

von Sebastian B. (mircobolle)


Lesenswert?

Andrew Taylor wrote:
> 100pro vielleicht nicht, aber auf 0.01% genau ist schon billig kaufbar.
> Diese Referenz nimmst du dann, läßt sie "gelegentlich2 per
> Kalibrierroutine drüberlaufen und bist schon deutlich besser dran.
>
> Und wie ich Falk seit Jahren kenne, wird er Dir noch eine paar weitere
> Tips geben können, wie man so einen Zyklus sauber durchzieht.
>
>
> hth,
> Andrew

Hallo Andrew,

Danke für den Tipp!
Also möglichst genaue externe Referenzspannung an den DAC (12 Bit). Dann 
diese Referenzspannung "gelegentlich" messen per ADC (12 Bit) und DAC 
intern abgleichen. Richtig zusammen gefasst?

Aber der ADC (also mein Messmittel zur Kalibrierung) ist ja genauso 
diesem "Referenz-Jitter" unterworfen?

Ah, oder meinst du?
ADC misst die Referenzspannung (z.b. 5 V).. weiss, dass diese 
Referenzspannung "exakt" 5.000 V beträgt und gleicht dann intern den 
Offset ab, falls 5.002 V z.B. gemessen werden?

Ansonsten müsste ich ja "blind" abgleichen ?

thx

von Andrew T. (marsufant)


Lesenswert?

Sebastian B. wrote:
> Hallo Andrew,
>
> Danke für den Tipp!
> Also möglichst genaue externe Referenzspannung an den DAC (12 Bit). Dann
> diese Referenzspannung "gelegentlich" messen per ADC (12 Bit) und DAC
> intern abgleichen. Richtig zusammen gefasst?
>
> Aber der ADC (also mein Messmittel zur Kalibrierung) ist ja genauso
> diesem "Referenz-Jitter" unterworfen?


Dein ADC ist der Alterung ,etc unterworfen, soweit korrekt.

>
> Ah, oder meinst du?
> ADC misst die Referenzspannung (z.b. 5 V).. weiss, dass diese
> Referenzspannung "exakt" 5.000 V beträgt und gleicht dann intern den
> Offset ab, falls 5.002 V z.B. gemessen werden?

Dein ADC weiß dank Deiner schlauen Programmierung das die Referenz z.b. 
4.976 Volt ist.
Du sagst ihm das weil Du mit einem sehr genauen Voltmeter Deine Referenz 
einmal vermessen hast (Voltmeter ggfs. leihen) und dank des 
Herstellerdatenblattes weißt Du das diese gekaufte Referenz wenige 
Millionstel per Jahr und Grad Celsius sich ändert. Also aus Deiner Sicht 
wesentlich stabiler ist als Dein ADC.
Diese Wissen teilst Du dem ADC mit weil Du in Deinem Programm die 
(ggfs.) 4,976 als Konstante namens z.B. REF_KONST hinterlegst.


>
> Ansonsten müsste ich ja "blind" abgleichen ?

Nun, das wäre ja nun gar nix Gutes.
Statt blind mußt Du zumindest "einäugig" werden, indem Du  WEISST wie 
hoch Deine Referenzspannung ist. Das erledist Du wie obne beschrieben 
z.B. durch Messung mit dem Leihgerät. Alternativ kaufst Du gegen etwas 
mehr Geld eine genügend genaue Referenzspannungsquelle z.B. Ref-02, , 
und glaubst dem Herstellrdatenblatt.

Wichtig ist halt das Du eine bekannte verläßliche Spannungsgröße hast - 
entweder durch Messung per genauem DVM oder durch Kauf - die genauer ist 
als Dein ADC.


>
> thx


bye,
Andrew

von Hagen R. (hagen)


Lesenswert?

Naja, der Begriff Kalibrierung wurde ja schon erklärt, aber evtl. nicht 
richtig. Du kannst sehr wohl die Ref des DACs mit dem ADC der MCU 
ausmessen und so eine "Kalibrierng" machen. Eben einen Maßstab benutzen 
um was auszumessen. Somit hast du dein System nach dem Maßstab ADC+ARef 
der MCU kalibriert, und welchen Maßstab man anlegt ist für das System 
eine Definitionsfrage. Das ist immer eine Relativ-Kalibrierung. Über die 
wahre Genauigkeit, absolut betrachtet, entscheidet dann die Qualität der 
internen ARef der MCU. Die muß aber uU. garnicht so genau sein, nämlich 
dann wenn man relativ gesehen nur innerhalb des Systemes ADC+ARef der 
MCU im Vergleich zu DAC+Ref arbeitet. Dann zählt nur die Frage welche 
der beiden Refs genauer und stabiler ist. Sollte es die vom DAC sein, 
dann ist diese "Kalibrierung" aber ebenfalls fast sinnlos, es sei denn 
man möchte nur die realtiven Meßunterschiede innerhalb dieses Systemes 
beseitigen. Letzendlich heist dies aber das man mit einer Pi*Daumen ARef 
der MCU eine präzisere Ref des DAC kompensiert. Kalibrierung kann man 
auch durchführen mit einem Maßstab der ungenauer ist, aber um eine 
höhere absolute Genuigkeit zu erreichen ist das natürlich sinnlos. Wenn 
man eine Kalibrierung betrachtet dann muß man immer fragen welchen 
Maßstab man bei dieser Kalibrierung benutzte.

Eine Eichung dagegen gibt exakt Auskunft mit welchen Maßstäben man 
arbeitet, nämlich den gesetzlich anerkannten des Eichamtes.

Gruß Hagen

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.