Tabla de contenido:

Generador / probador 4-20ma con Arduino: 8 pasos
Generador / probador 4-20ma con Arduino: 8 pasos

Video: Generador / probador 4-20ma con Arduino: 8 pasos

Video: Generador / probador 4-20ma con Arduino: 8 pasos
Video: 4-20mA Industrial Pressure Sensor, Arduino IoT 2024, Junio
Anonim
Generador / probador 4-20ma con Arduino
Generador / probador 4-20ma con Arduino

Los generadores de 4-20 mA están disponibles en eBay, pero a mí me encanta la parte de bricolaje de las cosas y el uso de piezas que tengo por ahí.

Quería probar las entradas analógicas de nuestro PLC para verificar nuestras lecturas de scada y probar la salida de instrumentos de 4-20 mA. Hay un montón de convertidores de corriente a voltaje y convertidores de voltaje a corriente para arduino en ebay, aunque necesitan calibración. Puedo usar esto para calibrar cualquiera de esos convertidores que se encuentran en eBay y similares.

Decidí que haré un generador y un probador de bricolaje. En este momento todavía es un trabajo en progreso y un prototipo.

Tenía un antiguo sistema de sonido 2.1 que no se estaba utilizando (altavoces pequeños). Así que utilicé una de las cajas de altavoces como recinto. También tuve un amplificador que murió debido a un rayo, quité el terminal de altavoz de ese amplificador para facilitar la conexión. Tengo la intención de hacer una placa de circuito impreso en el futuro y una mejor carcasa.

Suministros:

Lista de partes.

LCD // 20x4 (adapte el código si el suyo es más pequeño)

LM7808 // Regulador de 8 voltios

LED // Cualquier tipo o tamaño

Resistencia para LED // Adecuado para el tipo de LED y 8 voltios

Resistencia de 100 ohmios + resistencia de 47 ohmios en serie // Se utilizará como resistencia de derivación

Resistencia 10K // Arduino analógico en protección contra alto voltaje

Resistencia de 22K // Para evitar que A0 flote

Trimpot 100 ohmios + 47 ohmios resistor en serie // Simulador PT100

Condensador de 35 voltios // Usé 470uF, solo para mantener bajas las fluctuaciones de voltaje de suministro

RTD (transductor PT100) // Span no importa (rango)

DIODE (para protección de polaridad)

INA219

Arduino

Paso 1:

Imagen
Imagen

Seguir el esquema debería ayudarlo a comenzar sobre dónde agregar las piezas y cablearlas.

El LM7808 permite una entrada máxima de 25 voltios, lo cual está bien para los sistemas PLC, generalmente utilizan fuentes de alimentación de 24 voltios. Agregue un disipador de calor al regulador y no lo use por períodos prolongados. La caída de 16 voltios hace que el regulador genere mucho calor.

La fuente de entrada alimenta el regulador y se conecta al INA219 VIN, en esta configuración el INA219 también podrá medir el voltaje de suministro correcto menos la caída de voltaje del diodo. Debe medir la caída de voltaje de su diodo y agregarlo al código para obtener la lectura correcta del voltaje de suministro.

Desde el INA219 VOUT al RTD + enciende el RTD. RTD- a tierra completa el circuito.

Para probar una tarjeta analógica PLC, debe conectar RTD- a la entrada de la tarjeta analógica y la tierra de la tarjeta a la tierra arduino. (Asegúrese de desconectar cualquier instrumento conectado al canal que se está probando).

R5 y LED1, el sistema indicador está encendido.

El regulador se alimenta en el arduino VIN (arduino tiene un regulador incorporado a 5 voltios).

El pin Arduino 5V va a INA219 para alimentar el chip integrado. INA219 GND a tierra arduino.

Recorte el limpiador de olla a RTD PIN1 y Trim pot pin 3 a RTD pin 2 simularán una conexión PT100. (Cambie los cables si girar el potenciómetro en el sentido de las agujas del reloj no aumenta los mA).

Paso 2: Prueba de salida del instrumento

Para probar la salida del instrumento se necesitan piezas adicionales, como una resistencia de derivación. Las resistencias normales de 0,25 W funcionarán bien. Puede dejar la resistencia de derivación y agregar un segundo INA219 para probar la salida del instrumento. Solo me quedaba uno, así que usé una resistencia en su lugar.

Las pruebas con una derivación solo se pueden realizar en el lado negativo del dispositivo. Si usa el lado positivo, suministrará a su arduino más de 4 veces el voltaje permitido y dejará salir el humo.

Agregue la resistencia de derivación en serie con el cable negativo del instrumento. El lado de la derivación más cercano al dispositivo se convertirá en el análogo positivo para arduino. El otro lado de la derivación más cercano a la fuente de alimentación se convertirá en la tierra arduino completando el circuito de entrada analógica.

La resistencia de derivación de 150 ohmios es el máximo absoluto que debe usarse cuando se usa un arduino. La resistencia tiene una caída de voltaje lineal al mA que fluye a través de ella. Cuanto mayor sea el mA, mayor será el voltaje.

A 20 mA de corriente # 150 ohmios * 0,02 A = 3 voltios a arduino.

A 4 mA de corriente # 150 ohmios * 0,004 A = 0,6 voltios a arduino.

Ahora es posible que desee que el voltaje esté más cerca de los 5 voltios para poder utilizar el rango completo de ADC del arduino. (No es Buena idea).

Los RTD pueden alcanzar una salida de 30,2 mA (el mío lo hace). 150 ohmios * 0,03 A = 4,8 voltios. Eso es lo más cercano que me gustaría estar.

Otro sitio web indicó el uso de una resistencia de 250 ohmios.

A 20 mA de corriente # 250 ohmios * 0,02 A = 5 voltios a arduino.

A 30mA de corriente # 250ohm * 0.03A = 7.5volt a arduino.

Corre el riesgo de quemar su ADC y arduino.

Para probar un instrumento en el campo, lleve una batería de 12 voltios y conéctela a la entrada de suministro. El uso de una fuente de alimentación externa no influirá en la configuración actual del PLC.

Para probar una tarjeta de entrada analógica en el campo, lleve una batería de 12 voltios. Desconecte el instrumento + del circuito. Conecte la tierra a la tierra del instrumento y el RTD- al cable del instrumento desconectado.

Paso 3: Calibración

Calibración
Calibración

Para calibrar la lectura de su resistencia de derivación, conecte RTD- a la entrada analógica de derivación. Configure su potenciómetro de compensación de modo que el mA generado sea 4mA. Si el mA de su dispositivo no es igual, modifique el primer valor en el código en la línea 84. Si aumenta este valor, disminuirá la lectura de mA.

Luego, configure su olla de recorte para generar 20 mA. Si el mA de su dispositivo no es igual, modifique el segundo valor en el código en la línea 84.

Entonces, su 4-20mA ahora se convertirá en 0.6-3voltios (teórico). Alcance más que suficiente. Usando la biblioteca de eRCaGuy, el sobremuestreo le dará una lectura mejor y estable.

Ojalá leas esto. Este es mi primer instructivo, así que tómatelo con calma si cometí un error en alguna parte o dejé algo fuera.

Este proyecto probablemente no sea la mejor manera de hacerlo, pero me funciona y fue divertido hacerlo.

Algunas ideas que tengo extra …

Agregue un servo para rotar el potenciómetro dentro de la caja.

Agregue botones para girar el servo hacia la izquierda o hacia la derecha.

Agregue un sensor de temperatura digital al disipador de calor del regulador para advertir sobre calor peligroso.

Paso 4: Programando Arduino

#incluir

// #include // Descomente si usa una pantalla LCD con un registro de desplazamiento.

#incluir

#incluir

#incluir

#incluir

// A4 = (SDA)

// A5 = (SCL)

Adafruit_INA219 ina219;

LiquidCrystal lcd (12, 11, 5, 4, 3, 2);

// LiquidCrystal_SR lcd (3, 4, 2); // Descomente si usa una pantalla LCD con un registro de desplazamiento.

// | | | _ Pasador de pestillo

// | / _ Pin de reloj

// / _ Data / Enable Pin

byte bitsOfResolution = 12; // resolución sobremuestreada ordenada

unsigned long numSamplesToAvg = 20; // número de muestras A LA RESOLUCIÓN SOBREMESTADA que desea tomar y promedio

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

unsigned long previousMillis = 0;

tensión de derivación de flotación = 0,0; // De INA219

voltaje del bus flotante = 0.0; // De INA219

flotar current_mA = 0.0; // De INA219

voltaje de carga flotante = 0.0; // De INA219

flotador arduinovoltaje = 0.0; // Cálculo de voltaje desde el pin A0

Unsigned long A0analogReading = 0;

byte analogIn = A0;

float ma_mapped = 0.0; // Mapear voltaje de A0 a 4-20mA

configuración vacía () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution (bitsOfResolution);

adc.setNumSamplesToAvg (numSamplesToAvg);

uint32_t currentFrequency;

ina219.begin ();

ina219.setCalibration_32V_30mA (); // Biblioteca modificada para mayor precisión en mA

lcd. comienzo (20, 4); // inicializar la pantalla LCD

lcd.clear ();

casa lcd (); // Vete a casa

lcd.print ("********************");

retraso (2000);

lcd.clear ();

}

bucle vacío ()

{

currentMillis largo sin firmar = millis ();

intervalo largo constante = 100;

//&&&&&&&&&&&&&&&&&

Leer dispositivos I2C a intervalos y hacer algunos cálculos

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

if (currentMillis - previousMillis> = intervalo) {

previousMillis = currentMillis;

Intervalo();

}

Print_To_LCD (); // Probablemente no necesite actualizar la pantalla LCD tan rápido y se puede mover a debajo de Interval ()

}

vacío

Intervalo() {

shuntvoltage = ina219.getShuntVoltage_mV ();

busvoltage = ina219.getBusVoltage_V ();

current_mA = ina219.getCurrent_mA ();

tensión de carga = (tensión de bus + (tensión de derivación / 1000)) + 0,71; // +0.71 es la caída de voltaje de mi diodo

A0analogReading = adc.newAnalogRead (analogIn);

arduinovoltage = (5.0 * A0analogReading); // Calculado en mV

ma_mapped = map (arduinovoltage, 752, 8459, 30, 220) / 10.0; // El mapa no puede usar flotadores. Agregue un 0 detrás del valor mapeado y divida por 10 para obtener una lectura flotante.

// El mapeo del cálculo de voltaje proporciona una lectura más estable que usar la lectura de adc sin procesar.

if (shuntvoltage> = -0.10 && shuntvoltage <= -0.01) // Sin carga, el INA219 tiende a leer por debajo de -0.01, bueno, el mío sí.

{

current_mA = 0;

busvoltage = 0;

voltaje de carga = 0;

tensión de derivación = 0;

}

}

vacío

Print_To_LCD () {

lcd.setCursor (0, 0);

if (ma_mapped <1.25) {// Sin corriente, esta es mi lectura de mA, así que simplemente la tiro.

lcd.print ("* Generador 4-20mA *");

}

demás {

lcd.print ("** Analog Tester **");

}

lcd.setCursor (0, 1);

lcd.print ("Dispositivo:");

lcd.setCursor (10, 1);

if (ma_mapped <1.25) {

lcd.print ("sin dispositivo");

}

demás {

lcd.print (ma_mapped);

}

lcd.print ("mA");

lcd.setCursor (0, 2);

lcd.print ("Generar:");

lcd.setCursor (10, 2);

lcd.print (current_mA);

lcd.print ("mA");

lcd.setCursor (0, 3);

lcd.print ("Suministro:");

lcd.setCursor (10, 3);

lcd.print (voltaje de carga);

lcd.print ("V");

}

Paso 5: Algunas fotos más

Algunas fotos más
Algunas fotos más

Terminal de altavoz amplificador. LED impulsado por el generador de corriente (RTD). El cableado de la tarjeta analógica reemplazará al LED.

El terminal en el extremo izquierdo es para la entrada de suministro. Los terminales de la derecha son para entrada de instrumentos.

Paso 6: Encajar

Apropiado en
Apropiado en

Todo parece encajar. Usé silicona para sujetar temporalmente algunas cosas. El recipiente de ajuste está siliconado en la parte superior derecha. Se taladró previamente un pequeño agujero. Puedo ajustar la corriente desde la parte superior de la caja.

Paso 7: solo fotos

Fotos
Fotos
Fotos
Fotos
Fotos
Fotos
Fotos
Fotos

Paso 8: Palabras finales

He probado la salida de este dispositivo con un PLC Allan Bradley. Los resultados fueron muy buenos. Obtuve rango completo También probé este dispositivo con un sensor de presión de 4-20 mA que tiene una pantalla LCD incorporada. Nuevamente los resultados fueron muy buenos. Mis lecturas se desviaron por un par de decimales.

Escribo mi código arduino en pestañas. En los PLC se les llama subrutinas. Facilita la depuración para mi.

Se adjuntan archivos de texto de esas pestañas.

Recomendado: