hx711 Spannungsmessungen

Ich wollte den HX711 24-Bit-Adc-Standalone verwenden, um den Spannungsbereich von 2 mv bis 20 mv zu messen.

Das Problem ist:

  1. Ich kann die adc-Messwerte nicht so interpretieren, wie sie im Kompliment von 2 stehen.
  2. Was soll ich in meinem Code tun (Code unten), damit Spannungen und keine Dezimalwerte gedruckt werden?

Versucht mit verschiedenen Spannungswerten (unten geteilt), und ich bin völlig verwirrt mit den Messwerten, die ich bekomme. Ich weiß nicht, wie ich diese Werte in Spannung umwandeln soll. Was ist die Logik dahinter. Bitte helfen Sie!

Lesungen:

   0mv  ---  5219,
 1.1mv  ---  5095,
 2.3mv  ---  4981,
 2.5mv  ---  4960,
 2.9mv  ---  4918,
   5mv  ---  4693,
10.6mv  ---  4075,
15.1mv  ---  3597,
22.7mv  ---  2700,
40.7mv  ---   562,
5volts  --- -8388608,
-5volts --- -8388607.

Board ist Arduino Leonardo, und ein einfacher Spannungsteiler wird zur Spannungserzeugung verwendet (nur zum Testen).

Es wird eine bogde/HX711-Bibliothek verwendet: https://github.com/bogde/HX711 Code:

/#include "HX711.h"
/#define DOUT  3
/#define CLK  2

HX711 scale(DOUT, CLK);

void setup() {
  Serial.begin(115200);
}

void loop() {
  long avg = scale.get_value(60);
  Serial.print("Digital Code = ");
  Serial.println(avg);
}

Schaltplan

Antworten (3)

Ein guter Plan ist, mit dem Zeichnen eines Diagramms zu beginnen. Wenn Sie davon ausgehen, dass der ADC in Ordnung ist, zeigt Ihnen ein Diagramm, welche Art von Offset, Verstärkung und Polarität Sie haben. Wenn Sie einfach die ersten paar Zahlen, die Sie in eine Tabelle geschrieben haben, hacken und ein XY-Diagramm erstellen, erhalten Sie dies.

Die allgemeine Gleichung für eine Gerade lautet y=mx+c. Ein guter ADC hat eine geradlinige Beziehung zwischen der Eingangsspannung und dem Ausgangscode.

Die Tabelle hat zwei Spalten, eine die tatsächliche Eingangsspannung, die andere y=mx+c, wobei x der ADC-Wert ist. Ich habe m und c grob angepasst, um eine vernünftige Anpassung über einen Teil der Kurve zu erzielen. Ich habe den Versatz etwas weggelassen, damit Sie alle beiden Spuren sehen können.

Sie werden feststellen, dass Sie den ADC-Wert mit einer kleinen Gleitkommazahl multiplizieren müssen. Ob Sie dies mit Ihrem speziellen Compiler tun können und wie genau, ist eine Programmierübung für Sie.

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen, passen die Punkte nicht auf eine gerade Linie. Es könnte sein, dass der ADC nicht linear ist. Möglicherweise sind Ihre Spannungsmessungen nicht linear. Sie müssen untersuchen, welche, bevor Sie diesem System vertrauen.

Ich würde vorschlagen, die Spannung in etwa einem Dutzend Schritten von -FSD auf +FSD zu schwingen (ist sie so ausgelegt, dass sie zwischen +/- 5 V liegt?) Und dann ein ähnliches Diagramm zu zeichnen. Wenn Sie sehen können, was im Großen passiert, untersuchen Sie kleinere Bereiche. Beachten Sie, wo die Enden des gültigen Bereichs sind, und sehen Sie, welcher Code ausgegeben wird, wenn er überladen wird. Versuchen Sie zu verstehen, woher Abweichungen von linear kommen.

Sie schreiben Neil, aber wie diese Werte (5219,5095,4981,4960,4918,4693,4075,3597,2700,562, -8388608, -8388607) in Spannung umgewandelt werden können, wie diese zusammenhängen. hx711 ist ein Differenz-ADC mit 2er-Komplement-Codierung. Ich bekomme Dezimalwerte (oben angegeben). Ich habe die Spannung mit einem Multimeter berechnet, aber ich wollte, dass dieser Adc ein Spannungsäquivalent dieser Messwerte liefert.
Es tut mir leid, aber wenn Sie anhand eines linearen Diagramms nicht sehen können, wie man sie zueinander in Beziehung setzt, werde ich Ihnen nicht die Grundlagen von Summen beibringen. Okay, ein großer Hinweis. Schreiben Sie Vout = mx+c (die Gleichung einer geraden Linie aus Summen 101), wobei x der ADC-Wert ist, m und c Konstanten sind, die negativ sein können. Obwohl Sie m und c mit nur zwei Messwert-/Ausgangspaaren unter Verwendung simultaner Gleichungen auflösen können, ist es für Sie möglicherweise einfacher, sie in eine Tabellenkalkulation einzufügen und mit den Werten von m und c zu spielen, bis die Kurve passt. Hinweis, m wird negativ sein, weil die Steigung des Graphen negativ ist.
Ok, ich will die Leitungsgleichungen nicht, ich kenne sie bereits, es muss eine Beziehung zwischen der differentiellen ADC-Zählung und der Spannung geben. Damit ich diese Werte im Code implementieren kann und es keine Spannungen ausgibt.
Die Liniengleichung ist die Beziehung. Wollen Sie damit sagen, dass Sie nicht wissen, wie man Floats in Ihrem Code multipliziert und addiert?
@ShivankG OK, habe die Summen 101 für dich in der Antwort gemacht, jetzt irgendwelche Probleme?
Dies geht im Systemprozess tatsächlich zu einer Art Kalibrierung über . Eine erste Antwort kann anhand von Auflösung und Fullscale-Bereich direkt aus dem Datenblatt gewonnen werden.
@ShivankG dieser ADC wird niemals Daten mit Einheiten von ausgeben Volts. Die meisten ADCs nicht. Sie müssen das Skalierungsverhältnis des ADC verwenden, wie ich in meiner Antwort erkläre .

Beachten Sie, dass das 2er-Komplement in gewissem Sinne die "normale" vorzeichenbehaftete Ganzzahldarstellung ist. Was also tatsächlich erforderlich ist, ist das 24-Bit-2er-Komplement auf 32-Bit-Ganzzahl zu erweitern, was so gemacht werden könnte (vorausgesetzt, es enthält das rohe 24-Bit-Lesen rawvon HX711):

uint32_t raw = 0 ;
... // read HX711 bits in raw
int32_t val = ((int32_t)(raw<<8))>>8;

Dies verschiebt nur das MSB nach links und verschiebt dann die singende ganze Zahl zurück, sodass das Vorzeichen erhalten bleibt.

Bitte beachten Sie auch, dass laut HX711 der Gleichtakt des Differenzeingangs zwischen AGND+1.2 und AVDD-1.3 liegen sollte. Dies bedeutet, dass beide Eingänge, dh A+/A-, in diesem Bereich liegen sollten - 1,2 V bis 3,7 V, falls AVDD 5 V beträgt (was auf einer gemeinsamen HX711-Modulplatine nicht der Fall ist). Das Herunterskalieren von A+/A- auf den Bereich von 2 mV bis 20 mV funktioniert also nicht. (Ich hatte eine harte Zeit und einige extrem seltsame nichtlineare Messwerte, bis ich den Gleichtakt in der Spezifikation fand).

Sie müssen also Ihren Eingang sowohl skalieren als auch verschieben, sodass sowohl A+/A- im Bereich von AGND+1.2 bis AVDD-1.3 liegen.

Umrechnung in mV ist dann A v D D 2 24 1000 G A ich N v A l .

Die Spannungsäquivalenz Ihres ADC-Codeausgangs hängt vom Vollbereich des ADC und seiner Auflösung ab. Zum Beispiel eine ACD mit a ± 5 v Eingangsbereich und eine 10-Bit-Ausgabe hat:

v M A X v M ich N 2 N B ich T S = 5 v ( 5 v ) 2 10 B ich T S = 9,765625 M v L S B

Die Einheiten mV/LSBsind bei der Arbeit mit ADCs ziemlich häufig. Sie können dann die erwartete Eingangsspannung finden, indem Sie einfach die aktuelle ADC-Zählung mit ihrem äquivalenten Spannungsschritt pro Zählung multiplizieren.

Betrachtet man das HX711-Datenblatt von Sparkfun , ist der Full-Scale-Bereich variabel und hängt von der Verwendung der A- oder B-Eingänge ab. Aus dem Datenblatt:

Der Differenzeingang von Kanal A ist so konzipiert, dass er direkt mit dem Differenzausgang eines Brückensensors verbunden wird. Er kann mit einer Verstärkung von 128 oder 64 programmiert werden. Die großen Verstärkungen werden benötigt, um das kleine Ausgangssignal des Sensors aufzunehmen. Wenn eine 5-V-Versorgung am AVDD-Pin verwendet wird, entsprechen diese Verstärkungen einer differenziellen Eingangsspannung im Vollausschlag von ±20 mV bzw. ±40 mV.

Der Differenzeingang von Kanal B hat eine feste Verstärkung von 32. Der volle Eingangsspannungsbereich beträgt ±80 mV, wenn eine 5-V-Versorgung am AVDD-Pin verwendet wird.

Da die interne ADC-Auflösung 24 Bit beträgt, können Sie die LSB-Gewichtung für jede der Verstärkungen von 32, 64 und 128 berechnen. Die Sparkfun-Bibliothek auf GitHub zeigt möglicherweise, wie dies in Code implementiert werden kann.

Hallo user2943160, du hast mein Problem, eigentlich verwende ich diese Formel nur, wenn ich meine ADC-Zählung mit LSB multipliziere, gibt es nicht die entsprechenden Werte, zB: LSB = 4,8 nV, LSB * 562 ! = 40 mV.
Außerdem verwende ich ChannelA mit 5 Volt AVDD, einem einfachen Potentialteiler, um die Spannung auf 2 mV bis 40 mV herunterzuskalieren. Wie Sie in der angegebenen sehen können, verwende ich bereits die Sparkfun-Bibliothek, ich werde es schaffen, auch meinen Schaltplan zu posten.
Bitte posten Sie in Ihrer Frage (zusätzlich zum Schaltplan) ein Schema Ihres Testaufbaus. Zeigen Sie einfach die Anschlüsse für die mV-Signalerzeugung und den Ain- oder Bin-Anschluss für den HX711. Sie müssen sicherstellen, dass Ihre Eingangssignale auch innerhalb des gültigen Eingangsbereichs der analogen Eingänge liegen.