Browse Source

battery information added to be read by Pi and the MCU

namrota ghosh 7 months ago
parent
commit
f30f2b413a
2 changed files with 88 additions and 0 deletions
  1. 41 0
      src/battery_data/battery.c
  2. 47 0
      src/battery_data/battery.h

+ 41 - 0
src/battery_data/battery.c

@@ -0,0 +1,41 @@
+#include "battery.h"
+#include "src/config.h"
+
+BatteryInfo battery_data[NUM_SLOTS];
+
+//Initialize battery struct
+void Battery_Init(){
+    for(uint8_t i=0; i<NUM_SLOTS; i++){
+        battery_data[i].slot_id = i;
+        battery_data[i].battery_state = STATE_EMPTY;
+        battery_data[i].battery_measurement.voltage = 0;
+        battery_data[i].battery_measurement.current = 0;
+        battery_data[i].battery_measurement.temperature = 0;
+        battery_data[i].battery_limits.min_voltage = 0;
+        battery_data[i].battery_limits.max_voltage = 0;
+        battery_data[i].battery_limits.cut_off_current = 0;
+        battery_data[i].battery_limits.capacitance = 0;
+        battery_data[i].battery_limits.charge_fraction = 0;
+    }
+}
+
+void Battery_ReadState(uint8_t slot_id){
+    if(battery_data[slot_id].battery_limits.min_voltage==0 &&
+       battery_data[slot_id].battery_limits.max_voltage==0 &&
+       battery_data[slot_id].battery_limits.cut_off_current==0){
+        battery_data[slot_id].battery_state = STATE_WAITING_FOR_LIMITS;
+    }
+    else if(battery_data[slot_id].battery_measurement.voltage < BATTERY_THRESHOLD){
+        battery_data[slot_id].battery_state = STATE_EMPTY;
+    }
+    else if((battery_data[slot_id].battery_measurement.voltage >= BATTERY_THRESHOLD) &&
+            (battery_data[slot_id].battery_measurement.voltage < battery_data[slot_id].battery_limits.min_voltage)){
+        battery_data[slot_id].battery_state = STATE_BATTERY_DETECTED;
+    }
+    else if(battery_data[slot_id].battery_measurement.temperature > TEMPERATURE_MAX_C){
+        battery_data[slot_id].battery_state = STATE_OVERHEATING;
+    }
+    else{
+        battery_data[slot_id].battery_state = STATE_MEASUREMENT_IN_PROGRESS;
+    }
+}

+ 47 - 0
src/battery_data/battery.h

@@ -0,0 +1,47 @@
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "src/config.h"
+#ifndef BATTERY_H
+#define BATTERY_H
+
+
+//Battery states
+typedef enum{
+    STATE_EMPTY= 0x01,
+    STATE_BATTERY_DETECTED= 0x02,
+    STATE_WAITING_FOR_LIMITS= 0x03,
+    STATE_MEASUREMENT_IN_PROGRESS= 0x04,
+    STATE_MEASUREMENT_DONE= 0x04,
+    STATE_OVERHEATING= 0x05,
+
+} BatteryState;
+
+typedef struct{
+    uint16_t voltage;
+    int16_t current;
+    uint16_t temperature;
+}BatteryMeasurement;
+
+typedef struct{
+    uint16_t min_voltage;
+    uint16_t max_voltage;
+    uint8_t cut_off_current;
+    uint16_t capacitance;
+    uint8_t charge_fraction;
+} BatteryLimits;
+
+typedef struct{
+    uint8_t slot_id;
+    int16_t charge_discharge;
+    BatteryState battery_state;
+    BatteryMeasurement battery_measurement;
+    BatteryLimits battery_limits;
+    bool batteryLimitRecieved;
+} BatteryInfo;
+
+extern BatteryInfo battery_data[NUM_SLOTS];
+void Battery_Init();
+void Battery_ReadState(uint8_t slot_id);
+
+#endif