Problema con partitore di tensione e lettura misura

Ciao Ragazzi,
dunque sono alle battute finali con il mio progetto:

sto testando il tutto prima di procedere al montaggio sullo scooter.

Ho un problema con il partitore di tensione, questi sono i dati:

V_batteria_max= 13.25 V
V_pin_arduino= 5 V
Rc= 20 Kohm
R2 = 12.25 kohm (che regolo con un trimmer da 20Kohm)

Dunque accade che sulla bredboard regolando il trimmer ottengo la lettura che voglio, poi sulla pcb dove vi è pure uno zener da 5.1V in parallelo, la lettura arriva al max a 11 V scarsi. Ho provato a dissaldare lo zener dalla pcb e tutto funziona come dovrebbe. Perchè accade questo?

Lo schema che ho disegnato è questo, e la parte del partitore è in basso a sinistra:

Grazie

droidprova:
Ho un problema con il partitore di tensione, questi sono i dati:

V_batteria_max= 13.25 V
V_pin_arduino= 5 V
Rc= 20 Kohm
R2 = 12.25 kohm (che regolo con un trimmer da 20Kohm)

Dunque accade che sulla bredboard regolando il trimmer ottengo la lettura che voglio, poi sulla pcb dove vi è pure uno zener da 5.1V in parallelo, la lettura arriva al max a 11 V scarsi. Ho provato a dissaldare lo zener dalla pcb e tutto funziona come dovrebbe. Perchè accade questo?

Lo zener incomincia a condurre prima dei 5,1V Devi starci sotto un bel po. Prendi come riferimento peril ADC i 3,3V di Arduino e fai il partitore in modo che i 13,8V diventano 3,3V. Arduino non si rompe se misuri tensioni maggiori della VREF a patto che siano minore dellla tensione di alimentazione.

Altro grosso problema.
Quello che ripetutamente si é detto riguarda i disturbi sull'impinato elettrico del automobile valogono anche per le moto. Punte di tensione fino 100V e abbassamenti di tensione oltre disturbi derivanti dalla schintilla delle candele.

Ciao Uwe

Grazie Uwe, se ho capito bene, con i componenti che ho già basta agire lato software sistemando lo shetch da 5 a 3.3V. Ma in che modo se il mio è questo:?

lettura = analogRead(analogPin);
voltage = (13.3 / 1024) * lettura;

Per l'alimentazione, penso e spero di non aver problemi, ho già testato ...

Grazie

La tensioen letta dal Arduinocon 3,3V VREF é
Vin = (3,3V * ADC) /1023

Vbat = Vin *13,3V/3,3V

Considereri la tensione massima della batteria 14,0V.

Ciao Uwe

Ok metto tutto in codice e sulla bread board e provo e poi riporto.

Grazie 1000 uwe!

PS: ti piace la pcb, io sono euforico e non vedo l’ora di vedere tutto montato.

la stampa seriale da valori a casaccio (0-9.33-14-4.68....) con questo codice:

int analogPin = A0;
int lettura;
float Vin;
float Vbat;


void setup()

{

  Serial.begin(9600);

}



void loop()

{

  lettura = analogRead(analogPin);
  Vin =  (3, 3 * lettura) / 1023;
  Vbat = Vin * 14 / 3, 3;
  Serial.println(Vbat);
  delay(1000);

}

ok risolto, avevo sbagliato un cablaggio.

Grazie ancora!

Adesso ho provato lo sketch corretto sulla pcb con un'altro zener da 5.1 V e la lettura massima che ottengo alimentando il circuito a 13.3 è di 9.33V.
Bho non capisco.

Prova a cambiare così

PROT1.jpg

Anche io ho avuto problemi con lo zener di protezione: mi alterava la misura non appena arrivavo a circa 4V.

In teoria la tensione del ginocchio prima di quella di zener dovrebbe essere bassa, ma così non è e ho preferito eliminarlo.

Per il partitore usa un rapporto 3:1 usando 20k + 10k con precisione 1% e con AREF = 5V.

Icio, la tua protezione è già presente negli ingressi di Arduino.

cyberhs:
Icio, la tua protezione è già presente negli ingressi di Arduino.

Esatto, su tutti i pin ci sono dei diodi di clamping che rendono inutili gli zener o i diodi esterni se c'è una resistenza in serie che limita la corrente massima a non più di 1 mA, bastano 5k.
Semmai può essere utile l'uso di transzorb/transil per eventuali transienti molto veloci e di grande ampiezza, come quelli presenti sull'impianto elettrico di auto e moto.

Ok, dunque non mi resta che eliminarlo e sperare che non si fulmini il pin A0....
Grazie mille ragazzi!

droidprova:
Ok, dunque non mi resta che eliminarlo e sperare che non si fulmini il pin A0....

Un semplice zener non protegge nulla in uso automotive, per stare tranquillo dovresti mettere un transil da 6.5V 2A, questo si che ti protegge l'input analogico anche da spike di grande ampiezza, non hai idea di quanta "schifezza" gira sull'impianto elettrico di un veicolo. :slight_smile:
Per tua fortuna il partitore in ingresso ti offre una impedenza di circa 10 k (il parallelo delle due R), il che ti fa stare abbastanza tranquillo anche con spike da 100-150 Volt a patto che non abbiano uno slew rate (tempo di salita) troppo rapido.

Ok. La versione 2 della pcb avrà la modifica....
Grazie mille

Il diodo transil in questione, deve essere unidirezionale vero? Cablato esattamente come uno zener? Quindi rispetto al mio schema tolgo uno e metto l'altro?
Il codice avente le caratteristiche di cui sopra è: 5KP6.5A giusto?

La serie 5KP mi sembra eccessiva con i suoi 5000Wp.

Io userei un SA13A da 500Wp collegato però sui 12V.

cyberhs:
collegato però sui 12V.

Cioè????

Anziché proteggere il solo ingresso di Arduino, io inserirei la protezione sulla batteria, cioè a monte del partitore.

Ragazzi questa devo raccontarvela. Dunque dichiaro così le variabili:

int analogPin = A0;
int lettura = 0;
float voltage;

poi scrivo questo:

 lettura = analogRead(analogPin);
      voltage = (14/ 1024) * lettura;

Ed ottengo uno zero come stampa. Impazzisco, verifico collegamenti e saldature e poi alla fine molto scoraggiato scrivo questo:

 lettura = analogRead(analogPin);
      voltage = (13.9/ 1024) * lettura;

E come per mistero funziona. Scusate ma perché con il valore intero “14” il codice va in pappa e con “13.9”, no. Cosa mi sfugge?

Grazie

Molto semplicemente perché 14/1024 è una divisione tra INTERI, mentre 13.9/1024 è tra FLOAT ... prova a ragionarci :wink:

Se non specifichi tu il tipo, mettendo o un operatore di cast, o il punto decimale ... come vuoi che il compilatore sappia che tipo usare per quei numeri ? Lui procede eseguendo da destra a sinistra e effettuando le assegnazioni.

lettura (intero) * (14 intero / 1024 intero) ---> risultato intero ---> assegnato ad un float voltage

Guglielmo