ADC - letture instabili

Ciao a tutti,

sono nuovo del forum e nuovo pure nell'approcciare ARDUINO UNO, pur avendo una piccola esperienza con i PIC che avrei deciso di abbandonare a favore della praticità e semplicità di Arduino. Professionalmente mi occupo di sistemi informativi, la mia (oramai lontata) base scolastica però è l'elettronica industriale che mi è rimasta sempre come passione.. per hobby.

Dopo qualche giorno di tentativi nel cercare di capire dove sto sbagliando, mi sono deciso a disturbare qui: dovrei misurare un range di tensioni da circa 350V a 2000V DC max con una impedenza di circa 1GOhm; ho realizzato un partitore con resistenza da 1GOhm che va su un trimmer multigiri da 220KOhm il quale finisce al GND con una resistenza da 10KOhm, il centrale del trimmer opportunamente regolato mi permette di avere 1/10000 della tensione in ingresso; in effetti con un voltmetro 3 1/2 cifre da 200mV il sistema funziona.

Ho provato ad utilizzare un ingresso ADC di Arduino riportando il valore letto su un display LCD HD44780 compatibile, però le letture che vengono eseguite dal microcontrollore sono veramente variabili...!!!!! Misurando una tensione continua di 420V ottengo letture che vanno da circa 380V a circa 440V.

Dopo varie ricerche di documentazioni ho provato ad ignorare la prima lettura, a leggere 20 volte il valore con un ritardo di delay di 2-4mS e poi fare la media... qualcosa migliora ma ancora lontano dalle aspettative .... :(

Ho provato a disaccoppiare il partitore resistivo dall'ingresso del micro con un LM358 in modalità "voltage follower" ma senza alcun risultato positivo.

Ho provato ad utilizzare analogReference DEFAULT (tensione di alimentazione stabilizzata a circa 5V), come INTERNAL (1.1V) ed EXTERNAL (fornendo una tensione di 2,37V) ma le letture comunque mi sono sempre ritornate "ballerine".

L'obbiettivo non è quello di avere letture estremamente precise, però almeno stabili....

Forse mi sfugge qualcosa .... chiedo aiuto.

Grazie, ciao a tutti, Andrea.

Nonostante l' impedenza del convertitore A/D del ATmega é abbastanza alta la carica del condensatore sample and hold dopo il multiplexer analogico necessita di una certa corrente e percui l' impedenza sostitutiva é di qualche decina di kOhm. Per questo il partitore non ti da abbastanza corrente per caricare in modo sufficente il condensatore. Aggiungi un amplificatore operazionale inseguitore di tensione e in questo modo hai un uscita con un impedenza bassa. Metti anche un diodo Zener all'entrata del operazionale per proteggere il circuito. Ciao Uwe

AndreaCH: Ho provato a disaccoppiare il partitore resistivo dall'ingresso del micro con un LM358 in modalità "voltage follower" ma senza alcun risultato positivo.

A quanto pare ci ha già provato...

Andrea, hai dato un'occhiata al segnale con l'oscilloscopio? È pulito? Puoi mostrarci il codice che hai usato? Ciao

ops, non sono riuscito a leggere quella parte di testo. Scusatemi
Comunque deve essere disaccopiato.
Ciao Uwe

e se le stbilizzi da sw? facendo medie ripetute ?

prima di tutto non parliamo dell'errore in Volt ma di quanto sballa la lettura analogica. se anziché leggere chessò 100 legge valori da 99 a 101 direi che sei ok, potrebbe essere semplicemente qualche campo magnetico che interferisce col cavo che fa da antenna.

se le letture sballano di più... che sia perché alimenti da USB? di solito il segnale che esce dalla USB è disturbato. prova ad alimentare via cavo.

Mettendo il riferimento interno da 1,1V o uno esterno (2,qualcosa) elimini l'influenza della tensione di alimentazione che non é stabile al 100%. AndreaCH Ha giá fatto questa prova Ciao Uwe

Ciao a tutti e grazie x l’aiuto, ma…

devo essere proprio un pollo !!! :cold_sweat:

Questa sera, non sapendo più dove provare, ho deciso di visualizzare con l’oscilloscopio con sonda 10x il segnale che devo misurare e… appena collegato il GND della sonda al GND di Arduino le letture si sono stabilizzate: ho uno scarto di circa +/- 3V su 420V !!!

Sto alimentando Arduino con la USB del notebook… forse potrebbe essere quello. Domani eseguo le identiche prove alimentando esternamente e posto il risultato.

Posto comunque il codice di prova…

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define ANA_IN_0 0
float val_0 = 0;
int i;

void setup() {
lcd.begin(16, 2);
lcd.setCursor(6, 1);
lcd.print(" Volts");
analogReference( INTERNAL );
}

void loop() {

val_0 = analogRead(ANA_IN_0);
delay(2);
val_0 = 0.0;
for( i=0; i < 20; i++ ) {
val_0 += analogRead(ANA_IN_0);
  delay(1);
}
val_0 = val_0 / 20;
lcd.setCursor(0, 1);
lcd.print("    ");

lcd.setCursor(0, 0);
lcd.print(val_0); // STAMPO IL VALORE REGISTRO ADC

lcd.setCursor(0, 1);
lcd.print((val_0 * 1.1 / 1023) * 1640); // STAMPO LA TENSIONE
delay(1000);
}

Grazie a tutti x l’aiuto, ciao, Andrea.

AndreaCH: Questa sera, non sapendo più dove provare, ho deciso di visualizzare con l'oscilloscopio con sonda 10x il segnale che devo misurare e..... appena collegato il GND della sonda al GND di Arduino le letture si sono stabilizzate: ho uno scarto di circa +/- 3V su 420V !!!!!

Questo vuol dire che hai la massa flottante, ovvero il GND del generatore alta tensione non è realmente vincolato con il GND di Arduino, in questi casi per fare la misura serve un ingresso differenziale, cioè quello usato dai normali multimetri.

Forse non ha la massa floating, magari aveva proprio dimenticato di collegarla... Ciao

Ciao a tutti e grazie x le risposte, sono riuscito a fare qualche prova in più, purtroppo il tempo è "inclemente"....

Posso confermare che tutte le masse erano collegate correttamente; ho provato ad alimentare con un alimentatorino esterno ma non è cambiato nulla. All'ultima prova, con un pacco batterie ed USB scollegata tutto ha iniziato a funzionare correttamente (senza GND dell'oscilloscopio ^_^ ) con letture di circa +/- 3V su 430V, direi ottimo.

Probabilmente sia la USB che il piccolo alimentatore che ho provato inducevano qualche sorta di disturbo, probabilmente di rete.

..... certo che non vorrei essere costretto ad operare a batterie per le prossime prove !!!

Proverò a schermare il partitore con uno scatolino metallico, magari poi entrando sull'ADC con un cavetto schermato.

Non saprei che altro pensare.

Ciao, grazie a tutti, Andrea.

Eh no, se è così allora hai proprio la massa flottante. Come è stato già suggerito puoi usare degli operazionali per avere un ingresso differenziale e risolvere definitivamente. Ciao