Front-End des Voltmeter-Skalierungswiderstands und ADC-Kalibrierungskoeffizienten

Ich entwerfe ein Voltmeter und ein Strommesssystem, das Teil einer elektronischen Last ist. Nehmen wir zuerst das Voltmeter in Angriff.

Ich verwende einen 16-BIT-ADC (AD7708) und möchte die folgenden Spannungen messen, siehe unten. Der ADC ist ziemlich gut für DC-Anwendungen und wird im BK8500-Instrument verwendet.

Hier uns, was ich erreichen möchte.

0,1 V bis 25 V (eine Auflösung von 1 mV mit einer Genauigkeit von 0,05 %) 0,1 V bis 120 Vmax (eine Auflösung von 10 mV mit einer Genauigkeit von 0,05 %)

Ich habe den schmerzhaften Treibercode (basierend auf dem Datenblatt) geschrieben, der alle Initialisierungs-Startroutinen wie Nullkalibrierung, interne DSP-Filterung, ADC-Verstärkung und Single-Ended-Betriebsmodus durchführt. So weit, so gut, es funktioniert, da ich mit meinem Fluke 87V von 1 mV bis 2,5 V (ADC FSD) eine gute Genauigkeit messen kann. Hinweis: Der ADC verwendet eine externe Präzessions-2,5-Volt-Referenz (ADR421) und wird von einem rauscharmen Netzteil gespeist (DP832).
http://www.analog.com/media/en/technical-documentation/data-sheets/ADR420_421_423_425.pdf

Frage 1

Ich bin verwirrt darüber, wie ich ein Skalierungswiderstands-Front-End mit einem geeigneten Verstärkungsverstärker für den 25-V-Bereich und den 120-V-Bereich entwerfen soll. Bisher sind meine Versuche fehlgeschlagen, das Widerstandsteilerverhältnis, das ich zum Skalieren für 25 V verwendet habe, beträgt 100 uV pro 1 mV für R1 = 18 K und R2 = 2 K (wobei R1 und R2 einen einfachen Widerstandsteiler darstellen). Gibt es gute Beispiele, die ich verwenden kann als a Leitfaden für diese Art von Design?

Frage 2

Wie bezieht ein Design Kalibrierkoeffizienten ein, gibt es dafür ein Standarddesign? Wie viele ADC-Koeffizienten sind erforderlich, um eine Messung zu beeinflussen? Ist es über den gesamten Messbereich oder nur für Messwerte mit niedriger Auflösung?

Antworten (2)

Dies ist eine späte Antwort, aber hier ist etwas, das Sie verwenden können, um Ihre Kalibrierungskoeffizienten zu bestimmen. Wie @NickJohnson bereits geschrieben hat, kann eine lineare Funktion verwendet werden, um vom ADC bereitgestellte Werte in "wahre" Werte umzuwandeln. Lassen Sie mich also die Parameter umbenennen:

v WAHR = C gewinnen v lesen + C versetzt

Die einfachste Methode zur Berechnung der Koeffizienten besteht darin, zwei Messungen durchzuführen, eine am unteren und die andere am oberen Ende des ADC-Bereichs. (Aber stellen Sie sicher, dass Sie nicht an den Grenzen messen, dh messen Sie bei 0,1 V und 4,9 V für einen Bereich von 0-5 V). Die Koeffizienten sind

C gewinnen = v WAHR hoch v WAHR niedrig v lesen hoch v lesen niedrig

C versetzt = v WAHR niedrig C gewinnen v lesen niedrig

Wenn ich den ersten und letzten Zahlensatz aus Ihrem Kommentar verwende, bekomme ich C gewinnen = 1.11303 Und C versetzt = 0,469206

Aber ist das die maximale Präzision, die Sie erreichen können? Hier ist ein Diagramm, das das Residuum zeigt – die Differenz zwischen den Werten, die mit der Formel aus den gelesenen Werten und den wahren Werten berechnet wurden. Der erste und der letzte Wert haben ein Residuum von Null, da sie zur Berechnung der Koeffizienten verwendet wurden. Aber für die anderen Punkte ist der berechnete Wert bis zu 16mV (oder 0,65%) zu niedrig!

Geben Sie hier die Bildbeschreibung ein


Betrachten wir nun alle Ihre Messwerte. Mein Ergebnis ist C gewinnen = 1.11224 Und C versetzt = 0,456815 , die etwas von den obigen Werten abweicht.

Hier nochmal die Handlung. Der erste Punkt liegt um 12 mV oder 1,2 % daneben, aber die anderen liegen um -5 mV...-8 mV oder bis zu 0,2 % daneben.

Geben Sie hier die Bildbeschreibung ein

Wie wird es gemacht? In Excel können Sie Ihre Werte einfach als "xy-Plot" zeichnen. Stellen Sie sicher, dass die gelesenen Werte auf der x-Achse und die wahren Werte auf der y-Achse stehen. per rechtsklick auf das diagramm kann man eine "gerade der besten passung" oder ähnliches zeichnen und sich die parameter anzeigen lassen.

Ich selbst liebe gnuplot für solche Aufgaben. Erstellen Sie zur Verwendung eine einfache Textdatei mit Ihren Daten:

1 1.320
2 2.207
3 3.105
4 4.000
5 4.902
6 5.805
7 6.707
8 7.605
9 8.500
10 9.406

in gnuplot tun

    # Nur Kosmetik
    Unset-Taste
    setze ytics nomirror
    y2tics setzen

    xlabel "V_{read}" setzen
    setze ylabel "Residuum V_{true} - f(V_{read}) [V]" tc rgb "red"
    set y2label "Residuum (V_{true}-f(V_{read})) / V_{read} [%]" tc rgb "blue"



    # Definieren Sie nun die Funktion, passen Sie sie an die Daten an und zeichnen Sie alles auf

    f(x)=m*x+b

    fit f(x) "adc.csv" über m, b

    Plot "adc.csv" u 1:($2-f($1)) w lp Punkt 7, "adc.csv" u 1:(($2-f($1))/$2*100) Achsen x1y2 w lp Punkt 7 lt 3

Wenn Sie den fitBefehl ausführen, erhalten Sie viele Ausgaben, was zu

Endgültiger Parametersatz Asymptotischer Standardfehler
====================== ==========================

m = 1,11224 +/- 0,0007126 (0,06407 %)
b = -0,456815 +/- 0,004237 (0,9275 %)

das ist das Ergebnis.

Zusätzlich:

  • Messen Sie so viele Punkte wie möglich
  • Messen Sie jeden Punkt mehrmals
  • Wenn eine lineare Funktion nicht gut mit Ihren Daten übereinstimmt, sollten Sie eine nichtlineare Funktion verwenden.

18k/2k geben Ihnen genau 10%, was Sie Ihrer Meinung nach brauchen, obwohl der Gesamtwiderstand gegen Masse von 20k etwas zu niedrig ist, abhängig von Ihrem ADC und davon, ob Sie einen Pufferverstärker verwenden oder nicht. Sie sagen, Ihre Versuche "schlagen fehl", aber nicht, welche Probleme Sie haben, daher ist es schwierig, mehr Ratschläge zu geben.

ADC-Fehler werden typischerweise als Offset-Fehler und Verstärkungsfehler modelliert. Ihr Widerstandsteiler erzeugt keinen Offset-Fehler, aber abhängig von der Präzision der Widerstände einen Verstärkungsfehler.

Die Standardmethode, damit umzugehen, besteht darin, einen Kalibrierungskoeffizienten für den Offset und einen für die Verstärkung zu speichern und sie wie folgt anzuwenden:

Vout = Vin * Cgain + Coffset

Das gilt für alle Maße – nicht nur für kleine. Sie können die zulässige Skalierung dieser Offsets auf alles einstellen, was angesichts der Fehler, die Sie wahrscheinlich in Ihrem Design sehen, angemessen erscheint.

Danke, für die schnelle Antwort. Es sieht so aus, als müsste ich meine Messungen überarbeiten. R1 = 100k, R2 = 1K 1mV = 9,9uV Das Problem, das ich habe, ist, dass meine Messwerte einen großen Offset-Fehler aufweisen.
Hier sind einige der aufgezeichneten Offsets: 1 V = 1,320 V, 2 V = 2,207, 3 = 3,105, 4 = 4,000, 5 = 4,902, 6 = 5,805, 7 = 6,707, 8 = 7,605, 9 = 8,500, 10 = 9,406
100.000 + 1.000 ergibt ein Verhältnis von 1/101, was nicht ganz 1 % entspricht. Der Offset-Fehler kommt nicht vom Widerstandsteiler, sondern von anderen Fehlern wie dem Erdstrom.