Cell voltages fork (SoC)

Dependencies:   CUER_CAN CUER_DS1820 LTC2943 LTC6804 mbed PowerControl

Revision:
62:c7bc95aa818a
Parent:
60:ba1f45b46f97
Child:
63:2b425006e95d
--- a/main.cpp	Sat Aug 26 09:35:42 2017 +0000
+++ b/main.cpp	Mon Aug 28 00:03:07 2017 +0000
@@ -78,6 +78,8 @@
 float batteryCurrent; 
 uint32_t batteryVoltage;
 
+DigitalOut battery_fan_control(BATTERY_FAN_CONTROL_PIN);
+
 Timer temp_measurements_timer;
 bool temperature_measurements_received = false;
 
@@ -131,7 +133,12 @@
         loop_delay.attach(loop_delay_callback, LOOP_DELAY_S);
         //while (!delay_finished) sleep();
         
-        wait(0.5);
+        if (measurements.ambient_temperature.measurement < maxTemp.temperature) {
+            battery_fan_control = 1; //turn the battery fans on if the ambient temperature is lower than the max battery temperature
+        }
+        else battery_fan_control = 0;
+        
+        wait(1);
         if (DEBUG) printf("Loop time is %d \r\n", t.read_ms());
     } 
 }
@@ -519,7 +526,7 @@
     if ((maxTemp.temperature - minTemp.temperature >  MAX_TEMPERATURE_DIFFERENCE) && (temp_measurements_timer.read() > initial_temperature_delay || temperature_measurements_received)) {
         status = status | MAX_TEMPERATURE_DIFFERENCE_ERROR;
     }
-    if (measurements.battery_current >  OVERCURRENT_THRESHOLD) {
+    if (abs(measurements.battery_current) >  OVERCURRENT_THRESHOLD) {
         status = status | MAX_TEMPERATURE_DIFFERENCE_ERROR;
     }
 
@@ -562,7 +569,7 @@
                     min_voltage.CMU_number = i;
                     min_voltage.cell_number = j;   
                  }
-                 else if(measurements.cell_voltages[i].voltages[j] > max_voltage.voltage)
+                 if(measurements.cell_voltages[i].voltages[j] > max_voltage.voltage)
                  {
                     max_voltage.voltage = measurements.cell_voltages[i].voltages[j];
                     max_voltage.CMU_number = i;
@@ -627,6 +634,8 @@
 void init()
 {
     PHY_PowerDown();
+    battery_fan_control = 0;
+    measurements.ambient_temperature.measurement = 100;
     
     if(TRANSMIT_MODE)
     {
@@ -705,7 +714,7 @@
             eeprom_start_address = read_EEPROM_startup(measurements); // Read newly written data back from EEPROM (can be done faster but this is more safe)
             //ltc2943.accumulatedCharge(measurements.percentage_SOC); // Initialise the LTC2943 with the current state of charge
             initial_pack_SOC = measurements.SOC;
-        }
+        }   
     }
 }
 
@@ -726,8 +735,13 @@
     
     for(int i = 0; i < CAN_BUFFER_SIZE; i++)
     {
-        //temperature 
-        if(msgArray[i].id >= 0x700)
+        if(msgArray[i].id == 0x799) //ID for the ambient temperature reading
+        
+        measurements.ambient_temperature = decodeTemperatureTelemetry(msgArray[i]);
+        
+        //battery pack temperatures 
+        
+        else if(msgArray[i].id >= 0x700)
         {
             temperature_measurements_received = true;