AnalogInputs::ValueType TheveninMethod::calculateNewValue(bool isEndVout, AnalogInputs::ValueType oldValue)
{

    calculateRthVth(oldValue);
    storeOldValue(oldValue);
	
/*     AnalogInputs::ValueType Verr = 0;
	AnalogInputs::ValueType Vend_per_cell = Balancer::calculatePerCell(Vend_);
  	for(uint8_t i = 0; i < cells_; i++) {
		int16_t error = Balancer::getV(i);
		if(!IO::digitalRead(SMPS_DISABLE_PIN)) {
			error -= Vend_per_cell;
		}
		else {
			error = Vend_per_cell - error;
		}
		if (error > 0) Verr += error;	
	}
	if(Verr > 1) Vcell_err+= Verr;
	else if(Vcell_err)  Vcell_err -= 2;

	if(!IO::digitalRead(SMPS_DISABLE_PIN)) {
	//	if(isEndVout && balance_) {
	//		Balancer::endBalancing();
	//		Balancer::done_ = false;
	//	}

    return Vend_ - Vcell_err;
	}
	else return Vend_ + Vcell_err;
 */
    return Vend_;
}
Ejemplo n.º 2
0
AnalogInputs::ValueType TheveninMethod::calculateNewValue(bool isEndVout, AnalogInputs::ValueType oldValue)
{
    AnalogInputs::ValueType i;

    calculateRthVth(oldValue);
    storeOldValue(oldValue);

    i = calculateI();
    idebug_ = i;
    i = normalizeI(i, oldValue);

    //test if maximum output voltage reached
    switch(Ifalling_) {
    case NotFalling:
        if(!isEndVout)
            break;
        if(balance_) {
            Balancer::endBalancing();
            Balancer::done_ = false;
        }
        Ifalling_ = LastRthMesurment;
        //temporarily turn off
        i = 0;
        break;
    default:
        Ifalling_ = Falling;
        break;
    }
    return i;
}
Ejemplo n.º 3
0
AnalogInputs::ValueType TheveninMethod::normalizeI(AnalogInputs::ValueType value, AnalogInputs::ValueType oldValue)
{
    valueTh_ = value;
    if(value > maxValue_) {
        value = maxValue_;
    }
    if(value < minValue_) {
        value = minValue_;
    }

    if((oldValue != value && Ifalling_ != Falling) ||
            oldValue > value) {

        storeOldValue(oldValue);
        return value;
    }
    return oldValue;
}
Ejemplo n.º 4
0
AnalogInputs::ValueType TheveninMethod::calculateNewValue(bool isEndVout, AnalogInputs::ValueType oldValue)
{
    AnalogInputs::ValueType i;

    //test for maximum output voltage reached
    if(isEndVout) {
        switch(Ifalling_) {
        case NotFalling:
            Ifalling_ = LastRthMesurment;
            //temporarily turn off
            storeOldValue(oldValue);
            return 0;
        default:
            Ifalling_ = Falling;
            break;
        }
    }

    calculateRthVth(oldValue);
    i = calculateI();
    return normalizeI(i, oldValue);
}