mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-03 09:49:32 +02:00
Merge pull request #1423 from jonny5532/feature/remove-cell-count-from-custom-bms
Remove hardcoded cell counts from custom-BMS batteries
This commit is contained in:
commit
fd0b72af1e
5 changed files with 7 additions and 7 deletions
|
@ -16,6 +16,7 @@ static uint32_t remaining_capacity_mAh = 0;
|
||||||
static uint16_t cellvoltages_mV[48] = {0};
|
static uint16_t cellvoltages_mV[48] = {0};
|
||||||
static uint16_t cellvoltage_min_mV = 0;
|
static uint16_t cellvoltage_min_mV = 0;
|
||||||
static uint16_t cellvoltage_max_mV = 0;
|
static uint16_t cellvoltage_max_mV = 0;
|
||||||
|
static uint16_t cell_count = 0;
|
||||||
static uint16_t SOC = 0;
|
static uint16_t SOC = 0;
|
||||||
static bool has_fault = false;
|
static bool has_fault = false;
|
||||||
|
|
||||||
|
@ -54,6 +55,9 @@ void DalyBms::update_values() {
|
||||||
datalayer.battery.status.cell_min_voltage_mV = cellvoltage_min_mV;
|
datalayer.battery.status.cell_min_voltage_mV = cellvoltage_min_mV;
|
||||||
datalayer.battery.status.cell_max_voltage_mV = cellvoltage_max_mV;
|
datalayer.battery.status.cell_max_voltage_mV = cellvoltage_max_mV;
|
||||||
|
|
||||||
|
// Use the received value from the BMS, to avoid needing to configure it
|
||||||
|
datalayer.battery.info.number_of_cells = cell_count;
|
||||||
|
|
||||||
datalayer.battery.status.temperature_min_dC = temperature_min_dC;
|
datalayer.battery.status.temperature_min_dC = temperature_min_dC;
|
||||||
datalayer.battery.status.temperature_max_dC = temperature_max_dC;
|
datalayer.battery.status.temperature_max_dC = temperature_max_dC;
|
||||||
|
|
||||||
|
@ -63,7 +67,6 @@ void DalyBms::update_values() {
|
||||||
void DalyBms::setup(void) { // Performs one time setup at startup
|
void DalyBms::setup(void) { // Performs one time setup at startup
|
||||||
strncpy(datalayer.system.info.battery_protocol, Name, 63);
|
strncpy(datalayer.system.info.battery_protocol, Name, 63);
|
||||||
datalayer.system.info.battery_protocol[63] = '\0';
|
datalayer.system.info.battery_protocol[63] = '\0';
|
||||||
datalayer.battery.info.number_of_cells = CELL_COUNT;
|
|
||||||
datalayer.battery.info.max_design_voltage_dV = MAX_PACK_VOLTAGE_DV;
|
datalayer.battery.info.max_design_voltage_dV = MAX_PACK_VOLTAGE_DV;
|
||||||
datalayer.battery.info.min_design_voltage_dV = MIN_PACK_VOLTAGE_DV;
|
datalayer.battery.info.min_design_voltage_dV = MIN_PACK_VOLTAGE_DV;
|
||||||
datalayer.battery.info.max_cell_voltage_mV = MAX_CELL_VOLTAGE_MV;
|
datalayer.battery.info.max_cell_voltage_mV = MAX_CELL_VOLTAGE_MV;
|
||||||
|
@ -138,6 +141,7 @@ void decode_packet(uint8_t command, uint8_t data[8]) {
|
||||||
remaining_capacity_mAh = decode_uint32be(data, 4);
|
remaining_capacity_mAh = decode_uint32be(data, 4);
|
||||||
break;
|
break;
|
||||||
case 0x94:
|
case 0x94:
|
||||||
|
cell_count = data[0];
|
||||||
break;
|
break;
|
||||||
case 0x95:
|
case 0x95:
|
||||||
if (data[0] > 0 && data[0] <= 16) {
|
if (data[0] > 0 && data[0] <= 16) {
|
||||||
|
|
|
@ -57,8 +57,8 @@ void OrionBms::update_values() {
|
||||||
|
|
||||||
datalayer.battery.status.cell_min_voltage_mV = Minimum_Cell_Voltage;
|
datalayer.battery.status.cell_min_voltage_mV = Minimum_Cell_Voltage;
|
||||||
|
|
||||||
//If user did not configure amount of cells correctly in the header file, update the value
|
//Use the reported number of cells to avoid needing to configure it
|
||||||
if ((amount_of_detected_cells > NUMBER_OF_CELLS) && (amount_of_detected_cells < MAX_AMOUNT_CELLS)) {
|
if (amount_of_detected_cells < MAX_AMOUNT_CELLS) {
|
||||||
datalayer.battery.info.number_of_cells = amount_of_detected_cells;
|
datalayer.battery.info.number_of_cells = amount_of_detected_cells;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,6 @@ void OrionBms::transmit_can(unsigned long currentMillis) {
|
||||||
void OrionBms::setup(void) { // Performs one time setup at startup
|
void OrionBms::setup(void) { // Performs one time setup at startup
|
||||||
strncpy(datalayer.system.info.battery_protocol, Name, 63);
|
strncpy(datalayer.system.info.battery_protocol, Name, 63);
|
||||||
datalayer.system.info.battery_protocol[63] = '\0';
|
datalayer.system.info.battery_protocol[63] = '\0';
|
||||||
datalayer.battery.info.number_of_cells = NUMBER_OF_CELLS;
|
|
||||||
datalayer.battery.info.max_design_voltage_dV = MAX_PACK_VOLTAGE_DV;
|
datalayer.battery.info.max_design_voltage_dV = MAX_PACK_VOLTAGE_DV;
|
||||||
datalayer.battery.info.min_design_voltage_dV = MIN_PACK_VOLTAGE_DV;
|
datalayer.battery.info.min_design_voltage_dV = MIN_PACK_VOLTAGE_DV;
|
||||||
datalayer.battery.info.max_cell_voltage_mV = MAX_CELL_VOLTAGE_MV;
|
datalayer.battery.info.max_cell_voltage_mV = MAX_CELL_VOLTAGE_MV;
|
||||||
|
|
|
@ -18,7 +18,6 @@ class OrionBms : public CanBattery {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/* Change the following to suit your battery */
|
/* Change the following to suit your battery */
|
||||||
static const int NUMBER_OF_CELLS = 96;
|
|
||||||
static const int MAX_PACK_VOLTAGE_DV = 5000; //5000 = 500.0V
|
static const int MAX_PACK_VOLTAGE_DV = 5000; //5000 = 500.0V
|
||||||
static const int MIN_PACK_VOLTAGE_DV = 1500;
|
static const int MIN_PACK_VOLTAGE_DV = 1500;
|
||||||
static const int MAX_CELL_VOLTAGE_MV = 4250; //Battery is put into emergency stop if one cell goes over this value
|
static const int MAX_CELL_VOLTAGE_MV = 4250; //Battery is put into emergency stop if one cell goes over this value
|
||||||
|
|
|
@ -93,7 +93,6 @@ void SimpBmsBattery::transmit_can(unsigned long currentMillis) {
|
||||||
void SimpBmsBattery::setup(void) { // Performs one time setup at startup
|
void SimpBmsBattery::setup(void) { // Performs one time setup at startup
|
||||||
strncpy(datalayer.system.info.battery_protocol, Name, 63);
|
strncpy(datalayer.system.info.battery_protocol, Name, 63);
|
||||||
datalayer.system.info.battery_protocol[63] = '\0';
|
datalayer.system.info.battery_protocol[63] = '\0';
|
||||||
datalayer.battery.info.number_of_cells = CELL_COUNT;
|
|
||||||
datalayer.battery.info.max_design_voltage_dV = MAX_PACK_VOLTAGE_DV;
|
datalayer.battery.info.max_design_voltage_dV = MAX_PACK_VOLTAGE_DV;
|
||||||
datalayer.battery.info.min_design_voltage_dV = MIN_PACK_VOLTAGE_DV;
|
datalayer.battery.info.min_design_voltage_dV = MIN_PACK_VOLTAGE_DV;
|
||||||
datalayer.battery.info.max_cell_voltage_mV = MAX_CELL_VOLTAGE_MV;
|
datalayer.battery.info.max_cell_voltage_mV = MAX_CELL_VOLTAGE_MV;
|
||||||
|
|
|
@ -22,7 +22,6 @@ class SimpBmsBattery : public CanBattery {
|
||||||
static const int MAX_CELL_VOLTAGE_MV = 4250; //Battery is put into emergency stop if one cell goes over this value
|
static const int MAX_CELL_VOLTAGE_MV = 4250; //Battery is put into emergency stop if one cell goes over this value
|
||||||
static const int MIN_CELL_VOLTAGE_MV = 2700; //Battery is put into emergency stop if one cell goes below this value
|
static const int MIN_CELL_VOLTAGE_MV = 2700; //Battery is put into emergency stop if one cell goes below this value
|
||||||
static const int MAX_CELL_DEVIATION_MV = 500;
|
static const int MAX_CELL_DEVIATION_MV = 500;
|
||||||
static const int CELL_COUNT = 96;
|
|
||||||
|
|
||||||
static const int SIMPBMS_MAX_CELLS = 128;
|
static const int SIMPBMS_MAX_CELLS = 128;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue