Index: firmware/App/Drivers/ConductivitySensors.c =================================================================== diff -u -r1d9be2f5baf7d1416ef8a79c2ed93a279738f97a -r6bccc0b74d3d04fd702709aec11632cacdc5b98e --- firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 1d9be2f5baf7d1416ef8a79c2ed93a279738f97a) +++ firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 6bccc0b74d3d04fd702709aec11632cacdc5b98e) @@ -67,7 +67,7 @@ #define BICARB_SENSORS_ALPHA_LOW 0.0211F ///< Temp compensated low alpha value for D17 and D74. #define BICARB_SENSORS_ALPHA_HIGH 0.0228F ///< Temp compensated high alpha value for D17 and D74. #define RO_SENSORS_ALPHA 0.02F ///< Temp compensated alpha value for P9, P18 with RO water. -#define TEMP_COMP_LINEAR(slope, intercept, temp) ( ( slope * temp ) + intercept ) ///< Line equation for temp +#define TEMP_COMP_LINEAR(slope, intercept, temp) ( ( slope * temp ) + intercept ) ///< Line equation for temp #define COND_TEMP_OFFSET 25 ///< Temperature offset constant used in RTD calculations. #define SIEMENS_TO_MICROSIEMENS_CONVERSION 1000000.0F ///< Siemens to microSiemens conversion factor. @@ -126,6 +126,7 @@ static U32 getTemperatureSensorErrorCount( CONDUCTIVITY_SENSORS_T sensor ); 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 ); @@ -557,6 +558,7 @@ { isFPSensor = TRUE; } + calculateConductivityUpdatedStandard( sensor, isFPSensor ); calculateConductivityUpdatedStandardTempCompensated( sensor, isFPSensor ); } @@ -1002,6 +1004,40 @@ /*********************************************************************//** * @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 calculateConductivityUpdatedStandard( CONDUCTIVITY_SENSORS_T sensorNum, BOOL isFPSensor ) +{ + F64 calculatedConductivity = 0.0; + F64 alpha = 0.0; + F64 k = 0.0; + + 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 calculateConductivityUpdatedStandardTempCompensated function calculates the conductivity value with temperature compensation. * @details \b Inputs: conductivitySensorCoefficients - Conductivity Coefficients * @details \b Inputs: conductivitySensorStatus - Raw measurement values @@ -1033,23 +1069,22 @@ { conductivitySensorStatus[ sensorNum ].currentAlphaValue = BICARB_SENSORS_ALPHA_LOW; } - else if( conductivitySensorStatus[ sensorNum ].calculatedTemperature > COND_TEMP_COMP_LOW_BOUNDS ) + else if ( conductivitySensorStatus[ sensorNum ].calculatedTemperature > COND_TEMP_COMP_LOW_BOUNDS ) { conductivitySensorStatus[ sensorNum ].currentAlphaValue = BICARB_SENSORS_ALPHA_HIGH; } else { conductivitySensorStatus[ sensorNum ].currentAlphaValue = TEMP_COMP_LINEAR( BICARB_SENSORS_ALPHA_SLOPE, BICARB_SENSORS_ALPHA_INTERCEPT, conductivitySensorStatus[ sensorNum ].calculatedTemperature ); } - break; default: // check temp range and apply alpha if ( conductivitySensorStatus[ sensorNum ].calculatedTemperature < COND_TEMP_COMP_LOW_BOUNDS ) { conductivitySensorStatus[ sensorNum ].currentAlphaValue = DIALYSATE_SENSORS_ALPHA_LOW; } - else if( conductivitySensorStatus[ sensorNum ].calculatedTemperature > COND_TEMP_COMP_LOW_BOUNDS ) + else if ( conductivitySensorStatus[ sensorNum ].calculatedTemperature > COND_TEMP_COMP_LOW_BOUNDS ) { conductivitySensorStatus[ sensorNum ].currentAlphaValue = DIALYSATE_SENSORS_ALPHA_HIGH; }