Batterieüberwachung, voltage divider und attenuation für MicroPython-Firmware

Ich würde vorschlagen wir warnen ab gemessenen 3,4 V. Ab gemessenen 3,0 V riegeln wir dann komplett ab im Sinne eines Tiefentladungsschutzes und schlafen gleich wieder ein.

Die LiPos, die ich bisher verwendet hatte und die eine Tiefenentladungselektronik verbaut haben, machen teilweise schon bei 3,4 V spätestens 3,2 V dicht. Ich würde ab 3,6 V warnen – erfahrungsgemäß zicken dann auch schon ein paar Sensoren rum und Messwerte sind mit Vorsicht zu genießen – und ab 3,4, spätestens 3,2 V nicht mehr messen.

Waren das oben die BOB-Akkus, bischen scary, dachte die hätten eine Sicherheits-Elektronik drinnen! Oder unser attenuation-Faktor passt nicht, hast du mit einem Multimeter mal gemessen, was die tatsächlich noch haben?

Widerstandswerte für Bee Observer Board

@clemens erwähnte vorhin, dass er andere Widerstände verbaut hat als auf dem Expansion-Board für den Voltage Divider verwendet werden. Das müssen wir noch anpassen.


Will you tell us about the resistor values used on the Bee Observer Board, @clemens?

Review implementations of system sensors for Pycom MicroPython · Issue #5 · hiveeyes/terkin-datalogger · GitHub

Danke.

Das würde ich gerne Euch Elektronik-Spezis überlassen.

Mion @Andreas. Ich Frage mich nur warum die Spannungen trotz gleicher Wiederstände so stark abweichen.
Evtl. Sind sie zu hoch gewählt. Finde 10 und 2MOhm schon echt wahnsinnig heftig wenn da ne Spannung gemessen werden soll. Hatte mich schon über die Funktion der Wiederstände gewundert.

Dann wäre gut, wenn das @clemens bei der nächsten Revision des Boards am besten ebenfalls berücksichtigen könnte. Praktisch wäre, die gleichen Widerstände wie auf dem Expansion Board zu verwenden – Pycom wird sich auch etwas (gutes?) dabei gedacht haben, nicht?

@clemens: Und den Knopf nicht vergessen! :P

Auf dem Expansion board sind niedrige Widerstände verbaut, was es einfach macht Spannung zu messen, was aber auch einen höheren Energieverbrauch zu Folge hat.

Das ist nicht für den low power-Betrieb designed, daher würde ich die Werte nicht 1:1 übernehmen (und habe das damals auch nicht gemacht ;-).

Bei den Werten habe ich mich am Design des voltage dividers des Seeeduino Stalker orientiert. Verbaut sind 10 MΩ (R1) und 2 MΩ (R2) parallel zum 2 MΩ-Widerstand ist ein 100 nF Kondensator verbaut, der mit den hohen Widerstandswerten das Signal etwas glättet.

Hintergrund ist dort ein potentielles 6V-Signal auf 1V zu droppen, so viel bräuchten wird nicht, weil der FiPy afaik eh nur maximal 5V Eingang verträgt.

2019-06-17%2019_29_51-Voltage%20Divider%20Calculator%20-

2 Likes

Gut wäre jetzt Mal interessant die Innenwiederstände der Pins des Pycom und des anderen Boards zu vergleichen.

Evtl lässt sich eine low Power Variante auch mit dem internen pullupwiederständen und einem externen zur Masse realisieren. Werden die pullup nicht im Deep Sleep deaktiviert?

Edit: wahrscheinlich zu einfach gedacht. Die pullup lassen sich im analog in Modus sicher nicht aktivieren. Und gehen an 3V3. Ich bringe besser Mal die Kinder zu Bett und schau mir das in Ruhe an 😁

1 Like

Könntet Ihr diese Sache noch einmal mit den richtigen Werten für @clemens’ BOB-Board testen und Bescheid geben, ob sich dann plausiblere Werte ergeben? Merci!

So habe mal ein bissel gerechnet. Habe aber leider nicht die Werte für den Voltage divider des Pycom Boards gefunden. @clemens vielleicht kannst Du Mir den nachreichen.

Wenn wir jetzt die 12 MOhm wie auf deinem Board nehmen liegen wir bei 0,00041mA bei 5V bei 3,7V natürlich weniger. wenn ich mich nicht verrechnet habe und der Akku keine Selbstentladung haben würde, komme ich auf 5400 Jahre bis der Akku leer ist und ich richtig gerechnet habe ?!?.
Tippe mal im Pycom-Board liegen wir bei R1+R2 bei ca 30 bis 40KOhm

Ich rechne hier mal mit 30K:
I=U/R
3,7V/30000OHM = 0,000123333 A
bei unserem 2AH Akku
Ah/A = Std.Betriebszeit
2/0,000123333*60= 16.216 Std = ca 675 Tage Laufzeit die sicher Vertretbar sind.

Laut Doku verschieden für unterschiedliche Versionen, Expansion Board

Das wäre ja nicht die Gesamtlaufzeit, sondern nur die Laufzeit, wenn das System keine Energie fürs Messen und fürs Versenden brauchen würde. Aber ja, 5000 Jahre (habs nicht nachgerechnet) müssen es auch nicht zwingend sein, wobei ich es schon cool fände, wenn ein Sensor von mir in 5000 Jahren noch Daten sendet! ;-)

Ja 5000 Jahre wär sicher cool, aber das wär ja nur der Strom der fürs Messen drauf geht.

denke mal das wir mit wie bei Version 3.2 ganz gut mit 2MOhm fahren, die Innenwiederstände der Pins habe ich leider im Datenblatt auch nicht finden können, ebenso wie der Strom der zum messen fließen muß. Wüsste da jetzt leider nicht, wie ich mit so vielen unbekannten die idealen werte errechnen könnte.
kann ja ein wenig mit den werten Spielen. habe denke ich genug Wiederstände hier rum liegen und mein Netzteil kann Spannungsverläufe simulieren.

Was mich allerdings immer noch etwas verwundert, ist das der eine FiPy so weit mit seinen werten so extrem abweicht. Die interne Temp ist ja auch betroffen. als ob man irgendwo noch einen Faktor oder eine ref. spannung setzen könnte der/die beim Neuaufspielen nicht mit einbezogen wird. habe ihn auch son 2 mal gelöscht und neu aufgespielt immer das selbe.
Hatte Ihn allerdings noch nicht auf deinem Board, vielleicht sollte ich das mal schleunigst tun.

mom…
Edit: Ja sobald der FiPy auf Clemens Board hängt zeigt er nur 1/3 der Spannung an. messen tut er anscheinend richtig. habe mal 3 Spannungswerte Werte aufgegriffen und mal 2,953 gerechnet. dann passt es bei mir aufs mV genau.

Würde folgende Lösung vorschlagen: in den Settings noch eine weitere Variable in der man den Faktor angeben kann. und dieses in die Berechnung der Spannung einfließen lassen. So kann man dann zusätzlich auch noch diejenigen glücklich machen, die es 100% genau haben möchten.

Der System Temperaturwert weicht jetzt aber auch wieder gewaltig ab. er zeigt beim 2. FiPy jetzt 47 °C

@Andreas sehe wieder mal, das Du schneller warst als ich.

1 Like

Hab auch mal versucht den Innenwiederstand der Pins zu ermitteln. Sollte bei um die 120MOhm ±30% liegen. Meine Messgeräte machen da schlapp habe daher die große Abweichung angegeben.

Die 12MOhm aus Deiner Schaltung @clemens Schaltung kann man aber bei den Wert gefahrlos nehmen. Ich denke im Kopf irgendwie immer noch mit ttl Chips und Anfangszeiten der Mosfet Technik wo 30k Standard waren.

Wo weichen sie denn ab, bei dir, @MKO vs. @Andreas oder bei deinem Fipy vs. WiPy? @Andreas wo hast du denn den LiPo angeschlossen, an der Platine oder am expansion board? Die beiden Möglichkeiten gibt es ja auch noch! ;-)

Bei gleichzeitiger Verwendung von expansion board und Platine müssen wir auf jeden Fall den voltage divider auf dem expansion board per jumper deaktivieren, da der gleiche pin zur Messung versendet wird und dann zwei voltage divider vorhanden wären.

Das sollte mit dem Jumper “enable VBATT signal” gehen

0%20%C2%B7%20GitBook%20-

Generell sollten wir etwas aufpassen mit der Batterie und unbekannten voltage dividern, bei der einzigen etwas ausführlichern Doku zum expansion board habe ich das gefunden:

The following conditions WILL CAUSE THE WiPy TO BE PERMANTLY
DAMAGED.
[…]
When a voltages above 1.8V is applied to an analogue input.

Wenn wir also mit der attenuation rumspielen, und die ggf. nicht gesetzt ist oder auf einen zu geringen Wert beschädigt uns ein LiPo ggf. den FiPy / WiPy. Daher sollten wir zumindest einen voltage divider verwenden, der unter 1,8 V droped, damit auch bei nicht oder falsch gesetzter attenuation keinen Schaden anrichten!

In den example settings sind die Werte falsch. Die erste Variable beinhaltet die Summe beider Widerstandswerte.

    'vcc': {
        # -> Expansion board v3.0, voltage divider is 115 kΩ / 56 kΩ
        # Expansion board v3.1, voltage divider is unclear, not documented yet
        # Expansion board v3.2, voltage divider is 1 MΩ / 1 MΩ
        # BOB shield Clemens, voltage divider is 10 MΩ / 2 MΩ

        # Sum of resistor values.
        'resistor_sum': 171,


        # Resistor between input pin and ground.
        'resistor_pin': 56,
    }

In /terkin/sensor/system.py ist attn in Zeile 114 für unseren pin 16 gerade mit 6DB angegeben:

    adc_channel = self.adc.channel(attn=ADC.ATTN_6DB, pin='P16')
    adc_samples = [0.0] * self.adc_sample_count
    adc_mean = 0.0

Why does this always happen to me?

@clemens: I will rename the configuration settings to resistor_r1 and resistor_r2 and do the summation internally in order to minimize confusion. This will happen in one of the next commits.

To get noticed about changes like these, you might want to subscribe to the list of watchers (https://github.com/hiveeyes/hiveeyes-micropython-firmware/watchers) in order to minimize friction.

Thanks for your input and thanks likewise for listening.


Vielen Dank auch für die Übersicht. Habe sie noch um BOB-HAT-V5 ergänzt.

Voltage divider resistor values for different boards for Pycom devices.

  • Expansion board v3.0: 115 kΩ / 56 kΩ
  • Expansion board v3.1: Unclear, not documented yet
  • Expansion board v3.2: 1 MΩ / 1 MΩ
  • BOB shield: 10 MΩ / 2 MΩ
  • BOB-HAT-V5: u.U. 1 MOhm / 470 kOhm or 220 kOhm
1 Like

Mir ist noch nicht klar, was wir für attn sinnvollerweise nehmen bzw wie ich mit den DB-Angabe die maximal zulässige Voltanzahl berechne.

https://docs.pycom.io/firmwareapi/pycom/machine/adc.html

attn is the attenuation level. The supported values are: ADC.ATTN_0DB , ADC.ATTN_2_5DB , ADC.ATTN_6DB , ADC.ATTN_11DB

ADC pin input range is 0-1.1V . This maximum value can be increased up to 3.3V using the highest attenuation of 11dB . Do not exceed the maximum of 3.3V , to avoid damaging the device.

Wenn man mit 0db maximal 1,1 V verwenden darf und mit 11db 3,3 V ist das eine Verstärkung um 3 (1,1V x 3 = 3,3 V).

Vielleicht können uns an der Stelle @MKO, @didilamken, @weef oder @roh weiterhelfen.

Für die Spannungsmessung würde ich nicht viel rechnen, sondern die Spannung nur mit einem Multimeter messen und dann den Teilungsfaktor mit Dreisatz berechnen. Für nicht so genaue Messungen reicht ein fester Faktor im Code ( z.B. wenn man 4.2 V von 4.1 V unterscheiden möchte).

Die vielen Toleranzen der beiden Widerstände, des PGA und ADW lassen sich viel einfacher ausmessen. Für genauere Messungen benutze ich den 16-bit ADS1115 und normale Metallfilm-Widerstände. Durch Ausmessen des Faktors kann ich kann ich dann nachher 4.100 V von 4.101 V unterscheiden. Das ist schon sehr genau. Für den Abgleich habe ich ein Spannungs-Referenz-IC von 5.000 V. Im Programm bestimme ich den Faktor nur durch Probieren: ADW-Wert 1896 -> Anzeige 5.000

2 Likes