2020-10-27 16:33:32 -07:00
|
|
|
#include "pump_dac.h"
|
|
|
|
#include "pwm.h"
|
2020-10-31 14:54:50 -07:00
|
|
|
#include "heater_control.h"
|
2020-10-27 16:33:32 -07:00
|
|
|
|
2020-10-30 02:03:12 -07:00
|
|
|
#include "wideband_config.h"
|
|
|
|
|
2020-10-27 16:33:32 -07:00
|
|
|
#include "hal.h"
|
|
|
|
|
|
|
|
// 48MHz / 1024 = 46.8khz PWM
|
|
|
|
static Pwm pumpDac(PWMD3, 0, 48'000'000, 1024);
|
|
|
|
|
|
|
|
void InitPumpDac()
|
|
|
|
{
|
|
|
|
pumpDac.Start();
|
|
|
|
|
|
|
|
// Set zero current to start - sensor can be damaged if current flowing
|
|
|
|
// while warming up
|
|
|
|
SetPumpCurrentTarget(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetPumpCurrentTarget(int32_t microampere)
|
|
|
|
{
|
2020-10-31 14:54:50 -07:00
|
|
|
// Don't allow pump current when the sensor isn't hot
|
|
|
|
if (!IsRunningClosedLoop())
|
|
|
|
{
|
|
|
|
microampere = 0;
|
|
|
|
}
|
|
|
|
|
2020-10-27 16:33:32 -07:00
|
|
|
// 47 ohm resistor
|
|
|
|
// 0.147 gain
|
|
|
|
// effective resistance of 317 ohms
|
2020-10-31 14:54:50 -07:00
|
|
|
float volts = -0.000321162f * microampere;
|
2020-10-27 16:33:32 -07:00
|
|
|
|
2020-10-30 02:03:12 -07:00
|
|
|
// offset by half vcc
|
|
|
|
volts += HALF_VCC;
|
2020-10-27 16:33:32 -07:00
|
|
|
|
2020-10-30 02:03:12 -07:00
|
|
|
pumpDac.SetDuty(volts / VCC_VOLTS);
|
2020-10-27 16:33:32 -07:00
|
|
|
}
|