Index: firmware/App/Drivers/ConductivitySensors.c =================================================================== diff -u -r3b64586791accd0b9e8d8978b40e2509bb86dfbe -r05cb5bf2a80c40d4c08e22abc46f3b074690eaf0 --- firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 3b64586791accd0b9e8d8978b40e2509bb86dfbe) +++ firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 05cb5bf2a80c40d4c08e22abc46f3b074690eaf0) @@ -56,6 +56,11 @@ #define COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Conductivity sensors FPGA error timeout in milliseconds. #define COND_SENSORS_READ_ERR_MAX_CNT 255 ///< Conductivity sensors read and error count max value. +#define COND_TEMP_COMP_LOW_BOUNDS 0 +#define COND_TEMP_COMP_HIGH_BOUNDS 0 +#define TEMP_COMP_ALPHA_LOW 0 +#define TEMP_COMP_ALPHA_HIGH 0 +#define TEMP_COMP_ALPHA_MED 0 #define COND_TEMP_OFFSET 25 ///< Temperature offset constant used in RTD calculations. #define SIEMENS_TO_MICROSIEMENS_CONVERSION 1000000.0F ///< Siemens to microSiemens conversion factor. #define KOHMS_TO_OHMS 1000.0F ///< Kilo ohms to ohms conversion factor. @@ -112,6 +117,7 @@ static BOOL monitorCalDataReads( CONDUCTIVITY_SENSORS_T sensorId ); static BOOL checkConductivityCoefficientRanges( CONDUCTIVITY_SENSORS_T sensorId ); static void calculateConductivityUpdatedStandard( CONDUCTIVITY_SENSORS_T sensorNum, BOOL isFPSensor ); +static void calculateConductivityUpdatedStandardTempCompensated( CONDUCTIVITY_SENSORS_T sensorNum, BOOL isFPSensor ) static void calculateTemperature( CONDUCTIVITY_SENSORS_T sensorNum ); static void calculateResistance( CONDUCTIVITY_SENSORS_T sensorNum, BOOL isFPSensor ); @@ -988,6 +994,54 @@ /*********************************************************************//** * @brief + * The calculateConductivityUpdatedStandard function calculates the conductivity value. + * @details \b Inputs: conductivitySensorCoefficients - Conductivity Coefficients + * @details \b Inputs: conductivitySensorStatus - Raw measurement values + * @details \b Outputs: conductivitySensorStatus - calculated conductivity value + * @param sensorNum - Conductivity sensor index value. + * @param isFPSensor - T/F if sensor is on FP hardware. + * @return + *************************************************************************/ +static void calculateConductivityUpdatedStandardTempCompensated( CONDUCTIVITY_SENSORS_T sensorNum, BOOL isFPSensor ) +{ + + /* + * Each conductivity sensor is paired with a temperature sensor to provide temperature-compensated conductivity + * measurements for more accurate conductivity measurements (D17+D16, D74+D75, D27+D28, D29+D30, D43+D44). + * The formula for temperature compensated conductivity at 25°C, + * E_25 = Uncompensated conductivity / (1 + temp compensation factor * (measured temp - 25)). + * The temperature compensation factor, α, depends on the solution that is being measured. There are 3 temperature compensation factors, to be used: + * For dialysate conductivity measurements (D27, D29, D43): α = 2.00 to 2.13% between 25-42°C, 2.00% below 25°C, and 2.13% above 42°C + * For bicarbonate + water (D17, D74) conductivity measurements: α = 2.11 to 2.28% between 25-42°C + * For inlet tap water and RO permeate water (P9, P18) conductivity measurements (IOFP): α = 2.00% + */ + F64 calculatedConductivity = 0.0; + F64 alpha = 0.0; + F64 k = 0.0; + + conductivitySensorStatus[ sensorNum ].calculatedTemperature + + if ( < ) + if ( TRUE == isFPSensor ) + { + alpha = conductivitySensorCoefficients[ sensorNum ].alpha_low; + k = conductivitySensorCoefficients[ sensorNum ].K_low; + } + else + { + alpha = conductivitySensorCoefficients[ sensorNum ].alpha_high; + k = conductivitySensorCoefficients[ sensorNum ].K_high; + } + calculateResistance( sensorNum, isFPSensor ); + calculateTemperature( sensorNum ); + + calculatedConductivity = ( ( k / conductivitySensorStatus[ sensorNum ].calculatedResistance ) * + ( 1 + ( alpha * ( COND_TEMP_OFFSET - conductivitySensorStatus[ sensorNum ].calculatedTemperature ) ) ) ); + currentConductivityReadings[ sensorNum ].data = calculatedConductivity * SIEMENS_TO_MICROSIEMENS_CONVERSION; +} + +/*********************************************************************//** + * @brief * The calculateResistance function calculates the temperature values. * @details \b Inputs: conductivitySensorCoefficients - Conductivity Coefficients * @details \b Inputs: conductivitySensorStatus - Raw measurement values