From ba11fa287c3f4c5e9eb3450561113a0fbbb16939 Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Sun, 9 Oct 2016 01:25:33 +0200 Subject: [PATCH] Current calibration of v1.1 (hopefully the final one) --- src/main.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main.c b/src/main.c index be1d940..4ae991f 100644 --- a/src/main.c +++ b/src/main.c @@ -26,6 +26,8 @@ #define MAX_SLEEP_TIME 3600 #define MAX_SLEEP_TIME_LOW_VOLTAGE 300 +#define CURRENT_ADC_OFFSET 89 + enum OperState { Bootstrap, ConvConstVoltage, @@ -37,7 +39,7 @@ enum OperState { volatile int wait_frame = 1; #define ADC_NUM_CHANNELS 3 -volatile uint16_t adc_values[ADC_NUM_CHANNELS]; +volatile int16_t adc_values[ADC_NUM_CHANNELS]; static void unlock_rtc_access(void) { @@ -535,7 +537,7 @@ int main(void) fxp_t CURRENT_THRESHOLD = fxp_from_float(0.001f); - fxp_t AVG_FACT = fxp_from_float(0.05f); + fxp_t AVG_FACT = fxp_from_float(0.01f); fxp_t AVG_FACT_INV = fxp_sub(fxp_from_int(1), AVG_FACT); fxp_t MAX_VOLTAGE = fxp_from_float(14.400f); @@ -565,9 +567,7 @@ int main(void) // Calibrated from measurements fxp_t VIN_SCALE = fxp_from_float(36.41f / 4096.0f); fxp_t VOUT_SCALE = fxp_from_float(30.87f / 4096.0f); - fxp_t CURRENT_SCALE = fxp_from_float(9.10f / 4096.0f); - - fxp_t CURRENT_OFFSET = fxp_from_float(0.196); + fxp_t CURRENT_SCALE = fxp_from_float(8.60f / 4096.0f); /* if power changes by more than this factor, MPP is tested again */ MPP_MAX_POWER_CHANGE_FACTOR = fxp_from_float(0.2f); @@ -664,8 +664,7 @@ int main(void) // convert read values power_state.vin = fxp_mult(fxp_from_int(adc_values[0]), VIN_SCALE); power_state.vout = fxp_mult(fxp_from_int(adc_values[1]), VOUT_SCALE); - power_state.current = fxp_mult(fxp_from_int(adc_values[2]), CURRENT_SCALE); - power_state.current = fxp_sub(power_state.current, CURRENT_OFFSET); + power_state.current = fxp_mult(fxp_from_int(adc_values[2] - CURRENT_ADC_OFFSET), CURRENT_SCALE); power_state.vin_avg = fxp_add(fxp_mult(power_state.vin, AVG_FACT), fxp_mult(power_state.vin_avg, AVG_FACT_INV)); power_state.vout_avg = fxp_add(fxp_mult(power_state.vout, AVG_FACT), fxp_mult(power_state.vout_avg, AVG_FACT_INV));