Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
mackelec authored Nov 20, 2023
1 parent 154cd7f commit 42f79ca
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 0 deletions.
5 changes: 5 additions & 0 deletions Software/src/battery/BATTERIES.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 86 additions & 0 deletions Software/src/battery/SERIAL-LINK-RECEIVER-FROM-BATTERY.cpp
Original file line number Diff line number Diff line change
@@ -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 changes: 51 additions & 0 deletions Software/src/battery/SERIAL-LINK-RECEIVER-FROM-BATTERY.h
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 42f79ca

Please sign in to comment.