diff --git a/doc/source/firmware/pt1000-processing.rst b/doc/source/firmware/pt1000-processing.rst index 492d232..cfd9e50 100644 --- a/doc/source/firmware/pt1000-processing.rst +++ b/doc/source/firmware/pt1000-processing.rst @@ -132,7 +132,7 @@ and .. doxygenfunction:: adc_pt1000_get_resistance_calibration :outline: -are used to set the reistance calibration internally. For a guide on how to calibrate the deivce, see the corresponding :ref:`usage_calibration` usage page. +are used to set the resistance calibration internally. For a guide on how to calibrate the deivce, see the corresponding :ref:`usage_calibration` usage page. The calibration is calculated the following way: @@ -147,13 +147,13 @@ The calibration is calculated the following way: OFFSET [label="Offset", description="Offset Correction :math:`O`"]; OUT [shape=endpoint, description="Corrected Value"]; - LF -> SENS -> OFFSET -> OUT + LF -> OFFSET -> SENS -> OUT } The final calibrated PT1000 resistance is calculated as: .. math:: - R_{PT1000_{corr}} = R_{PT1000_{LF}} \cdot (1 + \sigma) + O + R_{PT1000_{corr}} = (R_{PT1000_{LF}} - O) \cdot (1 + \sigma) The default values, if no calibration is loaded / executed, are: diff --git a/stm-firmware/.gitignore b/stm-firmware/.gitignore index cfdd888..1e70134 100644 --- a/stm-firmware/.gitignore +++ b/stm-firmware/.gitignore @@ -14,3 +14,4 @@ reflow-controller.includes *.includes *.config *.files +*.user.* diff --git a/stm-firmware/adc-meas.c b/stm-firmware/adc-meas.c index 4a9f0e3..816b993 100644 --- a/stm-firmware/adc-meas.c +++ b/stm-firmware/adc-meas.c @@ -216,7 +216,7 @@ void adc_pt1000_get_resistance_calibration(float *offset, float *sensitivity_dev static inline float adc_pt1000_apply_calibration(float raw_resistance) { if (calibration_active) - return pt1000_res_raw_lf * (1.0f + pt1000_sens_dev) + pt1000_offset; + return (raw_resistance - pt1000_offset) * (1.0f + pt1000_sens_dev); else return raw_resistance; diff --git a/stm-firmware/calibration.c b/stm-firmware/calibration.c index 81dd815..35f3509 100644 --- a/stm-firmware/calibration.c +++ b/stm-firmware/calibration.c @@ -30,9 +30,9 @@ enum calibration_shell_state {CAL_START = 0, CAL_WAIT_RES1, CAL_MEAS_RES1, CAL_WAIT_RES2, CAL_MEAS_RES2}; void calibration_calculate(float low_measured, float low_setpoint, float high_measured, float high_setpoint, - float *sens_deviation, float *sens_corrected_offset) + float *sens_deviation, float *offset) { - if (!sens_deviation || !sens_corrected_offset) + if (!sens_deviation || !offset) return; float delta_y; @@ -45,7 +45,7 @@ void calibration_calculate(float low_measured, float low_setpoint, float high_me sens_corr_mult = delta_x / delta_y; *sens_deviation = sens_corr_mult - 1.0f; - *sens_corrected_offset = low_setpoint - low_measured * sens_corr_mult; + *offset = (high_setpoint * low_measured - low_setpoint * high_measured) / (high_setpoint - low_setpoint); } diff --git a/stm-firmware/include/reflow-controller/calibration.h b/stm-firmware/include/reflow-controller/calibration.h index cb7fd2e..78ab5f3 100644 --- a/stm-firmware/include/reflow-controller/calibration.h +++ b/stm-firmware/include/reflow-controller/calibration.h @@ -27,7 +27,7 @@ #include void calibration_calculate(float low_measured, float low_setpoint, float high_measured, float high_setpoint, - float *sens_deviation, float *sens_corrected_offset); + float *sens_deviation, float *offset); float *calibration_acquire_data_start(uint32_t count, volatile int *flag);