¿Cómo muestreo una señal analógica de -2 V a +2 V con un microcontrolador PIC?

10

Estoy usando un micro PIC con un ADC de 10 bits para tomar lecturas de una señal analógica con una frecuencia inferior a 300 hz. Sin embargo, esa señal analógica está en el rango de -2 V y +2 V. ¿Cómo puedo condicionar la señal para ponerla en un rango utilizable (suponiendo que la entrada al ADC tenga que ser positiva)? fuente de alimentación negativa.

usuario2200
fuente
3
Posible duplicado: electronics.stackexchange.com/questions/3105/…
Thomas O
@Kellenjb: las preguntas que vincula no abordan los cálculos para este caso particular, donde el voltaje de entrada va en ambos sentidos más allá de los rieles.
stevenvh
Las siguientes preguntas se cerraron como duplicados de esta y tienen respuestas útiles: electronics.stackexchange.com/questions/15985/… , electronics.stackexchange.com/questions/15940/…
Kevin Vermeer

Respuestas:

14

nota importante:
esta respuesta se publicó para resolver el problema de entrada de -20V a + 20V , porque eso fue lo que se pidió. Es un método inteligente pero no funciona si el límite de voltaje de entrada permanece entre los rieles.

Tendrá que escalar el voltaje con un divisor de resistencia para obtener un voltaje entre -2.5V y + 2.5V, y agregar 2.5V. (Presumo una fuente de alimentación de 5V para su PIC).

El siguiente cálculo parece largo, pero eso es solo porque explico cada paso en detalle. En realidad, es tan fácil que puedes hacerlo en tu cabeza en poco tiempo.

Primero esto:

R1 es la resistencia entre y V O U T , R2 es la resistencia entre + 5 V y V O U T , y R3 es la resistencia entre V O U T y G N D . VyonorteVOUT
+5 5VVOUT
VOUTsolnortere

¿Cuántas incógnitas tenemos? Tres, R1, R2 y R3. No del todo, podemos elegir un valor libremente, y los otros dos dependen de ese. Elijamos R3 = 1k. La forma matemática de encontrar los otros valores es crear un conjunto de dos ecuaciones simultáneas a partir de dos pares ( , V O U T ) y resolver los valores de resistencia desconocidos. Cualquier par ( V I N , V O U T ) servirá, pero veremos que podemos simplificar enormemente las cosas eligiendo cuidadosamente esos pares, a saber, los valores extremos: ( + 20 V , + 5 V ) y ( -VyonorteVOUTVINVOUT+20V+5V , 0 V ). 20V0V

Primer caso: , V O U T = + 5 V Tenga en cuenta que (¡y esta es la clave de la solución!) Ambos extremos de R2 ven + 5 V , por lo que no hay caída de voltaje y, por lo tanto, no corriente a través de R2. Eso significa que I R 1 tiene que ser lo mismo que I R 3 (KCL). I R 3 = + 5 V - 0 VVIN=+20VVOUT=+5V
+5VIR1IR3
. Conocemos la corriente a través de R1, y también el voltaje sobre ella, por lo que podemos calcular su resistencia:R1=+20V-5VIR3=+5V0V1kΩ=5mA=IR1
. Encontramos nuestro primer desconocido! R1=+20V5V5mA=3kΩ

Segundo caso: , V O U T = 0 V Lo mismo que con R2 sucede ahora con R3: sin caída de voltaje, por lo que no hay corriente. De nuevo según KCL, ahora I R 1 = I R 2 . I R 1 = - 20 V - 0 VVIN=20VVOUT=0V
IR1IR2
. Conocemos la corriente a través de R2, y también el voltaje sobre ella, por lo que podemos calcular su resistencia:R2=+5V-0VIR1=20V0V3kΩ=6.67mA=IR2
. Encontramos nuestro segundo desconocido! R2=+5V0V6.67mA=0.75kΩ

Entonces una solución es: . R1=3kΩ,R2=0,75kΩ,R3=1kΩ

Como dije, lo importante es solo la relación entre estos valores, por lo que también podría elegir . Podemos comparar esta solución con otro par ( V I N , V O U T ), por ejemplo ( 0 V , 2.5 V ). R1 y R3 ahora son paralelos (ambos tienen + 2.5V-0V sobre ellos, así que cuando calculamos su valor combinado encontramos 0.75R1=12kΩ,R2=3kΩ,R3=4 4kΩ
VyonorteVOUT0 0V2.5V , ¡exactamente el valor de R2 y el valor que necesitábamos para obtener + 2.5 V de + 5 V ! Entonces nuestra solución es correcta. [Sello de control de calidad va aquí]0.75kΩ+2.5V+5V

Lo último que debe hacer es conectar al ADC del PIC. Los ADC a menudo tienen resistencias de entrada bastante bajas, por lo que esto puede perturbar nuestro equilibrio cuidadosamente calculado. Sin embargo, no hay nada de qué preocuparse, simplemente tenemos que aumentar R3 para que R 3 / / R A D C = 1 k Ω . Suponga que R A D C = 5 k Ω , luego 1VOUTR3//RADC=1kΩRADC=5kΩ De esto encontramosR3=1.25kΩ. 11kΩ=1R3+1RADC=1R3+15kΩR3=1.25kΩ


editar
OK, eso fue inteligente y muy simple, incluso si lo digo yo mismo. ;-) Pero, ¿por qué no funcionaría esto si el voltaje de entrada permanece entre los rieles? En las situaciones anteriores siempre tuvimos una resistencia que no tenía corriente que fluye a través de ella, de modo que, después de KCL, la corriente que ingresa al nodo través de una resistencia saldría a través de la otra. Eso significaba que un voltaje tenía que ser más alto que V O U T , y el otro más bajo. Si ambos voltajes son más bajos, solo fluiría corriente lejos de ese nodo, y KCL lo prohíbe.VOUTVOUT

stevenvh
fuente
-20V dará como resultado un poco por debajo de 0V de salida.
Olin Lathrop
(y tal vez Olin Lathrop): estaba tratando de averiguar cómo se encuentra el valor de la resistencia de 7k. Noté que cuando el voltaje de entrada es 2.5V, no fluirá corriente al nodo, sea cual sea el valor de la resistencia, porque no hay diferencia de voltaje. Pero esa entrada de 2.5V no es de rango medio, mientras que la salida de 2.5V también lo es. ¿No significa eso que el divisor debería tener dos resistencias diferentes? Si sabes a lo que me refiero.
Federico Russo
Tal vez eso también explica el comentario de @Olin Lathrop.
Federico Russo
@Frederico: Sí, no será completamente simétrico. Discuto esto en mi respuesta. Es posible ajustar las tres resistencias para asignar -20 a +20 voltios a 0 a 5 voltios, pero tanto Steven como yo mostramos los casos más simples en los que se obtiene una pequeña asimetría.
Olin Lathrop
6

La forma más fácil es usar un "divisor de resistencia".

No dijo a qué voltaje está funcionando este PIC y, por lo tanto, el rango de entrada A / D es, así que usemos 5V para el ejemplo. Su rango de voltaje de entrada es de 40 V y la salida de 5 V, por lo que necesita algo que se atenúe al menos en 8. También necesita que el resultado esté centrado en 1/2 Vdd, que es 2.5 V, mientras que su voltaje de entrada está centrado en 0 V .

Esto se puede lograr con 3 resistencias. Un extremo de las tres resistencias están conectadas entre sí y al pin de entrada PIC A / D. El otro extremo de R1 va a la señal de entrada, R2 va a Vdd y R3 va a tierra. El divisor de resistencia está formado por el R1 y la combinación paralela de R2 y R3. Puede ajustar R2 y R3 para centrar el rango resultante a 2.5V, pero para simplificar la explicación, viviremos con un poco de asimetría y atenuaremos un poco más para asegurarnos de que ambos extremos estén limitados al rango Vss-Vdd.

Digamos que el PIC quiere que la señal analógica tenga una impedancia de 10 kΩ o menos. Nuevamente para simplificar, hagamos que R2 y R3 sean de 20 kΩ. La impedancia que alimenta el PIC no será más que la combinación paralela de esos, que es de 10 kΩ. Para obtener una atenuación de 8, R1 debe ser 7 veces R2 // R3, que es 70 kΩ. Sin embargo, dado que el resultado no será exactamente simétrico, necesitamos atenuar un poco más para asegurarnos de que -20V no genere menos de 0V en el PIC. Eso realmente requiere atenuación de 9, por lo que R1 debe ser al menos 8 veces R2 // R3, que es 80 kΩ. El valor estándar de 82 kΩ permitirá cierta inclinación y margen, pero aún así obtendrá la mayor parte del rango A / D para medir la señal original.

Adicional:

Aquí hay un ejemplo de cómo encontrar la solución exacta a un problema similar. Esto no tiene asimetría y tiene una impedancia de salida específica especificada. Esta forma de solución siempre se puede usar cuando el rango A / D está completamente dentro del rango de voltaje de entrada.

Olin Lathrop
fuente
+1 porque en lo que respecta al recuento de piezas, esta es la forma más fácil de construir lo que se requiere. Algunas notas: es posible ocuparse de la asimetría en el código de uC, y al agregar un condensador en paralelo a la resistencia que va a GND, la señal se puede suavizar (filtro de paso bajo). La esquina freq. es 1 / (2 * pi R C), donde R es el valor paralelo de las tres resistencias y C es el valor de la tapa que se agrega (¡ADC necesita la tapa de todos modos!). Calcule la precisión de esta configuración teniendo en cuenta todas las tolerancias (R, error de ADC en +/- máx. LSB, error de referencia, ...): puede ser peor de lo esperado.
zebonaut
@zebonaut: hice el cálculo nuevamente y expliqué cada paso en detalle en mi respuesta actualizada (¡mucho menos complicado de lo que parece!). Le da un mapeo exacto de (-20V .. + 20V) a (0V .. + 5V)
stevenvh
@zebonaut: el condensador puede ser útil como filtro anti-aliasing, pero no hace nada con respecto a la asimetría. No pensé que la pequeña asimetría fuera un gran problema. Es bastante fácil cuidarlo en el firmware como dijiste.
Olin Lathrop
Si desea compensar la asimetría en el software, deberá calcular la función de transferencia exacta. Si tiene que hacer esto de todos modos, ¿por qué no usar los valores de resistencia correctos en primer lugar (no los de mi primera respuesta (errónea)!)
stevenvh
@stevenvh: No hay nada de malo en usar los valores de resistencia "correctos". Me di cuenta de que era posible un mapeo exacto (como mencioné en mi respuesta), pero decidí no entrar en la complejidad de los cálculos y responder al caso conceptualmente más simple que resulta en un poco de asimetría. En cualquier caso, debe atenuarse un poco más para tener en cuenta el declive y, de todos modos, probablemente deba calibrar el firmware.
Olin Lathrop
2

Este es el circuito estándar para eso. Necesita escalar los valores de resistencia para su impedancia requerida.

Leon Heller
fuente
¿Necesita asegurarse de que la impedancia de su fuente sea relativamente baja si la usa?
Nick T
Leon, ¿por qué no usar un condensador en lugar de la resistencia de 1k?
stevenvh
Es una solución acoplada a CC. La resistencia en serie es necesaria para un funcionamiento adecuado.
Leon Heller
3
@Leon Heller: Creo que esta sería una mejor respuesta si explicaras cómo encontrar los valores correctos para las resistencias.
Federico Russo
2

Si la señal no es DC, o si una referencia DC no es importante, la señal se puede acoplar capacitivamente a la entrada del ADC.

Alternativamente, si su tierra para el PIC es flotante, puede vincular su tierra de señal a 1/2 VDD del PIC.

W5VO
fuente
Si usa el acoplamiento capacitivo, se deshace del componente de CC, pero la parte negativa de la señal seguirá bajo tierra, a menos que proporcione una polarización en el pin de entrada por un divisor resistivo, como en el circuito de Leon.
stevenvh
No se especificó el voltaje de alimentación; funcionaría con un ADC de 5V. Si estaba utilizando un Vdd más pequeño, necesitaría escalar la entrada. Se convertiría en el circuito de Leon con un condensador en ese punto.
W5VO
2

El siguiente circuito debería hacer el trabajo:

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

Es un divisor potencial. A -2V, la salida será 0.65V; a + 2V, 2.65V.

Todo el ruido en el riel de 3.3V se transferirá a la entrada, así que use una buena referencia de voltaje para reducir este problema.

Esto también funcionará con otros suministros, pero el desplazamiento cambiará.

Thomas O
fuente
Sí, funciona, pero sería bueno usar el rango completo de ADC :-)
stevenvh
@stevenh Puede hacerlo usando referencias de 0.65V y 2.65V, aunque también puede usar su circuito en ese momento.
Thomas O
VREF+VREFGNre
@stevenh PIC24, dsPIC y PIC32 definitivamente tienen Vref-. Creo que algunos 18F también lo hacen.
Thomas O
Sí, está bien, no los conozco a todos (hay muchos ). OP no dice qué parte está usando y parece haber desaparecido, por lo que no sirve de nada preguntarle.
stevenvh
1

VADCREF
VADCVDDVADCVADCREF+

VDD2V3.3VVADC

stevenvh
fuente