Hola amigos!! Cómo están? Hace mil años que no pasaba por acá. La verdad que el trabajo me está absorbiendo. La buena noticia es que estoy trabajando de lo que me apasiona: automatización y control

Recientemente estuvimos necesitando un
generador de 4-20mA para hacer pruebas. Si buscan en internet, verán que los comerciales son carísimos!!! y la verdad que es una estupidez, así que me dispuse a diseñar uno y quisiera compartirlo con ustedes.
Les explico brevemente cómo funciona, es muy sencillo:
1- Parte analógica:El AmpOp IC4B sensa la corriente del lazo indirectamente, midiendo la caída de voltaje en la resistencia R_SENSE. Esta tensión entra por la pata inversora, o sea que el AmpOp tratará de igualar dicha tensión a la tensión de referencia V_REF que entra por la no inversora, controlando la corriente del lazo a través del transistor NPN que hay en su salida.
En definitiva,
quien determinará la corriente del lazo, es la tensión de referencia V_REF. Por lo tanto, si queremos generar una corriente I, por ley de ohm, debemos aplicar una tensión V tal que:
V=I*R
para
4mA: V_REF = 0.004*220 =
0.88Vpara
20mA: V_REF = 0.02*220 =
4,4Vnota: si elegimos R=250ohm, entonces la tensión irá de 1V a 5V, pero dado que el PIC funciona con 5V, no podremos generar una corriente mayor a 20mA, y a veces esto es necesario para simular una falla del instrumento.2- Parte digital:Habiendo comprendido esto, sólo nos falta una manera de generar la tensión V_REF. Esto lo logramos a través de una señal
PWM y un integrador, lo que conformaría un DAC (conversor digital/analógico). Esta señal entra al segundo AmpOp del LM358 que hace las veces de buffer o separador.
Listo! El resto es sólo software. Un botón para ir barriendo distintos valores de corriente (4, 8, 12, 16 y 20mA) y unos LEDs indicadores. El PWM lo generamos por software utilizando el famoso método del timer:
#INT_TIMER1
void timer1_isr(){
if(counter==duty)
output_low(OUTPUT);
if(++counter>=99){ //100*T_timer = periodo del PWM
counter=0;
output_high(OUTPUT);
}
set_timer1(TIMER1_PRELOAD);
}
El resto del código se los dejo de tarea

Un comentario. El PIC no es necesario, la V_REF la pueden generar con cualquier cosa: una selectora con una serie de resistencias, un potenciómetro, un regulador, etc... Yo opté por este método porque me pareció más sencillo (es sólo un botón), y permite una calibración fina a través de 2 registros en el PIC. De lo contrario deberíamos complicar un poco más el circuito analógico para hacer una calibración del mismo.
Otra cosa. Como verán el generador tiene 3 bornes de salida. Eso es para poder utilizarlo en
modo ACTIVO o modo PASIVO. Esto es, si utilizamos el
borne 1 como positivo y el 2 como negativo, el generador trabaja en modo
ACTIVO (él mismo provee la energía del lazo). Si utilizamos el
borne 2 como positivo y el 3 como negativo, el generador trabaja en modo
PASIVO (la energía proviene desde el exterior del circuito).
Espero que les sirva, saludos!!!