Underheat issue (#314)

* f0_module needs hack to start pump before closed loop

* Fix paranoid check

* Make START_PUMP_TEMP_THRESHOLD relative
This commit is contained in:
Andrey G 2024-06-26 09:37:51 +03:00 committed by GitHub
parent 63b77f723e
commit e70df58290
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 20 additions and 1 deletions

View File

@ -17,3 +17,9 @@
// Nernst voltage & ESR sense // Nernst voltage & ESR sense
// ******************************* // *******************************
#define VM_RESISTOR_VALUE (10) #define VM_RESISTOR_VALUE (10)
// *******************************
// Hack: allow pump driving above target temperature
// minus this offset to avoid Vnerns voltage clamp near 0V
// *******************************
#define START_PUMP_TEMP_OFFSET (200.0)

View File

@ -27,6 +27,11 @@ bool HeaterControllerBase::IsRunningClosedLoop() const
return heaterState == HeaterState::ClosedLoop; return heaterState == HeaterState::ClosedLoop;
} }
float HeaterControllerBase::GetTargetTemp() const
{
return m_targetTempC;
}
float HeaterControllerBase::GetHeaterEffectiveVoltage() const float HeaterControllerBase::GetHeaterEffectiveVoltage() const
{ {
return heaterVoltage; return heaterVoltage;

View File

@ -25,6 +25,7 @@ struct IHeaterController
virtual bool IsRunningClosedLoop() const = 0; virtual bool IsRunningClosedLoop() const = 0;
virtual float GetHeaterEffectiveVoltage() const = 0; virtual float GetHeaterEffectiveVoltage() const = 0;
virtual HeaterState GetHeaterState() const = 0; virtual HeaterState GetHeaterState() const = 0;
virtual float GetTargetTemp() const = 0;
}; };
class HeaterControllerBase : public IHeaterController class HeaterControllerBase : public IHeaterController
@ -37,6 +38,7 @@ public:
bool IsRunningClosedLoop() const override; bool IsRunningClosedLoop() const override;
float GetHeaterEffectiveVoltage() const override; float GetHeaterEffectiveVoltage() const override;
HeaterState GetHeaterState() const override; HeaterState GetHeaterState() const override;
float GetTargetTemp() const override;
virtual void SetDuty(float duty) const = 0; virtual void SetDuty(float duty) const = 0;

View File

@ -38,7 +38,11 @@ static void PumpThread(void*)
const auto& heater = GetHeaterController(ch); const auto& heater = GetHeaterController(ch);
// Only actuate pump when running closed loop! // Only actuate pump when running closed loop!
if (heater.IsRunningClosedLoop()) if (heater.IsRunningClosedLoop() ||
#ifdef START_PUMP_TEMP_OFFSET
(sampler.GetSensorTemperature() >= heater.GetTargetTemp() - START_PUMP_TEMP_OFFSET) ||
#endif
(0))
{ {
float nernstVoltage = sampler.GetNernstDc(); float nernstVoltage = sampler.GetNernstDc();

View File

@ -90,11 +90,13 @@ void InitPumpDac()
void SetPumpCurrentTarget(int ch, int32_t microampere) void SetPumpCurrentTarget(int ch, int32_t microampere)
{ {
#ifndef START_PUMP_TEMP_OFFSET
// Don't allow pump current when the sensor isn't hot // Don't allow pump current when the sensor isn't hot
if (!GetHeaterController(ch).IsRunningClosedLoop()) if (!GetHeaterController(ch).IsRunningClosedLoop())
{ {
microampere = 0; microampere = 0;
} }
#endif
state[ch].curIpump = microampere; state[ch].curIpump = microampere;