- Inicio
- PLC Solution Library
- Herramientas
- Calculadora 4-20 mA
PLC Solution Library · Herramientas de ingeniería
Calculadora 4-20 mA: escalado, shunt a 0-10 V y entrada del PLC
Para leer una señal de 4-20 mA en una entrada de 0-10 V de un PLC, pon una resistencia de 500 Ω entre la entrada y 0 V: 4 mA dan 2 V y 20 mA dan 10 V.Escálala con valor = mín + (mA - 4) / 16 x (máx - mín). Con 3,6 mA o menos, trátalo como fallo: hilo roto, sin alimentación o señal de fallo baja.
La calculadora usa los datos de las entradas analógicas de las hojas de datos del M-Duino, el Ardbox, el ESP32 PLC y el Raspberry PLC. Gratis y sin registro: el resultado siempre está en pantalla.
Resultado
Medida válida
- Resistencia en paralelo con la entrada
- 493,7 Ω
- Impedancia de entrada
- 39 kΩ
- Entrada a fondo de escala (10 V) a
- 20,26 mA
- Lectura a 4 mA · a 20 mA
- 202 · 1010
- Pasos útiles · bits efectivos
- 808 · 9,7 bit
- Un paso son
- 19,8 µA · 0,012 bar
- Ve la saturación · ve el fallo alto NE 43
- no · no
- Potencia de la resistencia a 20 mA · 21 mA
- 0,200 W · 0,221 W
- Error por la tolerancia, a 20 mA
- ± 0,125 bar
- Lazo
- 14,1 V libres a 20 mA (mínimo 12,0 V)
Basta con una resistencia shunt
- Con esta resistencia la entrada llega a fondo de escala a 20,26 mA: el PLC no distingue la saturación ni el fallo alto de NAMUR NE 43 (21 mA o más). Si los necesitas, usa 477 Ω o menos, por ejemplo 470 Ω.
- Para 500 Ω tienes el borne de carril DIN IS.ACANTO10-0.5k, con la resistencia al ±1 %.
La corriente del lazo va del transmisor a la resistencia de la entrada I0.7. El GND del PLC, la resistencia y el 0 V de la fuente comparten un punto.
Código para tu PLC · loop420.ino
// 4-20 mA transmitter on M-Duino 21+ input I0.7 (M-Duino: 0-10 Vdc, 10 bit)
// Shunt resistor of 500 ohm between I0.7 and GND turns the loop current into a voltage.
// Generated by the Industrial Shields 4-20 mA calculator: https://www.industrialshields.com/plc-solution-library/tools/4-20ma-calculator
// Check the values on your hardware with a loop calibrator before you use them.
// Arduino IDE with the Industrial Shields AVR boards package. Select your M-Duino model.
const int AI_PIN = I0_7; // analog input used for the loop
const float ADC_MAX = 1023.0; // 10 bit, from the M-Duino Family datasheet
const float AI_RANGE = 10.0; // input range in volts
const float R_SHUNT = 500.0; // shunt resistor in ohm
const float R_INPUT = 39000.0; // input impedance in ohm (0 = not known, treated as ideal)
const float R_EQ = (R_INPUT > 0.0) ? R_SHUNT * R_INPUT / (R_SHUNT + R_INPUT) : R_SHUNT;
const float PV_MIN = 0.000; // value at 4 mA (bar)
const float PV_MAX = 10.000; // value at 20 mA (bar)
// NAMUR NE 43 limits in mA
const float MA_FAULT_LOW = 3.6; // 3.6 mA or less: broken wire or low fault signal
const float MA_RANGE_LOW = 3.8; // 3.6 to 3.8 mA: under range
const float MA_RANGE_HIGH = 20.5; // 20.5 to 21 mA: over range (saturated)
const float MA_FAULT_HIGH = 21.0; // 21 mA or more: high fault signal
const int N_SAMPLES = 16;
float readCounts() {
uint32_t sum = 0;
for (int i = 0; i < N_SAMPLES; i++) {
sum += analogRead(AI_PIN);
}
return (float)sum / N_SAMPLES;
}
float countsToMilliamps(float counts) {
float volts = counts * AI_RANGE / ADC_MAX;
return volts / R_EQ * 1000.0;
}
float milliampsToValue(float mA) {
float pv = PV_MIN + (mA - 4.0) * (PV_MAX - PV_MIN) / 16.0;
if (PV_MIN < PV_MAX) {
if (pv < PV_MIN) pv = PV_MIN;
if (pv > PV_MAX) pv = PV_MAX;
}
return pv;
}
void setup() {
Serial.begin(115200);
pinMode(AI_PIN, INPUT);
}
void loop() {
float counts = readCounts();
float mA = countsToMilliamps(counts);
float pv = milliampsToValue(mA);
Serial.print(mA, 2);
Serial.print(" mA ");
if (MA_FAULT_LOW >= mA) {
Serial.println("LOOP FAULT: broken wire or low fault signal");
} else if (mA >= MA_FAULT_HIGH) {
Serial.println("HIGH FAULT SIGNAL from the transmitter");
} else if (counts >= ADC_MAX - 0.5) {
Serial.print(pv, 2);
Serial.println(" bar (input at full scale: the current can be higher)");
} else {
Serial.print(pv, 2);
Serial.print(" bar");
if (MA_RANGE_LOW > mA) Serial.println(" (under range)");
else if (mA > MA_RANGE_HIGH) Serial.println(" (over range, saturated)");
else Serial.println();
}
delay(500);
}
Lee 16 muestras, las pasa a mA con la resistencia y la impedancia de entrada, comprueba los límites de NAMUR NE 43 y escala el valor. M-Duino, Ardbox y ESP32 PLC: Arduino IDE con el paquete de placas de Industrial Shields. Raspberry PLC: C++ con librpiplc. Los comentarios están en inglés.
Envíame el cálculo y el código
Te enviamos esta configuración, el código y la conexión por email, y un ingeniero los revisa para tu proyecto.
Cómo funciona el cálculo de 4-20 mA
Un transmisor de 4-20 mA fija una corriente entre 4 y 20 mA proporcional a lo que mide. Las entradas analógicas de las familias M-Duino, Ardbox, ESP32 PLC y Raspberry PLC miden de 0 a 10 V, así que una resistencia convierte la corriente en tensión. Estas son las fórmulas que usa la calculadora, en este orden.
- Resistencia que ve el lazo. La impedancia de entrada queda en paralelo con el shunt:
R_eq = R x Z_in / (R + Z_in) - Tensión en la entrada. Ley de Ohm:
V = I x R_eq - Lectura del PLC. Con una entrada de 0 a 10 V y N bits:
lectura = V / 10 x (2^N - 1) - Vuelta a mA en el programa.
I = lectura x 10 / (2^N - 1) / R_eq - Unidades de ingeniería.
valor = mín + (I - 4) / 16 x (máx - mín) - Fondo de escala. La entrada se satura a
I_fs = 10 V / R_eq. Por encima, todas las corrientes se leen igual. - Potencia de la resistencia.
P = I² x R - Tensión del lazo, 2 hilos. Lo que queda para el transmisor, con R_cable = 2 x longitud x 0,0175 / sección (cobre):
V_tx = V_fuente - I x (R_eq + R_cable)
Entradas analógicas de los PLC de Industrial Shields para 4-20 mA
Las cuatro familias tienen entradas analógicas de 0-10 Vdc. Lo que cambia es la resolución y, en el M-Duino y el Ardbox, la impedancia de entrada de 39 kΩ que da la hoja de datos. Valores con un shunt de 500 Ω:
| Familia | Resolución | Impedancia de entrada | Lectura a 4 mA · 20 mA | Fondo de escala a |
|---|---|---|---|---|
| M-Duino | Resolución: 10 bits (0 a 1023) | Impedancia de entrada: 39 kΩ | Lectura a 4 mA · 20 mA: 202 · 1010 | Fondo de escala a: 20,26 mA |
| Ardbox Analog | Resolución: 10 bits (0 a 1023) | Impedancia de entrada: 39 kΩ | Lectura a 4 mA · 20 mA: 202 · 1010 | Fondo de escala a: 20,26 mA |
| ESP32 PLC | Resolución: 11 bits (0 a 2047) | Impedancia de entrada: No figura (ideal) | Lectura a 4 mA · 20 mA: 409 · 2047 | Fondo de escala a: 20,00 mA |
| Raspberry PLC | Resolución: 12 bits (0 a 4095) | Impedancia de entrada: No figura (ideal) | Lectura a 4 mA · 20 mA: 819 · 4095 | Fondo de escala a: 20,00 mA |
ESP32 PLC 14: las entradas AI0.0 y AI0.1 leen 4-20 mA directamente en modo 4-20 mA, sin shunt. Esta calculadora cubre las entradas de 0-10 V.
En el M-Duino 21+, el ESP32 PLC 21+ y el Raspberry PLC 21, las entradas analógicas son I0.7 a I0.12; los modelos más grandes añaden más zonas con el mismo patrón. En el Ardbox Analog son I0.2 a I0.9.
Con una entrada ideal y 500 Ω, 20 mA caen justo en 10 V, así que el ESP32 PLC y el Raspberry PLC no tienen margen por encima de 20 mA: 470 Ω da ese margen.
Ejemplos resueltos
| Caso | Entrada | Resultado |
|---|---|---|
| Presión de 0 a 10 bar, M-Duino, 500 Ω | Entrada: 12 mA | Resultado: 5,92 V, lectura 606, 5,00 bar |
| Nivel de 0 a 4 m, ESP32 PLC, 500 Ω | Entrada: lectura 1000 | Resultado: 9,77 mA, 1,44 m |
| Temperatura de -50 a 150 °C, Raspberry PLC, 470 Ω | Entrada: 21 mA | Resultado: 9,87 V, lectura 4042: fallo alto de NAMUR NE 43. Con 500 Ω leería 4095, fondo de escala, y el fallo parecería 150 °C. |
| Hilo roto, Ardbox Analog, 500 Ω | Entrada: 0 mA | Resultado: 0 V, lectura 0: fallo, por debajo de 3,6 mA |
| 250 Ω en un M-Duino, de 0 a 10 bar | Entrada: 20 mA | Resultado: 4,97 V, lectura 508: la mitad del rango, 0,025 bar por paso en lugar de 0,012 bar con 500 Ω |
| Lazo de 2 hilos a 24 V, 300 m de 0,5 mm², ESP32 PLC, 500 Ω | Entrada: 20 mA | Resultado: Cable de 21 Ω, quedan 13,58 V para el transmisor |
Cómo conectar un transmisor de 4-20 mA a una entrada de 0-10 V del PLC
- Elige la resistencia. 500 Ω para una entrada de 0-10 V, o 470 Ω si necesitas ver el fallo alto de NAMUR NE 43. Usa 1 % o mejor y al menos 0,5 W.
- Cablea el lazo. 2 hilos: +24 V al + del transmisor, el - del transmisor a la entrada analógica, y la resistencia entre la entrada y 0 V. 3 y 4 hilos: la salida del transmisor a la entrada, su 0 V al 0 V común.
- Comprueba la tensión del lazo. A 20 mA la fuente aún debe dejar la tensión mínima del transmisor después de la resistencia y el cable.
- Escala y comprueba fallos en el programa. Pasa la lectura a mA, comprueba los límites de NAMUR NE 43 y luego escala a unidades. Comprueba 4, 12 y 20 mA con un calibrador de lazo.
¿Resistencia shunt o convertidor aislado?
Basta con una resistencia shunt cuando el transmisor y el PLC comparten el mismo 0 V, el lazo tiene un solo receptor referido a masa y el cable se queda en un armario limpio. El IS.ACANTO10-0.5k es ese shunt en formato de carril DIN: un borne de paso con una resistencia de 500 Ω al ±1 %.
Usa un convertidor de señal aislado de 4-20 mA a 0-10 V cuando:
- el transmisor o su fuente tienen otra referencia de masa, como un instrumento de 4 hilos alimentado desde otro cuadro;
- otro equipo con la entrada referida a masa, como un segundo controlador o un registrador, lee el mismo lazo;
- el cable va entre edificios o junto a variadores y cables de potencia, y las lecturas se mueven.
Las hojas de datos del M-Duino, el Ardbox, el ESP32 PLC y el Raspberry PLC dicen que el equipo no tiene aislamiento galvánico entre las masas de sistemas distintos, y recomiendan aisladores galvánicos cuando las masas son diferentes.
Hilo roto y saturación: límites de NAMUR NE 43
| Corriente | Significado | Qué hace el programa |
|---|---|---|
| 3,6 mA o menos | Fallo: hilo roto, sin alimentación o señal de fallo baja | Programa: Alarma, sin valor |
| 3,6 a 3,8 mA | Por debajo del rango | Programa: Valor en el mínimo de la escala, con aviso |
| 3,8 a 20,5 mA | Medida válida | Programa: Valor escalado |
| 20,5 a 21 mA | Por encima del rango: el transmisor está saturado | Programa: Valor en el máximo de la escala, con aviso |
| 21 mA o más | Fallo: señal de fallo alta | Programa: Alarma, sin valor |
Para ver las dos últimas filas, la entrada no debe saturarse antes de 21 mA. Con 500 Ω se satura entre 20,0 y 20,3 mA; con 470 Ω, entre 21,3 y 21,5 mA.
Código de ejemplo: 4-20 mA en un M-Duino
Este es el código que da la calculadora para un transmisor de 0 a 10 bar en la entrada I0.7 de un M-Duino con 500 Ω. Cambia los valores de arriba y copia tu versión desde la calculadora.
// 4-20 mA transmitter on M-Duino 21+ input I0.7 (M-Duino: 0-10 Vdc, 10 bit)
// Shunt resistor of 500 ohm between I0.7 and GND turns the loop current into a voltage.
// Generated by the Industrial Shields 4-20 mA calculator: https://www.industrialshields.com/plc-solution-library/tools/4-20ma-calculator
// Check the values on your hardware with a loop calibrator before you use them.
// Arduino IDE with the Industrial Shields AVR boards package. Select your M-Duino model.
const int AI_PIN = I0_7; // analog input used for the loop
const float ADC_MAX = 1023.0; // 10 bit, from the M-Duino Family datasheet
const float AI_RANGE = 10.0; // input range in volts
const float R_SHUNT = 500.0; // shunt resistor in ohm
const float R_INPUT = 39000.0; // input impedance in ohm (0 = not known, treated as ideal)
const float R_EQ = (R_INPUT > 0.0) ? R_SHUNT * R_INPUT / (R_SHUNT + R_INPUT) : R_SHUNT;
const float PV_MIN = 0.000; // value at 4 mA (bar)
const float PV_MAX = 10.000; // value at 20 mA (bar)
// NAMUR NE 43 limits in mA
const float MA_FAULT_LOW = 3.6; // 3.6 mA or less: broken wire or low fault signal
const float MA_RANGE_LOW = 3.8; // 3.6 to 3.8 mA: under range
const float MA_RANGE_HIGH = 20.5; // 20.5 to 21 mA: over range (saturated)
const float MA_FAULT_HIGH = 21.0; // 21 mA or more: high fault signal
const int N_SAMPLES = 16;
float readCounts() {
uint32_t sum = 0;
for (int i = 0; i < N_SAMPLES; i++) {
sum += analogRead(AI_PIN);
}
return (float)sum / N_SAMPLES;
}
float countsToMilliamps(float counts) {
float volts = counts * AI_RANGE / ADC_MAX;
return volts / R_EQ * 1000.0;
}
float milliampsToValue(float mA) {
float pv = PV_MIN + (mA - 4.0) * (PV_MAX - PV_MIN) / 16.0;
if (PV_MIN < PV_MAX) {
if (pv < PV_MIN) pv = PV_MIN;
if (pv > PV_MAX) pv = PV_MAX;
}
return pv;
}
void setup() {
Serial.begin(115200);
pinMode(AI_PIN, INPUT);
}
void loop() {
float counts = readCounts();
float mA = countsToMilliamps(counts);
float pv = milliampsToValue(mA);
Serial.print(mA, 2);
Serial.print(" mA ");
if (MA_FAULT_LOW >= mA) {
Serial.println("LOOP FAULT: broken wire or low fault signal");
} else if (mA >= MA_FAULT_HIGH) {
Serial.println("HIGH FAULT SIGNAL from the transmitter");
} else if (counts >= ADC_MAX - 0.5) {
Serial.print(pv, 2);
Serial.println(" bar (input at full scale: the current can be higher)");
} else {
Serial.print(pv, 2);
Serial.print(" bar");
if (MA_RANGE_LOW > mA) Serial.println(" (under range)");
else if (mA > MA_RANGE_HIGH) Serial.println(" (over range, saturated)");
else Serial.println();
}
delay(500);
}
Guías, casos y simuladores relacionados
- Cómo convertir una señal de 4-20 mA a 0-10 V en un PLC Arduino: la guía completa, con las fotos de la conexión.
- IS.ACANTO10-0.5k: borne de carril DIN con una resistencia de 500 Ω para 4-20 mA a 0-10 V.
- Lectura de un sensor de nivel de 4-20 mA con un ESP32 PLC, en la PLC Solution Library.
- Automatización de una caldera de vapor: un transmisor de presión en un ESP32 PLC con un shunt de 500 Ω.
- Tratamiento de agua: sensores de pH y cloro en las entradas analógicas de un ESP32 PLC 42.
- Minicentral hidroeléctrica: señales de la planta en un Raspberry PLC 21, con transmisores de 4-20 mA mediante un shunt.
- Monitorización remota de un pozo de petróleo: un ESP32 PLC 21 en un emplazamiento remoto, y cuándo usar cableado de 4-20 mA en lugar de sensores inalámbricos.
- Simulador de planta de proceso: arranca una minicentral o una estación de bombeo y mira los valores analógicos.
- Simulador de telemetría de emplazamientos remotos: presiones y niveles de una red de agua, con alarmas.
- Todos los simuladores de PLC
Preguntas sobre señales de 4-20 mA
¿Qué resistencia necesito para leer 4-20 mA en una entrada de 0-10 V del PLC?
Usa 500 Ω en un M-Duino o un Ardbox: con su impedancia de entrada de 39 kΩ en paralelo, 500 Ω dan 493,7 Ω, así que 4 mA se leen como 1,97 V y 20 mA como 9,87 V.
En una entrada con impedancia ideal, como el ESP32 PLC y el Raspberry PLC de la calculadora, 500 Ω ponen 20 mA justo en 10 V, sin margen: 470 Ω da margen y permite ver el fallo alto de NAMUR NE 43.
Elige 1 % o mejor. Guía completa: Cómo convertir una señal de 4-20 mA a 0-10 V en un PLC Arduino.
¿Cómo escalo una señal de 4-20 mA a unidades de ingeniería?
Usa valor = mín + (mA - 4) / 16 x (máx - mín), donde mín es el valor a 4 mA y máx el valor a 20 mA.
Para un transmisor de 0 a 10 bar, 12 mA son 0 + 8 / 16 x 10 = 5 bar. La inversa es mA = 4 + 16 x (valor - mín) / (máx - mín).
¿Cómo detecta un PLC un hilo roto en un lazo de 4-20 mA?
Un hilo roto baja la corriente a 0 mA, por debajo del cero vivo de 4 mA.
NAMUR NE 43 trata 3,6 mA o menos como fallo, de 3,6 a 3,8 mA como por debajo del rango, de 3,8 a 20,5 mA como medida válida, de 20,5 a 21 mA como por encima del rango y 21 mA o más como fallo alto. El programa compara la corriente con estos límites antes de escalar el valor.
¿Por qué el PLC no ve 21 mA con una resistencia de 500 Ω?
Porque 500 Ω convierten 20 mA en 10 V, el máximo de una entrada de 0-10 V. Todo lo que pase de ahí se lee como fondo de escala, y el PLC no distingue el exceso de rango de un fallo alto.
Si necesitas el fallo alto de NAMUR NE 43, usa 470 Ω: el fondo de escala pasa a 21,28 mA con una entrada ideal, o a 21,53 mA en un M-Duino o un Ardbox, y pierdes un 6 % de resolución.
¿Qué potencia necesita la resistencia shunt?
P = I² x R. Una resistencia de 500 Ω disipa 0,2 W a 20 mA y 0,22 W a 21 mA. Una potencia nominal de al menos el doble, 0,5 W, la mantiene fría y estable. La calculadora da la cifra para tu resistencia.
¿Cuándo necesito un convertidor aislado en lugar de una resistencia shunt?
Basta con un shunt cuando el transmisor y el PLC comparten el mismo 0 V y ningún otro equipo con la entrada referida a masa está en el lazo.
Usa un convertidor aislado de 4-20 mA a 0-10 V cuando el transmisor o su fuente tienen otra referencia de masa, cuando otro equipo referido a masa lee el mismo lazo, o cuando un cable largo recoge ruido.
Las hojas de datos del M-Duino, el Ardbox, el ESP32 PLC y el Raspberry PLC dicen que el equipo no tiene aislamiento galvánico entre las masas de sistemas distintos.
¿Cómo leen una señal de 4-20 mA los PLC de Industrial Shields?
El ESP32 PLC 14 la lee directamente: sus entradas analógicas AI0.0 y AI0.1 tienen un modo 4-20 mA que se selecciona por software.
Las familias M-Duino, Ardbox, ESP32 PLC y Raspberry PLC tienen entradas analógicas de 0-10 Vdc (10 bits en el M-Duino y el Ardbox, 11 bits en el ESP32 PLC, 12 bits en el Raspberry PLC).
En ellas, un transmisor de 4-20 mA se conecta con un shunt de 500 Ω, como el borne de carril DIN IS.ACANTO10-0.5k, o con un convertidor aislado.
Envíame el cálculo y el código
El formulario envía tu configuración actual. Te respondemos por email con el cálculo, el código para tu PLC y la conexión, y un ingeniero los revisa para tu proyecto.