Moved firmware to subfoler firmware
This commit is contained in:
193
firmware/Core/Inc/modPowerElectronics.h
Normal file
193
firmware/Core/Inc/modPowerElectronics.h
Normal file
@@ -0,0 +1,193 @@
|
||||
/*
|
||||
Copyright 2017 - 2018 Danny Bokma danny@diebie.nl
|
||||
Copyright 2019 - 2020 Kevin Dionne kevin.dionne@ennoid.me
|
||||
|
||||
This file is part of the DieBieMS/ENNOID-BMS firmware.
|
||||
|
||||
The DieBieMS/ENNOID-BMS firmware is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
The DieBieMS/ENNOID-BMS firmware is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __MODPOWERELECTRONICS_H
|
||||
#define __MODPOWERELECTRONICS_H
|
||||
|
||||
//#include "driverSWISL28022.h"
|
||||
//#include "driverHWADC.h"
|
||||
#include "driverSWLTC6804.h"
|
||||
//#include "driverSWADC128D818.h"
|
||||
//#include "driverHWSwitches.h"
|
||||
//#include "driverSWEMC2305.h"
|
||||
#include "modDelay.h"
|
||||
#include "modConfig.h"
|
||||
#//include "modPowerState.h"
|
||||
#include "stdbool.h"
|
||||
#include "math.h"
|
||||
//#include "driverSWSHT21.h"
|
||||
//#include "driverSWHTC1080.h"
|
||||
|
||||
|
||||
#define NoOfCellsPossibleOnBMS 180
|
||||
#define NoOfCellMonitorsPossibleOnBMS 19
|
||||
|
||||
#define NoOfAuxPossibleOnBMS 120
|
||||
|
||||
#define NoOfExpPossibleOnBMS 72
|
||||
#define NoOfExpMonitorPossibleOnBMS 9
|
||||
|
||||
#define NoOfTempSensors 16
|
||||
#define VinErrorThreshold 10
|
||||
|
||||
typedef enum {
|
||||
TEMP_EXT_LTC_NTC0 = 0, // EXT on master BMS on LTC
|
||||
TEMP_EXT_LTC_NTC1, // EXT on master BMS on LTC
|
||||
TEMP_INT_LTC_CHIP, // Int on master BMS inside LTC Chip
|
||||
TEMP_INT_STM_NTC, // Int on master BMS outside STM Chip
|
||||
TEMP_EXT_ADC_NTC0, // Ext on slave BMS OR water detect
|
||||
TEMP_EXT_ADC_NTC1, // Ext on slave BMS OR water detect
|
||||
TEMP_EXT_ADC_NTC2, // Ext on slave BMS OR water detect
|
||||
TEMP_EXT_ADC_NTC3, // Ext on slave BMS OR water detect
|
||||
TEMP_EXT_ADC_NTC4, // Ext on slave BMS OR water detect
|
||||
TEMP_EXT_ADC_NTC5, // Ext on slave BMS OR water detect
|
||||
TEMP_INT_ADC_NTC6, // Int on slave BMS
|
||||
TEMP_INT_ADC_NTC7, // Int on slave BMS
|
||||
TEMP_INT_SHT, // Int on slave BMS
|
||||
TEMP_INT_ADC_NTCAUX // Ext on the CAN connector
|
||||
} modPowerElectronicsTemperatureSensorMapping;
|
||||
|
||||
typedef enum {
|
||||
PACK_STATE_ERROR_HARD_CELLVOLTAGE = 0,
|
||||
PACK_STATE_ERROR_SOFT_CELLVOLTAGE,
|
||||
PACK_STATE_ERROR_OVER_CURRENT,
|
||||
PACK_STATE_NORMAL,
|
||||
PACK_STATE_ERROR_TEMPERATURE,
|
||||
} modPowerElectronicsPackOperationalCellStatesTypedef;
|
||||
|
||||
typedef struct {
|
||||
// Master BMS
|
||||
|
||||
uint64_t serial_number;
|
||||
|
||||
uint16_t throttleDutyGeneralTemperatureBMS;
|
||||
uint16_t throttleDutyChargeVoltage;
|
||||
uint16_t throttleDutyChargeTemperatureBattery;
|
||||
uint16_t throttleDutyCharge;
|
||||
uint16_t throttleDutyDischargeVoltage;
|
||||
uint16_t throttleDutyDischargeTemperatureBattery;
|
||||
uint16_t throttleDutyDischarge;
|
||||
float SoC;
|
||||
float SoCCapacityAh;
|
||||
OperationalStateTypedef operationalState;
|
||||
bms_fault_state faultState;
|
||||
float packVoltage;
|
||||
float packCurrent;
|
||||
float packPower;
|
||||
float loCurrentLoadCurrent;
|
||||
float loCurrentLoadVoltage;
|
||||
float chargerVoltage;
|
||||
float cellVoltageHigh;
|
||||
float cellVoltageLow;
|
||||
float cellVoltageAverage;
|
||||
float cellVoltageMisMatch;
|
||||
uint16_t cellBalanceResistorEnableMask;
|
||||
float temperatures[NoOfTempSensors];
|
||||
float tempBatteryHigh;
|
||||
float tempBatteryLow;
|
||||
float tempBatteryAverage;
|
||||
float tempBMSHigh;
|
||||
float tempBMSLow;
|
||||
float tempBMSAverage;
|
||||
float humidity;
|
||||
uint8_t preChargeDesired;
|
||||
uint8_t disChargeDesired;
|
||||
uint8_t disChargeLCAllowed;
|
||||
bool disChargeOverMaxTemperature;
|
||||
bool disChargeOverMinTemperature;
|
||||
uint8_t chargeDesired;
|
||||
uint8_t chargePFETDesired;
|
||||
uint8_t chargeAllowed;
|
||||
bool chargeOverMaxTemperature;
|
||||
bool chargeOverMinTemperature;
|
||||
uint8_t coolingDesired;
|
||||
uint8_t coolingAllowed;
|
||||
uint8_t safetyOverCANHCSafeNSafe;
|
||||
uint8_t chargeCurrentDetected;
|
||||
uint8_t chargeBalanceActive;
|
||||
uint8_t balanceActive;
|
||||
uint8_t powerButtonActuated;
|
||||
uint8_t packInSOADischarge;
|
||||
uint8_t packInSOACharge;
|
||||
uint8_t powerDownDesired;
|
||||
uint8_t powerOnLongButtonPress;
|
||||
uint8_t buzzerOn;
|
||||
uint8_t watchDogTime;
|
||||
cellMonitorCellsTypeDef cellVoltagesIndividual[NoOfCellsPossibleOnBMS];
|
||||
auxMonitorTypeDef auxVoltagesIndividual[NoOfAuxPossibleOnBMS];
|
||||
expMonitorTypeDef expVoltagesIndividual[NoOfExpPossibleOnBMS];
|
||||
|
||||
modPowerElectronicsPackOperationalCellStatesTypedef packOperationalCellState;
|
||||
|
||||
// Slave modules -> TODO move into struct.
|
||||
float cellModuleVoltages[NoOfCellMonitorsPossibleOnBMS][18];
|
||||
float auxModuleVoltages[NoOfCellMonitorsPossibleOnBMS][12];
|
||||
float expModuleVoltages[NoOfExpMonitorPossibleOnBMS][8];
|
||||
uint32_t cellModuleBalanceResistorEnableMask[NoOfCellMonitorsPossibleOnBMS];
|
||||
uint32_t dieTemperature[NoOfCellMonitorsPossibleOnBMS];
|
||||
|
||||
} modPowerElectronicsPackStateTypedef;
|
||||
|
||||
void modPowerElectronicsInit(modPowerElectronicsPackStateTypedef *packState, modConfigGeneralConfigStructTypedef *generalConfig);
|
||||
bool modPowerElectronicsTask(void);
|
||||
void modPowerElectronicsAllowForcedOn(bool allowedState);
|
||||
void modPowerElectronicsSetPreCharge(bool newState);
|
||||
bool modPowerElectronicsSetDisCharge(bool newState);
|
||||
void modPowerElectronicsSetCharge(bool newState);
|
||||
void modPowerElectronicsSetChargePFET(bool newState);
|
||||
void modPowerElectronicsSetCooling(bool newState);
|
||||
void modPowerElectronicsDisableAll(void);
|
||||
void modPowerElectronicsCalculateCellStats(void);
|
||||
void modPowerElectronicsSubTaskBalancing(void);
|
||||
void modPowerElectronicsCallMonitorsCalcBalanceResistorArray(void);
|
||||
void modPowerElectronicsSubTaskVoltageWatch(void);
|
||||
void modPowerElectronicsSubTaskCurrentWatch(void);
|
||||
void modPowerElectronicsUpdateSwitches(void);
|
||||
void modPowerElectronicsSortCells(cellMonitorCellsTypeDef *cells, uint8_t cellCount);
|
||||
void modPowerElectronicsCalcTempStats(void);
|
||||
void modPowerElectronicsCalcThrottle(void);
|
||||
int32_t modPowerElectronicsMapVariableInt(int32_t inputVariable, int32_t inputLowerLimit, int32_t inputUpperLimit, int32_t outputLowerLimit, int32_t outputUpperLimit);
|
||||
float modPowerElectronicsMapVariableFloat(float inputVariable, float inputLowerLimit, float inputUpperLimit, float outputLowerLimit, float outputUpperLimit);
|
||||
void modPowerElectronicsInitISL(void);
|
||||
void modPowerElectronicsSubTaskBuzzer(void);
|
||||
bool modPowerElectronicsHCSafetyCANAndPowerButtonCheck(void);
|
||||
void modPowerElectronicsResetBalanceModeActiveTimeout(void);
|
||||
void modPowerElectronicsCellMonitorsInit(void);
|
||||
void modPowerElectronicsCellMonitorsCheckConfigAndReadAnalogData(void);
|
||||
void modPowerElectronicsCellMonitorsStartCellConversion(void);
|
||||
void modPowerElectronicsCellMonitorsStartLoadedCellConversion(bool PUP);
|
||||
void modPowerElectronicsCellMonitorsStartTemperatureConversion(void);
|
||||
void modPowerElectronicsCellMonitorsEnableBalanceResistors(uint32_t);
|
||||
void modPowerElectronicsCellMonitorsEnableBalanceResistorsArray(void);
|
||||
void modPowerElectronicsCellMonitorsReadVoltageFlags(uint32_t *underVoltageFlags, uint32_t *overVoltageFlags);
|
||||
void modPowerElectronicsCellMonitorsCheckAndSolveInitState(void);
|
||||
void modPowerElectronicsCellMonitorsArrayTranslate(void);
|
||||
void modPowerElectronicsAuxMonitorsArrayTranslate(void);
|
||||
void modPowerElectronicsExpMonitorsArrayTranslate(void);
|
||||
float modPowerElectronicsCalcPackCurrent(void);
|
||||
void modPowerElectronicsTerminalCellConnectionTest(int argc, const char **argv);
|
||||
void modPowerElectronicsCheckPackSOA(void);
|
||||
void modPowerElectronicsSamplePackAndLCData(void);
|
||||
void modPowerElectronicsSamplePackVoltage(float *voltagePointer);
|
||||
void modPowerElectronicsLCSenseSample(void);
|
||||
void modPowerElectronicsLCSenseInit(void);
|
||||
uint16_t modPowerElectronicsLowestInThree(uint16_t num1,uint16_t num2,uint16_t num3);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user