HX711-breakout von Sparkfun, Stromverbrauch im deep sleep

Wir hatten unter Probleme beim power_down() des HX711 unter ArduinoCore für ESP32 - #6 by clemens gerade das Thema Stromverbrauch von HX711 im deep sleep, da klinke ich mich ein:

du meinst die scale.power_down() Funktion?

Mein HX711 die der Sparkfun-Variante am LoPy4 (mit Terkin) zieht ~300µA im Schlaf. DAS ist Mist. ;)

1 Like

Ja, danke power_down meinte ich, ist dort korrigiert!

Ich frage mich gerade, was den hohen Stromverbrauch verursacht. Passt der code nicht oder ist das Sparkfun-Modul anders aufgebaut als die verbreiteten grünen Plainen? Kannst du die Sparkfun-Platine gegen eine andere tauschen oder hast du die fest verlötet?

2020-02-14 11_16_55-SparkFun Load Cell Amplifier - HX711 - SEN-13879 - SparkFun Electronics - SeaMon

Noch eine Frage, die grüne Platine hat ja nur VCC als Anschluss für “plus”, die Sparkfun hat VCC und VDD wie hast du die denn verkabelt?

Im Schaltplan steht dazu

VCC vs VDD:
VCC is the main supply voltage, while VDD sets the
digital logic voltage reference and should be
connected to microcontroller supply voltage, or
shorted to VCC.

Und im hookup guide

Note: VCC is the analog voltage to power the load cell. VDD is the digital supply voltage used to set the logic level.

PRO TIP: In many cases, you can just short VCC and VDD together. If your microcontroller uses 3.3V logic however, you’ll want to connect VCC to 5V and VDD to 3.3V.

Ich habe nur die 3,3v Vom LoPy4 an VDD anliegen. Die Messungen scheinen damit stabil ausgelesen werden zu können. Wenn die grüne Variante des HX711 Breakouts in ein paar Tagen ankommt, werde ich vergleichen.

Mit 5V zusätzlich an VCC fängt die Platine an zu pfeifen. Hab ich erstmal wieder rückgängig gemacht.

Hmm, wenn du nur eine Stromquelle nutzt, müsste dann VCC und VDD nicht zusammengeschlossen werden?

[edit] Noch etwas gefunden https://github.com/sparkfun/HX711-Load-Cell-Amplifier/blob/master/firmware/SparkFun_HX711_PowerTest/SparkFun_HX711_PowerTest.ino#L8-L10

This example demonstrates powering down the breakout board. Our measurements peg the HX711 at 70nA when powered down and 15.8mA when powered up. The powered up current depends heavily on the type and number of load cells you are using.

D.h. die 300 uA sollten locker schlagbar sein. ;-) Und es liegt nicht am board per se!

Das wundert mich auch sehr. Habe wirklich nur die 3,3V an VDD anliegen und VCC offen. Laut Schaltplan des Sparkfun HX711 [1] dürfte gar keine regulierte Spannung an E+ ankommen. Ich messe aber 2,3V im Messmodus und 0V beim HX711-Schlaf. Durch VDD gehen während der Messung circa 14mA und 320µA im Schlaf. Ich konnte so auch die Zelle kalibrieren und bekam stabile Messwerte.

Lege ich zusätzlich 5,2V an VCC, messe ich 4,2V an E+ und der Strom steigt im Schlaf auf unakzeptable 520µA.

Das alles mit unbelasteter Load Cell aus dem Setup von Andreas N. Ich werde mal eine H40A von Bosche anschließen…

[1] https://cdn.sparkfun.com/assets/f/5/5/b/c/SparkFun_HX711_Load_Cell.pdf

Was passiert denn wenn du VDD und VCC verbindest? Kann dann das Modul im deep sleep den Verbrauch weiter runterfahren?

Ca. 2,4 V hatte ich auch bei mir gemessen, zumindest die 0 V beim power down des HX711 passen ja!

Du meinst, beide auf 3,3V? Nein ich bleibe bei etwas über 300µA.

Gleiche Ergebnisse mit der H40A.

PS: ich nutze die gleiche Hardwarerevision wie im oben verlinkten Schaltplan

1 Like

Ha! SJ2 ist per Default geschlossen und hängt R5 mit 10kOhm an VCC zu GND ein. Das macht genau die 300 bzw 500µA.

Default: Closed - Data rate set to 10SPS
Open jumper to set to 80SPS
Increases noise per read

Die Verbindung nun aufgekratzt und habe 30µA im Sleep.

Hat jemand Erfahrungen mit der höheren Data Rate und dem vermeintlich größerem Rauschen?

Und, ein anderes HX711 Board (andere Revision als abgebildet) hängt einen 150kOhm an dieser Stelle ein. Leider zieht das Modell 2,6mA im Schlaf aus mir noch nicht bekannten Gründen.

1 Like

Ja, dieser WIderstand ist Schwachsinn und ist leider aus Bequemlichkeitsgründen dort drin. Es gibt keinen Grund für diesen zusätzlichen Strompfad, er ist ein Zugeständnis an die Leute, die SJ2=open brauchen oder wollen, damit die dann nötige Verbindung zu plus (“rate = 1”) funktioniert (eigentlich gehört dort ein Jumper mit drei Kontakten hin und nicht noch der Widerstand…) .

Leider ist genau dort auch ein bedauerlicher Designfehler bei Sparkfun passiert: dieser Widerstand R5 geht zu VCC und nicht zu VDD, obwohl der RATE-Eingang eindeutig in die DVDD-, also die digital supply-Domäne gehört. Wenn man also VCC an 5V und VDD an 3,3V legt, “schützt” nur R5 den IC vor den 5V - während der ‘Rest’ des Digitateils 3,3V bekommt… das begründet einen Teil des von Dir gehörten “Pfeifens”.

image

Am besten wäre es also, wenn Du

  • SJ2 wieder schließt, um die gewünschten 10 s/s zu bekommen,
  • gar keinen Strompfad nach Plus für den RATE-Eingang vorsiehst, also R5 entfernst.

Du willst ja nur die unnötigen ca. 300 µA loswerden, aber nicht gleich noch die Abtasrate des ADC ändern - also SJ2 zu und raus mit R5 ! :)


Aus zwei Gründen tust Du Dir bei unserer Anwendung keinen Gefallen damit: schlechtere Genauigkeit durch höheres Rauschen und durch unwirksame 50 Hz-Filter.

höheres Rauschen durch höhere Abtastrate

Beim HX711 verdoppelst Du mit RATE=80 sps gegenüber 10 sps das noise figure (im China-Datenblatt fehlt natürlich wieder die Angabe zu VDD, Vsup und AVDD, also den bei der Messung herrschenden Betriebsbedingungen…):

Was das bedeutet, sieht man im Vergleich mit dem ADS1231:

Du erhälst also immer eine um etwa 1,2 bit verschlechterte Genauigkeit beim ADS1231, wenn Du die Geschwindigeit auf hohe Abtastrate setzt.

Leider sagt uns das HX711-Datenblatt hingegen nichts über das VP-P noise, also das peak-to-peak-Rauschen aus, so daß ‘nur’ ENOB und nicht die noise-free bits errechnet werden können. Auch wurde nur für einen einzigen Betriebsfall einer (unbekannten) AVDD gemessen, womit der Aussagewert noch weiter eingeschränkt wird. Immerhin aber kommt man so auf 0,84799691, also etwa 0,85 bit, die mindestens verloren sind bei RATE=80 gegenüber RATE=10 sps am HX711.

FIXME: kleine Berechnung als summary

(Was hier wie ein Nachteil des ADS1231 aussieht (1,2 bit gegenüber 0,85 bit), kommt daher, daß der ADS1231 gegenüber dem HX711 bei 10 sps ein um etwa ein Drittel besseren Rauschwert hat.)

Wenn ich mit 80 sps anstatt 10 sps messe und nur ein einzelnes sample verwende (ohne, daß ich die samples z.B. einer Sekunde nehme, um dann jeweils über 10 oder 80 samples einen Mittelwert zu verwenden), dann hat dies eine Sample bei 80 sps einen noch kleineren ‘repräsentativen’ Wert und verlangt daher umso mehr nach einer Mittelung von aufeinanderfolgenden samples.

Dieses eine Bit mag nicht viel erscheinen, es kann jedoch über den Unterschied in der Jahresgenauigkeit einer Waage von 100g zu 200g ausmachen. Wer also auch im Winter messen möchte, um den Verzehr und damit z.B. besser Reserven abschätzen zu können und Brutbeginn bei immer wärmer werdenden Wintern feststellen möchte, sollte keinen Grund haben, auf 80 samples per second zu stellen (oder gar noch schneller wie z.B. bei ADS1220 oder NAU7802 möglich).

digitale Filter in delta-sigma-ADCs

Der zweite Grund, weshalb man tunlichst bei 10 sps bleiben sollte, ist die Tatsache, daß die digitalen Filter zur 50Hz/60Hz-Unterdrückung in den delta-sigma-ADCs für eine Rate von 10 sps spezifiziert sind (bei ADS1231/1232/34 und HX711) - sie verlieren ihre gute Wirksamkeit bei höheren Abtatsraten (im Datenblatt z.B. des ADS1242 (S.13) kann man die eintretende Verschiebung der unterdrückten Frequenzen ablesen, und im Datenblatt des ADS114S06B (S.29) lassen sich sogar verschiedene Filter je nach gewähltem Datenraten-Bereichen erkennen).

Diese Filter unterdrücken die Grundfrequenz(en) plus die niederen Harmonischen jeweils mit mindestens 100 dB, 120 und 140 dB sind üblich (AD7710/11/12: 200 dB !), und ihr EInfluß kann nicht hoch genug angesehen werden. Imkerwaagen stehen zwar (meist) im Freien und nicht in Häusern, aber selbst dort sind 50Hz- (bzw 60 Hz-)Felder omnipräsent. Grob-Stromleitungen sind nicht geschirmt, man muß also fast überall deren Einfluß erwarten. Wer jemals EMV-Messungen oder sehr hochohmige Messung gemacht hat, weiß warum fünfstellig kostende EMV-Meßempfänger einen Lautsprecher haben: 50 Hz hört man überall raus!

Also: bei 10 samples pro Sekunde bleiben.

5 Likes

Vielen Dank für die fundierte Expertise. Damit bin ich mir nun sicher, den R5 zu verbannen.

Frage mich aber trotzdem noch, wieso ich überhaupt ohne Bespeisung von VCC stabile Messwerte hatte. Reicht der HX711 pauschal die VDD nach AVDD durch und zieht AVDD nur höher, wenn auch VCC >= VDD anliegt?

(hier steht stand lange eine Antwort aus)

So machen das die ATMega seit dem Mega8: dort sind Vcc und AVcc intern mit einer Diode verbunden (daher steht im Datenblatt, daß Vcc und AVcc sich nicht mehr als ±0,3V unterscheiden dürfen). Deshalb funktioniert es eben sogar, wenn man AVcc nicht mit Vcc verbindet (HIGH-pegel an z.B. portC (Mega8: PC0…PC3) ist dann aber um 0,3V kleiner).

Der Grund beim HX711 ist fast der gleiche, derjenige nämlich eines jeden CMOS-ICs mit mehr als einem Versogungseingang (oder teilweisem stand-by):
alle Ein- und Ausgänge sind mit ESD-Schutznetzwerken ausgerüstet (verschiedene Diodentypen). Außerdem sind “Plus” und “Minus” (Vcc bzw. Vdd, und Vss bzw. GND) mit einer “clamp” geschützt (Überspannungsschutz, z.B. Diode+FET oder Diode+Thyristor):

image

Normalbetrieb:

image

Sobald eins der beiden beteiligten supplies nicht anliegt, gibt es über diese Schutzdioden einen Strompfad nach “Plus”:

image

Und weil das auch innerhalb eines einzigen IC so aussieht, der mindestens zwei power rails hat, funktioniert aus diesem Grund der HX711 auf wahrscheinllich Millionen ‘falschen’ breakout-PCBAs, obwohl deren supply-Pins nicht richtig beschaltet sind. Die Güte der internen Dioden ist jeweils nicht bekannt, außdem ist ihre Vorwärtsspannung immer mindestens 0,3V, so daß die sekundäre, also die parasitär mitversorgte Seite immer um mindestens diesen Betrag kleiner ist.

3 Likes