Skip to content

Commit

Permalink
suggestion to improve naming (#294)
Browse files Browse the repository at this point in the history
* Rename GetInternalBatteryVoltage() to GetInternalHeaterVoltage()

* sampling, heater: fix Battery vs Heater naming mess

---------

Co-authored-by: Andrey Gusakov <[email protected]>
  • Loading branch information
rusefillc and dron0gus committed Jun 26, 2024
1 parent 867082f commit d8e65a2
Show file tree
Hide file tree
Showing 11 changed files with 34 additions and 28 deletions.
2 changes: 1 addition & 1 deletion firmware/boards/f0_module/port.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ AnalogResult AnalogSample()
{
.NernstVoltage = AverageSamples(adcBuffer, 0) * (1.0 / NERNST_INPUT_GAIN),
.PumpCurrentVoltage = AverageSamples(adcBuffer, 1),
.BatteryVoltage = 0,
.HeaterSupplyVoltage = 0,
},
},
.VirtualGroundVoltageInt = AverageSamples(adcBuffer, 2),
Expand Down
4 changes: 2 additions & 2 deletions firmware/boards/f1_dual/port.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -111,13 +111,13 @@ AnalogResult AnalogSample()
/* left */
.NernstVoltage = AverageSamples(adcBuffer, 3) * (1.0 / NERNST_INPUT_GAIN),
.PumpCurrentVoltage = AverageSamples(adcBuffer, 2),
.BatteryVoltage = l_heater_voltage,
.HeaterSupplyVoltage = l_heater_voltage,
},
{
/* right */
.NernstVoltage = AverageSamples(adcBuffer, 1) * (1.0 / NERNST_INPUT_GAIN),
.PumpCurrentVoltage = AverageSamples(adcBuffer, 0),
.BatteryVoltage = r_heater_voltage,
.HeaterSupplyVoltage = r_heater_voltage,
},
},
/* Dual board has separate internal virtual ground = 3.3V / 2
Expand Down
4 changes: 2 additions & 2 deletions firmware/boards/f1_dual_rev1/port.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -135,10 +135,10 @@ AnalogResult AnalogSample()
}
/* left */
res.ch[0].PumpCurrentVoltage = AverageSamples(adcBuffer, 2);
res.ch[0].BatteryVoltage = l_heater_voltage;
res.ch[0].HeaterSupplyVoltage = l_heater_voltage;
/* right */
res.ch[1].PumpCurrentVoltage = AverageSamples(adcBuffer, 0);
res.ch[1].BatteryVoltage = r_heater_voltage;
res.ch[1].HeaterSupplyVoltage = r_heater_voltage;

return res;
}
Expand Down
7 changes: 5 additions & 2 deletions firmware/boards/f1_rev2/port.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,11 @@ AnalogResult AnalogSample()
.PumpCurrentVoltage = AverageSamples(adcBuffer, 1),
/* We also can measure output virtual ground voltage for diagnostic purposes */
//.VirtualGroundVoltageExt = AverageSamples(adcBuffer, 0) / VM_INPUT_DIVIDER,
.BatteryVoltage = AverageSamples(adcBuffer, 3) / BATTERY_INPUT_DIVIDER,
/* .HeaterVoltage = AverageSamples(adcBuffer, 4) / HEATER_INPUT_DIVIDER, */
/* Heater measurement circuit has incorrect RC filter making inposible accurate
* measurement when heater pwm has high duty
* Assume WBO supply voltage == heater supply voltage */
.HeaterSupplyVoltage = AverageSamples(adcBuffer, 3) / BATTERY_INPUT_DIVIDER,
/* .HeaterSupplyVoltage = AverageSamples(adcBuffer, 4) / HEATER_INPUT_DIVIDER, */
},
},
/* Rev 2 board has separate internal virtual ground = 3.3V / 2
Expand Down
7 changes: 5 additions & 2 deletions firmware/boards/f1_rev3/port.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,11 @@ AnalogResult AnalogSample()
.PumpCurrentVoltage = AverageSamples(adcBuffer, 1),
/* We also can measure output virtual ground voltage for diagnostic purposes */
//.VirtualGroundVoltageExt = AverageSamples(adcBuffer, 0) / VM_INPUT_DIVIDER,
.BatteryVoltage = AverageSamples(adcBuffer, 3) / BATTERY_INPUT_DIVIDER,
/* .HeaterVoltage = AverageSamples(adcBuffer, 4) / HEATER_INPUT_DIVIDER, */
/* Heater measurement circuit has incorrect RC filter making inposible accurate
* measurement when heater pwm has high duty
* Assume WBO supply voltage == heater supply voltage */
.HeaterSupplyVoltage = AverageSamples(adcBuffer, 3) / BATTERY_INPUT_DIVIDER,
/* .HeaterSupplyVoltage = AverageSamples(adcBuffer, 4) / HEATER_INPUT_DIVIDER, */
},
},
/* Rev 2 board has separate internal virtual ground = 3.3V / 2
Expand Down
3 changes: 2 additions & 1 deletion firmware/boards/port.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,14 @@ struct AnalogChannelResult
float PumpCurrentVoltage;
/* for dual version - this is voltage on Heater-, switches between zero and Vbatt with heater PWM,
* used for both Vbatt measurement and Heater diagnostic */
float BatteryVoltage;
float HeaterSupplyVoltage;
};

struct AnalogResult
{
AnalogChannelResult ch[AFR_CHANNELS];
float VirtualGroundVoltageInt;
/* TODO: add SupplyVoltage - some boards can measure supply voltage */
};

AnalogResult AnalogSample();
Expand Down
18 changes: 9 additions & 9 deletions firmware/heater_control.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,22 +42,22 @@ HeaterState HeaterControllerBase::GetHeaterState() const
return heaterState;
}

HeaterState HeaterControllerBase::GetNextState(HeaterState currentState, HeaterAllow heaterAllowState, float batteryVoltage, float sensorTemp)
HeaterState HeaterControllerBase::GetNextState(HeaterState currentState, HeaterAllow heaterAllowState, float heaterSupplyVoltage, float sensorTemp)
{
bool heaterAllowed = heaterAllowState == HeaterAllow::Allowed;

// Check battery voltage for thresholds only if there is still no command over CAN
if (heaterAllowState == HeaterAllow::Unknown)
{
// measured voltage too low to auto-start heating
if (batteryVoltage < HEATER_BATTETY_OFF_VOLTAGE)
if (heaterSupplyVoltage < HEATER_BATTETY_OFF_VOLTAGE)
{
m_batteryStableTimer.reset();
return HeaterState::NoHeaterSupply;
}
else if (batteryVoltage > HEATER_BATTERY_ON_VOLTAGE)
else if (heaterSupplyVoltage > HEATER_BATTERY_ON_VOLTAGE)
{
// measured voltage is high enougth to auto-start heating, wait some time to stabilize
// measured voltage is high enough to auto-start heating, wait some time to stabilize
heaterAllowed = m_batteryStableTimer.hasElapsedSec(HEATER_BATTERY_STAB_TIME);
}
}
Expand Down Expand Up @@ -181,12 +181,12 @@ void HeaterControllerBase::Update(const ISampler& sampler, HeaterAllow heaterAll

// If we haven't heard from the ECU, use the internally sensed
// battery voltage instead of voltage over CAN.
float batteryVoltage = heaterAllowState == HeaterAllow::Unknown
? sampler.GetInternalBatteryVoltage()
float heaterSupplyVoltage = heaterAllowState == HeaterAllow::Unknown
? sampler.GetInternalHeaterVoltage()
: GetRemoteBatteryVoltage();

// Run the state machine
heaterState = GetNextState(heaterState, heaterAllowState, batteryVoltage, sensorTemperature);
heaterState = GetNextState(heaterState, heaterAllowState, heaterSupplyVoltage, sensorTemperature);
float heaterVoltage = GetVoltageForState(heaterState, sensorEsr);

// Limit to 12 volts
Expand All @@ -195,7 +195,7 @@ void HeaterControllerBase::Update(const ISampler& sampler, HeaterAllow heaterAll
}

// duty = (V_eff / V_batt) ^ 2
float voltageRatio = (batteryVoltage < 1.0f) ? 0 : heaterVoltage / batteryVoltage;
float voltageRatio = (heaterSupplyVoltage < 1.0f) ? 0 : heaterVoltage / heaterSupplyVoltage;
float duty = voltageRatio * voltageRatio;

#ifdef HEATER_MAX_DUTY
Expand All @@ -208,7 +208,7 @@ void HeaterControllerBase::Update(const ISampler& sampler, HeaterAllow heaterAll
}
#endif

if (batteryVoltage >= 23)
if (heaterSupplyVoltage >= 23)
{
duty = 0;
heaterVoltage = 0;
Expand Down
2 changes: 1 addition & 1 deletion firmware/livedata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ void SamplingUpdateLiveData()
data->heaterState = (uint8_t)GetHeaterState(ch);
}

livedata_common.vbatt = GetSampler(0).GetInternalBatteryVoltage();
livedata_common.vbatt = GetSampler(0).GetInternalHeaterVoltage();
}

template<>
Expand Down
7 changes: 3 additions & 4 deletions firmware/sampling.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,12 @@ float Sampler::GetPumpNominalCurrent() const
return pumpCurrentSenseVoltage * ratio;
}

float Sampler::GetInternalBatteryVoltage() const
float Sampler::GetInternalHeaterVoltage() const
{
#ifdef BATTERY_INPUT_DIVIDER
// Dual HW can measure heater voltage for each channel
// by measuring voltage on Heater- while FET is off
// TODO: rename function?
return internalBatteryVoltage;
return internalHeaterVoltage;
#else
// After 5 seconds, pretend that we get battery voltage.
// This makes the controller usable without CAN control
Expand Down Expand Up @@ -116,7 +115,7 @@ void Sampler::ApplySample(AnalogChannelResult& result, float virtualGroundVoltag
PUMP_FILTER_ALPHA * (result.PumpCurrentVoltage - virtualGroundVoltageInt);

#ifdef BATTERY_INPUT_DIVIDER
internalBatteryVoltage = result.BatteryVoltage;
internalHeaterVoltage = result.HeaterSupplyVoltage;
#endif

// Shift history over by one
Expand Down
6 changes: 3 additions & 3 deletions firmware/sampling.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ struct ISampler
virtual float GetNernstDc() const = 0;
virtual float GetNernstAc() const = 0;
virtual float GetPumpNominalCurrent() const = 0;
virtual float GetInternalBatteryVoltage() const = 0;
virtual float GetInternalHeaterVoltage() const = 0;
virtual float GetSensorTemperature() const = 0;
virtual float GetSensorInternalResistance() const = 0;
};
Expand All @@ -25,7 +25,7 @@ class Sampler : public ISampler
float GetNernstDc() const override;
float GetNernstAc() const override;
float GetPumpNominalCurrent() const override;
float GetInternalBatteryVoltage() const override;
float GetInternalHeaterVoltage() const override;
float GetSensorTemperature() const override;
float GetSensorInternalResistance() const override;

Expand All @@ -38,7 +38,7 @@ class Sampler : public ISampler
float pumpCurrentSenseVoltage = 0;

#ifdef BATTERY_INPUT_DIVIDER
float internalBatteryVoltage = 0;
float internalHeaterVoltage = 0;
#endif

Timer m_startupTimer;
Expand Down
2 changes: 1 addition & 1 deletion firmware/uart.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ static void UartThread(void*)
float lambda = GetLambda(ch);
int lambdaIntPart = lambda;
int lambdaThousandths = (lambda - lambdaIntPart) * 1000;
int batteryVoltageMv = GetSampler(ch).GetInternalBatteryVoltage() * 1000;
int batteryVoltageMv = GetSampler(ch).GetInternalHeaterVoltage() * 1000;
int duty = GetHeaterDuty(ch) * 100;

size_t writeCount = chsnprintf(printBuffer, 200,
Expand Down

0 comments on commit d8e65a2

Please sign in to comment.