コード例 #1
0
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();

}
コード例 #2
0
uint16_t ProgramData::getMaxCells()
{
    if(battery.type == Unknown || battery.type == LED)
        return 1;
    uint16_t v = getDefaultVoltagePerCell(VCharged);
    return MAX_CHARGE_V / v;
}
コード例 #3
0
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;
}
コード例 #4
0
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;
}