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?
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:
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
Wenn ich den ersten und letzten Zahlensatz aus Ihrem Kommentar verwende, bekomme ich Und
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!
Betrachten wir nun alle Ihre Messwerte. Mein Ergebnis ist Und , 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.
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 fit
Befehl 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:
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.
Benutzer1070829
Benutzer1070829
Nick Johnson