Hacer que el voltímetro acepte el voltaje de entrada bipolar, usando un microcontrolador

4

Quiero construir un voltímetro muy simple usando ATMEGA328 ADC. Puedo medir con éxito hasta 20v (usando un divisor de voltaje), pero el problema es que no entiendo cómo medir el voltaje correctamente, si los terminales positivo y negativo se cambian.

La única manera en que podría pensar es agregar otra entrada de ADC que sea responsable de medir el 'voltaje invertido'. Unen ambas entradas ADC, pero agregan diodos en el medio, por lo que un canal funciona con (+ -) y el otro canal trabaja con (- +) y luego 'combina' la entrada de ambos canales utilizando el código. Entonces debería poder medir cosas como la onda del pecado, por ejemplo (donde las polaridades cambian).

¿Es correcto el concepto o hay una mejor manera de hacerlo? Gracias!

    
pregunta 0x29a

4 respuestas

9

Como explicó FakeMoustache, la idea del diodo no es realmente buena. La forma más fácil de lograr esto es ajustar el rango de entrada (que incluye tanto voltajes positivos como negativos de alta amplitud) a algo que pueda utilizar el ADC (un voltaje entre GND y V REF ). Para esto, necesita reducir la amplitud del voltaje de entrada y agregar una compensación fija. El objetivo es que cuando tenga una entrada a 0 V, obtenga un voltaje V REF / 2 para alimentar el ADC.

Podemos construir esta etapa con un amplificador operacional. Pero esto puede hacerse de manera más efectiva si acepta invertir el signo de voltaje de entrada y repararlo más tarde desde el firmware de la MCU. Por ejemplo, la etapa de ajuste emitirá un voltaje de + V REF cuando la entrada sea de -20V y un voltaje de GND cuando la entrada sea de + 20V. Básicamente, la función de transferencia se invierte. De esta manera, puede hacer esto sin necesidad de polarizaciones de voltaje negativas, y con un solo indicador.

Aquí está el circuito básico:

simular este circuito : esquema creado usando CircuitLab

Ahora, ¿cómo calcular los valores de R1, R2, R3, R4 y R5 para que obtenga el rango que necesita y el desplazamiento correcto? Bueno, básicamente, todo se puede deducir de la siguiente fórmula:

\ $ \ dfrac {\ frac {V_ {OUT}} {R1} + \ frac {V_ {IN}} {R2}} {\ frac {1} {R1} + \ frac {1} {R2} + \ frac {1} {R3}} = \ dfrac {\ frac {V_ {REF}} {R4}} {\ frac {1} {R4} + \ frac {1} {R5}} \ $

Debe encontrar los valores adecuados para que cuando V IN sea 20V, V OUT sea 0V y cuando V IN sea -20V, V OUT es V REF . También debe asegurarse de que la impedancia de entrada total sea lo suficientemente alta como para dejar su señal de entrada sin alterar (los valores en el rango de 100 k 100 probablemente estarán bien).

Pero soy un poco demasiado perezoso para resolver esto yo mismo ...

Lo último: elija un opamp con entradas y salidas de riel a riel. De lo contrario, obtendrás resultados incorrectos en el extremo lejano del rango de entrada.

Edit: Parece que no soy tan perezoso después de todo. Digamos que el rango de entrada es + V MAX → -V MAX y desea traducir esto a 0 → + V REF , la fórmula anterior da las siguientes relaciones entre los valores de resistencia:

\ $ \ frac {R1} {R2} = \ frac {V_ {REF}} {2V_ {MAX}} \ $ y \ $ \ frac {R4} {R5} = 1 + 2 \ frac {R1} {R3} + \ frac {V_ {REF}} {V_ {MAX}} \ $

Por lo tanto, una posible solución para V MAX = 20V y V REF = 5V sería:

  • R1 = R3 = 12.5k
  • R2 = 100k
  • R5 = 10k
  • R4 = 32.5k

Lo comprobé con el simulador circuitlab, parece consistente. Aquí está la función de transferencia:

    
respondido por el dim
7
La respuesta de

@ dim es una solución muy limpia, pero si su objetivo es la simplicidad sobre la precisión, puede lograr la conversión utilizando solo tres resistencias de la siguiente manera:

Este circuito convertirá una entrada de +/- 20V a una salida de 0.32 a 4.18V.

Por supuesto, esto no utilizará el rango de escala completa del ADC, pero no está muy lejos. Además, la respuesta de frecuencia del circuito estará limitada por la capacidad de muestreo / retención en el ADC ya que el circuito tiene una impedancia relativamente alta, pero no creo que sea demasiado limitada

Haciendo los cálculos, la ecuación detrás del circuito es:

$$ V_ {ADC} = \ frac {23.4 + V_ {Entrada}} {10.4} $$

Editar: Haciendo un poco más de matemáticas, podemos ajustar los valores de la resistencia para que nos beneficiemos del rango de escala completo del ADC. Si nombramos R1, la resistencia vinculada a la entrada, R2 la resistencia vinculada a V REF (+ 5V), y R3 la resistencia vinculada al suelo, obtenemos la siguiente fórmula:

\ $ V_ {OUT} = \ dfrac {\ frac {V_ {IN}} {R1} + \ frac {V_ {REF}} {R2}} {\ frac {1} {R1} + \ frac { 1} {R2} + \ frac {1} {R3}} \ $

Así que ahora, usando la misma terminología que en la respuesta de @ dim, obtenemos las siguientes restricciones en los valores de resistencia para obtener una salida de + V REF para a + V MAX entrada, y una salida de 0V para una entrada -V MAX :

\ $ \ frac {R1} {R2} = \ frac {V_ {MAX}} {V_ {REF}} \ $, y \ $ \ frac {R2} {R3} = 1- \ frac {V_ { REF}} {V_ {MAX}} \ $

Una posible solución (utilizando resistencias del 1% de la serie E96) sería R1 = 49.9k, R2 = 12.4k y R3 = 16.5k.

    
respondido por el Tom Carpenter
2

Comprendo lo siguiente: el voltaje que desea medir está realmente por debajo de su circuito GND y su circuito no se puede aislar galvánicamente de él, y no tiene voltaje negativo / ADC bipolar en ningún lugar del circuito. Pero también asumimos que su voltaje está dentro del rango de su voltaje de suministro positivo.

En ese caso, yo haría una de las siguientes

a) Use un ADC bipolar y enciéndalo desde un convertidor de CC / CC (por ejemplo, ICL7662).

b) Use un amplificador de diferencia o de instrumentación (por ejemplo, INA105 / INA114, pero tome uno más barato / de fabricación propia si le conviene) y enciéndalo desde un convertidor DC / DC. Utilice la entrada de referencia del amplificador de diferencia como Vref / 2 de su ADC (búfer de impedancia)

b) es realmente la solución de dim, pero el diagrama del circuito no muestra el convertidor de voltaje, pero asume que hay un suministro de + 5V disponible.

Principios a los que me atendré:

  • el procesamiento del voltaje de la señal solo debe ocurrir mediante un amplificador lineal (opamps)
  • haga uso del PSRR de los Opamps en el diseño (por lo tanto, coloca el problema de los elementos no lineales detrás de un circuito de retroalimentación: mucho más seguro)
  • los diodos en la ruta de la señal (y otros elementos no lineales) solo se usan para sujetar (proteger) el circuito, no para cambiar una señal.
respondido por el Sascha
1

Acabo de seguir el enlace de enlace y quiero agregar otra solución a esta pregunta.

Creo que la mejor manera es usar un amplificador operacional para obtener suficiente unidad para el ADC de la MCU y poder DC acoplar la señal.

Ventaja en comparación con el circuito con un solo amplificador operacional:

  1. Si el siguiente ADC de la MCU tiene el mismo voltaje de referencia, se eliminará el voltaje de referencia. Cualquier fluctuación de voltaje en el nivel de referencia es mínima.
  2. Solución no inversora, no es necesario revertir un cálculo en la MCU.
  3. Los valores de resistencia están cerca de E12 y no es necesario agregar resistencias adicionales en serie o en paralelo ni comprar valores especiales.
  4. No necesita recalcular ninguna resistencia cuando use otra fuente de alimentación (Vref), por ejemplo. 3.3 en lugar de 5 voltios.

Intente lo siguiente con una transformación de una señal de voltaje bipolar -Uin ... + Uin (-20V ... + 20V) a una entrada ADC de 0 ... Vref (por ejemplo, 0 ... 5V).

simular este circuito : esquema creado usando CircuitLab

$$  V_ {out} = V_ {in} \ cdot \ frac {(R_1 + R_2) \ cdot R_4} {(R_3 + R_4) \ cdot R_1} + V_ {half} - V_ {minus} \ cdot \ frac {R_2} {R_1} $$ Aquí tenemos \ $ V_ {minus} = 0 \ text {V}. \ $ Así que el último término se puede omitir, obtenemos: $$  V_ {out} = V_ {in} \ cdot \ frac {(R_1 + R_2) \ cdot R_4} {(R_3 + R_4) \ cdot R_1} + V_ {half} $$ $$  V_ {out} = V_ {in} \ cdot \ frac {(R_1 + R_2) \ cdot R_4} {(R_3 + R_4) \ cdot R_1} + V_ {ref} \ cdot \ frac {R_6} {R_5 + R_6} $$ Al seleccionar \ $ R_1 = R_3 \ $ y \ $ R_2 = R_4 \ $ también \ $ R_5 = R_6 \ $ se simplifica a: $$ V_ {out} = V_ {in} \ cdot \ frac {R_2} {R_1} + \ frac {1} {2} \ cdot V_ {ref} $$ Aquí, necesitamos una ganancia de \ $ \ frac {V_ {ref}} {V_ {en} {max} - V_ {en} {min}} = \ frac {5 \ text {V}} {40 \ text { V}} = 0.125 \ $

Los mejores valores de E12 son \ $ R_1 = 120 \ text {k} \ Omega \ $ y \ $ R_2 = 15 \ text {k} \ Omega \ $, esto es una ganancia de 0.125

    
respondido por el Tom Kuschel

Lea otras preguntas en las etiquetas