void ProgramData::changedType() { battery.Vc_per_cell = getDefaultVoltagePerCell(VCharged); battery.Vd_per_cell = getDefaultVoltagePerCell(VDischarged); if(battery.type == NoneBatteryType) { battery.capacity = ANALOG_CHARGE(2.000); battery.cells = 3; battery.time = ANALOG_MAX_TIME_LIMIT; battery.enable_externT = false; battery.externTCO = ANALOG_CELCIUS(60); battery.enable_adaptiveDischarge = false; battery.DCRestTime = 30; battery.capCutoff = 120; } if(isNiXX()) { battery.enable_deltaV = true; if(battery.type == NiMH) { battery.deltaV = -ANALOG_VOLT(0.005); } else { battery.deltaV = -ANALOG_VOLT(0.015); } battery.deltaVIgnoreTime = 3; battery.deltaT = ANALOG_CELCIUS(1); battery.DCcycles = 5; } else { battery.balancerError = ANALOG_VOLT(0.008); battery.Vs_per_cell = getDefaultVoltagePerCell(VStorage); } changedCapacity(); }
uint16_t ProgramData::getMaxCells() { if(battery.type == Unknown || battery.type == LED) return 1; uint16_t v = getDefaultVoltagePerCell(VCharged); return MAX_CHARGE_V / v; }
uint16_t ProgramData::getDefaultVoltage(VoltageType type) { uint16_t cells = battery.cells; uint16_t voltage = getDefaultVoltagePerCell(type); if(type == VDischarged && battery.type == NiMH && cells > 6) { //based on http://eu.industrial.panasonic.com/sites/default/pidseu/files/downloads/files/ni-mh-handbook-2014_interactive.pdf //page 11: "Discharge end voltage" cells--; voltage = ANALOG_VOLT(1.200); } return cells * voltage; }
uint16_t ProgramData::getVoltage(VoltageType type) { uint16_t cells = battery.cells; uint16_t voltage = getDefaultVoltagePerCell(type); if (type == VCharged) { voltage = battery.Vc_per_cell; } else if (type == VDischarged) { voltage = battery.Vd_per_cell; } else if (type == VStorage) { voltage = battery.Vs_per_cell; } //TODO:type == VDischarge && battery.type == NiMH && cells > 6 //see getDefaultVoltage return cells * voltage; }