Come campionare un segnale analogico da -2 V a +2 V con un microcontrollore PIC?


10

Sto usando un micro PIC con un ADC a 10 bit per ottenere letture da un segnale analogico con una frequenza inferiore a 300 hz. Tuttavia, quel segnale analogico è compreso tra -2 V e +2 V. Come posso condizionare il segnale per portarlo in un intervallo utilizzabile (supponendo che l'ingresso all'ADC debba essere positivo) Inoltre non ho un positivo e alimentazione negativa.





@Kellenjb - le domande a cui ti colleghi non affrontano i calcoli per questo caso particolare, in cui la tensione di ingresso va oltre i binari.
Stevenvh,

Le seguenti domande sono state chiuse come duplicati di questa e hanno risposte utili: electronics.stackexchange.com/questions/15985/… , electronics.stackexchange.com/questions/15940/…
Kevin Vermeer,

Risposte:


14

nota importante:
questa risposta è stata pubblicata per risolvere il problema per input da -20 V a +20 V , perché era quello che era stato chiesto. È un metodo intelligente ma non funziona se il limite di tensione in ingresso rimane tra le rotaie.

Dovrai ridimensionare la tensione con un divisore di resistenza in modo da ottenere una tensione compresa tra -2,5 V e + 2,5 V e aggiungere 2,5 V. (Presumo un alimentatore da 5 V per il tuo PIC).

Il seguente calcolo sembra lungo, ma è solo perché spiego dettagliatamente ogni passaggio. In realtà è così facile che puoi farlo in testa in pochissimo tempo.

Innanzitutto questo:

R1 è il resistore tra e V O U T , R2 è il resistore tra + 5 V e e R3 è il resistore tra e . VINVOUT
+5V V O U T G N DVOUT
VOUTGND

Quante incognite abbiamo? Tre, R1, R2 e R3. Non del tutto, possiamo scegliere liberamente un valore e gli altri due dipendono da quello. Scegliamo R3 = 1k. Il modo matematico per trovare gli altri valori è creare un insieme di due equazioni simultanee da due coppie ( , ) e risolvere i valori di resistenza sconosciuti. Qualsiasi coppia ( , ) lo farà, ma vedremo che possiamo semplificare tremendamente le cose scegliendo attentamente quelle coppie, vale a dire i valori estremi: ( , ) e ( , ). V O U T V I N V O U T + 20 V + 5 V - 20 V 0 VVINVOUTVINVOUT+20V+5V20V0V

Primo caso: , Nota che (e questa è la chiave della soluzione!) Entrambe le estremità di R2 vedono , quindi non c'è caduta di tensione e quindi nessuna corrente passante R2. Ciò significa che deve essere uguale a (KCL). . Conosciamo la corrente attraverso R1 e anche la tensione su di essa, quindi possiamo calcolarne la resistenza: . Trovato il nostro primo sconosciuto! V O U T = + 5 V + 5 V I R 1 I R 3 I R 3 = + 5 V - 0 VVIN=+20VVOUT=+5V
+5VIR1IR3
R1=+20V-5VIR3=+5V0V1kΩ=5mA=IR1
R1=+20V5V5mA=3kΩ

Secondo caso: , La stessa cosa che succede con R2 ora accade con R3: nessuna caduta di tensione, quindi nessuna corrente. Ancora secondo KCL, ora = . . Conosciamo la corrente attraverso R2 e anche la tensione su di essa, quindi possiamo calcolare la sua resistenza: . Trovato il nostro secondo sconosciuto! V O U T = 0 V I R 1 I R 2 I R 1 = - 20 V - 0 VVIN=20VVOUT=0V
IR1IR2
R2=+5V-0VIR1=20V0V3kΩ=6.67mA=IR2
R2=+5V0V6.67mA=0.75kΩ

Quindi una soluzione è: . R1=3kΩ,R2=0.75kΩ,R3=1kΩ

Come ho detto, è importante solo il rapporto tra questi valori, quindi potrei anche scegliere . Possiamo verificare questa soluzione con un'altra coppia ( , ), ad es. ( , ). R1 e R3 sono ora paralleli (entrambi hanno + 2,5 V-0 V su di essi, quindi quando calcoliamo il loro valore combinato troviamo , esattamente il valore di R2 e il valore di cui avevamo bisogno per ottenere da ! Quindi la nostra soluzione è davvero corretta. [Il timbro QC va qui]V I N V O U T 0 V 2,5 V 0,75 k Ω + 2,5 V + 5 VR1=12kΩ,R2=3kΩ,R3=4kΩ
VINVOUT0V2.5V0.75kΩ+2.5V+5V

L'ultima cosa da fare è connettere all'ADC del PIC. Gli ADC hanno spesso resistenze di ingresso piuttosto basse, quindi questo può disturbare il nostro equilibrio attentamente calcolato. Niente di cui preoccuparsi, tuttavia, dobbiamo semplicemente aumentare R3 in modo che . Supponiamo che , quindi Da questo troviamo . R 3 / / R A D C = 1 k Ω R A D C = 5 k Ω 1VOUTR3//RADC=1kΩRADC=5kΩ R3=1,25kΩ11kΩ=1R3+1RADC=1R3+15kΩR3=1.25kΩ


modifica
OK, è stato intelligente e molto semplice, anche se lo dico io. ;-) Ma perché non dovrebbe funzionare se la tensione di ingresso rimane tra le guide? Nelle situazioni precedenti abbiamo sempre avuto un resistore che non aveva corrente che lo attraversava, in modo che, in seguito a KCL, la corrente che entrava nel nodo attraverso un resistore usciva dall'altro. Ciò significava che una tensione doveva essere superiore a e l'altra inferiore. Se entrambe le tensioni sono inferiori, la corrente fluirebbe solo da quel nodo e KCL lo proibirà. V O U TVOUTVOUT


L'ingresso -20V comporterà un po 'al di sotto di 0V out.
Olin Lathrop,

(e forse Olin Lathrop): stavo cercando di scoprire come trovi il valore del resistore 7k. Ho notato che quando la tensione di ingresso è di 2,5 V non fluirà corrente al nodo, qualunque sia il valore della resistenza, perché nessuna differenza di tensione. Ma quel 2.5V in ingresso non è di fascia media, mentre lo è anche il 2.5V out. Ciò non significa che il divisore dovrebbe avere due resistori diversi? Se capisci cosa intendo.
Federico Russo,

Forse questo spiega anche il commento di @Olin Lathrop.
Federico Russo,

@Frederico: Sì, non sarà completamente simmetrico. Ne discuto nella mia risposta. È possibile regolare i tre resistori per mappare da -20 a +20 volt a 0 a 5 volt, ma sia Steven che io abbiamo mostrato i casi più semplici in cui si ottiene una piccola assimetria.
Olin Lathrop,

6

Il modo più semplice è utilizzare un "divisore di resistori".

Non hai detto a quale tensione sta funzionando questo PIC e quindi la gamma di input A / D è, quindi usiamo 5V per l'esempio. La gamma di tensione in ingresso è 40 V e l'uscita 5 V, quindi è necessario qualcosa che si attenua di almeno 8. È inoltre necessario che il risultato sia centrato su 1/2 Vdd, ovvero 2,5 V, mentre la tensione in ingresso è centrata su 0 V .

Questo può essere realizzato con 3 resistori. Un'estremità di tutte e tre le resistenze sono collegate insieme e al pin di ingresso A / D PIC. L'altra estremità di R1 va al segnale di ingresso, R2 va a Vdd e R3 va a terra. Il divisore del resistore è formato dall'R1 e dalla combinazione parallela di R2 e R3. Puoi regolare R2 e R3 per centrare l'intervallo risultante a 2,5 V, ma per semplicità spiegando questo vivremo con un po 'di assimetria e attenueremo un po' di più per assicurarti che entrambe le estremità siano limitate all'intervallo Vss-Vdd.

Supponiamo che il PIC desideri che il segnale analogico abbia un'impedenza di 10 kΩ o inferiore. Ancora una volta per semplicità, facciamo R2 e R3 20 kΩ. L'impedenza che alimenta il PIC non sarà altro che la combinazione parallela di quelli, che è 10 kΩ. Per ottenere l'attenuazione di 8, R1 deve essere 7 volte R2 // R3, che è 70 kΩ. Tuttavia, poiché il risultato non sarà esattamente simmetrico, dobbiamo attenuare un po 'di più per assicurarci che -20V non comporti meno di 0V nel PIC. Ciò richiede effettivamente l'attenuazione di 9, quindi R1 deve essere almeno 8 volte R2 // R3, che è 80 kΩ. Il valore standard di 82 kΩ consentirà un po 'di inclinazione e margine, ma otterrai comunque la maggior parte dell'intervallo A / D per misurare il segnale originale.

Inserito il:

Ecco un esempio di come trovare la soluzione esatta a un problema simile. Questo non ha assimetria e ha un'impedenza di uscita specifica specificata. Questa forma di soluzione può sempre essere utilizzata quando l'intervallo A / D rientra interamente nell'intervallo della tensione di ingresso.


+1 perché per quanto riguarda il conteggio delle parti, questo è il modo più semplice per costruire ciò che è richiesto. Alcune note: è possibile occuparsi dell'asimetria nel codice uC e aggiungendo un condensatore in parallelo al resistore che va a GND, il segnale può essere appianato (filtro passa-basso). L'angolo freq. è 1 / (2 * pi R C), dove R è il valore parallelo di tutte e tre le resistenze e C è il valore del limite aggiunto (ADC ha bisogno di limite comunque!). Calcola l'accuratezza di questa configurazione considerando tutte le tolleranze (R, errore ADC in +/- max. LSB, errore di riferimento, ...) - potrebbe essere peggiore del previsto.
zebonaut,

@zebonaut - Ho eseguito di nuovo il calcolo e spiegato dettagliatamente ogni passaggio nella mia risposta aggiornata (molto meno complicata di come sembri!). Ti dà una mappatura esatta di (-20V .. + 20V) a (0V .. + 5V)
stevenvh

@zebonaut: il condensatore potrebbe essere utile come filtro anti-aliasing, ma non fa nulla sull'assimetria. Non pensavo che la piccola assimetria fosse un grosso problema. È abbastanza facile prendersi cura del firmware come hai detto.
Olin Lathrop,

Se si desidera compensare l'asimmetria nel software, è necessario calcolare l'esatta funzione di trasferimento. Se devi farlo comunque, perché non usare i giusti valori di resistenza in primo luogo (non quelli della mia prima (errata) risposta!)
stevenvh

@stevenvh: non c'è niente di sbagliato nell'usare i valori del resistore "giusto". Mi sono reso conto che una mappatura esatta era possibile (come ho già detto nella mia risposta), ma ho deciso di non entrare nella complessità dei calcoli e rispondere al caso concettualmente più semplice che si traduce in una piccola assimetria. In ogni caso, devi attenuare un po 'di più per tenere conto dello slop e probabilmente dovresti calibrare comunque nel firmware.
Olin Lathrop,

2

Questo è il circuito standard per quello. È necessario ridimensionare i valori della resistenza per l'impedenza richiesta.


Devi assicurarti che l'impedenza della sorgente sia relativamente bassa se la usi?
Nick T,

Leon, perché non usare un condensatore invece del resistore da 1k?
Stevenvh,

È una soluzione accoppiata a corrente continua. Il resistore serie è necessario per il corretto funzionamento.
Leon Heller,

3
@Leon Heller: Penso che sarebbe una risposta migliore se spiegassi come trovare i giusti valori per i resistori.
Federico Russo,

2

Se il segnale non è DC o se un riferimento DC non è importante, il segnale può essere accoppiato in modo capacitivo all'ingresso dell'ADC.

In alternativa, se la massa del PIC è mobile, è possibile collegare la massa del segnale a 1/2 VDD del PIC.


Se si utilizza l'accoppiamento capacitivo, si elimina il componente CC, ma la parte negativa del segnale andrà comunque sottoterra, a meno che non si fornisca una polarizzazione sul pin di ingresso da un divisore resistivo, come nel circuito di Leon.
Stevenvh,

La tensione di alimentazione non è stata specificata - funzionerebbe con un ADC 5V. Se si utilizzava un Vdd più piccolo, è necessario ridimensionare l'input. A quel punto si sarebbe trasformato nel circuito di Leon con un condensatore.
W5VO,

2

Il seguente circuito dovrebbe fare il lavoro:

3.3V
 +
 |
 \
 / 1k
 \
 |
 +-- ADC input
 |
 \
 /  1k
 \
 |
 +-- Signal input (-2V to +2V)

È un potenziale divisore. A -2 V, l'uscita sarà 0,65 V; a + 2 V, 2,65 V.

Tutto il rumore sulla guida 3.3V verrà trasferito all'ingresso, quindi utilizzare un buon riferimento di tensione per ridurre questo problema.

Funzionerà anche con altri materiali di consumo, ma l'offset si sposterà.


Sì, funziona, ma sarebbe bello usare l'intera gamma ADC :-)
stevenvh

@stevenh Puoi farlo usando riferimenti a 0.65V e 2.65V sebbene tu possa anche usare il tuo circuito allora.
Thomas O

VREF+VREFGND

@stevenh PIC24, dsPIC e PIC32 hanno sicuramente Vref-. Penso che lo faccia anche un po 'di 18F.
Thomas O

Sì, ok, non li conosco tutti (ce ne sono molti ). OP non dice quale parte sta usando e sembra essere svanito, quindi è inutile chiederglielo.
Stevenvh,

1

VADCREF
VADCVDDVADCVADCREF+

VDD2V3.3VVADC

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.