Skip to content

Commit

Permalink
spi_temperature: Limit maximum temperature in MAX31865.calc_adc() to …
Browse files Browse the repository at this point in the history
…melting point of platinum (Klipper3d#6320)

Limit the maximum temperature in MAX31865.calc_adc() to the melting
point of platinum. Above this temperature the Callendar-Van Dusem
formula does not make sense. The default value for max_temp is
99999999.9 and at this temperature the result of this formula is
negative. This sets max_sample_value to 0 which causes the mcu
to shutdown.

Set max adc value to (1<<15)-1 .  This is needed because the max value of the adc register
of the MAX31865 is 0b1111 1111 1111 1110 which represents
32767 and not 32768.

Signed-off-by: David van 't Wout <[email protected]>
  • Loading branch information
DavidvtWout authored Sep 10, 2023
1 parent 2acfa28 commit 8ef0f7d
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion klippy/extras/spi_temperature.py
Original file line number Diff line number Diff line change
Expand Up @@ -320,9 +320,10 @@ def calc_temp(self, adc):
def calc_adc(self, temp):
# Calculate relative resistance via Callendar-Van Dusen formula:
# resistance = rtd_nominal_r * (1 + CVD_A * temp + CVD_B * temp**2)
temp = min(temp, 1768.3) # Melting point of platinum
R_div_nominal = 1. + CVD_A * temp + CVD_B * temp * temp
adc = int(R_div_nominal / self.adc_to_resist_div_nominal + 0.5)
adc = max(0, min(MAX31865_ADC_MAX, adc))
adc = max(0, min(MAX31865_ADC_MAX - 1, adc))
adc = adc << 1 # Add fault bit
return adc
def build_spi_init(self, config):
Expand Down

0 comments on commit 8ef0f7d

Please sign in to comment.