¿Cómo diseñar un convertidor I/V para Arduino?

Hola comunidad,

Soy nueva en el mundo de la electrónica y realmente me vendría bien un poco de ayuda. Estoy intentando diseñar un convertidor I/V para un sensor de presión NOSHOK (el link del datasheet https://www.farnell.com/datasheets/3932164.pdf).

Mi sensor funciona con la combinación de 2 cables de 4mA a 20mA la alimentación la hago con una fuente de 18V y el Arduino Nano lo estoy alimentando con un circuito con salida a 5VDC (uso el LM2596 para bajar los 24V a 5V - 2A).

Como indica el título quiero transformar la corriente a voltaje para hacer la lectura con mi Arduino nano en un rango de 0-4.5v para protección de sobre carga. Buscando y leyendo en varios foros encontré el OPAMP INA122 para hacer la conversión, pero no estoy segura de si es la opción correcta para este proyecto.

Para el código del arduino tengo esto hasta el momento:

#define PINMAP_ADC A0           /* ADC pin de entrada al arduino */
#define INTERVALL_MS 1000       /* 1s de intervalo entre lecturas */
#define SENSOR_FSR 100          /* Presión en psi por % del rango 4-20mA. 5000 psi que es el caso del sensor */

unsigned long previousMillis = 0;

void setup() {
    //Inicio el serial con 9k6 8n1
    Serial.begin(9600); 
    
    //Se va a verificar si el sensor está conectado
    //Verificar el tiempo para asegurar el intervalo
    //Si ya se cumplió, actualizar el tiempo con millis

    while( (float)(analogRead(PINMAP_ADC)* (5.0 / 1023.0)) < 1.0 ){
        unsigned long currentMillis = millis(); 
        if (currentMillis - previousMillis >= INTERVALL_MS) { 
            previousMillis = currentMillis;
            Serial.println("Sensor not connected....");
        }
    }
    
    //Mostrar los valores en el CVS si el sensor está listo
    Serial.println("Raw_ADC_Value[cnts,0-1023];Voltage[V,0-5];Current_FSR[%,0-100];Pressure[psig,0-5.000];SampleValid[bool,0-1]");
}

void loop() {
    //Verificar el tiempo para asegurar el intervalo
    //Si ya se cumplió, actualizar el tiempo con millis
    unsigned long currentMillis = millis(); 
    if (currentMillis - previousMillis >= INTERVALL_MS) { 
        previousMillis = currentMillis;

        //Leer los datos del Sensor en el rango de 0...1023
        //Ecala de los datos a un rango de 0...4.5V
        //Lo escalammos a  % (4-20mA/1-4.5V de Rango)
        //Escalado a PSI
        int     rawAdcCnts = analogRead(PINMAP_ADC);            //0...1023
        float   rawAdcVoltage = rawAdcCnts * (4.5 / 1023.0);    //0...4.5
        float   scaledIPercen = ( rawAdcVoltage - 1 )*25.0;     //0...100
        float   scaledIBar    = scaledIPercen * SENSOR_FSR      //0...FSR

        //Verifica que el sensor esté conectado
        //y que no tenga ningún error
        if ( rawAdcVoltage >= 1.0 ){
            //Muestra los valores en el monitor serial
            Serial.print(rawAdcCnts);
            Serial.print(";");
            Serial.print(rawAdcVoltage);
            Serial.print(";");
            Serial.print(scaledIPercen);
            Serial.print(";");
            Serial.print(scaledIBar);
            Serial.print(";");
            Serial.println("1");
        } else {
            Serial.print(";");
            Serial.print(rawAdcVoltage);
            Serial.print(";;;");
            Serial.println("0");
        }
    }

En cuanto al circuito después de mucha ayuda conseguí esto:

Pero aún no entiendo dónde conectar la fuente de 18V, ni porqué usan 2 OPAMP y quiero su opinión sobre qué OPAMP debería utilizar. Me sugirieron usar la salida de 5V del arduino para evitar ruido digital.

Si alguien pudiera ofrecer información adicional, consideraciones o ejemplos que deba tener en cuenta, se lo agradecería mucho. Estoy ansioso por aprender más.

A menos que quieras aprovechar todo el rango del arduino, usar una simple resistencias de precisión de 250 ohms te permite medir desde 1 a 5V de la siguiente manera.
Por Ley de Ohm
04mA250 ohms = 1.00 V
20mA
250 ohms = 5.00 V
Asi que ya lo tienes resuelto.
Ahora si quieres usar todo el rango dinámico del ADC necesitas desplazar ese volt correspondiente a los 4mA a 0V con un AO y tambien aumentar con otro la Ganancia para poder llegar otra vez a 5V.
Usa un primer AO como seguidor para no cargar la lectura aunque me parece exagerado.
El segundo es un AO diferencial.
No se de que fuente de 18V hablas. En el esquema se ve -5V lo que no me parece correcto. 5V podria ser pero nunca llegarias a una excursion de 5V en Vout o en V_ADC
Aca tienes un buen esquema que esta completo.

image

Como dije la R de 250 debe ser precisa, ahi lo logran con un preset.
Luce bien, no se si funciona.
No lo probé. Me hacen ruido algunos valores.
Dejame chequearlo y te vuelvo a escribir.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.