Update remaining power after each sleeping period to something that master
authorNathael Pajani <nathael.pajani@ed3l.fr>
Thu, 21 Jul 2022 19:29:46 +0000 (21:29 +0200)
committerNathael Pajani <nathael.pajani@ed3l.fr>
Thu, 21 Jul 2022 19:29:46 +0000 (21:29 +0200)
reflects self discharge in order to display more accurate remaining
power when sleeping for a long time.
Self discharge is set to full discharge in 90 days.

apps/acett/v05.2/main.c
apps/acett/v05.2/version.h

index d96f097..293ceac 100644 (file)
@@ -98,7 +98,7 @@ const struct wdt_config wd_conf = {
 };
 
 
-#define SWT_TIMER_VAL  (5 * 10 * 1000) /* Approx 5s when decounting with the 10kHz clock */
+#define SWT_TIMER_5_SEC  (5 * 10 * 1000) /* Approx 5s when decounting with the 10kHz clock */
 
 /* Define the interrupt handler for Self wakeup interrupt */
 volatile uint8_t wake = 0;
@@ -419,8 +419,9 @@ void bms_config(void)
 
 
 
-#define BATT_ABSOLUTE_MAX_THEORY   (320 * 1000 * 1000)  /* 85Wh * 3600s * 1000 in order to get "mW * s" */
+#define BATT_ABSOLUTE_MAX_THEORY   (320 * 1000 * 1000)  /* 88.9Wh * 3600s * 1000 in order to get "mW * s" */
 #define BATT_MIN_STORAGE_RESERVE (4 * 1000 * 1000)
+#define BATT_5_SEC_BMS_SELF_DISCHARGE 200
 #define VCELL_CHARGE_MAX  3650
 #define VCELL_CHARGE_OK  3550
 #define VCELL_CHARGE_NOMINAL  3200  
@@ -875,10 +876,10 @@ int periodic_check(void)
                        /* No non-critical charging problem, check for non critical discharging ones */
 #define BLEEP_RESET  8
                        static uint8_t bleep = BLEEP_RESET;
-                       /* Bleep on red led once every 2 seconds for 20 ms */
+                       /* Bleep on red led once every 8 cycles for 10 ms */
                        if (--bleep == 0) {
                                gpio_clear(led); /* Turn led on */
-                               msleep(20);
+                               msleep(10);
                                gpio_set(led); /* Turn led off */
                                bleep = BLEEP_RESET;
                        }
@@ -1234,7 +1235,7 @@ int main(void)
                        uint32_t led_state = 0;
                        /* Stop periodic interrupts from BMS */
                        bq769x0_bms_stop_continuous_conversion(&bms);
-                       uprintf(UART0, "Entering deep sleep !\n");
+                       debug_uprintf("Entering deep sleep !\n");
                        msleep(30);
                
                        led_state = gpio_read(led); /* Store led state */
@@ -1245,10 +1246,18 @@ int main(void)
                        watchdog_feed();
                        
                        /* Enter sleep, we will wake-up from either BMS interrupt or system startup */
-                       enter_deep_sleep(SELECTED_FREQ, SWT_TIMER_VAL);
+                       enter_deep_sleep(SELECTED_FREQ, SWT_TIMER_5_SEC);
 
                        /* Woke up without the watchdog ... */
-                       uprintf(UART0, "Woke up.\n");
+                       debug_uprintf("Woke up.\n");
+                       /* Update battery power from "statistic" data :
+                        *  battery discharges even when "everything" seems off due to uC power supply
+                        *  being present, BMS and uC sleeping power usage,
+                        */
+                       if (batt_power > (100 * 1000)) {
+                               batt_power -= BATT_5_SEC_BMS_SELF_DISCHARGE;
+                               save_gp_retain(&batt_power, 1, 0);
+                       }
                        /* Reconfigure the watchdog */
                        watchdog_config(&wd_conf);
                        /* Restart continuous CC reading on BMS */
index d163a03..87bf016 100644 (file)
@@ -1,4 +1,4 @@
 #define MODULE_VERSION_STR  "v0.5.2"
 #define SOFT_VERSION_STR  "SAM BMS"
-#define COMPILE_VERSION "20"
-#define TRACE_VERSION "03"
+#define COMPILE_VERSION "25"
+#define TRACE_VERSION "04"