Diverse ESP32 e diverse letture NTC !?!?!

Mi sta succedendo una cosa non prevista: ho una scheda su cui monto ESP32 DEVKIT V1 (quindi niente breadboard o fili volanti, ma sicuri connettori) e dove leggo due NTC sui GPIO32 e GPIO33.

Mi capita di sostituire una ESP32 con un'altra e.... leggo altri valori da quelli precedenti !!! Allora ne prendo una terza e ancora altri valori di temperatura differenti dalla prima e dalla seconda. La prima 21,4 e 22,3 - la seconda 23,5 e 24,7 - la terza 25,3 e 26,1.

Mi sorge un dubbio e faccio lo stesso esperimento su una scheda su cui monto NANO. Provo anche qui tre NANO ma ho sempre le stesse identiche temperature su tutti.

Quindi il problema sorge su ESP32. Come mai? Non può essere l'alimentazione perchè la scheda che accoglie la ESP32 è la stessa. Non possono essere le NTC perche nemmeno le ho tolte dai morsetti. E a prescindere dall'algoritmo che mi calcola la temperatura, coi problemi delle analogiche delle ESP32 conosciuti, dovrei avere le stesse identiche letture tra loro...

I test che hai fatto sono stati in rapida successione? visto che ad ogni tentativo aumenta di un paio di gradi, hai riprovato con il primo sensore per vedere se aumenta ancora o se ritorna a valori coerenti con il primo test su quel sensore? Ipotesi a pelle magari molto strampalata è che ad ogni tentativo, magari, il sensore si scalda e non ha tempo di raffreddarsi per cui aumenta sempre un pelo. Quindi problema di alimentazione e non di MCU. E' un dubbio derivante dalla apparente regolarità nell'aumento di 2 gradi ad ogni test successivo.

Le stesse prove le ho fatte con una board che monta NANO e tra un cambio di scheda e il successivo lasciavo passare 5 minuti per eventuali "stabilizzazioni termiche". Su Nano era sempre 23,5, con tre NANO diversi.

Sulla board che monta ESP32, invece, non era così. Quindi, non convinto, sono ripartito dal primo ESP32, trovando le stesse letture che avevo rilevato al giro precedente.

Oggi ho fatto una ulteriore prova alimentando il VIN con più di 5,5 Volt della mia board (perché non si sa mai, anche se il regolatore a bordo accetta tensioni inferiori dei 7 volt richiesti dai vari produttori).

Quindi ho alimentato il VIN di ESP32 con 8,5 - 9 - 11,5 Volt. Nessuna differenza!

La differenza sta nell'integrato regolatore 3.3Volt: una scheda da 3,28, l'altra 3,29 e l'ultima 3,31.

Certo non mi aspettavo 3,3Volt da tutte le ESP32 perché il datasheet da min 3,20 e max 3,40 Volt, quindi sono nei paramentri.

Non è che mi sfugge qualcosa? Il pin Aref non esiste, quindi cosa faccio? Mi sembra un fatto grave: la Espressif lo conosce?

Consigli?

Anche provando ad abbassare la risoluzione, la lettura analogica della stessa NTC da valori diversi sulle tre ESP32:

analogReadResolution(10);             
analogSetWidth(10);

La prima da 650 la seconda da 615 la terza da 638

Le NTC hanno bisogno di un ADC che sia in grado di fare una lettura raziometrica, cioe' con il riferimento che dipenda dalla tensione di alimentazione. L' ESP32 e' in grado solo di fare letture assolute, legate al suo riferimento interno, che tra l'altro ha ampie tolleranze.

Quindi o cambi l'hardware o tari le piastre una per una con tecniche HW o SW.

Marco

Il discorso è che pensavo che ESP32 fosse migliore di un NANO però, probabilmente, mi sbagliavo!

Va bene il Dual Core, va bene il WiFi, va bene anche il Bluetooth, va bene i 25 GPIO (perché c'è anche quello a 32 ma "are not recomended for other uses as SPI integrated...") però se mi metti tre (dicasi 3) ADC con un totale di ben 16 pin ANALOGICI, io mi aspetto che funzionino come devono.

Poi salta fuori la "non linearità" e va bene, adesso salta fuori che il riferimento interno non è nemmeno da paragonare a quello di Atmel (ho fatto la prova su DIECI NANO e non ce n'è uno che sbagli: tutte letture quasi identiche!!!) e il bello è che non è previsto un riferimento esterno !!!!! Sembra una barzelletta.

Quindi mi sono fatto una domanda: è stata solo una mossa commerciale? Una bella board con connettività assoluta, addirittura piedini touch (?!?) e sensori effetto hall (!?!) e poi si cade su una misura analogica (ehh ma vuoi mettere? leggo a 12bit ! Cosa leggo non lo so, però leggo!).

Mi sono iscritto al forum di Espressif ma il forum è moderato, eccome! Tu posti un quesito e loro decidono se pubblicarlo... Dopo 24 ore non ho ancora ricevuto la mail che il mio quesito è stato pubblicato...

Il discorso è che pensavo che ESP32 fosse migliore di un NANO però, probabilmente, mi sbagliavo!

Non e' questione di migliore o peggiore: un microprocessore (come qualunque altra cosa) va scelto in funzione di quello che si deve fare. Con l'ESP32 puoi fare cose completamente fuori dalla portata di una NANO e non c'e' dubbio che per altre applicazioni e' meglio una NANO ...

adesso salta fuori che il riferimento interno non è nemmeno da paragonare a quello di Atmel

L'errore del riferimento interno dei due micro e' analogo e cioe' circa +-10%

ho fatto la prova su DIECI NANO e non ce n'è uno che sbagli: tutte letture quasi identiche!!!

Mi sembra che tu non abbia colto il significato del mio post precedente. La NANO, come la UNO e le Arduino in generale, usa di default la tensione di alimentazione come riferimento dell'ADC e quindi la configurazione corretta per misurare una NTC.

il bello è che non è previsto un riferimento esterno

Questo e' il vero limite

Marco

steve-cr: (ehh ma vuoi mettere? leggo a 12bit ! Cosa leggo non lo so, però leggo!).

Sulimarco: L'errore del riferimento interno dei due micro e' analogo e cioe' circa +-10% La NANO, come la UNO e le Arduino in generale, usa di default la tensione di alimentazione come riferimento dell'ADC e quindi la configurazione corretta per misurare una NTC.

Con un +/-10% di errore della tensione di riferimento direi che la configurazione dell'arduino è "corretta" per n-mila cose in più rispetto alle esp. LM35? Leggere la tensione di una batteria per capire quando "staccarsi"? In pratica, gli input analogici per cosa si dovrebbero usare su una esp? Senza un aref esterno effettivamente tanto valeva leggere a 4 bit. ::)

Sulimarco: ..... L'errore del riferimento interno dei due micro e' analogo e cioe' circa +-10% ......

Io non sto parlando dell'errore del riferimento interno: sto parlando di una cosa molto più grave. Sto dicendo che su dieci NANO ottengo la stessa misura e su tre ESP32 ottengo tre misure! Quindi c'è un errore diverso tra i due chip

Infatti, andando sul forum della Espressif, ho trovato alcuni post che si lamentavano di QUESTO problema e che cioè, se si pensava alla produzione di qualcosa su larga scala, non si poteva pensare di eseguire una taratura per OGNI scheda.

La stessa Espressif ha risposto che era alla ricerca di una soluzione con i Fuses e che avrebbe standardizzato i suoi chip tarandoli uno a uno in fase di produzione. Però è un post dei primi del 2018.

Sulimarco: Non e' questione di migliore o peggiore: un microprocessore (come qualunque altra cosa) va scelto in funzione di quello che si deve fare.

Ho provato un 8266 e mi sono trovato bene, ma aveva solo un ingresso analogico.

Poi sono passato su ESP32. Se mi dai 16 GPIO ANALOGICI, poi non puoi venirmi a dire che ho sbagliato processore in funzione di ciò che devo fare...

ADC Calibration

The esp_adc_cal/include/esp_adc_cal.h API provides functions to correct for differences in measured
voltages caused by variation of ADC reference voltages (Vref) between chips. Per design the ADC
reference voltage is 1100mV, however the true reference voltage can range from 1000mV to 1200mV
amongst different ESP32s.

Magari sapere come utilizzare la API dentro un programma...

Il +-10% dell'Atmega328 vale per il riferimento interno ad 1.1V, mentre normalmente si usa la tensione di alimentazione che, in questo caso, è sempre la stessa, per cui è normale che si ottengono gli stessi valori.

Anche a me stupisce invece questa variabilità fa ESP32, ma io tendo ad usare sensori digitali proprio per evitare problemi simili.

Si, lo stavo pensando anche io, perchè se fossero anche I2C basta una coppia di extender.

Nel forum di Espressif ho trovato di tutto, compreso il finimondo, anche perché non si può mettere in produzione un chip con 18 analogiche di cui 6 però non vanno se hai il wifi e le altre hanno una TOLLERANZA che ha range diversi per ogni scheda e VALORI DI PARTENZA E ARRIVO (in volt) differenti per ogni scheda !!!!!

I chip della ESPRESSIF datati 012018 in su sono tarati uno a uno ma per quelli prima bisogna giocare con i fuses, quindi non penso sia il caso...

Se usi i DS18B20 non hai bisogno di extender e li puoi mettere tutti nella stessa catena, distinguendoli dal seriale.

Anche se la discussione è un pò vecchiotta, provo lo stesso a chiedere se per caso qualcuno sa se il fastidioso problema riscontrato da steve-cr è stato risolto nelle ultime versioni di ESP32, cioè in quelle "MINI" (escludendo il fatto delle pre-tarature di fabbrica).

Io non sono ancora riuscito a risolverlo. Tantomeno ho avuto schede “tarate di fabbrica”.

Ma non mi aspettavo granché: compro ancora oggi Arduino Nano e devo riscrivere il bootloader perchè “di fabbrica” non funziona il watchdog…

steve-cr: Ma non mi aspettavo granché: compro ancora oggi Arduino Nano e devo riscrivere il bootloader perchè "di fabbrica" non funziona il watchdog....

E' perché tu compri cloni e NON originali (o compri da gente che ti vende fondi di magazzino) dato che è da parecchio che "Arduino™ AG" ha aggiornato le schede Nano ed usa Optiboot (lo stesso bootloader della UNO), tanto è vero che nell'IDE ci sono le due versioni, Arduino Nano ed Arduino nano (old bootloader) ... ::)

Dal file boards.txt:

nano.name=Arduino Nano

nano.upload.tool=avrdude
nano.upload.protocol=arduino

nano.bootloader.tool=avrdude
nano.bootloader.unlock_bits=0x3F
nano.bootloader.lock_bits=0x0F

nano.build.f_cpu=16000000L
nano.build.board=AVR_NANO
nano.build.core=arduino
nano.build.variant=eightanaloginputs

## Arduino Nano w/ ATmega328P
## --------------------------
nano.menu.cpu.atmega328=ATmega328P

nano.menu.cpu.atmega328.upload.maximum_size=30720
nano.menu.cpu.atmega328.upload.maximum_data_size=2048
nano.menu.cpu.atmega328.upload.speed=115200

nano.menu.cpu.atmega328.bootloader.low_fuses=0xFF
nano.menu.cpu.atmega328.bootloader.high_fuses=0xDA
nano.menu.cpu.atmega328.bootloader.extended_fuses=0xFD
nano.menu.cpu.atmega328.bootloader.file=optiboot/optiboot_atmega328.hex

nano.menu.cpu.atmega328.build.mcu=atmega328p

## Arduino Nano w/ ATmega328P (old bootloader)
## --------------------------
nano.menu.cpu.atmega328old=ATmega328P (Old Bootloader)

nano.menu.cpu.atmega328old.upload.maximum_size=30720
nano.menu.cpu.atmega328old.upload.maximum_data_size=2048
nano.menu.cpu.atmega328old.upload.speed=57600

nano.menu.cpu.atmega328old.bootloader.low_fuses=0xFF
nano.menu.cpu.atmega328old.bootloader.high_fuses=0xDA
nano.menu.cpu.atmega328old.bootloader.extended_fuses=0xFD
nano.menu.cpu.atmega328old.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hex

nano.menu.cpu.atmega328old.build.mcu=atmega328p

Guglielmo

Ma che tensioni usi per il riferimento e per il partitore con la NTC? Deve essere LA STESSA!

A prescindere dalla tensione, se ho una board ESP32 con già attaccate delle sonde analogiche, o anche solo delle resistenze o un tastierino su ingresso analogico, al cambio della scheda le letture sono differenti...

gpb01: E' perché tu compri cloni e NON originali.....

Vabbè, dai, con il prezzo di un originale mi compro 10 cloni: riprogrammarli è il meno che mi possa capitare, no?

Dato poi che usando UNO as ISP si riprogrammano in 5 secondi, al contrario di USBtinyISP dove ce ne volevano almeno 30, diciamo che ci guadagno sempre.... :D :D :D :D :D