From c04d4af3df96500844af9cce641abb6d3f141da3 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 2 Feb 2024 21:54:08 +0200 Subject: [PATCH] Add all cellvoltages to monitoring --- Software/src/battery/TESLA-MODEL-3-BATTERY.cpp | 16 ++++++++++++++++ Software/src/battery/TESLA-MODEL-3-BATTERY.h | 11 ++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/Software/src/battery/TESLA-MODEL-3-BATTERY.cpp b/Software/src/battery/TESLA-MODEL-3-BATTERY.cpp index 2e742863..3cd038e1 100644 --- a/Software/src/battery/TESLA-MODEL-3-BATTERY.cpp +++ b/Software/src/battery/TESLA-MODEL-3-BATTERY.cpp @@ -451,6 +451,22 @@ void receive_can_tesla_model_3_battery(CAN_frame_t rx_frame) { min_temp = (rx_frame.data.u8[3] * 5) - 400; //Multiply by 5 and remove offset to get C+1 (0x61*5=485-400=8.5*C) } break; + case 0x401: // Cell stats + mux = (rx_frame.data.u8[0]); + + static uint16_t volts; + + if (rx_frame.data.u8[1] == 0x2A) // status byte must be 0x2A to read cellvoltages + { + // Example, frame3=0x89,frame2=0x1D = 35101 / 10 = 3510mV + volts = ((rx_frame.data.u8[3] << 8) | rx_frame.data.u8[2]) / 10; + cellvoltages[1 + mux * 3] = volts; + volts = ((rx_frame.data.u8[5] << 8) | rx_frame.data.u8[4]) / 10; + cellvoltages[2 + mux * 3] = volts; + volts = ((rx_frame.data.u8[7] << 8) | rx_frame.data.u8[6]) / 10; + cellvoltages[3 + mux * 3] = volts; + } + break; case 0x2d2: //Min / max limits min_voltage = ((rx_frame.data.u8[1] << 8) | rx_frame.data.u8[0]) * 0.01 * 2; //Example 24148mv * 0.01 = 241.48 V diff --git a/Software/src/battery/TESLA-MODEL-3-BATTERY.h b/Software/src/battery/TESLA-MODEL-3-BATTERY.h index e958efd5..13225497 100644 --- a/Software/src/battery/TESLA-MODEL-3-BATTERY.h +++ b/Software/src/battery/TESLA-MODEL-3-BATTERY.h @@ -24,11 +24,12 @@ extern uint16_t max_target_charge_power; //W, 0-60000 extern uint8_t bms_status; //Enum, 0-5 extern uint8_t bms_char_dis_status; //Enum, 0-2 extern uint16_t stat_batt_power; //W, Goes thru convert2unsignedint16 function (5W = 5, -5W = 65530) -extern uint16_t temperature_min; //C+1, Goes thru convert2unsignedint16 function (15.0C = 150, -15.0C = 65385) -extern uint16_t temperature_max; //C+1, Goes thru convert2unsignedint16 function (15.0C = 150, -15.0C = 65385) -extern uint16_t cell_max_voltage; //mV, 0-4350 -extern uint16_t cell_min_voltage; //mV, 0-4350 -extern uint8_t LEDcolor; //Enum, 0-10 +extern uint16_t temperature_min; //C+1, Goes thru convert2unsignedint16 function (15.0C = 150, -15.0C = 65385) +extern uint16_t temperature_max; //C+1, Goes thru convert2unsignedint16 function (15.0C = 150, -15.0C = 65385) +extern uint16_t cell_max_voltage; //mV, 0-4350 +extern uint16_t cell_min_voltage; //mV, 0-4350 +extern uint16_t cellvoltages[120]; //mV 0-5000 per cell +extern uint8_t LEDcolor; //Enum, 0-10 extern bool batteryAllowsContactorClosing; //Bool, 1=true, 0=false extern bool inverterAllowsContactorClosing; //Bool, 1=true, 0=false extern bool LFP_Chemistry;