Lectura de valores de resistencia dinámica en un amplio rango

1

Estoy tratando de medir un material que puede fluctuar entre 500-100k Ohms con un ADC (por ejemplo, un Arduino o Raspberry Pi con algo como MCP3008 ). Soy un principiante en electrónica, y mi estrategia fue simplemente lo que ya sabía: divisores de voltaje . El problema que estoy encontrando es el amplio rango. Mi configuración es así, donde quiero saber R1 :

3.3V -- R1 -|- R2 -- GND
            |
           ADC

Realizo los siguientes cálculos simples para obtenerlo:

v_out = ADC * 3.3/1024
R1 = R2*(3.3-v_out)/v_out

El problema que muchos de ustedes saben, es que los valores altamente desajustados de R1 y R2 hacen que la resolución sea deficiente, por lo que la salida parece muy "escalonada". Aquí hay una gráfica simulada de un rango de valores de R1 (lo que estamos midiendo), y el valor calculado usando la fórmula anterior usando algunos valores comunes de resistencia para R2 :

El1ky4.7ksonexcelentesparaelextremobajo,perorealmenteseaplananenelextremoalto,dondeun10kseríamuchomejor.

¿Existeuncircuito/métodorazonablementesimpleydebajocostoparaleerunaresistenciadinámicaquepuedaoscilarenvariosórdenesdemagnitud?

Sueños/listadedeseos:

  • costoperdido(porejemplo,$25)
  • funcionaconhardwaredeniveldepasatiempo(ArduinooRPi)
  • errordemediciónde<=1%

Ideasconsideradas

Dadoloanterior,¡elsueñoparecíatenerunaresistenciavariable!Aprendíqueexistenpotenciómetrosdigitalesypensé Podría hacer una idea . Con algunas respuestas excelentes, resulta que puedo, pero la precisión es deficiente (~ 5% vs. < 1% con resistencias fijas) y algo irrepetible.

También pensé en tener varias resistencias R2 conectadas a pines separados en el ADC. A medida que cambia el valor de R1 , podría cambiar el pin del que leí. Con este circuito, todos los R2 candidatos se conectarán a la salida de R1 y las entradas analógicas ... No sé qué se creará con respecto a un circuito. ¿Están flotando? ¿Puedo desconectar los pines no utilizados para no tener un divisor multi-voltaje extraño? Eso podría ser lo que esta pregunta aborda, solo con el propósito de detener el drenaje de potencia.

Lo siento si esta es una pregunta tonta. Puedo encontrar mucha confirmación de que este problema es real, como en este artículo sobre cómo hacer un ohmímetro Arduino :

  

La precisión del medidor de ohmios será pobre si el valor de la resistencia conocida es mucho menor o mayor que la resistencia de la resistencia desconocida.

Simplemente no encuentro mucho sobre lo que la gente realmente hace en esta situación en el mundo real. Muchas gracias.

    
pregunta Hendy

4 respuestas

2

En un Arduino, los pines son de alta impedancia cuando están configurados en 'Entrada', y una buena impedancia de salida baja cuando están configurados en 'Salida', capaces de hundirse > 20mA. Esto le permite dividir el rango y medir cada uno de manera óptima. Esto se aplica tanto a los pines digitales como a los analógicos.

Por ejemplo, dividamos el rango de 500 ohm a 100k, que es una relación de resistencia de 200 de punta a punta, en 3 sub-rangos, tomando la raíz cúbica de la relación. Luego podemos manejarlo en rangos de 500-3k, 3k a 17k, 17k a 100k, cada uno con una relación de 6 de extremo a extremo. Obtenemos el mejor centrado del rango cuando lo medimos con respecto a la media geométrica de sus puntos finales, así que use 1200ohms, 7k y 41k como la 'otra pierna'.

Conecta el Arduino de la siguiente manera. He redondeado las resistencias a los valores preferidos, ya que los valores reales no son importantes, solo se conocen.

Mida el voltaje en el pin A0, utilizando el ADC con VCC como referencia.

simular este circuito : esquema creado usando CircuitLab

Con todos los pines configurados en Entrada, la resistencia efectiva a tierra es de aproximadamente 40k, para el rango de 7k a 100k.

Ajustando el pin A2 a salida baja, y asegurándose de que A1 sea de alta impedancia, por

pinMode(A1, INPUT);
pinMode(A2, OUTPUT);
digitalWrite(A2, LOW);

tira de R3 al suelo. Ahora la resistencia a tierra es de aproximadamente 7k, para el rango de 3k a 17k.

Regréselo a una impedancia alta como esta

pinMode(A2, INPUT);

Cuando establece A1 bajo de la misma manera, la resistencia a tierra es 1200, para el rango más bajo. Tenga en cuenta que la corriente máxima que A1 tiene que hundir es aproximadamente 2 mA en este caso, dentro de la capacidad de esos pines.

Por supuesto, puede dividir el rango en rangos más y más finos, haciendo las sumas adecuadas y utilizando más pines y resistencias.

Es posible que pueda sustituir los pines digitales por A1 y A2. Si bien también son de alta impedancia en la entrada, aún no he revisado la documentación para verificar si los voltajes intermedios están bien en una entrada digital. No están en las familias lógicas CMOS habituales, las entradas pueden oscilar y generar un exceso de potencia, pero Arduino puede ser diferente. Las entradas analógicas están (por supuesto) satisfechas con cualquier voltaje intermedio en el pin.

    
respondido por el Neil_UK
2

Una forma sencilla es usar un mejor ADC externo. Por ejemplo, un ADS1115 obtiene una conversión de 16 bits con un PGA y una referencia en el chip, por unos cinco dólares en singles Interfaz I2C.

Bastante decente para aplicaciones no críticas.

    
respondido por el Spehro Pefhany
1

Buscaría dos formas de hacer esto:

Divisores de voltaje donde se multiplexan las resistencias conocidas.
(Esta idea ya está insinuada en el O.P.)

Si quiere probar esto a bajo costo, conecte las resistencias a los pines digitales del microcontrolador. Cuando el pin digital está bajo, la resistencia está conectada a tierra. Cuando el pin digital está flotando, la resistencia se desconecta.

De lo contrario, un mux analógico como un CD4051 o ADG728 debería hacer el trabajo.

Fuente actual de OpAmp

La corriente a través de la resistencia desconocida es suministrada por una fuente de corriente OpAmp, y esta fuente de corriente es ajustable.
(Busque fuentes de corriente controladas por voltaje. Mi favorito es fuente de corriente Howland modificada , muy versátil.)

    
respondido por el Nick Alexeev
0

Uno podría convertir R a frecuencia y luego convertir f a algún otro parámetro como fuerza o desplazamiento. Es probable que haya efectos de histéresis o de reacción.

Yo usaría la resistencia como un valor de retroalimentación negativa para desviar la tapa en un inversor Schmitt Trigger inversor. Luego use un reloj Xtal de referencia para medir la frecuencia en un intervalo de tiempo.

Impresiones:

Todavía tengo que encontrar un material de este tipo que tenga un 1% de precisión y dudo que exista una repetibilidad del material con un rango dinámico tan amplio.

La capacitancia del material también es de gran importancia cuando la resistencia cambia tanto, ya que las mediciones de impedancia de CA medirán tanto en una frecuencia como en un valor, pero introducirán grandes errores cuando cambie cualquier variable.

La precisión de la medición de frecuencia se puede hacer a más del 1%, pero sospecho que la medición del material después de los movimientos repetidos a la posición original cambiará > 50% en la posición relajada, lo que puede requerir una tensión mínima para reducir el rango dinámico pero mejorar la repetibilidad / precisión.

Por lo tanto, la pregunta debe volver a escribirse para incluir todas las propiedades (especificaciones) del material y no solo una simple forma de medir R?

Recomendación:

El mejor método de prueba no es intentar diseñar un ADC en un material desconocido, sino usar un medidor RLC calibrado con al menos 3 valores de frecuencia y caracterizar las propiedades del material adecuadamente para los valores de Rs, Rp, C @f y repetibilidad y tal vez varianza con la temperatura, sesgo Vcc, etc.

Eres un novato y tienes mucho que aprender.

    
respondido por el Tony EE rocketscientist

Lea otras preguntas en las etiquetas