Hola Cryn!
Toda la teoría de funcionamiento está en el pdf del proyecto, te respondo transcribiendo las partes pertinentes
Por la medición de corriente con el operacional:
"Corriente de carga
La corriente de carga se mide por el sensado del voltaje sobre una resistencia shunt de 0.1Ω. Este voltaje se amplifica usando un amplificador operacional - configurado como no inversor para la carga e inversor para la medición de la descarga - para mejorar la precisión de la medición antes de alimentar el conversor A/D del microcontrolador.
Este voltaje se amplifica por el factor:
R1 = 3.3kΩ
R2 = 19kΩ
Factor de amplificación
Af = 1 + (R2/R1) = 6.76
La salida de voltaje del amplificador es:
Vibat = (1 + (R2/R1) ) * Ishunt = 6.76 Ishunt
La máxima corriente que puede medirse es:
Ibat = 4.88 / 6.76 Ishunt = 7.2257 A
Esto nos da una resolución de:
7226 mA / 1024 pasos = 7.06 mA/paso
"
PWM del convertidor DC-DC, Buck:
La frecuencia es de 16khz, 10bits de resolución
La medición de voltage la hago así:
// lee los valores de la batería
// para leer el voltaje hay que para el PWM para que la carga
// no afecte a la medición del divisor.
int batteryinfo(unsigned char value)
{
int adcvalue;
char i;
UINT pwmduty_prev = 0;
UINT pwmduty2_prev = 0;
adc_channel = value;
if (value == VOLTAGE)
{
pwmduty_prev = pwmduty;
pwmduty2_prev = pwmduty2;
pwmduty = 0;
pwmduty2 = 0;
pwm1_set_data();
pwm2_set_data();
normalizeADC();
if (current_action == ACTION_CHARGE)
delay_ms(100);
}
for (adcvalue=0, i=8; i; --i)
adcvalue += adc_read(adc_channel);
adcvalue = adcvalue/8;
if (value == VOLTAGE)
{
pwmduty = pwmduty_prev;
pwmduty2 = pwmduty2_prev;
pwm1_set_data();
pwm2_set_data();
}
return adcvalue;
}
Es decir, primero llevo el duty a 0, estabilizo la lectura de ADC y luego realizo 8 lecturas para obtener un promedio, al terminar restauro el valor del duty original.
Otra forma de hacer esto es agregar dos cables más a la salida que se conecten directo a los bornes de la batería, de esa manera no tendrías diferencias o necesidad de detener la carga para medir, un poco mejor, pero a mi me pareció que como lo había hecho era más simple, y que parar un poco la frecuencia del buck no traía problemas.
La corriente de descarga se usa para medir la corriente al descargar una batería, sucede que algunas hay que ciclarlas para garantizar un funcionamiento mediano a bueno y más vida útil.
saludos