Skip to content

Commit 72ff7fd

Browse files
committed
Add more info to more battery info page
1 parent 247867c commit 72ff7fd

File tree

4 files changed

+38
-6
lines changed

4 files changed

+38
-6
lines changed

Software/src/battery/RIVIAN-BATTERY.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ uint8_t RivianBattery::calculateCRC(CAN_frame rx_frame, uint8_t length, uint8_t
2626

2727
void RivianBattery::update_values() {
2828

29-
datalayer.battery.status.real_soc = battery_SOC;
29+
datalayer.battery.status.real_soc = battery_SOC_average;
3030

3131
//datalayer.battery.status.soh_pptt; //TODO: Find usable SOH
3232

@@ -70,27 +70,36 @@ void RivianBattery::update_values() {
7070
datalayer_extended.rivian.main_contactor_voltage = main_contactor_voltage;
7171
datalayer_extended.rivian.voltage_reference = voltage_reference;
7272
datalayer_extended.rivian.DCFC_contactor_voltage = DCFC_contactor_voltage;
73+
datalayer_extended.rivian.slewrate_potential_violation = slewrate_potential_violation;
74+
datalayer_extended.rivian.minimum_power_potential_violation = minimum_power_potential_violation;
75+
datalayer_extended.rivian.operation_limit_violation_warning = operation_limit_violation_warning;
7376
}
7477

7578
void RivianBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
7679
switch (rx_frame.ID) {
80+
case 0x00A: //DCDC status [Platform CAN]+ 20ms
81+
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
82+
break;
7783
case 0x0A0: //Cellvoltage min/max (Not available on all packs)
7884
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
7985
cell_min_voltage_mV = (((rx_frame.data.u8[5] & 0x0F) << 8) | rx_frame.data.u8[4]);
8086
cell_max_voltage_mV = ((rx_frame.data.u8[6] << 4) | (rx_frame.data.u8[5] >> 4));
8187
break;
82-
case 0x06E: //Status flags [Platform CAN]+
88+
case 0x06E: //Status flags [Platform CAN]+ 10ms
8389
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
8490
error_flags_from_BMS = rx_frame.data.u8[5];
8591
error_relay_open = (rx_frame.data.u8[6] & 0x01);
8692
IsolationMeasurementOngoing = (rx_frame.data.u8[6] & 0x02) >> 1;
8793
contactor_state = (((rx_frame.data.u8[7] & 0x01) << 3) | (rx_frame.data.u8[6] >> 5));
8894
break;
89-
case 0x100: //Discharge/Charge speed
95+
case 0x100: //Discharge/Charge speed [Platform CAN]+ 10ms
9096
battery_charge_limit_amp =
9197
(((rx_frame.data.u8[3] & 0x0F) << 8) | (rx_frame.data.u8[2] << 4) | (rx_frame.data.u8[1] >> 4)) / 20;
9298
battery_discharge_limit_amp =
9399
(((rx_frame.data.u8[5] & 0x0F) << 8) | (rx_frame.data.u8[4] << 4) | (rx_frame.data.u8[3] >> 4)) / 20;
100+
slewrate_potential_violation = (rx_frame.data.u8[5] & 0x10) >> 4;
101+
minimum_power_potential_violation = (rx_frame.data.u8[5] & 0x20) >> 5;
102+
operation_limit_violation_warning = (rx_frame.data.u8[5] & 0x40) >> 6;
94103
break;
95104
case 0x1E3: //HMI [Platform CAN]+
96105
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
@@ -164,9 +173,9 @@ void RivianBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
164173
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
165174
BMS_state = (rx_frame.data.u8[0] & 0x03);
166175
break;
167-
case 0x55B: //Temperatures
176+
case 0x55B: //SOC [Platform CAN]+
168177
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
169-
battery_SOC = (rx_frame.data.u8[4] << 8) | rx_frame.data.u8[5];
178+
battery_SOC_average = (rx_frame.data.u8[4] << 8) | rx_frame.data.u8[5];
170179
break;
171180
default:
172181
break;

Software/src/battery/RIVIAN-BATTERY.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ class RivianBattery : public CanBattery {
2828
uint16_t main_contactor_voltage = 0;
2929
uint16_t voltage_reference = 0;
3030
uint16_t DCFC_contactor_voltage = 0;
31-
uint16_t battery_SOC = 5000;
31+
uint16_t battery_SOC_average = 5000;
32+
uint16_t battery_SOC_max = 0;
33+
uint16_t battery_SOC_min = 0;
3234
int32_t battery_current = 32000;
3335
uint16_t kWh_available_total = 135;
3436
uint16_t kWh_available_max = 135;
@@ -52,6 +54,9 @@ class RivianBattery : public CanBattery {
5254
bool liquid_fault = false;
5355
bool contactor_DCFC_welded = false;
5456
bool NACS_charger_detected = false;
57+
bool slewrate_potential_violation = false;
58+
bool minimum_power_potential_violation = false;
59+
bool operation_limit_violation_warning = false;
5560
static const uint8_t SLEEP = 0;
5661
static const uint8_t STANDBY = 1;
5762
static const uint8_t READY = 2;

Software/src/battery/RIVIAN-HTML.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ class RivianHtmlRenderer : public BatteryHtmlRenderer {
1616
content += "<h4>Voltage, reference: " + String(datalayer_extended.rivian.voltage_reference) + " dV</h4>";
1717
content += "<h4>Voltage, DCFC contactors: " + String(datalayer_extended.rivian.DCFC_contactor_voltage) + " dV</h4>";
1818

19+
content += "<h4>SOC, max: " + String(datalayer_extended.rivian.battery_SOC_max) + " pptt</h4>";
20+
content += "<h4>SOC, min: " + String(datalayer_extended.rivian.battery_SOC_min) + " pptt</h4>";
21+
1922
if (datalayer_extended.rivian.NACS_charger_detected) {
2023
content += "<h4>NACS charger detected!</h4>";
2124
}
@@ -161,6 +164,16 @@ class RivianHtmlRenderer : public BatteryHtmlRenderer {
161164
content += "<h4>DCFC contactor welded</h4>";
162165
}
163166

167+
if (datalayer_extended.rivian.slewrate_potential_violation) {
168+
content += "<h4>Slewrate potential violation</h4>";
169+
}
170+
if (datalayer_extended.rivian.minimum_power_potential_violation) {
171+
content += "<h4>Min power potential violation</h4>";
172+
}
173+
if (datalayer_extended.rivian.operation_limit_violation_warning) {
174+
content += "<h4>Operation limit violation warning</h4>";
175+
}
176+
164177
return content;
165178
}
166179
};

Software/src/datalayer/datalayer_extended.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,8 @@ struct DATALAYER_INFO_RIVIAN {
459459
uint16_t main_contactor_voltage = 0;
460460
uint16_t voltage_reference = 0;
461461
uint16_t DCFC_contactor_voltage = 0;
462+
uint16_t battery_SOC_max = 0;
463+
uint16_t battery_SOC_min = 0;
462464
uint8_t BMS_state = 0;
463465
uint8_t HVIL = 0;
464466
uint8_t error_flags_from_BMS = 0;
@@ -473,6 +475,9 @@ struct DATALAYER_INFO_RIVIAN {
473475
bool liquid_fault = false;
474476
bool contactor_DCFC_welded = false;
475477
bool NACS_charger_detected = false;
478+
bool slewrate_potential_violation = false;
479+
bool minimum_power_potential_violation = false;
480+
bool operation_limit_violation_warning = false;
476481
};
477482

478483
struct DATALAYER_INFO_TESLA {

0 commit comments

Comments
 (0)