mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-05 02:39:57 +02:00
Add fake battery skeleton
This commit is contained in:
parent
8bab9c5386
commit
7767d39782
5 changed files with 143 additions and 0 deletions
|
@ -29,4 +29,7 @@
|
|||
#include "TESLA-MODEL-3-BATTERY.h" //See this file for more Tesla battery settings
|
||||
#endif
|
||||
|
||||
#ifdef TEST_FAKE_BATTERY
|
||||
#include "TEST-FAKE-BATTERY.h" //See this file for more Fake battery settings
|
||||
#endif
|
||||
#endif
|
||||
|
|
81
Software/src/battery/TEST-FAKE-BATTERY.cpp
Normal file
81
Software/src/battery/TEST-FAKE-BATTERY.cpp
Normal file
|
@ -0,0 +1,81 @@
|
|||
#include "TEST-FAKE-BATTERY.h"
|
||||
#include "../lib/miwagner-ESP32-Arduino-CAN/CAN_config.h"
|
||||
#include "../lib/miwagner-ESP32-Arduino-CAN/ESP32CAN.h"
|
||||
|
||||
/* Do not change code below unless you are sure what you are doing */
|
||||
static unsigned long previousMillis10 = 0; // will store last time a 10ms CAN Message was send
|
||||
static unsigned long previousMillis100 = 0; // will store last time a 100ms CAN Message was send
|
||||
static unsigned long previousMillis10s = 0; // will store last time a 1s CAN Message was send
|
||||
static const int interval10 = 10; // interval (ms) at which send CAN Messages
|
||||
static const int interval100 = 100; // interval (ms) at which send CAN Messages
|
||||
static const int interval10s = 10000; // interval (ms) at which send CAN Messages
|
||||
|
||||
void print_units(char* header, int value, char* units) {
|
||||
Serial.print(header);
|
||||
Serial.print(value);
|
||||
Serial.print(units);
|
||||
}
|
||||
|
||||
void update_values_test_battery() { /* This function puts fake values onto the parameters sent towards the inverter */
|
||||
bms_status = ACTIVE; //Always be in Active mode
|
||||
|
||||
LEDcolor = GREEN;
|
||||
|
||||
SOC = 5000; // 50.00%
|
||||
|
||||
StateOfHealth = 9900; // 99.00%
|
||||
|
||||
battery_voltage = 3700; // 370.0V
|
||||
|
||||
battery_current = 0; // 0 A
|
||||
|
||||
capacity_Wh = 30000; // 30kWh
|
||||
|
||||
remaining_capacity_Wh = 15000; // 15kWh
|
||||
|
||||
cell_max_voltage = 3750;
|
||||
|
||||
cell_min_voltage = 3730;
|
||||
|
||||
stat_batt_power = 0; // 0W
|
||||
|
||||
temperature_min = 50; // 5.0*C
|
||||
|
||||
temperature_max = 60; // 6.0*C
|
||||
|
||||
max_target_discharge_power = 5000; // 5kW
|
||||
|
||||
max_target_charge_power = 5000; // 5kW
|
||||
|
||||
/*Finally print out values to serial if configured to do so*/
|
||||
#ifdef DEBUG_VIA_USB
|
||||
Serial.println("FAKE Values going to inverter");
|
||||
print_units("SOH%: ", (StateOfHealth * 0.01), "% ");
|
||||
print_units(", SOC%: ", (SOC * 0.01), "% ");
|
||||
print_units(", Voltage: ", (battery_voltage * 0.1), "V ");
|
||||
print_units(", Max discharge power: ", max_target_discharge_power, "W ");
|
||||
print_units(", Max charge power: ", max_target_charge_power, "W ");
|
||||
print_units(", Max temp: ", (temperature_max * 0.1), "°C ");
|
||||
print_units(", Min temp: ", (temperature_min * 0.1), "°C ");
|
||||
print_units(", Max cell voltage: ", cell_max_voltage, "mV ");
|
||||
print_units(", Min cell voltage: ", cell_min_voltage, "mV ");
|
||||
Serial.println("");
|
||||
#endif
|
||||
}
|
||||
|
||||
void receive_can_test_battery(CAN_frame_t rx_frame) {
|
||||
switch (rx_frame.MsgID) {
|
||||
case 0xABC:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
void send_can_test_battery() {
|
||||
unsigned long currentMillis = millis();
|
||||
// Send 100ms CAN Message
|
||||
if (currentMillis - previousMillis100 >= interval100) {
|
||||
previousMillis100 = currentMillis;
|
||||
// Put fake messages here incase you want to test sending CAN
|
||||
}
|
||||
}
|
46
Software/src/battery/TEST-FAKE-BATTERY.h
Normal file
46
Software/src/battery/TEST-FAKE-BATTERY.h
Normal file
|
@ -0,0 +1,46 @@
|
|||
#ifndef TEST_FAKE_BATTERY_H
|
||||
#define TEST_FAKE_BATTERY_H
|
||||
#include <Arduino.h>
|
||||
#include "../../USER_SETTINGS.h"
|
||||
#include "../lib/miwagner-ESP32-Arduino-CAN/ESP32CAN.h"
|
||||
|
||||
#define ABSOLUTE_MAX_VOLTAGE \
|
||||
4040 // 404.4V,if battery voltage goes over this, charging is not possible (goes into forced discharge)
|
||||
#define ABSOLUTE_MIN_VOLTAGE 3100 // 310.0V if battery voltage goes under this, discharging further is disabled
|
||||
|
||||
// These parameters need to be mapped for the inverter
|
||||
extern uint16_t SOC; //SOC%, 0-100.00 (0-10000)
|
||||
extern uint16_t StateOfHealth; //SOH%, 0-100.00 (0-10000)
|
||||
extern uint16_t battery_voltage; //V+1, 0-500.0 (0-5000)
|
||||
extern uint16_t battery_current; //A+1, Goes thru convert2unsignedint16 function (5.0A = 50, -5.0A = 65485)
|
||||
extern uint16_t capacity_Wh; //Wh, 0-60000
|
||||
extern uint16_t remaining_capacity_Wh; //Wh, 0-60000
|
||||
extern uint16_t max_target_discharge_power; //W, 0-60000
|
||||
extern uint16_t max_target_charge_power; //W, 0-60000
|
||||
extern uint16_t bms_status; //Enum, 0-5
|
||||
extern uint16_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 batteryAllowsContactorClosing; //Bool, 1=true, 0=false
|
||||
extern uint8_t LEDcolor; //Enum, 0-2
|
||||
// Definitions for bms_status
|
||||
#define STANDBY 0
|
||||
#define INACTIVE 1
|
||||
#define DARKSTART 2
|
||||
#define ACTIVE 3
|
||||
#define FAULT 4
|
||||
#define UPDATING 5
|
||||
// LED colors
|
||||
#define GREEN 0
|
||||
#define YELLOW 1
|
||||
#define RED 2
|
||||
#define BLUE 3
|
||||
|
||||
void update_values_test_battery();
|
||||
void receive_can_test_battery(CAN_frame_t rx_frame);
|
||||
void send_can_test_battery();
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue