Index: firmware/App/Drivers/ConductivityTeensy.c =================================================================== diff -u -r0276993257b238c4056da818d241205ae0c30a56 -re82e8e4e2a2d6b212811fa6716eec6f9e6bf478d --- firmware/App/Drivers/ConductivityTeensy.c (.../ConductivityTeensy.c) (revision 0276993257b238c4056da818d241205ae0c30a56) +++ firmware/App/Drivers/ConductivityTeensy.c (.../ConductivityTeensy.c) (revision e82e8e4e2a2d6b212811fa6716eec6f9e6bf478d) @@ -15,7 +15,7 @@ * ***************************************************************************/ -#include // Used for calculating the polynomial calibration equation. +#include // Used for calculating the polynomial calibration equation and INF #include // For memcpy #include "sci.h" @@ -55,10 +55,12 @@ #define COND_STATUS_TIMEOUT_MS ( 10 * MS_PER_SECOND ) ///< Timeout before which we should receive acknowledgment from teensy #define COND_DATA_TIMEOUT_MS ( 10 * MS_PER_SECOND ) ///< Timeout before which we should receive data from teensy #define COND_TEMP_OFFSET 25 ///< Temperature offset constant used in RTD calculations. +#define COND_CONVERSION_SM_TO_USCM 10000 ///< Conductivity conversion from siemens per meter to micro siemens per centimeter. +#define COND_INFINITE_R_VALUE 800000 ///< Resistance value for when the driver detects INF from the sensor. // ********** private data ********** -static COND_COMM_STATE_T condCommState; +static COND_COMM_STATE_T condCommState; ///< current Conductivity driver comm state. static U32 condResponseTime; ///< Tracks duration between cmd sent and its response received. static U32 condReceiptCounter; ///< Conductivity response receipt counter. @@ -238,7 +240,6 @@ enqueue( TEENSY_CMD_GET_INIT_STATUS ); enqueue( TEENSY_CMD_SELECT_SENSOR ); enqueue( TEENSY_CMD_GET_EEPROM_DATA ); - } /*********************************************************************//** @@ -495,6 +496,7 @@ state = txSelectSensor(); break; default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, FP_FAULT_ID_FP_INVALID_PUMP_DUTY_CYCLE_SELECTED, currentCmd ) break; } @@ -516,41 +518,42 @@ switch ( currentCmd ) { - case TEENSY_CMD_INIT_SENSOR: - state = rxInitSensor(); - break; - case TEENSY_CMD_GET_INIT_STATUS: - state = rxGetInitStatus(); - break; - case TEENSY_CMD_UPDATE_EEPROM_DATA: - state = rxUpdateEEPROMdata( ); - break; - case TEENSY_CMD_GET_EEPROM_DATA: - state = rxGetEEPROMdata(); - break; - case TEENSY_CMD_UPDATE_MEASUREMENT_SETTINGS: - state = rxUpdateMeasurementSettings( ); - break; - case TEENSY_CMD_GET_MEASUREMENT_SETTINGS: - state = rxGetMeasurementSettings(); - break; - case TEENSY_CMD_START_MEASUREMENT: - state = rxStartMeasurements(); - break; - case TEENSY_CMD_STOP_MEASUREMENT: - state = rxStopMeasurement(); - break; - case TEENSY_CMD_GET_ALL_MEASUREMENTS: - state = rxGetAllMeasurements(); - break; - case TEENSY_CMD_GET_SINGLE_MEASUREMENT: - state = rxGetSingleMeasurement( ); - break; - case TEENSY_CMD_SELECT_SENSOR: - state = rxSelectSensor(); - break; - default: - break; + case TEENSY_CMD_INIT_SENSOR: + state = rxInitSensor(); + break; + case TEENSY_CMD_GET_INIT_STATUS: + state = rxGetInitStatus(); + break; + case TEENSY_CMD_UPDATE_EEPROM_DATA: + state = rxUpdateEEPROMdata( ); + break; + case TEENSY_CMD_GET_EEPROM_DATA: + state = rxGetEEPROMdata(); + break; + case TEENSY_CMD_UPDATE_MEASUREMENT_SETTINGS: + state = rxUpdateMeasurementSettings( ); + break; + case TEENSY_CMD_GET_MEASUREMENT_SETTINGS: + state = rxGetMeasurementSettings(); + break; + case TEENSY_CMD_START_MEASUREMENT: + state = rxStartMeasurements(); + break; + case TEENSY_CMD_STOP_MEASUREMENT: + state = rxStopMeasurement(); + break; + case TEENSY_CMD_GET_ALL_MEASUREMENTS: + state = rxGetAllMeasurements(); + break; + case TEENSY_CMD_GET_SINGLE_MEASUREMENT: + state = rxGetSingleMeasurement( ); + break; + case TEENSY_CMD_SELECT_SENSOR: + state = rxSelectSensor(); + break; + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, FP_FAULT_ID_FP_INVALID_PUMP_DUTY_CYCLE_SELECTED, currentCmd ) + break; } @@ -563,7 +566,6 @@ * @details \b Inputs: currentCmd - Current command being executed. * The error occurred during TX or RX phase of this command. * @details \b Outputs: none - * @details \b Outputs: none * @return state - Next state. *************************************************************************/ static COND_COMM_STATE_T handleFailedState( void ) @@ -595,6 +597,7 @@ case TEENSY_CMD_SELECT_SENSOR: break; default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, FP_FAULT_ID_FP_INVALID_PUMP_DUTY_CYCLE_SELECTED, currentCmd ) break; } @@ -2060,6 +2063,14 @@ F64 R = condRawMeasurement[ sensorNum ].impRzMag; F64 Z = condRawMeasurement[ sensorNum ].rtdRzMag; + // Aly sensors are known to send the driver INF in unfavorable conditions for impedance. e.g: open air + // Change it to some high value that can be determined that we are reading INF. + // Otherwise we will publish no updated value or 0. + if ( R == INFINITY ) + { + R = COND_INFINITE_R_VALUE; + } + if ( TRUE == isFPSensor ) { B3 = condCoeff[ sensorNum ].beta3FP; @@ -2135,6 +2146,14 @@ F64 k = 0.0; F64 R = condRawMeasurement[ sensorNum ].impRzMag; + // Aly sensors are known to send the driver INF in unfavorable conditions for impedance. e.g: open air + // Change it to some high value that can be determined that we are reading INF. + // Otherwise we will publish no updated value or 0. + if ( R == INFINITY ) + { + R = COND_INFINITE_R_VALUE; + } + if ( TRUE == isFPSensor ) { alpha = condCoeff[ sensorNum ].alphaLowFPS; @@ -2149,6 +2168,8 @@ calculatedConductivity = ( ( k / R ) * ( 1 + alpha * ( COND_TEMP_OFFSET - condCalculatedMeasurement[ sensorNum ].Temperature ) ) ); + + calculatedConductivity = calculatedConductivity * COND_CONVERSION_SM_TO_USCM; condCalculatedMeasurement[ sensorNum ].Conductivity = calculatedConductivity; } @@ -2170,6 +2191,14 @@ F64 zeta = 0.0; F64 R = condRawMeasurement[ sensorNum ].impRzMag; + // Aly sensors are known to send the driver INF in unfavorable conditions. e.g: open air + // Change it to some high value that can be determined that we are reading INF. + // Otherwise we will publish no updated value or 0. + if ( R == INFINITY ) + { + R = COND_INFINITE_R_VALUE; + } + if ( TRUE == isFPSensor ) { eta = condCoeff[ sensorNum ].etaLowFPUS;