Forse non tutti sanno che gli ingressi analogici di Arduino (normalmente usati in modalità single ended) possono anche essere configurati in modalità differenziale.
Questa modalità prevede che gli ingressi analogici opportunamente configurati ed usati a coppie, possano ricevere segnali differenziali (quindi positivi e negativi) oppure che un ingresso analogico possa ricevere un segnale sia positivo che negativo.
E non solo, ma è anche possibile stabilire il guadagno dell'ADC tra 1, 10 e 200, con la limitazione che i guadagni 10 e 200 non possono essere usati con una tensione operativa inferiore a 2.7V.
La contropartita è che con questa modalità la risoluzione scenda da 1024 a 512, la stessa limitazione che si ha quando, in modalità single ended, si tenta di leggere un segnale (ad esempio) tra +1V e -1V usando un partitore con due resistenze uguali per ottenere uno zero a metà dell'alimentazione che, di fatto, dimezza la risoluzione.
cyberhs:
Forse non tutti sanno che gli ingressi analogici di Arduino (normalmente usati in modalità single ended) possono anche essere configurati in modalità differenziale.
Vale solo per la MEGA2560, l'ATMEGA 328 non ha ingressi differenziali, inoltre le tensioni in ingresso su i due canali devono sempre essere positive rispetto a Vss, quando il data sheet parla di ingresso negativo/positivo è riferito solo al segno della misura e non al valore della tensione, p.e. se A0 è input+ e A1 è input- la misura ritorna la differenza tra A0 e A1.
Nell capitolo 30.8 ADC Characteristics c'è la tabella delle caratteristiche elettriche, come puoi vedere il range di tensione applicabili al ADC è compreso esclusivamente tra GND e Vref in modo single ended, e in modo differenziale è compresa tra +Vref/Gain e -Vref/Gain, dato che Vref deve essere compreso tra 2.7V e Avcc-0.5 ne consegue che non puoi applicare tensioni negative all'ingresso ADC, del resto è reso impossibile dalla presenza dei diodi di clamping che proteggono il pin dalle tensioni maggiori di Vdd o minori di Vss.
cyberhs:
Ho recentemente letto questo articolo che fa riferimento alla libreria wiring_differential e che ho trovato molto interessante: sekarlangit.com/arduino-differential-gain.php
L'autore dice testualmente ;
So, you can use this differential input ±5V for your analog data acquisition system and use analog input
Scusa Astro, ma ho letto il datasheet (tabelle 31-10 di pag. 379) e conferma quanto dici.
Vref minima 2.7V e massima AVCC - 0.5V = 5 - 0.5 = 4.5V
La Vdiff dovrebbe essere compresa tra un minimo di -Vref / G ed un massimo di +Vref / G, perciò con guadagno 1 la tensione Vdiff può essere compresa tra -4.5V e +4.5V.
Si perché tu ragioni su i valori assoluti e non sul fatto che sono riferiti a Vref e lavori in modo differenziale, ovvero la tensione può assumere valori negativi rispetto a Vref, che è sempre positiva, ma non può andare a valori negativi rispetto a GND, idem non può superare il valore massimo di Vdd+0.5 V perché poi entra in funzione il diodo di clamping.
Poi ci sarebbe da fare tutta una serie di considerazione che se usi l'ADC in modo differenziale devi fare una misura di tipo differenziale che ha dei prerequisti diversi da quelli di una normale misura riferita a GND, prova a pensare alla RS485 che usa un bus differenziale dove quello che conta è la differenza di potenziale tra A e B e non tra A/B e GND, infatti la 485 non richiede la connessione di GND per funzionare.