Diskussion zum Nuvoton NAU7802 24bit 2ch ADC

via @Andreas: Auch beim NAU7802 tut sich was:

2 Likes

Vielen Dank! Ich habe die dort entstandene MicroPython-kompatible Bibliothek [1] cedargrove_nau7802.py gerade bei Terkin » Add support for NAU7802 » MicroPython herausgearbeitet.

Unabhängig davon hat @MKO an Terkin » Add support for NAU7802 » Linux IIO gearbeitet, siehe auch Erschließung des HX711 Treibers für Linux-IIO.


  1. Genauer gesagt ist es eine CircuitPython Bibliothek. ↩︎

1 Like

Bin mir nicht sicher, wie kompatibel CircuitPython und MicroPython untereinander sind.
Falls eine Chance besteht, daß das out of the Box funktionieren könnte, würde ich sie die Tage mal testen.

Re: Cedar Grove NAU7802 CircuitPython library

Code snippets for calibration and reading can be found at clue_scale_calibrate.py and clue_scale_code.py.

Man bräuchte vermutlich schon eine CircuitPython Firmware auf dem Gerät, sowie ein paar Zusatzpakete aus dessen Ökosystem – siehe cedargrove_nau7802.py#L11-L17. Terkin verwendet zwar mittlerweile auch einige Bibliotheken von CircuitPython, bisher jedoch nur unter CPython. [1]

Ob diese Bibliotheken adafruit_bus_device sowie adafruit_register und deren Abhängigkeiten Adafruit-Blinka, Adafruit-PlatformDetect und Adafruit-PureIO auf einem Pycom MicroPython bzw. ESP32 überhaupt laufen, ist mehr als fraglich. [2] [3]

Bei cedargrove_nau7802_example.py hab ich mal den relevanten Code fürs Wiegen aus clue_scale_code.py herausdestilliert [4].


  1. Das ist einfach, da das CircuitPython Ökosystem verspricht, kompatibel mit CPython zu sein. Die Kompatibilitätsbibliothek ist in diesem Fall Adafruit-Blinka. ↩︎

  2. Leider ist CircuitPython nicht für den ESP32 ausgelegt und verfügbar, soweit ich weiß. ↩︎

  3. Die Situation ist also (für Pycom MicroPython) weiterhin nicht “einfach so” gelöst. Möglicherweise könnte man an den CircuitPython Treiber für den NAU7802 Hand anlegen, um ihn kompatibel mit Pycom MicroPython zu machen. ↩︎

  4. Er wird jedoch unter Pycom MicroPython nicht ohne weiteres funktionieren, sondern gleich bei "import board" fehlschlagen. Diese Bibliothek ist bereits Teil von Adafruit-Blinka, siehe Adafruit_Blinka/src/board.py at main · adafruit/Adafruit_Blinka · GitHub. ↩︎

Re: MicroPython support for nau7802py library by Will Long

Other people just asked for MicroPython support on the issue tracker of this library, the idea is to use the micropython-smbus library to adapt the lowlevel interface to the I2C bus.

Da wir Aktuell noch recht wenig Erfahrungen und Berichte über den Nau7802 haben werde ich hier mal uber meine bisherigen Erfahrungen mit ihm mit euch teilen.

Ich habe für meine Tests die Arduino Bibliothek SparkFun_Qwiic_Scale_NAU7802_Arduino_Library verwenndet.
Node war der Heltec HTCC AB01 und als wägezelle eine Bosche H30A mit 150Kg gewesen. Kalibrier und Testgewicht 5Kg.
Breakout war eines von GitHub - MKO1640/NAU7802.

Bei Nutzung sind mir ein paar kleine Eigenheiten des NAU7802 aufgefallen.
Absolut schade finde ich das er nur einen flüchtigen Speicher hat, so kann man dort nicht Offset und Faktor nicht dauerhaft speichern. Die intern ligenden verstellbaren Pullup Wiederstände machen für mich so auch überhaupt keinen Sinn.

Das auslesen der Werte klappt gut und sauber, auch ist er dabei flott unterwegs.
allerdings sollte man nach dem starten und einrichten des Sensors und den Einstellungen noch den AFE kalibrieren lassen. Ansonnsten hat er einen sehr hohen Offset-Drift welcher dann schon gut mehere 100g sein kann. Nach der AFE-Kalibrierung sollte man noch ca. 600ms warten er kann aber auch schon Daten nach 50 ms ausgeben Schwingt dann allerdings noch etwas in den Werten.

Er liebt es Dauerhaft mit Strom versorgt zu werden. Als ich ihn mittels Vext nach jedem Messzyklus ein und ausgeschaltet habe stellte ich dort auch einen Offset-Drift von um die ±20 g fest. Bei einem Stromverbrauch im Schlaf von etwa 4µA (gemessen) sollte man das auch nicht zwingend tun müssen.

Wenn ich ihn an VDD lasse schwingen die Werte bei einem Mittelwert aus 20 Lesungen so um +/- 3g.
Bei den Test konnte ich bisher auch noch keine Außreißer bei den Messfehler feststellen.

Langzeitmessungen, um ein Driften über die Zeit/Temperatur festzustellen habe ich noch nicht gemacht.

Werde aber darüber, hoffe ich, in kürze Berichten können.

6 Likes

Hi Michael,

vielen Dank für Deinen Bericht. @tonke hat kürzlich auch bei ESPHome mit NAU7802 einiges geschraubt, das Dich vielleicht auch interessiert.

Viele Grüße,
Andreas.

Werde aber darüber, hoffe ich, in kürze Berichten können.

Was sind/waren Deine Ergebnisse?

Ich habe mit dem Adafruit NAU7802 Board und festen Widerständen (1k-10-1k, WEL RC65Y-10RBI und WEL RC65Y-1K0BI) aktuell Messungen gemacht. Im Freien, alle 20 Minuten, Mittelwert aus 4 Messung incl. interne Temperatur. Der Temperaturunterschied war bis jetzt bei max. 14°. Mit gain=64 kommt als ADC Wert ca. 5397500 raus. Der max. Unterschied ohne Temperaturkompensation liegt bei 5000. Wenn man den ADC Wert der niedrigsten Temperatur und der höchsten Temperatur zur Kompensation nimmt, sinkt der max. Unterschied auf 1000. Relativ zu 5397500 sind das 0,2%%. Bei 150kg entspricht dies 30g. Aktuell teste ich mit CZL601-100kg und 10kg Last. Wird aber noch etwas dauern, bis ich da Werte habe.

3 Likes

Beim CZL601, aber aktuell noch ohne Last, sind die Werte ADC 23858 und der maximale Unterschied ist 1145 bei einem Temperaturunterschied von 7°. Wenn ich die Temperatur zur Kompensation nutze, verringert sich der Unterschied hier nur etwas auf 890.
Ab Mitte der Woche dann hoffentlich mit Last.

1 Like

Hallo @Achim, willkommen bei Hiveeyes! Welche CZL601 hast du denn im Einsatz, die mit 50 kg oder die mit 100 kg und wie kompensierst du die Temperatur, s. Temperaturkompensation für Waage (Hardware/Firmware), einfach eine lineare Kompensation oder ewas komplexeres wie im thread oben?

CZL601 für 100kg. Die Idee ist, davon dann 2 zu verbauen.
Ich nutze eine einfach lineare Kompensation. Ich sammle die ADC Werte über ein paar Tage jeweils mit der Temperatur (kommt auch vom NAU7802). Der ADC- und Temperaturwert sind dabei jeweils Mittel aus 4 Messungen mit 10Hz. Dann nehme ich die gemittelten ADC Werte von der niedrigsten und höchsten Temperatur und errechne daraus eine lineare Kompensation. Zum Abschluss ermittle ich dann die maximale ADC Differenz mit und ohne Kompensation über alle Messwerte hinweg. Aktuell komme ich damit dann auf ca. 14 Bit. Die lineare Temperaturkompensation bringt da jeweils 1-2 Bit. Ich bin gespannt, wie das bei einer Last mit 10kg aussieht. Mir kommt es da auch nicht auf “perfekte” Werte an, sondern eher um die Einflüsse von jeweiligen Sensoren (z.B. CZL601 oder Vechta E110A) oder Spannung 3V oder 5V an .

3 Likes

Leider macht mir der Regen inzwischen einen Strich durch die “Rechnung”.

Testaufbau: jeweils 2 Plattform-Wägezellen parallel geschaltet (ohne Abgleich) an einem NAU7802 mit einem ADC- Kanal, interner LDO mit 3V (leicht außerhalb der 10mA der Spezifikation). Belastet mit ca. 12 kg. Alles bei eher konstanter Zimmertemperatur, kommt also ohne Temperaturabgleich aus. Testlauf über 3 Tage.

CZL601 100kg hat bei meinem Testlauf eine Roh-Auflösung von 16bit. Ein Rohwert von 10000 entspricht in etwa 1kg. Das macht dann eine Auflösung von 30g.
Vechta E110A auch 100kg hat bei mir nahezu die selben Werte und macht somit bei gleicher Temperatur keinen nennenswerten Unterschied.

Mal sehen, wann es aufhört zu regnen oder ob ich mir einen anderen, trockenen Platz im Außenbereich suchen muss ;-).

Das sind die Ergebnisse von einem Testlauf, der über ca. 1 Woche ging.
Kanal A ist die CZL601-100kg (Olivgrün), Kanal B die Vechta E110A-100kg (Blaugrün).
Rot ist die Temperatur.
:-) man kann sehen, dass die CZL601 präzise der Temperatur folgt (-:
Ist schon großer Quatsch, was es da zur CZL601 gibt. Zertifikate ohne Herstellerangaben. Da verwundert es dann auch nicht so wirklich, dass das mit “Compensated temp. range” -10° bis +40° nicht so wirklich passt.

Dass das Gewicht bei beiden abnimmt, kommt vom “Trocknen” des Beton-Zaun-Fundaments. Das stand leider beim Baumarkt im Regen. Ich habe daher einen neuen Testlauf aufgesetzt, mit etwas, dass schon trocken ist ;-).

3 Likes

Spannend, auch weil ich die Vechta E110A-100 kg schon eingesetzt habe und auch die CZL601-100 kg hier schon länger rumliegt. Ich hätte eigentlich gedacht die CZL601 sei tendenziell eher besser, hatte die 50 kg-Version hier schon mal angeschlossen, aber nicht systematisch getestet. Wir hatten ja bei der Bosche H40 schon gesehen, dass selbst Zellen des gleichen Modells sehr stark schwanken könnnen, s. Strain gauge load cell tests in a DIY climate chamber - #25 by zmaier hast du ggf. noch andere Zellen der CZL601-100 bzw. der E110A-100 die du nochmal testen könntest, um etwas näher an Einzelfall vs. systematische Effekte zu kommen?

Ja, habe ich (6x CZL601-100kg und 2x Vechta E120A-100kg, die E110A weicht von der Geometrie ab, daher habe ich für neue Tests die E120A beschafft). Die Messreihe ist von eine Double-Konstruktion. Ich würde der einfachheitshalber neue Messreihen dann lieber mit einer einzelnen Zelle und Alu-Kreuz durchführen, da ist das tauschen der Zelle einfacher.

Ich habe ein “bisschen länger” im Netz zur Herkunft der CZL601 recherchiert und habe den Eindruck, dass ist ein OEM Produkt, das unter verschiedenen Vorgaben für unterschiedliche Auftraggeber hergestellt wird. Die gibt es dann mit grünem oder blauem Etikett. Und es gibt ja auch die 3-Loch Variante mit dem Zusatz AC.

Andere CZL601-100kg (einzeln) gegen das selbe Vechta E110A-100kg Double vom ersten Screenshot. Genau umgekehrtes Ergebnis. Bevor die Interpretation sich auf den “Kanal” fokussiert, bei meinem Ansatz ist der ADC + Kalibrier EEPROM mit den Wägezellen direkt verbunden und wird so an andere Sendeboxen gesteckt. Der Kanal ist dann nur noch der I2C Bus und ggf. die Spannung, wobei die die selbe sein sollte. (Siehe Mobile-Bienenstock-Waage)

Mein aktuelles Resümee:
ca. 100g bei 10° ist vielleicht nicht der beste Wert, ich denke aber er ist brauchbar.

@Achim, danke für den weiteren Test! Magst du die Beschriftung noch ergänzen: Kanal A / B, Olivgrün / Blaugrün. Bin mir – außer bei der Temperatur (rot) – unsicher was jetzt was ist. Danke!

Gerne.
Kanal A ist die CZL601-100kg, Single, Olivgrün.
Kanal B die Vechta E110A-100kg, Double, Blaugrün.

Man sieht das auch an der Beschriftung der Scalen,
z.B. “12.20 kg B” in Blaugrün und “12.25 kg A” Olivgrün.

1 Like

Update:

Die Unterschiede in der Temperaturabhängigkeit haben bei meinen Tests ihre Ursache nicht in dem verwendeten Sensor (was die unterschiedlichen Ergebnisse der zwei Testläufe ja auch schon angedeutet haben), sondern in der Anordnung der Waagen ;-).
Ich habe den Test mit zwei Waagen übereinander, und damit mit dem selben Gewicht, ausgeführt. Wobei der 0-Punkt der Unteren natürlich etwas verschoben war. Wenn ich zwei Waagen, die zumindest “nach bestem Wissen und Gewissen” gleich sind (gleicher Sensortyp, gleicher mechanischer Aufbau) teste, kommen dieser Unterschied genauso raus, etwas mehr Abweichung in der unteren Waage.

2 Likes

Hier gibt es noch eine weitere Python Bibliothek, die bisher noch nicht genannt wurde.

Hier werden zwei interessante technische Details genannt [1]:

  • Low power: Power down to ~200nA.
  • ~600ms to boot and take reading.

PyNAU7802/examples/Example4_LowPower.py at 1b0e6cea9da3ca9e2e94b4ce3bfd342c68c984b1 · BrunoB81HK/PyNAU7802 · GitHub


  1. … die aber bestimmt auch anderswo stehen. ↩︎