Added current factors. Various fixes for temperature monitor. Added partial implementation for can1 and can2

This commit is contained in:
Yury Shuvakin
2023-03-14 06:18:00 +03:00
parent 3f9bcbfebb
commit 418ad47c22
15 changed files with 678 additions and 137 deletions

View File

@@ -108,10 +108,10 @@ void modPowerElectronicsInit(modPowerElectronicsPackStateTypedef *packState, mod
modPowerElectronicsPackStateHandle->packInSOADischarge = true;
modPowerElectronicsPackStateHandle->watchDogTime = 255;
modPowerElectronicsPackStateHandle->packOperationalCellState = PACK_STATE_NORMAL;
modPowerElectronicsPackStateHandle->temperatures[0] = -50.0f;
modPowerElectronicsPackStateHandle->temperatures[1] = -50.0f;
modPowerElectronicsPackStateHandle->temperatures[2] = -50.0f;
modPowerElectronicsPackStateHandle->temperatures[3] = -50.0f;
// modPowerElectronicsPackStateHandle->temperatures[0] = 0.0f;
// modPowerElectronicsPackStateHandle->temperatures[1] = 0.0f;
// modPowerElectronicsPackStateHandle->temperatures[2] = 0.0f;
// modPowerElectronicsPackStateHandle->temperatures[3] = 0.0f;
modPowerElectronicsPackStateHandle->tempBatteryHigh = 0.0f;
modPowerElectronicsPackStateHandle->tempBatteryLow = 0.0f;
modPowerElectronicsPackStateHandle->tempBatteryAverage = 0.0f;
@@ -122,6 +122,11 @@ void modPowerElectronicsInit(modPowerElectronicsPackStateTypedef *packState, mod
modPowerElectronicsPackStateHandle->buzzerOn = false;
modPowerElectronicsPackStateHandle->powerDownDesired = false;
modPowerElectronicsPackStateHandle->powerOnLongButtonPress = false;
for (uint8_t tempPointer = 0; tempPointer < NoOfTempSensors; ++tempPointer)
{
modPowerElectronicsPackStateHandle->temperatures[tempPointer] = 0;
}
// init the cell module variables empty
for( uint8_t modulePointer = 0; modulePointer < NoOfCellMonitorsPossibleOnBMS; modulePointer++) {
@@ -592,30 +597,41 @@ void modPowerElectronicsCalcTempStats(void) {
// BMS temperatures
for(uint8_t sensorPointer = 1; sensorPointer < 16; sensorPointer++){
for(uint8_t sensorPointer = 0; sensorPointer < 16; sensorPointer++){
if(modPowerElectronicsGeneralConfigHandle->tempEnableMaskBMS & (1 << sensorPointer)){
modPowerElectronicsPackStateHandle->temperatures[sensorPointer] = modPowerElectronicsPackStateHandle->auxVoltagesIndividual[sensorPointer-1].auxVoltage;
}
}
for(uint8_t sensorPointer = 0; sensorPointer < 16; sensorPointer++){
// for(uint8_t sensorPointer = 0; sensorPointer < 16; sensorPointer++){
if(modPowerElectronicsGeneralConfigHandle->tempEnableMaskBMS & (1 << sensorPointer)){
if(modPowerElectronicsPackStateHandle->temperatures[sensorPointer] > tempBMSMax)
tempBMSMax = modPowerElectronicsPackStateHandle->temperatures[sensorPointer];
// if(modPowerElectronicsGeneralConfigHandle->tempEnableMaskBMS & (1 << sensorPointer)){
// if(modPowerElectronicsPackStateHandle->temperatures[sensorPointer] > tempBMSMax)
// tempBMSMax = modPowerElectronicsPackStateHandle->temperatures[sensorPointer];
if(modPowerElectronicsPackStateHandle->temperatures[sensorPointer] < tempBMSMin)
tempBMSMin = modPowerElectronicsPackStateHandle->temperatures[sensorPointer];
// if(modPowerElectronicsPackStateHandle->temperatures[sensorPointer] < tempBMSMin)
// tempBMSMin = modPowerElectronicsPackStateHandle->temperatures[sensorPointer];
tempBMSSum += modPowerElectronicsPackStateHandle->temperatures[sensorPointer];
tempBMSSumCount++;
}
}
// tempBMSSum += modPowerElectronicsPackStateHandle->temperatures[sensorPointer];
// tempBMSSumCount++;
// }
// }
// Battery temperatures statistics for LTC aux channels without taking into account the first slave board temp measurement
for(uint8_t sensorModulePointer = 0; sensorModulePointer < modPowerElectronicsGeneralConfigHandle->cellMonitorICCount; sensorModulePointer++) {
for(uint8_t sensorPointer = 0; sensorPointer < modPowerElectronicsGeneralConfigHandle->noOfTempSensorPerModule; sensorPointer++) {
if(modPowerElectronicsGeneralConfigHandle->tempEnableMaskBMS & (1 << sensorPointer)){
if(modPowerElectronicsPackStateHandle->temperatures[sensorPointer] > tempBMSMax)
tempBMSMax = modPowerElectronicsPackStateHandle->temperatures[sensorPointer];
if(modPowerElectronicsPackStateHandle->temperatures[sensorPointer] < tempBMSMin)
tempBMSMin = modPowerElectronicsPackStateHandle->temperatures[sensorPointer];
tempBMSSum += modPowerElectronicsPackStateHandle->temperatures[sensorPointer];
tempBMSSumCount++;
}
if(modPowerElectronicsGeneralConfigHandle->tempEnableMaskBattery & (1 << sensorPointer)){
if(modPowerElectronicsPackStateHandle->auxVoltagesIndividual[sensorPointer].auxVoltage > tempBatteryMax)
tempBatteryMax = modPowerElectronicsPackStateHandle->auxVoltagesIndividual[sensorPointer].auxVoltage;
@@ -921,8 +937,9 @@ void modPowerElectronicsCellMonitorsCheckConfigAndReadAnalogData(void){
// Read aux voltages
driverSWLTC6804ReadAuxVoltagesArray(modPowerElectronicsPackStateHandle->auxModuleVoltages,modPowerElectronicsGeneralConfigHandle->NTC25DegResistance[modConfigNTCGroupLTCExt],modPowerElectronicsGeneralConfigHandle->NTCTopResistor[modConfigNTCGroupLTCExt],modPowerElectronicsGeneralConfigHandle->NTCBetaFactor[modConfigNTCGroupLTCExt],25.0f);
modPowerElectronicsAuxMonitorsArrayTranslate();
//driverSWLTC6804ReadAuxSensors(modPowerElectronicsAuxVoltageArray);
//modPowerElectronicsPackStateHandle->temperatures[0] = modPowerElectronicsPackStateHandle->temperatures[1] = driverSWLTC6804ConvertTemperatureExt(modPowerElectronicsAuxVoltageArray[1],modPowerElectronicsGeneralConfigHandle->NTC25DegResistance[modConfigNTCGroupLTCExt],modPowerElectronicsGeneralConfigHandle->NTCTopResistor[modConfigNTCGroupLTCExt],modPowerElectronicsGeneralConfigHandle->NTCBetaFactor[modConfigNTCGroupLTCExt],25.0f);
// driverSWLTC6804ReadAuxSensors(modPowerElectronicsAuxVoltageArray);
// modPowerElectronicsPackStateHandle->temperatures[0] = modPowerElectronicsPackStateHandle->temperatures[1] = driverSWLTC6804ConvertTemperatureExt(modPowerElectronicsAuxVoltageArray[1],modPowerElectronicsGeneralConfigHandle->NTC25DegResistance[modConfigNTCGroupLTCExt],modPowerElectronicsGeneralConfigHandle->NTCTopResistor[modConfigNTCGroupLTCExt],modPowerElectronicsGeneralConfigHandle->NTCBetaFactor[modConfigNTCGroupLTCExt],25.0f);
//Read exp voltages
// driverSWADC128D818ReadExpVoltagesArray(modPowerElectronicsPackStateHandle->expModuleVoltages,modPowerElectronicsGeneralConfigHandle->NTC25DegResistance[modConfigNTCGroupExp],modPowerElectronicsGeneralConfigHandle->NTCTopResistor[modConfigNTCGroupExp],modPowerElectronicsGeneralConfigHandle->NTCBetaFactor[modConfigNTCGroupExp],25.0f);