mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-03 17:59:27 +02:00
Add files via upload
This commit is contained in:
parent
154cd7f001
commit
42f79ca0b7
3 changed files with 142 additions and 0 deletions
|
@ -32,4 +32,9 @@
|
|||
#ifdef TEST_FAKE_BATTERY
|
||||
#include "TEST-FAKE-BATTERY.h" //See this file for more Fake battery settings
|
||||
#endif
|
||||
|
||||
#ifdef SERIAL_LINK_RECEIVER_FROM_BATTERY
|
||||
#include "SERIAL-LINK-RECEIVER-FROM-BATTERY.h"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
86
Software/src/battery/SERIAL-LINK-RECEIVER-FROM-BATTERY.cpp
Normal file
86
Software/src/battery/SERIAL-LINK-RECEIVER-FROM-BATTERY.cpp
Normal file
|
@ -0,0 +1,86 @@
|
|||
// SERIAL-LINK-RECEIVER-FROM-BATTERY.cpp
|
||||
|
||||
#include "SERIAL-LINK-RECEIVER-FROM-BATTERY.h"
|
||||
|
||||
#define INVERTER_SEND_NUM_VARIABLES 3 //--- comment out if nothing to send
|
||||
#define INVERTER_RECV_NUM_VARIABLES 16
|
||||
|
||||
#ifdef INVERTER_SEND_NUM_VARIABLES
|
||||
const uint8_t sendingNumVariables = INVERTER_SEND_NUM_VARIABLES;
|
||||
#else
|
||||
const uint8_t sendingNumVariables = 0;
|
||||
#endif
|
||||
|
||||
// txid,rxid, num_send,num_recv
|
||||
SerialDataLink dataLinkReceive(Serial2, 0, 0x01, sendingNumVariables,
|
||||
INVERTER_RECV_NUM_VARIABLES); // ...
|
||||
|
||||
|
||||
|
||||
|
||||
void __getData()
|
||||
{
|
||||
SOC = (uint16_t) dataLinkReceive.getReceivedData(0);
|
||||
StateOfHealth = (uint16_t) dataLinkReceive.getReceivedData(1);
|
||||
battery_voltage = (uint16_t) dataLinkReceive.getReceivedData(2);
|
||||
battery_current = (uint16_t) dataLinkReceive.getReceivedData(3);
|
||||
capacity_Wh = (uint16_t) dataLinkReceive.getReceivedData(4);
|
||||
remaining_capacity_Wh = (uint16_t) dataLinkReceive.getReceivedData(5);
|
||||
max_target_discharge_power = (uint16_t) dataLinkReceive.getReceivedData(6);
|
||||
max_target_charge_power = (uint16_t) dataLinkReceive.getReceivedData(7);
|
||||
bms_status = (uint16_t) dataLinkReceive.getReceivedData(8);
|
||||
bms_char_dis_status = (uint16_t) dataLinkReceive.getReceivedData(9);
|
||||
stat_batt_power = (uint16_t) dataLinkReceive.getReceivedData(10);
|
||||
temperature_min = (uint16_t) dataLinkReceive.getReceivedData(11);
|
||||
temperature_max = (uint16_t) dataLinkReceive.getReceivedData(12);
|
||||
cell_max_voltage = (uint16_t) dataLinkReceive.getReceivedData(13);
|
||||
cell_min_voltage = (uint16_t) dataLinkReceive.getReceivedData(14);
|
||||
batteryAllowsContactorClosing = (uint16_t) dataLinkReceive.getReceivedData(15);
|
||||
}
|
||||
|
||||
void updateData()
|
||||
{
|
||||
// --- update with fresh data
|
||||
/*
|
||||
dataLinkReceive.updateData(0,var1);
|
||||
dataLinkReceive.updateData(1,var2);
|
||||
dataLinkReceive.updateData(2,var3);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @ 9600bps, assume void manageSerialLinkReceiver()
|
||||
* is called every 1mS
|
||||
*/
|
||||
|
||||
void manageSerialLinkReceiver()
|
||||
{
|
||||
dataLinkReceive.run();
|
||||
bool readError = dataLinkReceive.checkReadError(true); // check for error & clear error flag
|
||||
if (dataLinkReceive.checkNewData(true)) // true = clear Flag
|
||||
{
|
||||
__getData();
|
||||
}
|
||||
|
||||
|
||||
|
||||
#ifdef INVERTER_SEND_NUM_VARIABLES
|
||||
static bool initLink=false;
|
||||
static unsigned long updateTime = 0;
|
||||
if (! initLink)
|
||||
{
|
||||
initLink = true;
|
||||
// sends variables every 5000mS even if no change
|
||||
dataLinkReceive.setUpdateInterval(5000);
|
||||
}
|
||||
unsigned long currentTime = millis();
|
||||
if (currentTime - updateTime > 100)
|
||||
{
|
||||
updateTime = currentTime;
|
||||
dataLinkReceive.run();
|
||||
bool sendError = dataLinkReceive.checkTransmissionError(true); // check for error & clear error flag
|
||||
updateData();
|
||||
}
|
||||
#endif
|
||||
}
|
51
Software/src/battery/SERIAL-LINK-RECEIVER-FROM-BATTERY.h
Normal file
51
Software/src/battery/SERIAL-LINK-RECEIVER-FROM-BATTERY.h
Normal file
|
@ -0,0 +1,51 @@
|
|||
// SERIAL-LINK-RECEIVER-FROM-BATTERY.h
|
||||
|
||||
#ifndef SERIAL_LINK_RECEIVER_FROM_BATTERY_H
|
||||
#define SERIAL_LINK_RECEIVER_FROM_BATTERY_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "../../USER_SETTINGS.h"
|
||||
#include "../lib/SerialDataLink/SerialDataLink.h"
|
||||
|
||||
// https://github.com/mackelec/SerialDataLink
|
||||
|
||||
#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 bool batteryAllowsContactorClosing; //Bool, 1=true, 0=false
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void manageSerialLinkReceiver();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue