ESP32 ADC: ervaringen

Ik ben bezig een eigen BMS te maken/ontwikkelen en een 'harde' eis voor mij is draadloze communicatie en gemak met het software programmeren (i.p.v. toolchain opzetten, direct bezig kunnen met de applicatie).

Je komt dan al gauw bij de ESP32 i.c.m Arduino uit, maar ik lees dat de ADC hier niet zo goed van is. Een en ander kun je in de software oplossen, maar ook na middeling en lineariseren is er nog steeds veel afwijking.

Het is voor een 10s 42V batterypack en ik wil ongeveer 0.01V-0.05V precisie meten.

Wat is jullie ervaring hiermee ?

https://github.com/espressif/esp-idf/issues/164
https://w4krl.com/esp32-analog-to-digital-conversion-accuracy/

Qua hardware design zou het mooiste de NRF52832 zijn, heeft meer uitgangen (scheelt een 74hc595 shift register) en 8-voudig 12-bits ADC. Alleen het punt is dat qua software is het moeilijker opstarten met bv. de softdevices. Er zijn wel arduino library's, maar niet zo goed ondersteunt als ESP32.

Congratulations on your purchase. To begin using your quantum computer, set the power switch to both off and on simultaneously
Arco

Special Member

Is die 0.01v per cel of voor alle cellen is serie? (dat maakt nogal een verschil)
Per cel is dat 0.1% nauwkeurigheid, bij 10 cellen in serie 0.01%...

Alles staat en valt met de 'schoonheid' en stabiliteit van de referentiespanningen van de AD converter, die zullen speciale aandacht vergen.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ik zou naar ic's als de BQ76942 kijken die je met I2C aan je WiFi module knoopt.

<edit>

Er is een evaluatiemodule waarin shema's / printlayout staan

https://www.ti.com/lit/ug/sluuc32a/sluuc32a.pdf?ts=1623890888641

Op https://www.ti.com/product/BQ76942 staan code examples voor de MSP430 die wel om te zetten zijn naar de ESP32, heb er even snel naar gekeken.

[Bericht gewijzigd door Roland van Leusden op donderdag 17 juni 2021 16:40:18 (64%)

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.

@Arco: als je alle celspanningen via delers naar de ESP32 haalt, en dus in software de spanning van elk cel behalve de onderste bepaald door het verschil tussen 2 metingen te berekenen, is dat hetzelfde.

Met 10 cellen zal dat dus erg lastig worden; je hebt een 12 bit ADC, dus 4096 delen, die je moet verdelen over 42V; dat is dus iets meer dan 0.01V per stap. Dat is dus al op het randje, nog voordat je de afwijkingen van de weerstanden, ADC referentie, etc. gaat meenemen.

Dit kan beter als je opamps gebruikt om de spanning over elke cel te bepalen, en dat aan de ADC voert; je zult dan wel opamps moeten vinden die op 42V + marge nog kunnen werken. Al die opamps moeten natuurlijk zelf ook voeding hebben, en de ESP32 is ook niet bepaald zuinig, dat is ook iets om over na te denken.

De BQ76942 die Roland voorstelt lijkt me helemaal geen stom idee; ik heb ooit iets dergelijks gebruikt (met SPI interface) voor een BMS voor 4s, die gebruikt wordt als startaccu.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Die BQ76942 is idd een mooi dedicated chip, het liefst voorkom ik het gebruik van 'exotische' chips, op de SoC na, ik ben ook particulier en is denk wat lastiger voor mij te verkrijgen. Maar het zou wel heel veel componenten besparen, ik moet het nog even laten bezinken.

Ik had al wat getekend, heb ik bijgevoegd, ik werk dan met optocouplers voor het balanceren en idd met weerstandsdelers naar de SoC. Met de BQ zou er wel wat weg gelaten kunnen worden.

In principe is die 0.01V mooi, maar voor mij zou 0.05V ook genoeg zijn, dan zou je er met 12 bits wel komen, ik wil het dan ook ijken. De NRF52 kan met oversampling ook 14 bit halen.

Ik zal zelf ook nog even wat meten aan de ESP32 adc en ook de NRF (heb beide hier liggen). Gister nog even met de NRF bezig geweest in Segger Embedded Studio, dat is 'hardcore' C programmeren, dat moet wel van ver komen. Ik krijg dan altijd het gevoel dat ik meer met de taal bezig ben dan met de applicatie... Het werkte wel out of the box en er zijn veel voorbeelden. Ook nog met PlatformIO/Arduino geprobeerd, maar dat werkte niet direct.

En als ik met de ESP32 met wifi/bluetooth bezig ben dan neemt hij gemiddeld 125 mA (ik kan geen pieken meten). Terwijl de NRF52 op 25 mA zit. Nu is dat niet direct een probleem op de accu die ik gebruik, maar het is meer als je het vergeet of hij ligt een paar maanden ongebruikt. Wil er wel een stekker tussen zetten, maar die kun je ook vergeten. Een en ander valt uiteraard wel te tweaken met deep sleep.

Het is nog even zoeken wat het beste is (voor mij).

Congratulations on your purchase. To begin using your quantum computer, set the power switch to both off and on simultaneously

Ik zou een schakeling er tussen zetten dat op z'n minst bij "oeps hij is haast te ver ontladen" de chip zichzelf uit kan zetten. Een CR2032 met een RTC is ook een optie. Dan kan de RTC iedere 1 of 5 minuten de boel weer wakker maken, snel even noteren dat er X minuten niets gebeurd is en weer slapen/uit.

Als je de ESP zuinig genoeg krijgt dat ie echt jaren mee gaat op een volle accu, dan denk je misschien: Mwah, dat probleem is opgelost.

Maar daar ben ik het niet mee eens. In de praktijk rij/vaar je de boel een keer bijna leeg en vergeet je hem dan aan de lader te hangen. Het gaat niet de allereerste keer fout maar na een tijdje wordt je makkelijker met: Ok, die moet morgen een keer aan de lader, en... dan gebeurt er wat en kom je d'r een paar weken niet aan toe.

Als de volle accu 2 jaar de ESP kan voeden, dan gaat het je een keer gebeuren dat je hem met 5% lading wegzet. en dan is ie dus ongeveer een maand later helemaal leeg. En na 2 maanden is je dure accupack gewoon helemaal kapot. Even een uurtje langer nadenken, ontwerpen en je hebt dat ook goed....

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Ik zou voor een lipo met ingebouwde protectie gaan. Deze beveiligen de cel tegen onderspanning, overspanning en overstroom. Dan mag er al een keer iets misgaan zonder dat het dadelijk fataal is. Sorry, beginpost niet goed gelezen. Waarschijnlijk is dit niet mogelijk voor een 10s pack (te grote stroomvraag).

[Bericht gewijzigd door RP6conrad op vrijdag 18 juni 2021 12:09:04 (23%)

blackdog

Golden Member

Hi Gatze, :-)

Kijk eens naar dit i2c ADC en het gaat om de ADS1113, ADS1114 en de ADS1115.
Deze is 15 bit unipolair en een vrij goede lineairitijd.
Let op! je mag nooit een spanning aanbieden die boven de voedingspanning uitkomt! dus let goed op welke range je kiest.
Dus als de range +-4,096V is en je voeding van die chip is 3,3V dan nog mag je maar max =3,3V invoeren t.o.v. de massa van de chip.

Er zijn zat prinjes uit China te koop die betaalbaar zijn met de ADS1115 er op, of anders bij de bekende groothandels te koop.

Groet,
Bram

You have your way. I have my way. As for the right way, the correct way, and the only way, it does not exist.

De ADC van de ESP32 is dramatisch slecht. Heb laatst een voor in de auto een accuspanning monitor gebouwd met een ESP32 (ding stuurt de noordspanning naar m'n home automaten systeem en geeft een alarm als die onder de 11.8V komt) en wou daar de interne ADC voor gebruiken, maar die was echt te onnauwkeurig om de accuspanning goed te kunnen meten.

Heb toen, zoals blackdog ook al voorstelde ook voorstelde, een ADS11xx gekozen (dacht een ADS1115), die doet het een stuk beter!