Paso 16: Software tuning de precisión (parte 2)
Debemos recortar el amperímetro.
El ajuste del voltímetro era fácil - el error fue causado solamente por la difusión de los valores de resistencia de los divisores de tensión.
En el amperímetro las fuentes de errores son principalmente:
- la propagación de la resistencia de R1 (ver la imagen en el paso 4). Su valor es de 1 Ohm, y el valor exacto del dispositivo usado es difícil de medir precisamente
- propagación de la ganancia de voltaje de lo opamp - causada principalmente por los valores de los resistores R2 y R3
- El desplazamiento de lo opamp Voffset. Como se mencionó antes el LM358 no es la mejor opción para este proyecto (tenía uno disponible y lo he usado. Esa es la razón por qué el PCB también apoya el paquete SO08 - de uso no frecuente en nuestro tiempo). En la hoja de datos del chip se puede ver que el desplazamiento puede ser 7 mV. Con nuestra solución de transferencia de voltaje corriente, esto puede introducir un error actual constante de la 7mA. Puede suceder que ninguna corriente pasa, pero los amperios medidor muestra 7mA y viceversa: una corriente de 7 mA puede fluir y el dispositivo puede mostrar 0 mA.
Todos estos errores se deben limpiar por el software.
Como primer paso tenemos que determinar el valor exacto de la resistencia R1. Para ello he usado un generador de corriente constante.
He aplicado 189.9 mA entrada corriente y he medido 186.7 mV en la resistencia R1. Su valor se calculó en 0,98315 ohmios. Este número se utilizará también como coeficiente de corrección.
Quedan dos otro parámetro, que debe ser calculado medido: la ganancia de voltaje real de lo opamp y su tensión de offset.
Para determinarlos que tenemos que hacer dos mediciones separadas en dos corrientes diferentes. Las medidas son: fijamos la corriente por el generador de corriente y medimos una vez con el DMM estándar y una vez con "Arduino" base DMM. También se mide el voltaje en R1 durante este procedimiento. Aquí están los resultados que tuve:
Corriente medida actual tensión sobre R1
(DMM estándar) "Arduino" DMM (DMM estándar)
[mA] [mA] [mV]
189.9 186.7 186
73.1 71,9 71.7
La tensión de offset del opamp se agrega a la caída de tensión sobre R1, y el potencial resultante es amplificada 10 (corregida con el coeficiente de error de ganancia) y finalmente convertido por el ADC.
Este proceso puede ser modelado con la siguiente ecuación:
(VR1+ Voffset) * coeff_A_gain = Imeas;
donde:
VR1 - es la tensión sobre R1;
Vcompensación - el opamp entrada offset voltaje;
coeff_A_gain - coeficiente de error de ganancia, en este caso tiene unidad de Siemens [S];
temeas - medido por el "Arduino" DMM actual
Basado en esta ecuación y los datos medidos, reemplazando Vcompensadocon "x" ycoeff_A_gain "y" un sistema de dos ecuaciones y dos variables desconocidas puede ser escrito:
(186.7 + x) * y = 186
(71.7 + x) * y = 71,9
186.7Y + xy = 186
71,7 y + xy = 71.9; extracción de la primera de la segunda ecuación
115y = 114,1
y = 0.992174 - el error de ganancia causado por la diseminación de valor de la resistencia de la ganancia en definición de resistencias R2, R3
X = 0.767 mV - el desplazamiento de entrada de lo opamp (no tan mal...)
El código final para el amperímetro ahora tendría las siguientes definiciones:
Float coeff_A_gain = 0.992174;
Float coeff_A_res = 0.98315;
Float opamp_offset = 0.000767;
El cálculo de la corriente se puede hacer con la siguiente ecuación:
disp_res = (((curr_value*supply)/1024 - 10 * opamp_offset) / coeff_A_gain) / coeff_A_res * 100;
(véase el paso 14 para información adicional)