-
Notifications
You must be signed in to change notification settings - Fork 161
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
142 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
86 changes: 86 additions & 0 deletions
86
Software/src/battery/SERIAL-LINK-RECEIVER-FROM-BATTERY.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |