Minimal Hardware Design GSM-Stockwaage mit TTGO T-Call

Gut, dafür hätte ich nun keinen CurrentRanger gebraucht, aber vielleicht brauchen wir den später noch!

Wie oben geschrieben, das schaut nicht gut aus mit 15 mA! Aber immerhin habe ich nun auf der Hersteller-Seite mal Daten zum deep sleep gefunden:

http://www.lilygo.cn/prod_view.aspx?TypeId=50033&Id=1127

Sleep current About 300uA

Nun ist die Frage wie man da hin kommt?! Bisher habe ich das Modul mit modem.poweroff(); aus der TinyGSM-lib abgeschaltet, poweroff ist

Reicht CPOWD=1 um beim SIM800 auf die 150 uA zu kommen oder braucht man da was anderes? (siehe auch den Beitrag von @roh und @weef hier: TTGO T-Call) Ich weiß gerade nicht wo die 15 mA herkommen, Ideen neben dem

  • SIM800
  • ESP32 (wenn ich WLAN und BT nicht initialisiere brauche ich es auch nicht ausschalten?)
  • dann gibt es noch einen IP5306
1 Like

Hatte Wägezelle und HX711 angeschlossen, wenn der HX711 nicht initialisiert wurde verbraucht der Storm und schaltet nicht default die Wägezelle und sich ab, daher der hohe Vebrauch. Mit abgeklemmtem HX711 sind es jetzt ca. 800 uA im deep sleep! Schon besser, wenn auch noch nicht die versprochenen 300 uA.

Kurzer Zwischenbericht:
Die mechanische Hardware ist da. Ich müsste mich jetzt nur eine Weile in den Keller verziehen und alles zusammen schrauben.
Der TTGO T-Call lag auch heute im Briefkasten. uPy hab ich schonmal erfolgreich geflasht. Nächster Schritt wäre dann, das Modem zum laufen zu bringen.
Der ucurrent ist leider noch nicht da.

Andere Frage: kennt jemand ein mechanisches Datenblatt von den CZL601 Zellen? Außer der Angabe für die maximale Überlast habe ich nichts gefunden.
Ich habs mal durch den Simulator gejagt. Bei 100kg statischer Last biegt sich die Zelle etwas über 0,5mm durch. Bei 150kg ca. 0,8mm. Stimmt das mit der Beobachtung aus der Praxis überein?
Würde bedeuten, das man den Überlastschutz recht eng einstellen muss.

Bisher habe ich kein einziges Datenblatt gesehen, weder von der Wägezelle oben noch von einer anderen, auch nicht bei Bosche, in dem von der “Durchbiegung” bei Volllast berichtet wird.

Vor ein paar Wochen habe ich mitbekommen, dass die von Bosche verkauften Distanzplatten nur 2 mm Dicke haben, s. Bosche Hx0A single point load cell mehr wird es definitiv nicht sein! Ich schätze auch eher um die 1 mm, gemessen habe ich aber noch nicht! wird ggf. auch schwierig sein, wenn man nur die erwähnten, um die 3 mm dicken Profile hat. Kann mir vorstellen, dass auch die sich etwas durchbiegen, wenn die Belastung über Ecklasten kommt (z.B. Beuten mit Füßen / Klötzchen).

Auch daher problematisch mit der Überlastsicherung, gerade wenn man dünne, flexible Materialien hat. Falls man knapp 1 mm für Volllast hat und die weitere Streckung bei Überlast sich linear verhält käme man bei deinen Berchnungen und 300% Last auf 1,5 bis 2,5 mm nach denen gestoppt werden müsste. Ist schon tricky das genauso einzustellen, wenn das Gestell nicht 100 % steif ist.

Ein setup könnte dann so aussehen. Wenn die Solarzell lädt leuchtet die LED rot, bei vollem LiPo eine zweite LED blau, die müsste man beide entlöten oder eine Leiterbahn durchtrennen, damit hier nicht unnötig Strom verbraucht wird.

Ein weiterer Vorteil von dieser Platine ist, dass der LiPo auch mal per (Micro-)USB aufgeladen werden kann. Wobei mit der Kombi solar charger und TTGO T-Com das auch über den USB(-C) des TTGO via IP5306 gehen würde.

1 Like

5 posts were merged into an existing topic: Beelogger-Waage mit 2 Wägezellen

Wie können wir den Stromverbrauch im deep sleep reduzierten? Da gibt es auf dem board den …

IP5306

Mir ist noch nicht klar, was der IP5306 hier genau macht: Einen angeschlossenen LiPo chargen, ok! Dann kann man damit noch die Batteriespannung messen und er hat einen powerBoost

Im Batteriebetrieb mit einem 1200 mA/h LiPo funktioniert der GSM-Betrieb mit eingeschaltetem power boost aber auch ohne! Aktuell gehe ich davon aus, dass der nur benötig wird, wenn ein schwachbrüstiger LiPo verwendet wird, der die 2A peak current nicht liefern kann.

Nun verlässt mich leider mein Chinesisch ;-) im chinesischen Datenblatt gibt es ein paar Registereinstellungen, in der “Übersetzung” fehlen die.

Kann man mit dem IP5306 auch Stromquellen bzw. Verbraucher abschalten?

Fürch-ter-lich…, was ist das denn wieder für eine [zensiert]… Jedenfalls nehmen die M5Stack-Leute den auch, ggf. gibt es Fundstücke in deren community.

vielleicht hilft das hier ja trotz auto-translate weiter…


Das ist bekloppt übersetzt: der IC beinhaltet einen boost converter (wp en), eine Topologie für Gleichspannungswandler, zu deutsch “Hochsetzsteller” oder “Aufwärtswandler” (wp de) - außer, die Chinesen meinen irgendetwas anderes damit.

Hier macht der IC aus der LiPo-Spannung eine höhere von 5V, daher muß er die Spannung hochsetzten. Der IC beherbergt mehrere Funktionen, daher kann man den DC/DC-Wandler darin offenbar einzeln abschalten. Aber ich habe, disclaimer, das Datenblatt nicht gelesen!

Zum TTGO und Deiner letzten Frage: die Spannung für das Modem (heißt DVDD4V4) wird von einem eigenen step-down-converter (ein buck converter) namens SY8089 erzeugt (heißt auf dem PCBA “1U1”). Dessen enable-EIngang ist mit IO23 des ESP32 verbunden - somit ließe sich das SIM800 komplett schalten!

2 Likes

Danke für den Link zum Datasheet bei mikrocontroller.net, schon besser als das von mir oben verlinkte!

Mit diesem banalen deep sleep sketch, der einfach hochläuft, 10 s wartet und dann 30s in den deep sleep fällt bekomme ich ca. 850 uA gemessen:

// timekeeping / deep sleep 
#define uS_TO_S_FACTOR 1000000  /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP  30        /* Time ESP32 will go to sleep (in seconds) */

void setup() {
}

void loop() {
  delay(10000);
  // Put ESP32 into deep sleep mode (with timer wake up)
  // Configure the wake up source as timer wake up  
  esp_sleep_enable_timer_wakeup(uS_TO_S_FACTOR * TIME_TO_SLEEP);
  esp_deep_sleep_start();
}

Wenn ich den Testsketch der Tiny-GSM-lib für den TTGO T-Call verwende

und diesen am Ende mit dem deep sleep code von oben ergänze bekomme ich ebenfalls die 850 uA Stromaufnahme im deep sleep. Testweise habe ich bool isOk = setPowerBoostKeepOn(1); auskommentiert, das hat aber nichts verändert. Auch ein zusätzliches digitalWrite(MODEM_POWER_ON, LOW); (MODEM_POWER_ON ist pin23) vor dem deep sleep brachte ebenfalls keine Reduktion auf die vom Hersteller postulierten 300 uA.

well… schreibt der hersteller irgendwo, ob mit den angeblichen 300uA noch irgendwas funktioniert das die 300uA wert macht? - nich falsch verstehen, aber meiner erfahrung nach ist sone aussage nix wert wenn man sie nicht selber gemessen hat. auch nicht bei ‘qualitaetsanbietern’ ;)

hier haben jemand angebliche 240uA nicht gereicht… die loesung ist wie immer… ein load switch/pchannel fet.
https://blog.zakkemble.net/remote-mail-notifier-and-gps-tracker/

ich will nicht sagen das seine hardware toller ist (nur anderst) - aber die probleme und ansaetze sind die gleichen wie hier. er hat einen attiny als deep-sleep controller und einen pchannel fet gewaehlt.

Da muß dann aber etwas anderes Grundsätzliches nicht stimmen, denn allein der Unterschied zwischen quiescent current und shutdown current beim SY8089 macht lt. Datenblatt über 50 µA aus - diesen Unterschied hättest Du gemessen…

Da gab es doch jenes Register, welches GPIOs in der RTC domain per HOLD festnageln konnte, damit sie im deep sleep ihren state nicht verlieren - wir hatten das z.B. hier im Forum für micropython.

Hier gibt es noch Infos zum Thema deep sleep current.

I think there is no simple way to turn off power converters. You even can not turn off IP5306 programatically, because its KEY pin (where you would send LOW for more than 2s) is also connected to reset of ESP32. You can program IP5306 to switch off 32s after ESP32 goes to sleep, but then you can only wake it manually by pressing reset. I was trying to find a way how to shut down everything and just keep ESP32 in sleep powered directly to 3.3V rail, but a) power was still about 1mA, b) I could not wake the board only manually

Ich dachte ja, das Ausschalten des “PowerBoosts” reiche schon um den IP5306 zu deaktivieren, das ist aber nicht so. Im Batteriebetrieb muss man das board mit einem reset starten. Der reset-Knopf ist aber nicht nur reset für den ESP, sondern auch Anschalter für den IP5306 , d.h. der ist an, auch wenn ich den nicht per Software aktiviere.

Das Ding hat zwei SY8089 (heißen dort “1U1” sowie “1U2”).

1U1 macht die etwa 4 V für das Modem, und 1U2 die 3V3 für v.a. den ESP32. Beide haben einen ENABLE-Eingang, welcher bei 1U1 auch benutzt wird (GPIO23 schaltet die Modemversorgung), 1U2 ist dauerhaft angeschaltet. Laut Datenblatt darf dieser Eingang nicht unbeschaltet bleiben, braucht also immer pull-up oder pull-down.

Was machen die aber? Sie bauen einen Spannungsteiler (jeweils 100k/100k an beiden ICs) an diesen Eingang, so daß mindestens beim 1U2 immer VCC/2, also 2,5V am EN-Eingang anliegen. Wäre ja OK, wenn 1R18 (der untere Zweig) nicht wäre: dadurch, daß dieser nicht weggelassen wurde, braucht die Eingangsbeschaltung des EN dauerhaft unnötig 25µA … unglaublich.

image

Umgekehrt ist es bei 1U1: das Modem ist im Normalzustand OFF, daher kann ein EN dauerhaft einen pull-down bekommen. Da 1R7 und 1R4 beide auch als NC angegeben sind, weiß ich nicht, wie das “in echt” ist, also welche tatsächlich bestückt sind. @clemens, kannst Du bitte mal schauen, was von den beiden wirklich bestückt ist? Nicht, daß der auch noch bestückt ist (und nochmal 25µA braucht)…

image

(Das GND-Symbol über der 2 ist wohl ein vergessenes Artefakt…)

Sie lassen auch noch die community im github features vorschlagen, und dann verk… sie es bei solchen Details.
Wenn ich mir als Hardware-Entwickler derartige Schaltungsdetails ansehen muß, habe ich keinerlei Sorge, daß es zu der von China angestrebten Rolle einer globalen Technologieführerschaft tatsächlich kommen könnte…

2 Likes

Ich hab mal den nackten (keine Peripherie, kein Programm) T-Call mit uPy ans Meßgerät gehängt. Da kam folgendes raus:

Ruhe, ohne REPL - 24,1mA
Ruhe, mit REPL - 38,7mA

Bis hier 160MHz. Ab hier immer mit REPL.

80Mhz - 35,3mA
40Mhz - 28,6mA
20Mhz - 23,5mA (<20MHz geht nicht)
lightsleep - 20,3mA
deepsleep - 19,2mA

Schneller Vergleich mit dem ESP32 mit HX711 & BMP280 braucht im lightsleep ca. 45mA.

Wenn es da nicht ein paar Tricks gibt wird das ohne externen Timer und Komplettabschaltung nix. Sollte das die Lösung sein, dann müssen wir aber mal kräftig an der Bootzeit vom Terkin arbeiten. Der braucht fast eine Minute für den Kaltstart.

Hmm, mit MicroPython fast 20 mA im deep sleep und mit Arduino 850 uA!? Komisch!

Den Kaltstart bekommen bzw. haben wir schon schneller hinbekommen wenn der Code gleich beim build der Firmware eingefroren wird, wir waren bei ca. 5 Sekunden!

Hmm, hört sich ja irgendwie nach Mist an! Warum hat bei solchen Teilen niemand deep sleep beim Design auf dem Schirm?

Das Board, das ich hier habe schaut mehr oder weniger so aus wie TTGO-T-Call/board.jpg at master · Xinyuan-LilyGO/TTGO-T-Call · GitHub . Vom Layout und der Lage der Baubeile könnte das die gleiche Version sein. Auch bei mir steht im silk screen BLYNK_V1.3 20190610 die mit grünem Preil markierten Bauteile sind bei mir aber nicht bestückt:

Um die traces zu checken muss ich mit Vergrößerung ran.

Der SOT23-5 in der Mitte könnte unser gesuchter SY8089 sein.

Ja, wir haben das ja hier schon länger erschlossen: Low Cost GSM/GPRS-(SIM800)-Node – pfff, doch eine eigene kleine Platine als sich hier über schlechtes Design zu ärgern und Fehler anderer suchen zu müssen?

+1 von mir. Per 1-wire UART mit einem ATTiny sprechen der fürs schlafen/wecken zuständig ist, erscheint mir eine sinnvolle Lösung. Ich meine auch, sowas schonmal irgendwo geshen zu haben als fertige Lösung. Finde es aber leider nicht mehr. :frowning: Wir sind ja nicht die ersten mit so einem Problem.

Dachte eher an einen WiPy oder Firebeetle mit Transistor und FET und SIM800 Breakout.

@clemens & ich haben gestern ein bißchen telefoniert und auch über die stromspar Lösung per Abschaltung gesprochen. Ich bin beim googeln über diesen etwas längeren Thread gestossen. Interessant ist vor allem dieser Post:
https://www.mikrocontroller.net/topic/279121#2945591

TL;DR: entweder bastelt man sich selber was mit einem ATTiny oder man nimmt einen Uhrzeitbaustein (NXP/Maxim) mit dem man per I2C kommuniziert. Die Bausteinlösung klingt natürlich verlockend, weil es was Fertiges ist und man als Bonus auch gleich eine RTC dazu bekommt. Da müsste man ‘nur’ noch den richtigen Typ finden.

Edit: richtiger Typ gefunden: Bauteil: DS3231 - Mikrocontroller.net
uPy libs gibt es auch dafür, z.B.:
mpy-lib/misc/DS3231 at master · micropython-Chinese-Community/mpy-lib · GitHub

1 Like