Cell voltages fork (SoC)
Dependencies: CUER_CAN CUER_DS1820 LTC2943 LTC6804 mbed PowerControl
Diff: main.cpp
- 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;