Skip to content

Commit

Permalink
sampling, heater: fix Battery vs Heater naming mess
Browse files Browse the repository at this point in the history
  • Loading branch information
dron0gus authored and rusefillc committed Nov 20, 2023
1 parent 49c08f6 commit a102390
Show file tree
Hide file tree
Showing 9 changed files with 27 additions and 20 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) * 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) * NERNST_INPUT_GAIN,
.PumpCurrentVoltage = AverageSamples(adcBuffer, 2),
.BatteryVoltage = l_heater_voltage,
.HeaterSupplyVoltage = l_heater_voltage,
},
{
/* right */
.NernstVoltage = AverageSamples(adcBuffer, 1) * 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
16 changes: 8 additions & 8 deletions firmware/heater_control.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,22 +37,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 @@ -176,12 +176,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
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 11 volts
Expand All @@ -190,7 +190,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 @@ -203,7 +203,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
2 changes: 1 addition & 1 deletion firmware/sampling.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ void Sampler::ApplySample(AnalogChannelResult& result, float virtualGroundVoltag
PUMP_FILTER_ALPHA * (result.PumpCurrentVoltage - virtualGroundVoltageInt);

#ifdef BATTERY_INPUT_DIVIDER
internalHeaterVoltage = result.HeaterVoltage;
internalHeaterVoltage = result.HeaterSupplyVoltage;
#endif

// Shift history over by one
Expand Down

0 comments on commit a102390

Please sign in to comment.