Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -r9b56de8996e71443e7963a5337119ae594188274 -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 9b56de8996e71443e7963a5337119ae594188274) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -31,25 +31,25 @@ // ********** private definitions ********** -#define COND_CPO_SENSOR_PROBE_TYPE 10 ///< 0.1 K cell constant conductivity probe -#define COND_SENSOR_DECIMAL_CONVERSION 100 ///< Conductivity value from FPGA has two decimal place -#define COND_SENSOR_TEMPERATURE_COEF 0.02 ///< Linear temperature coefficient of variation at 25 Celcius for fresh water -#define COND_SENSOR_REFERENCE_TEMPERATURE 25 ///< Reference temperature for conductivity sensor -#define COND_SENSOR_REPORT_PERIOD (MS_PER_SECOND / TASK_PRIORITY_INTERVAL) ///< Broadcast conductivity values message every second +#define COND_CPO_SENSOR_PROBE_TYPE 10 ///< 0.1 K cell constant conductivity probe. +#define COND_SENSOR_DECIMAL_CONVERSION 100 ///< Conductivity value from FPGA has two decimal place. +#define COND_SENSOR_TEMPERATURE_COEF 0.02 ///< Linear temperature coefficient of variation at 25 Celcius for fresh water. +#define COND_SENSOR_REFERENCE_TEMPERATURE 25 ///< Reference temperature for conductivity sensor. +#define COND_SENSOR_REPORT_PERIOD (MS_PER_SECOND / TASK_PRIORITY_INTERVAL) ///< Broadcast conductivity values message every second. -#define COND_SENSOR_CPI_CPO_MAX_VALUE 2000 ///< Maximum inlet water conductivity -#define COND_SENSOR_CPI_CPO_MIN_VALUE 100 ///< Minimum inlet water conductivity -#define COND_SENSOR_PERSISTENCE_COUNT (5 * MS_PER_SECOND / TASK_GENERAL_INTERVAL) ///< Number of persistence count for conductivity sensor out of range error +#define COND_SENSOR_CPI_CPO_MAX_VALUE 2000 ///< Maximum inlet water conductivity. +#define COND_SENSOR_CPI_CPO_MIN_VALUE 100 ///< Minimum inlet water conductivity. +#define COND_SENSOR_PERSISTENCE_COUNT (5 * MS_PER_SECOND / TASK_GENERAL_INTERVAL) ///< Number of persistence count for conductivity sensor out of range error. -#define MAX_ALLOWED_UNCHANGED_CONDUCTIVITY_READS 100 ///< New reading every 640 ms, expect to get new reading in 1s -#define MAX_CONDUCTIVITY_SENSOR_FAILURES 5 ///< maximum number of conductivity sensor errors within window period before alarm -#define MAX_CONDUCTIVITY_SENSOR_FAILURE_WINDOW_MS (60 * MS_PER_SECOND) ///< Conductivity sensor error window +#define MAX_ALLOWED_UNCHANGED_CONDUCTIVITY_READS 100 ///< New reading every 640 ms, expect to get new reading in 1s. +#define MAX_CONDUCTIVITY_SENSOR_FAILURES 5 ///< maximum number of conductivity sensor errors within window period before alarm. +#define MAX_CONDUCTIVITY_SENSOR_FAILURE_WINDOW_MS (60 * MS_PER_SECOND) ///< Conductivity sensor error window. -#define RO_REJECTION_RATIO_REPORT_PERIOD (MS_PER_SECOND / TASK_PRIORITY_INTERVAL) ///< Broadcast RO rejection ratio message every second -#define RO_REJECTION_RATIO_OUT_OF_RANGE_VALUE 1.0 ///< Out of range value for RO rejection ratio when CPi conductivity is zero -#define MAX_RO_REJECTION_RATIO_ALLOW 0.1 ///< Maximum RO Rejection ratio -#define MAX_CPO_CONDUCTIVITY_ALLOW 15.0 ///< Maximum CPo sensor conductivity value -#define RO_REJECTION_RATIO_PERSISTENCE_COUNT (10 * MS_PER_SECOND / TASK_GENERAL_INTERVAL) ///< Number of persistence count for RO rejection ro +#define RO_REJECTION_RATIO_REPORT_PERIOD (MS_PER_SECOND / TASK_PRIORITY_INTERVAL) ///< Broadcast RO rejection ratio message every second. +#define RO_REJECTION_RATIO_OUT_OF_RANGE_VALUE 1.0 ///< Out of range value for RO rejection ratio when CPi conductivity is zero. +#define MAX_RO_REJECTION_RATIO_ALLOW 0.1 ///< Maximum RO rejection ratio. +#define MAX_CPO_CONDUCTIVITY_ALLOW 15.0 ///< Maximum CPo sensor conductivity value. +#define RO_REJECTION_RATIO_PERSISTENCE_COUNT (10 * MS_PER_SECOND / TASK_GENERAL_INTERVAL) ///< Number of persistence count for RO rejection ratio. // ********** private data ********** @@ -62,11 +62,11 @@ static U08 readCount[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Read count for conductivity readings. static U32 internalErrorCount[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Internal error count for conductivity readings. static OVERRIDE_F32_T compensatedConductivityValues[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Latest compensated conductivity values. -static F32 roRejectionRatio; ///< Latest RO rejection ratio +static F32 roRejectionRatio; ///< Latest RO rejection ratio. static OVERRIDE_U32_T conductivityDataPublishInterval = { COND_SENSOR_REPORT_PERIOD, - COND_SENSOR_REPORT_PERIOD, 0, 0 }; ///< Conductivity sensors publish time interval override -static U32 conductivityDataPublicationTimerCounter = 0; ///< Conductivity sensors data publish timer counter + COND_SENSOR_REPORT_PERIOD, 0, 0 }; ///< Conductivity sensors publish time interval override. +static U32 conductivityDataPublicationTimerCounter = 0; ///< Conductivity sensors data publish timer counter. // ********** private function prototypes ********** @@ -75,7 +75,7 @@ static void calcRORejectionRatio( void ); static DATA_GET_PROTOTYPE( U32, getConductivityDataPublishInterval ); -/************************************************************************* +/*********************************************************************//** * @brief * The initConductivitySensors function initializes the ConductivitySensors module. * @details @@ -110,7 +110,7 @@ TRUE, RO_REJECTION_RATIO_PERSISTENCE_COUNT, RO_REJECTION_RATIO_PERSISTENCE_COUNT ); } -/************************************************************************* +/*********************************************************************//** * @brief * The execConductivitySensors function gets conductivity sensors' latest * readings from FPGA and advertises them over CAN. @@ -134,12 +134,12 @@ } -/************************************************************************* +/*********************************************************************//** * @brief * The checkInletWaterConductivity checks inlet water conductivity value * and triggers an alarm when conductivity value is out of allowed range. * @details - * Inputs : none + * Inputs : CPi sensor conductivity * Outputs : Trigger alarms when conductivity is out of allowed range * @return none *************************************************************************/ @@ -153,13 +153,13 @@ checkPersistentAlarm( PERSISTENT_ALARM_INLET_WATER_LOW_CONDUCTIVITY, isCondTooLow, conductivity ); } -/************************************************************************* +/*********************************************************************//** * @brief * The checkRORejectionRatio checks RO rejection ratio and outlet water * conductivity. The function triggers an alarm when RO rejection ratio or * outlet water conductivity is out of allowed range for period of time. * @details - * Inputs : none + * Inputs : roRejectionRatio, CPo sensor conductivity * Outputs : Triggered alarm * @return none *************************************************************************/ @@ -170,14 +170,14 @@ checkPersistentAlarm( PERSISTENT_ALARM_RO_REJECTION_RATIO_OUT_OF_RANGE, isRORejectionRatioOutOfRange, roRejectionRatio ); } -/************************************************************************* +/*********************************************************************//** * @brief * The getConductivityValue function gets the compensated conductivity * value for a given conductivity sensor id. * @details * Inputs : compensatedConductivityValues[] * Outputs : none - * @param sensorId Id of conductivity sensor to get conductivity value + * @param sensorId conductivity sensor id * @return compensated conductivity *************************************************************************/ F32 getConductivityValue( U32 sensorId ) @@ -203,16 +203,16 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The calcCompensatedConductivity function calculates the compensated * conductivity based on given temperature and conductivity taken at * reference temperature of 25 Celcius. * @details - * Inputs : temperature + * Inputs : conductivity, temperature * Outputs : none - * @param conductivity Conductivity value - * @param temperature Temperature to compensate conductivity with + * @param conductivity conductivity value + * @param temperature temperature to compensate conductivity with * @return compensated conductivity based on temperature *************************************************************************/ static F32 calcCompensatedConductivity( F32 conductivity, F32 temperature) @@ -223,12 +223,12 @@ return conductivity * compensatedCoef; } -/************************************************************************* +/*********************************************************************//** * @brief * The calcRORejectionRatio function calculates the RO rejection ratio using - * the cpi sensor conductivity value and cpo sensor conductivity value. + * the CPi sensor conductivity value and CPo sensor conductivity value. * @details - * Inputs: CPi sensor conductivity and CPo sensor conductivity + * Inputs: CPi sensor conductivity, CPo sensor conductivity * Outputs: RO rejection ratio * @return none *************************************************************************/ @@ -244,7 +244,7 @@ } } -/************************************************************************* +/*********************************************************************//** * @brief * The processCPiCPoSensorRead function checks if there is an error in FPGA * and FPGA read count. If there is any error in the FPGA error, it raises an @@ -289,7 +289,7 @@ } } -/************************************************************************* +/*********************************************************************//** * @brief * The getConductivityDataPublishInterval function gets the conductivity * data publication interval. @@ -315,15 +315,15 @@ *************************************************************************/ -/************************************************************************* +/*********************************************************************//** * @brief * The testSetConductivityOverride function overrides the compensated * conductivity value of given sensor id. * @details * Inputs : compensatedConductivityValues[] * Outputs : compensatedConductivityValues[] - * @param sensorId Id of conductivity sensor to get conductivity value - * @param value Override compensated conductivity value + * @param sensorId conductivity sensor id + * @param value override compensated conductivity value * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testSetConductivityOverride( U32 sensorId, F32 value ) @@ -343,14 +343,14 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The testResetConductivityOverride function resets the override of the \n * conductivity sensor value. * @details * Inputs : compensatedConductivityValues[] * Outputs : compensatedConductivityValues[] - * @param sensorId Id of the conductivity sensor to override. + * @param sensorId conductivity sensor id * @return TRUE if reset successful, FALSE if not *************************************************************************/ BOOL testResetConductivityOverride( U32 sensorId ) @@ -370,14 +370,14 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The testSetConductivityDataPublishIntervalOverride function overrides * the conductivity data publish interval. * @details * Inputs : conductivityDataPublishInterval * Outputs : conductivityDataPublishInterval - * @param value Override conductivity data publish interval with (in ms) + * @param value override conductivity data publish interval with (in ms) * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testSetConductivityDataPublishIntervalOverride( U32 interval_ms ) @@ -394,7 +394,7 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The testResetConductivityDataPublishIntervalOverride function resets * the override of the conductivity data publish interval. Index: firmware/App/Controllers/ConductivitySensors.h =================================================================== diff -u -r6f262a859c6d582bc060165a560c47f56b94164e -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/ConductivitySensors.h (.../ConductivitySensors.h) (revision 6f262a859c6d582bc060165a560c47f56b94164e) +++ firmware/App/Controllers/ConductivitySensors.h (.../ConductivitySensors.h) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -22,8 +22,7 @@ /** * @defgroup ConductivitySensors ConductivitySensors - * @brief Conductivity Sensors monitor module. - * Monitors and filters conductivity sensor readings. + * @brief Conductivity Sensors monitor module. Monitors and filters conductivity sensor readings. * * @addtogroup ConductivitySensors * @{ @@ -34,9 +33,9 @@ /// Enumeration of conductivity sensors. typedef enum ConductivitySensors { - CONDUCTIVITYSENSORS_CPI_SENSOR = 0, ///< Inlet water conductivity sensor. - CONDUCTIVITYSENSORS_CPO_SENSOR, ///< Outlet water conductivity sensor. - NUM_OF_CONDUCTIVITY_SENSORS ///< Number of conductivity sensors. + CONDUCTIVITYSENSORS_CPI_SENSOR = 0, ///< Inlet water conductivity sensor + CONDUCTIVITYSENSORS_CPO_SENSOR, ///< Outlet water conductivity sensor + NUM_OF_CONDUCTIVITY_SENSORS ///< Number of conductivity sensors } CONDUCTIVITY_SENSORS_T; // ********** public function prototypes ********** @@ -47,10 +46,10 @@ void checkInletWaterConductivity( void ); void checkRORejectionRatio( void ); -DATA_ARRAY_GET_PROTOTYPE ( F32, getConductivityValue, sensor ); +DATA_ARRAY_GET_PROTOTYPE ( F32, getConductivityValue, sensorId ); -BOOL testSetConductivityOverride( U32 sensor, F32 value ); -BOOL testResetConductivityOverride( U32 sensor ); +BOOL testSetConductivityOverride( U32 sensorId, F32 value ); +BOOL testResetConductivityOverride( U32 sensorId ); BOOL testSetConductivityDataPublishIntervalOverride( U32 interval_ms ); BOOL testResetConductivityDataPublishIntervalOverride( void ); Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -rdc0d9b087c609e71cacdb7f0395cccf29d749c00 -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision dc0d9b087c609e71cacdb7f0395cccf29d749c00) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -20,6 +20,7 @@ #include "etpwm.h" #include "mibspi.h" +#include "DrainPump.h" #include "FPGA.h" #include "OperationModes.h" #include "PIControllers.h" @@ -29,7 +30,6 @@ #include "TaskPriority.h" #include "Timers.h" #include "Valves.h" -#include "DrainPump.h" #ifdef EMC_TEST_BUILD #include "Heaters.h" #endif @@ -41,58 +41,56 @@ // ********** private definitions ********** -#define DRAIN_PUMP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< interval (ms/task time) at which the Drain Pump data is published on the CAN bus +#define DRAIN_PUMP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< interval at which the Drain Pump data is published on the CAN bus. +#define DRP_CONTROL_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< interval at which the Drain pump is controlled. -#define DRP_CONTROL_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the Drain pump is controlled +#define DRP_SPEED_ADC_TO_RPM_FACTOR 12.94 ///< conversion factor from ADC counts to RPM for Drain pump. +#define DRP_SPEED_RPM_TO_ADC_FACTOR ( 1.0 / DRP_SPEED_ADC_TO_RPM_FACTOR ) ///< conversion factor from RPM to ADC counts for Drain pump. -#define DRP_SPEED_ADC_TO_RPM_FACTOR 12.94 ///< conversion factor from ADC counts to RPM for Drain pump -#define DRP_SPEED_RPM_TO_ADC_FACTOR ( 1.0 / DRP_SPEED_ADC_TO_RPM_FACTOR ) ///< conversion factor from RPM to ADC counts for Drain pump - /// Enumeration of drain pump states. typedef enum DrainPump_States { - DRAIN_PUMP_OFF_STATE = 0, ///< Drain pump off state. - DRAIN_PUMP_CONTROL_TO_TARGET_STATE, ///< Drain pump control to target state. - NUM_OF_DRAIN_PUMP_STATES ///< Number of drain pump states. + DRAIN_PUMP_OFF_STATE = 0, ///< Drain pump off state + DRAIN_PUMP_CONTROL_TO_TARGET_STATE, ///< Drain pump control to target state + NUM_OF_DRAIN_PUMP_STATES ///< Number of drain pump states } DRAIN_PUMP_STATE_T; /// Enumeration of drain pump self test states. typedef enum DrainPump_Self_Test_States { - DRAIN_PUMP_SELF_TEST_STATE_START = 0, ///< Drain pump self test start state. - DRAIN_PUMP_TEST_STATE_IN_PROGRESS, ///< Drain pump self tests in progress state. - DRAIN_PUMP_TEST_STATE_COMPLETE, ///< Drain pump self tests completed state. - NUM_OF_DRAIN_PUMP_SELF_TEST_STATES ///< Number of drain pump self test states. + DRAIN_PUMP_SELF_TEST_STATE_START = 0, ///< Drain pump self test start state + DRAIN_PUMP_TEST_STATE_IN_PROGRESS, ///< Drain pump self tests in progress state + DRAIN_PUMP_TEST_STATE_COMPLETE, ///< Drain pump self tests completed state + NUM_OF_DRAIN_PUMP_SELF_TEST_STATES ///< Number of drain pump self test states } DRAIN_PUMP_SELF_TEST_STATE_T; -// pin assignment for pump enable -#define DRAIN_PUMP_ENABLE_SPI3_PORT_MASK 0x00000020 // (CS5 - re-purposed as output GPIO) -// drain pump enable macros -#define SET_DRAIN_PUMP_ENABLE() {mibspiREG3->PC3 |= DRAIN_PUMP_ENABLE_SPI3_PORT_MASK;} -#define CLR_DRAIN_PUMP_ENABLE() {mibspiREG3->PC3 &= ~DRAIN_PUMP_ENABLE_SPI3_PORT_MASK;} +#define DRAIN_PUMP_ENABLE_SPI3_PORT_MASK 0x00000020 ///< CS5 - Out put GPIO for pump enable. +#define SET_DRAIN_PUMP_ENABLE() {mibspiREG3->PC3 |= DRAIN_PUMP_ENABLE_SPI3_PORT_MASK;} ///< drain pump enable set macro. +#define CLR_DRAIN_PUMP_ENABLE() {mibspiREG3->PC3 &= ~DRAIN_PUMP_ENABLE_SPI3_PORT_MASK;} ///< drain pump enable clear macro. // TODO - test code - remove later #define DRAIN_PUMP_TEST2_SPI1_PORT_MASK 0x00000004 // (CS2 - re-purposed as input GPIO) #define GET_DIP_SW2_TEST() ( ( mibspiREG1->PC2 & DRAIN_PUMP_TEST2_SPI1_PORT_MASK ) != 0 ) // ********** private data ********** -static DRAIN_PUMP_STATE_T drainPumpState = DRAIN_PUMP_OFF_STATE; ///< current state of drain pump controller state machine -static U32 drainPumpDataPublicationTimerCounter = 0; ///< used to schedule drain pump data publication to CAN bus -static BOOL isDrainPumpOn = FALSE; ///< Drain pump is currently running -static U32 drainPumpDAC = 0; ///< initial drain pump DAC value -static U32 drainPumpDACSet = 0; ///< currently set drain pump DAC value -static PUMP_CONTROL_MODE_T drainPumpControlMode = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< requested drain pump control mode. -static PUMP_CONTROL_MODE_T drainPumpControlModeSet = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< currently set drain pump control mode. +static DRAIN_PUMP_STATE_T drainPumpState = DRAIN_PUMP_OFF_STATE; ///< current state of drain pump controller state machine. +static U32 drainPumpDataPublicationTimerCounter = 0; ///< Drain pump data publish timer counter. +static BOOL isDrainPumpOn = FALSE; ///< Flag indicates drain pump is running or off. +static U32 drainPumpDAC = 0; ///< Initial drain pump DAC value. +static U32 drainPumpDACSet = 0; ///< Current set drain pump DAC value. +static PUMP_CONTROL_MODE_T drainPumpControlMode = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< Requested drain pump control mode. +static PUMP_CONTROL_MODE_T drainPumpControlModeSet = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< Current set drain pump control mode. -static OVERRIDE_U32_T drainPumpDataPublishInterval = { DRAIN_PUMP_DATA_PUB_INTERVAL, DRAIN_PUMP_DATA_PUB_INTERVAL, 0, 0 }; ///< interval (in ms) at which to publish RO flow data to CAN bus. -static OVERRIDE_U32_T targetDrainPumpSpeed = { 0, 0, 0, 0 }; ///< Target RO pressure (in PSI). +static OVERRIDE_U32_T drainPumpDataPublishInterval = { DRAIN_PUMP_DATA_PUB_INTERVAL, + DRAIN_PUMP_DATA_PUB_INTERVAL, + 0, 0 }; ///< Drain pump data publish interval. +static OVERRIDE_U32_T targetDrainPumpSpeed = { 0, 0, 0, 0 }; ///< Target drain pump speed. +static U32 drainControlTimerCounter = 0; ///< Timer counter for control drain pump. -static U32 drainControlTimerCounter = 0; ///< determines when to perform control on drain pump +static DRAIN_PUMP_SELF_TEST_STATE_T drainPumpSelfTestState; ///< Current drain pump self test state. +static U32 drainPumpSelfTestTimerCount = 0; ///< Timer counter for drain pump self test. -static DRAIN_PUMP_SELF_TEST_STATE_T drainPumpSelfTestState = DRAIN_PUMP_SELF_TEST_STATE_START; ///< current drain pump self test state -static U32 drainPumpSelfTestTimerCount = 0; ///< timer counter for drain pump self test - // ********** private function prototypes ********** static DRAIN_PUMP_STATE_T handleDrainPumpOffState( void ); @@ -110,14 +108,13 @@ * @return none *************************************************************************/ void initDrainPump( void ) -{ +{ stopDrainPump(); } /*********************************************************************//** * @brief - * The setDrainPumpTargetSpeed function sets a new target speed for the \n - * drain pump. + * The setDrainPumpTargetSpeed function sets a new target speed for the drain pump. * @details * Inputs : none * Outputs : targetDrainPumpPressure @@ -162,10 +159,10 @@ /*********************************************************************//** * @brief - * The execDrainPumpMonitor function executes the Drain Pump monitor. + * The execDrainPumpMonitor function executes the drain pump monitor. * @details * Inputs : none - * Outputs : none + * Outputs : publish drain pump data * @return none *************************************************************************/ void execDrainPumpMonitor( void ) @@ -182,7 +179,7 @@ /*********************************************************************//** * @brief - * The execDrainPumpController function executes the Drain Pump controller. + * The execDrainPumpController function executes the drain pump controller. * @details * Inputs : drainPumpState * Outputs : drainPumpState @@ -205,12 +202,14 @@ drainPumpState = DRAIN_PUMP_OFF_STATE; break; } -} +} +// ********** Private functions ********** + /*********************************************************************//** * @brief - * The handleDrainPumpOffState function handles the drain pump off state \n - * of the drain pump controller state machine. + * The handleDrainPumpOffState function handles the drain pump off state of + * the drain pump controller state machine. * @details * Inputs : targetDrainPumpSpeed * Outputs : drainPumpPWMDutyCyclePctSet, isDrainPumpOn @@ -257,7 +256,7 @@ /*********************************************************************//** * @brief - * The handleDrainPumpControlToTargetState function handles the "control to \n + * The handleDrainPumpControlToTargetState function handles the "control to * target" state of the drain pump controller state machine. * @details * Inputs : none @@ -308,10 +307,10 @@ /*********************************************************************//** * @brief - * The stopDrainPump function sets the Drain pump DAC to zero. + * The stopDrainPump function sets the drain pump DAC to zero. * @details * Inputs : none - * Outputs : isDrainPumpOn, DAC zeroed + * Outputs : isDrainPumpOn, DAC zeroed, clear drain pump enable * @return none *************************************************************************/ static void stopDrainPump( void ) @@ -325,12 +324,12 @@ /*********************************************************************//** * @brief - * The getPublishDrainPumpDataInterval function gets the Drain pump data \n + * The getPublishDrainPumpDataInterval function gets the drain pump data * publication interval. * @details * Inputs : drainPumpDataPublishInterval * Outputs : none - * @return the current Drain pump data publication interval (in ms). + * @return the current drain pump data publication interval (in ms). *************************************************************************/ U32 getPublishDrainPumpDataInterval( void ) { @@ -346,7 +345,7 @@ /*********************************************************************//** * @brief - * The getTargetDrainPumpSpeed function gets the current target Drain pump \n + * The getTargetDrainPumpSpeed function gets the current target drain pump * speed. * @details * Inputs : targetDrainPumpSpeed @@ -367,8 +366,7 @@ /*********************************************************************//** * @brief - * The publishDrainPumpData function publishes drain pump data at the set \n - * interval. + * The publishDrainPumpData function publishes drain pump data at the set interval. * @details * Inputs : target speed * Outputs : Drain pump data is published to CAN bus. @@ -379,21 +377,20 @@ // publish Drain pump data on interval if ( ++drainPumpDataPublicationTimerCounter >= getPublishDrainPumpDataInterval() ) { - U32 spdStPt = getTargetDrainPumpSpeed(); - + U32 const spdStPt = getTargetDrainPumpSpeed(); broadcastDrainPumpData( spdStPt, drainPumpDACSet ); drainPumpDataPublicationTimerCounter = 0; } } /*********************************************************************//** * @brief - * The execDrainPumpTest function executes the state machine for the Drain \n - * Pump self test. + * The execDrainPumpTest function executes the state machine for the drain + * pump self test. * @details * Inputs : none * Outputs : none - * @return the current state of the Drain Pump self test. + * @return the current state of the drain pump self test. *************************************************************************/ SELF_TEST_STATUS_T execDrainPumpTest( void ) { @@ -412,12 +409,12 @@ /*********************************************************************//** * @brief - * The testSetDrainPumpDataPublishIntervalOverride function overrides the \n + * The testSetDrainPumpDataPublishIntervalOverride function overrides the * drain pump data publish interval. * @details * Inputs : none * Outputs : drainPumpDataPublishInterval - * @param value override RO pump data publish interval with (in ms) + * @param value override drain pump data publish interval with (in ms) * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testSetDrainPumpDataPublishIntervalOverride( U32 value ) @@ -438,8 +435,8 @@ /*********************************************************************//** * @brief - * The testResetDrainPumpDataPublishIntervalOverride function resets the override \n - * of the drain pump data publish interval. + * The testResetDrainPumpDataPublishIntervalOverride function resets the + * override of the drain pump data publish interval. * @details * Inputs : none * Outputs : drainPumpDataPublishInterval @@ -461,7 +458,7 @@ /*********************************************************************//** * @brief - * The testSetTargetDrainPumpSpeedOverride function overrides the target \n + * The testSetTargetDrainPumpSpeedOverride function overrides the target * drain pump speed (in RPM). * @details * Inputs : none @@ -486,7 +483,7 @@ /*********************************************************************//** * @brief - * The testResetTargetDrainPumpSpeedOverride function resets the override of the \n + * The testResetTargetDrainPumpSpeedOverride function resets the override of the * target drain pump speed (in RPM). * @details * Inputs : none Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -rdc0d9b087c609e71cacdb7f0395cccf29d749c00 -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision dc0d9b087c609e71cacdb7f0395cccf29d749c00) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -20,13 +20,12 @@ #include "etpwm.h" #include "AlarmMgmt.h" -#include "Common.h" #include "Heaters.h" #include "ROPump.h" -#include "TemperatureSensors.h" -#include "SystemCommMessages.h" #include "PIControllers.h" +#include "SystemCommMessages.h" #include "TaskGeneral.h" +#include "TemperatureSensors.h" #include "Timers.h" #ifdef ENABLE_DIP_SWITCHES @@ -39,30 +38,32 @@ * @{ */ -#define MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE 0.89 ///< Main primary heater (heater A) max duty cycle (89%) -#define SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE 0.50 ///< Small Primary heater (heater B) max duty cycle (50%) -#define TRIMMER_HEATER_MAX_DUTY_CYCLE 0.50 ///< Trimmer heater max duty cycle (50%) -#define HEATERS_MIN_DUTY_CYCLE 0.00 ///< Primary and trimmer heaters minimum duty cycle (0.00%) +// ********** private definitions ********** -#define PRIMARY_HEATERS_P_COEFFICIENT 0.02 ///< Primary heaters proportional coefficient -#define PRIMARY_HEATERS_I_COEFFICIENT 0.001 ///< Primary heaters integral coefficient +#define MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE 0.89 ///< Main primary heater (heater A) max duty cycle (89%). +#define SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE 0.50 ///< Small Primary heater (heater B) max duty cycle (50%). +#define TRIMMER_HEATER_MAX_DUTY_CYCLE 0.50 ///< Trimmer heater max duty cycle (50%). +#define HEATERS_MIN_DUTY_CYCLE 0.00 ///< Primary and trimmer heaters minimum duty cycle (0.00%). -#define TRIMMER_HEATER_P_COEFFICIENT 0.02 ///< Trimmer heater proportional coefficient -#define TRIMMER_HEATER_I_COEFFICIENT 0.001 ///< Trimmer heater integral coefficient +#define PRIMARY_HEATERS_P_COEFFICIENT 0.02 ///< Primary heaters proportional coefficient. +#define PRIMARY_HEATERS_I_COEFFICIENT 0.001 ///< Primary heaters integral coefficient. -#define CONTROLLER_CHECK_INTERVAL_COUNT 10U ///< Time interval count to check the PI controller -#define TEMP_SENSORS_INTERVAL_COUNT 10U ///< Temperature sensors interval count +#define TRIMMER_HEATER_P_COEFFICIENT 0.02 ///< Trimmer heater proportional coefficient. +#define TRIMMER_HEATER_I_COEFFICIENT 0.001 ///< Trimmer heater integral coefficient. -#define HEATERS_DATA_PUBLISH_INTERVAL (500 / TASK_GENERAL_INTERVAL ) ///< Heaters data publish interval +#define CONTROLLER_CHECK_INTERVAL_COUNT 10U ///< Time interval count to check the PI controller. +#define TEMP_SENSORS_INTERVAL_COUNT 10U ///< Temperature sensors interval count. -#define SMALL_PRIMARY_AND_TRIMMER_HEATERS_POST_TARGET_TEMPERATURE 40U ///< Small primary and trimmer heaters target temperature during POST -#define MAIN_PRIMARY_HEATER_POST_TARGET_TEMPERATURE 35U ///< Main primary heater target temperature during POST -#define HEATERS_POST_HEAT_UP_TIME_SECONDS 50U ///< The time that the heaters are heated up to reach to the target temperature during POST -#define HEATERS_POST_TEMPERATURE_TOLERANCE 1U ///< Tolerance of the sensors to the target temperature during POST +#define HEATERS_DATA_PUBLISH_INTERVAL (500 / TASK_GENERAL_INTERVAL ) ///< Heaters data publish interval. -#define MINIMUM_TARGET_TEMPERATURE 10U ///< Minimum allowed target temperature for the heaters -#define MAXIMUM_TARGET_TEMPERATURE 90U ///< Maximum allowed target temperature for the heaters +#define SMALL_PRIMARY_AND_TRIMMER_HEATERS_POST_TARGET_TEMPERATURE 40U ///< Small primary and trimmer heaters target temperature during POST. +#define MAIN_PRIMARY_HEATER_POST_TARGET_TEMPERATURE 35U ///< Main primary heater target temperature during POST. +#define HEATERS_POST_HEAT_UP_TIME_SECONDS 50U ///< The time that the heaters are heated up to reach to the target temperature during POST. +#define HEATERS_POST_TEMPERATURE_TOLERANCE 1U ///< Tolerance of the sensors to the target temperature during POST. +#define MINIMUM_TARGET_TEMPERATURE 10U ///< Minimum allowed target temperature for the heaters. +#define MAXIMUM_TARGET_TEMPERATURE 90U ///< Maximum allowed target temperature for the heaters. + /// Heaters self test enums typedef enum heaters_self_test_states { @@ -97,70 +98,65 @@ NUM_OF_HEATERS ///< Number of heaters } NAME_OF_HEATER_T; -// Private variables +// ********** private data ********** -static SELF_TEST_STATUS_T heatersSelfTestResult; ///< Heaters self test results -static HEATERS_SELF_TEST_STATES_T heatersSelfTestState; ///< Heaters self test state -static PRIMARY_HEATERS_EXEC_STATES_T primaryHeatersExecState; ///< Primary heaters exec state -static TRIMMER_HEATER_EXEC_STATES_T trimmerHeaterExecState; ///< Trimmer heater exec state +static SELF_TEST_STATUS_T heatersSelfTestResult; ///< Heaters self test results. +static HEATERS_SELF_TEST_STATES_T heatersSelfTestState; ///< Heaters self test state. +static PRIMARY_HEATERS_EXEC_STATES_T primaryHeatersExecState; ///< Primary heaters exec state. +static TRIMMER_HEATER_EXEC_STATES_T trimmerHeaterExecState; ///< Trimmer heater exec state. -static F32 primaryHeaterTargetTemperature; ///< Primary heaters target temperature -static F32 trimmerHeaterTargetTemperature; ///< Trimmer heater target temperature +static F32 primaryHeaterTargetTemperature; ///< Primary heaters target temperature. +static F32 trimmerHeaterTargetTemperature; ///< Trimmer heater target temperature. -static F32 mainPrimaryHeaterDutyCycle; ///< Main primary heater duty cycle -static F32 smallPrimaryHeaterDutyCycle; ///< Small primary heater duty cycle -static F32 trimmerHeaterDutyCycle; ///< Trimmer heater duty cycle -static U32 primaryHeaterTimerCounter; ///< Primary heater timer counter -static U32 trimmerHeaterTimerCounter; ///< Trimmer heater timer counter -static U32 dataPublicationTimerCounter; ///< Data publication timer counter -static BOOL isPrimaryHeaterOn; ///< Flag to show if the primary heater is on -static BOOL isTrimmerHeaterOn; ///< Flag to show if the trimmer heater is on +static F32 mainPrimaryHeaterDutyCycle; ///< Main primary heater duty cycle. +static F32 smallPrimaryHeaterDutyCycle; ///< Small primary heater duty cycle. +static F32 trimmerHeaterDutyCycle; ///< Trimmer heater duty cycle. +static U32 primaryHeaterTimerCounter; ///< Primary heater timer counter. +static U32 trimmerHeaterTimerCounter; ///< Trimmer heater timer counter. +static U32 dataPublicationTimerCounter; ///< Data publication timer counter. +static BOOL isPrimaryHeaterOn; ///< Flag to show if the primary heater is on. +static BOOL isTrimmerHeaterOn; ///< Flag to show if the trimmer heater is on. -static OVERRIDE_U32_T heatersDataPublishInterval = { HEATERS_DATA_PUBLISH_INTERVAL, - HEATERS_DATA_PUBLISH_INTERVAL, 0, 0 }; ///< Heaters data publish time interval -static U32 selfTestElapsedTime; ///< Self test elapsed time variable -static BOOL hasStartPrimaryHeaterRequested; ///< Start primary heater request flag -static BOOL hasStartTrimmerHeaterRequested; ///< Start trimmer heater request flag +static OVERRIDE_U32_T heatersDataPublishInterval = { HEATERS_DATA_PUBLISH_INTERVAL, + HEATERS_DATA_PUBLISH_INTERVAL, 0, 0 }; ///< Heaters data publish time interval. +static U32 selfTestElapsedTime; ///< Self test elapsed time variable. +static BOOL hasStartPrimaryHeaterRequested; ///< Start primary heater request flag. +static BOOL hasStartTrimmerHeaterRequested; ///< Start trimmer heater request flag. -// private functions prototypes +// ********** private function prototypes ********** -static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestStart ( void ); -static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestSmallPrimaryAndTrimmerHeaters ( void ); -static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestMainPrimaryHeater ( void ); +static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestStart( void ); +static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestSmallPrimaryAndTrimmerHeaters( void ); +static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestMainPrimaryHeater( void ); -static PRIMARY_HEATERS_EXEC_STATES_T handlePrimaryHeaterStateOff ( void ); -static PRIMARY_HEATERS_EXEC_STATES_T handlePrimaryHeaterStateControlToTarget ( void ); +static PRIMARY_HEATERS_EXEC_STATES_T handlePrimaryHeaterStateOff( void ); +static PRIMARY_HEATERS_EXEC_STATES_T handlePrimaryHeaterStateControlToTarget( void ); -static TRIMMER_HEATER_EXEC_STATES_T handleTrimmerHeaterStateOff ( void ); -static TRIMMER_HEATER_EXEC_STATES_T handleTrimmerHeaterControlToTarget ( void ); +static TRIMMER_HEATER_EXEC_STATES_T handleTrimmerHeaterStateOff( void ); +static TRIMMER_HEATER_EXEC_STATES_T handleTrimmerHeaterControlToTarget( void ); -static void setMainPrimaryHeaterPWM ( F32 pwm ); -static void setSmallPrimaryHeaterPWM ( F32 pwm ); -static void setTrimmerHeaterPWM ( F32 pwm ); -static void resetHeaterState ( NAME_OF_HEATER_T heater ); -static void publishHeatersData ( void ); +static void setMainPrimaryHeaterPWM( F32 pwm ); +static void setSmallPrimaryHeaterPWM( F32 pwm ); +static void setTrimmerHeaterPWM( F32 pwm ); +static void resetHeaterState( NAME_OF_HEATER_T heater ); +static void publishHeatersData( void ); static DATA_GET_PROTOTYPE( U32, getPublishHeatersDataInterval ); // TODO: Remove the below code. FOR TESTING ONLY #define PRIMARY_HEATER_MIBSPI1_PORT_MASK 0x00000002 // (CS1 - re-purposed as input GPIO) -#define TOGGLEPRIMAYHEATER() (( mibspiREG1->PC2 & PRIMARY_HEATER_MIBSPI1_PORT_MASK ) != 0) +#define TOGGLEPRIMAYHEATER() ( ( mibspiREG1->PC2 & PRIMARY_HEATER_MIBSPI1_PORT_MASK ) != 0 ) //TODO: Remove the above code. FOR TESTING ONLY -// Public functions - /*********************************************************************//** * @brief * The initHeaters function initializes the variables and the PI controllers - * for the primary and trimmer heaters + * for the primary and trimmer heaters. * @details * Inputs : none - * Outputs : heatersSelfTestResult, heatersSelfTestState, - * primaryHeatersExecState, trimmerHeaterExecState, primaryHeaterTargetTemperature - * trimmerHeaterTargetTemperature, primaryHeaterTimerCounter, - * trimmerHeaterTimerCounter, dataPublicationTimerCounter + * Outputs : Heaters module initialized * @return none *************************************************************************/ -void initHeaters ( void ) +void initHeaters( void ) { heatersSelfTestState = HEATERS_SELF_TEST_START; primaryHeatersExecState = PRIMARY_HEATERS_EXEC_STATE_OFF; @@ -175,63 +171,58 @@ selfTestElapsedTime = 0; // Initialize the PI controller for the primary heaters - initializePIController( PI_CONTROLLER_ID_PRIMARY_HEATER, HEATERS_MIN_DUTY_CYCLE, - PRIMARY_HEATERS_P_COEFFICIENT, PRIMARY_HEATERS_I_COEFFICIENT, - HEATERS_MIN_DUTY_CYCLE, - MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE + SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE ); + initializePIController( PI_CONTROLLER_ID_PRIMARY_HEATER, HEATERS_MIN_DUTY_CYCLE, PRIMARY_HEATERS_P_COEFFICIENT, PRIMARY_HEATERS_I_COEFFICIENT, + HEATERS_MIN_DUTY_CYCLE, MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE + SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE ); // Initialize the PI controller for the trimmer heater - initializePIController( PI_CONTROLLER_ID_TRIMMER_HEATER, HEATERS_MIN_DUTY_CYCLE, - TRIMMER_HEATER_P_COEFFICIENT, TRIMMER_HEATER_I_COEFFICIENT, - HEATERS_MIN_DUTY_CYCLE, TRIMMER_HEATER_MAX_DUTY_CYCLE ); + initializePIController( PI_CONTROLLER_ID_TRIMMER_HEATER, HEATERS_MIN_DUTY_CYCLE, TRIMMER_HEATER_P_COEFFICIENT, + TRIMMER_HEATER_I_COEFFICIENT, HEATERS_MIN_DUTY_CYCLE, TRIMMER_HEATER_MAX_DUTY_CYCLE ); } /*********************************************************************//** * @brief * The setPrimaryHeaterTargetTemperature function sets the primary heater - * target temperature + * target temperature. * @details * Inputs : none * Outputs : primaryHeaterTargetTemperature * @param targetTemp target temperature for the primary heater * @return none *************************************************************************/ -void setPrimaryHeaterTargetTemperature ( F32 targetTemp ) +void setPrimaryHeaterTargetTemperature( F32 targetTemp ) { primaryHeaterTargetTemperature = targetTemp; } /*********************************************************************//** * @brief * The setTrimmerHeaterTargetTemperature function sets the trimmer heater - * target temperature + * target temperature. * @details - * Inputs : trimmerHeaterTargetTemperature - * Outputs : none + * Inputs : none + * Outputs : trimmerHeaterTargetTemperature * @param targetTemp target temperature for the trimmer heater * @return none *************************************************************************/ -void setTrimmerHeaterTargetTemperature ( F32 targetTemp ) +void setTrimmerHeaterTargetTemperature( F32 targetTemp ) { trimmerHeaterTargetTemperature = targetTemp; } /*********************************************************************//** * @brief * The startPrimaryHeater function starts the primary heaters. It resets - * the primary heaters state and sets the main primary heater duty cycle + * the primary heaters state and sets the main primary heater duty cycle. * @details - * Inputs : mainPrimaryHeaterDutyCycle, primaryHeaterTargetTemperature, - * hasStartPrimaryHeaterRequested + * Inputs : primaryHeaterTargetTemperature * Outputs : hasStartPrimaryHeaterRequested * @return status *************************************************************************/ -BOOL startPrimaryHeater ( void ) +BOOL startPrimaryHeater( void ) { BOOL status = FALSE; - if ( primaryHeaterTargetTemperature >= MINIMUM_TARGET_TEMPERATURE && - primaryHeaterTargetTemperature <= MAXIMUM_TARGET_TEMPERATURE ) + if ( ( primaryHeaterTargetTemperature >= MINIMUM_TARGET_TEMPERATURE ) && ( primaryHeaterTargetTemperature <= MAXIMUM_TARGET_TEMPERATURE ) ) { #ifndef DISABLE_HEATERS_AND_TEMPS hasStartPrimaryHeaterRequested = TRUE; @@ -245,19 +236,17 @@ /*********************************************************************//** * @brief * The startTrimmerHeater function starts the trimmer heater. It resets the - * trimmer heater's state and sets the duty cycle of the trimmer heater + * trimmer heater's state and sets the duty cycle of the trimmer heater. * @details - * Inputs : trimmerHeaterDutyCycle, trimmerHeaterTargetTemperature, - * trimmerHeaterTargetTemperature - * Outputs : trimmerHeaterTargetTemperature + * Inputs : trimmerHeaterTargetTemperature + * Outputs : hasStartTrimmerHeaterRequested * @return status *************************************************************************/ -BOOL startTrimmerHeater ( void ) +BOOL startTrimmerHeater( void ) { BOOL status = FALSE; - if ( trimmerHeaterTargetTemperature >= MINIMUM_TARGET_TEMPERATURE && - trimmerHeaterTargetTemperature <= MAXIMUM_TARGET_TEMPERATURE ) + if ( ( trimmerHeaterTargetTemperature >= MINIMUM_TARGET_TEMPERATURE ) && ( trimmerHeaterTargetTemperature <= MAXIMUM_TARGET_TEMPERATURE ) ) { #ifndef DISABLE_HEATERS_AND_TEMPS hasStartTrimmerHeaterRequested = TRUE; @@ -270,45 +259,45 @@ /*********************************************************************//** * @brief - * The stopPrimaryHeater function stops the primary heaters + * The stopPrimaryHeater function stops the primary heater. * @details - * Inputs : isPrimaryHeaterOn - * Outputs : isPrimaryHeaterOn + * Inputs : none + * Outputs : Primary heater stops * @return none *************************************************************************/ -void stopPrimaryHeater ( void ) +void stopPrimaryHeater( void ) { mainPrimaryHeaterDutyCycle = HEATERS_MIN_DUTY_CYCLE; smallPrimaryHeaterDutyCycle = HEATERS_MIN_DUTY_CYCLE; - setMainPrimaryHeaterPWM ( mainPrimaryHeaterDutyCycle ); - setSmallPrimaryHeaterPWM ( smallPrimaryHeaterDutyCycle ); + setMainPrimaryHeaterPWM( mainPrimaryHeaterDutyCycle ); + setSmallPrimaryHeaterPWM( smallPrimaryHeaterDutyCycle ); isPrimaryHeaterOn = FALSE; } /*********************************************************************//** * @brief - * The stopTrimmerHeater function stops the trimmer heater + * The stopTrimmerHeater function stops the trimmer heater. * @details - * Inputs : isTrimmerHeaterOn - * Outputs : isTrimmerHeaterOn + * Inputs : none + * Outputs : Trimmer heater stops * @return none *************************************************************************/ -void stopTrimmerHeater ( void ) +void stopTrimmerHeater( void ) { trimmerHeaterDutyCycle = HEATERS_MIN_DUTY_CYCLE; - setTrimmerHeaterPWM ( trimmerHeaterDutyCycle ); + setTrimmerHeaterPWM( trimmerHeaterDutyCycle ); isTrimmerHeaterOn = FALSE; } /*********************************************************************//** * @brief - * The execHeatersMonitor function + * The execHeatersMonitor function turns off the heaters when RO pump is not on. * @details * Inputs : none - * Outputs : none + * Outputs : Turns off the heaters when RO pump is not on * @return none *************************************************************************/ -void execHeatersMonitor ( void ) +void execHeatersMonitor( void ) { // If the RO pump is not on, turn off the heaters if ( ! isReverseOsmosisPumpOn() ) @@ -324,13 +313,13 @@ /*********************************************************************//** * @brief - * The execHeatersSelfTest function executes the heaters self test + * The execHeatersSelfTest function executes the heaters' self test state machine. * @details * Inputs : heatersSelfTestState - * Outputs : none + * Outputs : heatersSelfTestState * @return heatersSelfTestState *************************************************************************/ -SELF_TEST_STATUS_T execHeatersSelfTest ( void ) +SELF_TEST_STATUS_T execHeatersSelfTest( void ) { switch ( heatersSelfTestState ) { @@ -351,8 +340,7 @@ break; default: - SET_ALARM_WITH_2_U32_DATA ( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_HEATERS_SELF_TEST_INVALID_STATE, - heatersSelfTestState ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_HEATERS_SELF_TEST_INVALID_STATE, heatersSelfTestState ); heatersSelfTestState = HEATERS_SELF_TEST_COMPLETE; break; } @@ -362,13 +350,13 @@ /*********************************************************************//** * @brief - * The execPrimaryHeaters function executes the primary heaters + * The execPrimaryHeaters function executes the primary heaters' state machine. * @details * Inputs : primaryHeatersExecState * Outputs : primaryHeatersExecState * @return none *************************************************************************/ -void execPrimaryHeaters ( void ) +void execPrimaryHeaters( void ) { switch ( primaryHeatersExecState ) { @@ -381,22 +369,21 @@ break; default: - SET_ALARM_WITH_2_U32_DATA ( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_HEATERS_PRIMARY_HEATER_EXEC_INVALID_STATE, - primaryHeatersExecState ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_HEATERS_PRIMARY_HEATER_EXEC_INVALID_STATE, primaryHeatersExecState ); primaryHeatersExecState = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; break; } } /*********************************************************************//** * @brief - * The execTrimmerHeater function executes the trimmer heater + * The execTrimmerHeater function executes the trimmer heater's state machine. * @details * Inputs : trimmerHeaterExecState * Outputs : trimmerHeaterExecState * @return none *************************************************************************/ -void execTrimmerHeater ( void ) +void execTrimmerHeater( void ) { switch ( trimmerHeaterExecState ) { @@ -409,25 +396,22 @@ break; default: - SET_ALARM_WITH_2_U32_DATA ( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_HEATERS_TRIMMER_HEATER_EXEC_INVALID_STATE, - trimmerHeaterExecState ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_HEATERS_TRIMMER_HEATER_EXEC_INVALID_STATE, trimmerHeaterExecState ); trimmerHeaterExecState = TRIMMER_HEATER_EXEC_STATE_CONTROL_TO_TARGET; break; } } -// Private functions - /*********************************************************************//** * @brief * The handleHeatersSelfTestStart function starts the small primary and - * the trimmer heaters for self test + * the trimmer heaters for self test. * @details * Inputs : heatersSelfTestResult, selfTestElapsedTime * Outputs : heatersSelfTestResult, selfTestElapsedTime * @return state (HEATERS_SELF_TEST_STATES_T) *************************************************************************/ -static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestStart ( void ) +static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestStart( void ) { // Code temporarily disabled since POST is not tested yet // TODO once POST is tested and implemented, remove #ifndef @@ -436,8 +420,8 @@ return HEATERS_SELF_TEST_COMPLETE; #else heatersSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; - setSmallPrimaryHeaterPWM ( SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE ); - setTrimmerHeaterPWM ( TRIMMER_HEATER_MAX_DUTY_CYCLE ); + setSmallPrimaryHeaterPWM( SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE ); + setTrimmerHeaterPWM( TRIMMER_HEATER_MAX_DUTY_CYCLE ); selfTestElapsedTime = getMSTimerCount(); return HEATERS_SELF_TEST_SMALL_PRIMARY_AND_TRIMMER_HEATERS; @@ -446,29 +430,28 @@ /*********************************************************************//** * @brief - * The handleHeatersSelfTestSmallPrimaryAndTrimmerHeaters function checks - * if the time on the small primary and trimmer heaters has elapsed and - * if time has elapsed, it checks the thermocouple temperature shared - * among the two heaters. If they are in range, it sets the main primary - * heater and transitions to the next state. If it fails, it set an alarm - * and fails the test + * The handleHeatersSelfTestSmallPrimaryAndTrimmerHeaters function checks if + * the time on the small primary and trimmer heaters has elapsed. If time has + * elapsed, it checks the thermocouple temperature shared among the two + * heaters. If they are in range, it sets the main primary heater and transitions + * to the next state. If it fails, it sets an alarm and fails the test. * @details * Inputs : heatersSelfTestResult, selfTestElapsedTime * Outputs : heatersSelfTestResult, selfTestElapsedTime * @return state (HEATERS_SELF_TEST_STATES_T) *************************************************************************/ -static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestSmallPrimaryAndTrimmerHeaters ( void ) +static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestSmallPrimaryAndTrimmerHeaters( void ) { HEATERS_SELF_TEST_STATES_T state = HEATERS_SELF_TEST_SMALL_PRIMARY_AND_TRIMMER_HEATERS; if ( didTimeout( selfTestElapsedTime, HEATERS_POST_HEAT_UP_TIME_SECONDS ) ) { - setSmallPrimaryHeaterPWM ( 0 ); - setTrimmerHeaterPWM ( 0 ); + setSmallPrimaryHeaterPWM( 0 ); + setTrimmerHeaterPWM( 0 ); - F32 convertedTemperature = getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_INTERNAL ); + F32 convertedTemperature = getTemperatureValue( TEMPSENSORS_TRIMMER_HEATER_INTERNAL ); - if ( fabs(convertedTemperature - SMALL_PRIMARY_AND_TRIMMER_HEATERS_POST_TARGET_TEMPERATURE) > HEATERS_POST_TEMPERATURE_TOLERANCE ) + if ( fabs( convertedTemperature - SMALL_PRIMARY_AND_TRIMMER_HEATERS_POST_TARGET_TEMPERATURE ) > HEATERS_POST_TEMPERATURE_TOLERANCE ) { //TODO alarm // TODO POST failed @@ -477,7 +460,7 @@ } else { - setMainPrimaryHeaterPWM ( MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE ); + setMainPrimaryHeaterPWM( MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE ); selfTestElapsedTime = getMSTimerCount(); state = HEATERS_SELF_TEST_MAIN_PRIMARY_HEATER; } @@ -488,26 +471,26 @@ /*********************************************************************//** * @brief - * The handleHeatersSelfTestMainPrimaryHeater function checks - * if the time on the main primary heater has elapsed and it it has elapsed, - * it checks to ensure the thermocouples temperature is within the tolerance - * of the target temperature. It then transitions to the complete state + * The handleHeatersSelfTestMainPrimaryHeater function checks if the time + * on the main primary heater has elapsed. When the time has elapsed, it + * checks to ensure the thermocouple temperature is within the tolerance + * of the target temperature. It then transitions to the complete state. * @details * Inputs : heatersSelfTestResult * Outputs : heatersSelfTestResult * @return state (HEATERS_SELF_TEST_STATES_T) *************************************************************************/ -static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestMainPrimaryHeater ( void ) +static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestMainPrimaryHeater( void ) { HEATERS_SELF_TEST_STATES_T state = HEATERS_SELF_TEST_MAIN_PRIMARY_HEATER; if ( didTimeout( selfTestElapsedTime, HEATERS_POST_HEAT_UP_TIME_SECONDS ) ) { - setMainPrimaryHeaterPWM ( 0 ); + setMainPrimaryHeaterPWM( 0 ); - F32 convertedTemperature = getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_INTERNAL ); + F32 convertedTemperature = getTemperatureValue( TEMPSENSORS_PRIMARY_HEATER_INTERNAL ); - if ( fabs(convertedTemperature - MAIN_PRIMARY_HEATER_POST_TARGET_TEMPERATURE ) > HEATERS_POST_TEMPERATURE_TOLERANCE ) + if ( fabs( convertedTemperature - MAIN_PRIMARY_HEATER_POST_TARGET_TEMPERATURE ) > HEATERS_POST_TEMPERATURE_TOLERANCE ) { //TODO alarm // TODO POST failed @@ -527,13 +510,13 @@ /*********************************************************************//** * @brief * The handlePrimaryHeaterStateOff function handles the primary heaters at - * off state + * off state. * @details * Inputs : hasStartPrimaryHeaterRequested, isPrimaryHeaterOn * Outputs : state (PRIMARY_HEATERS_EXEC_STATES_T), isPrimaryHeaterOn * @return state (PRIMARY_HEATERS_EXEC_STATES_T) *************************************************************************/ -static PRIMARY_HEATERS_EXEC_STATES_T handlePrimaryHeaterStateOff ( void ) +static PRIMARY_HEATERS_EXEC_STATES_T handlePrimaryHeaterStateOff( void ) { PRIMARY_HEATERS_EXEC_STATES_T state = PRIMARY_HEATERS_EXEC_STATE_OFF; @@ -543,7 +526,7 @@ #ifndef EMC_TEST_BUILD if ( TOGGLEPRIMAYHEATER() ) { - setPrimaryHeaterTargetTemperature ( 37 ); + setPrimaryHeaterTargetTemperature( 37 ); startPrimaryHeater(); F32 pumpPWM = 1; etpwmSetCmpB( etpwmREG2, (U32)( (S32)( ( pumpPWM * (F32)(etpwmREG2->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); @@ -559,8 +542,8 @@ if ( hasStartPrimaryHeaterRequested ) { - resetHeaterState ( PRIMARY_HEATER ); - setMainPrimaryHeaterPWM ( mainPrimaryHeaterDutyCycle ); + resetHeaterState( PRIMARY_HEATER ); + setMainPrimaryHeaterPWM( mainPrimaryHeaterDutyCycle ); isPrimaryHeaterOn = TRUE; hasStartPrimaryHeaterRequested = FALSE; state = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; @@ -574,23 +557,22 @@ /*********************************************************************//** * @brief * The handlePrimaryHeaterStateControlToTarget function handles the primary - * heaters at control state when the heaters are active + * heaters at control state when the heaters are active. * @details * Inputs : primaryHeaterTimerCounter, mainPrimaryHeaterDutyCycle, * smallPrimaryHeaterDutyCycle, isPrimaryHeaterOn * Outputs : primaryHeaterTimerCounter, mainPrimaryHeaterDutyCycle, * smallPrimaryHeaterDutyCycle * @return state (PRIMARY_HEATERS_EXEC_STATES_T) *************************************************************************/ -static PRIMARY_HEATERS_EXEC_STATES_T handlePrimaryHeaterStateControlToTarget ( void ) +static PRIMARY_HEATERS_EXEC_STATES_T handlePrimaryHeaterStateControlToTarget( void ) { PRIMARY_HEATERS_EXEC_STATES_T state = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; if ( ++primaryHeaterTimerCounter >= CONTROLLER_CHECK_INTERVAL_COUNT ) { - F32 outletTemp = getTemperatureValue ( TEMPSENSORS_OUTLET_PRIMARY_HEATER ); - mainPrimaryHeaterDutyCycle = runPIController ( PI_CONTROLLER_ID_PRIMARY_HEATER, - primaryHeaterTargetTemperature, outletTemp ); + F32 outletTemp = getTemperatureValue( TEMPSENSORS_OUTLET_PRIMARY_HEATER ); + mainPrimaryHeaterDutyCycle = runPIController( PI_CONTROLLER_ID_PRIMARY_HEATER, primaryHeaterTargetTemperature, outletTemp ); if ( mainPrimaryHeaterDutyCycle >= MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE ) { @@ -599,14 +581,14 @@ // the rest to the small primary heater smallPrimaryHeaterDutyCycle = mainPrimaryHeaterDutyCycle - MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE; mainPrimaryHeaterDutyCycle = MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE; - setMainPrimaryHeaterPWM ( mainPrimaryHeaterDutyCycle ); - setSmallPrimaryHeaterPWM ( smallPrimaryHeaterDutyCycle ); + setMainPrimaryHeaterPWM( mainPrimaryHeaterDutyCycle ); + setSmallPrimaryHeaterPWM( smallPrimaryHeaterDutyCycle ); } else { - setMainPrimaryHeaterPWM ( mainPrimaryHeaterDutyCycle ); + setMainPrimaryHeaterPWM( mainPrimaryHeaterDutyCycle ); smallPrimaryHeaterDutyCycle = HEATERS_MIN_DUTY_CYCLE; - setSmallPrimaryHeaterPWM ( smallPrimaryHeaterDutyCycle ); + setSmallPrimaryHeaterPWM( smallPrimaryHeaterDutyCycle ); } primaryHeaterTimerCounter = 0; } @@ -642,13 +624,13 @@ /*********************************************************************//** * @brief * The handleTrimmerHeaterStateOff function handles the trimmer heater at - * off state + * off state. * @details * Inputs : hasStartTrimmerHeaterRequested, isTrimmerHeaterOn * Outputs : state (TRIMMER_HEATER_EXEC_STATES_T), isTrimmerHeaterOn * @return state (TRIMMER_HEATER_EXEC_STATES_T) *************************************************************************/ -static TRIMMER_HEATER_EXEC_STATES_T handleTrimmerHeaterStateOff ( void ) +static TRIMMER_HEATER_EXEC_STATES_T handleTrimmerHeaterStateOff( void ) { TRIMMER_HEATER_EXEC_STATES_T state = TRIMMER_HEATER_EXEC_STATE_OFF; @@ -658,7 +640,7 @@ #ifndef EMC_TEST_BUILD if ( TOGGLEPRIMAYHEATER() ) { - setTrimmerHeaterTargetTemperature ( 38 ); + setTrimmerHeaterTargetTemperature( 38 ); startTrimmerHeater(); //F32 pumpPWM = 1; //etpwmSetCmpB( etpwmREG2, (U32)( (S32)( ( pumpPWM * (F32)(etpwmREG2->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); @@ -677,10 +659,10 @@ if ( hasStartTrimmerHeaterRequested ) { - resetHeaterState ( TRIMMER_HEATER ); + resetHeaterState( TRIMMER_HEATER ); isTrimmerHeaterOn = TRUE; hasStartTrimmerHeaterRequested = FALSE; - setTrimmerHeaterPWM ( trimmerHeaterDutyCycle ); + setTrimmerHeaterPWM( trimmerHeaterDutyCycle ); state = TRIMMER_HEATER_EXEC_STATE_CONTROL_TO_TARGET; } @@ -692,23 +674,21 @@ /*********************************************************************//** * @brief * The handleTrimmerHeaterControlToTarget function handles the trimmer - * heater at control state when the heater is active + * heater at control state when the heater is active. * @details * Inputs : trimmerHeaterTimerCounter, trimmerHeaterDutyCycle - * Outputs : trimmerHeaterTimerCounter, trimmerHeaterDutyCycle, - * isTrimmerHeaterOn + * Outputs : trimmerHeaterTimerCounter, trimmerHeaterDutyCycle, isTrimmerHeaterOn * @return state (TRIMMER_HEATER_EXEC_STATES_T) *************************************************************************/ -static TRIMMER_HEATER_EXEC_STATES_T handleTrimmerHeaterControlToTarget ( void ) +static TRIMMER_HEATER_EXEC_STATES_T handleTrimmerHeaterControlToTarget( void ) { TRIMMER_HEATER_EXEC_STATES_T state = TRIMMER_HEATER_EXEC_STATE_CONTROL_TO_TARGET; if ( ++trimmerHeaterTimerCounter >= CONTROLLER_CHECK_INTERVAL_COUNT ) { - F32 outletTemp = getTemperatureValue ( TEMPSENSORS_OUTLET_REDUNDANCY ); - trimmerHeaterDutyCycle = runPIController ( PI_CONTROLLER_ID_TRIMMER_HEATER, - trimmerHeaterTargetTemperature, outletTemp ); - setTrimmerHeaterPWM ( trimmerHeaterDutyCycle ); + F32 outletTemp = getTemperatureValue( TEMPSENSORS_OUTLET_REDUNDANCY ); + trimmerHeaterDutyCycle = runPIController( PI_CONTROLLER_ID_TRIMMER_HEATER, trimmerHeaterTargetTemperature, outletTemp ); + setTrimmerHeaterPWM( trimmerHeaterDutyCycle ); trimmerHeaterTimerCounter = 0; } @@ -746,82 +726,78 @@ /*********************************************************************//** * @brief - * The setMainPrimaryHeaterPWM function sets the PWM of the main primary - * heater + * The setMainPrimaryHeaterPWM function sets the PWM of the main primary heater. * @details * Inputs : none - * Outputs : none + * Outputs : Sets the PWM duty cycle for the main primary heater * @param : pwm PWM duty cycle to set for 1st primary heater element * @return none *************************************************************************/ -static void setMainPrimaryHeaterPWM ( F32 pwm ) +static void setMainPrimaryHeaterPWM( F32 pwm ) { etpwmSetCmpA( etpwmREG1, (U32)( (S32)( ( pwm * (F32)(etpwmREG1->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); } /*********************************************************************//** * @brief - * The setSmallPrimaryHeaterPWM function sets the PWM of the small primary - * heater + * The setSmallPrimaryHeaterPWM function sets the PWM of the small primary heater. * @details * Inputs : none - * Outputs : none - * @param: pwm : PWM duty cycle to set for 2nd primary heater element + * Outputs : Sets the PWM duty cycle for the small primary heater + * @param: pwm PWM duty cycle to set for 2nd primary heater element * @return none *************************************************************************/ -static void setSmallPrimaryHeaterPWM ( F32 pwm ) +static void setSmallPrimaryHeaterPWM( F32 pwm ) { etpwmSetCmpB( etpwmREG1, (U32)( (S32)( ( pwm * (F32)(etpwmREG1->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); } /*********************************************************************//** * @brief - * The setTrimmerHeaterPWM function sets the PWM of the trimmer heater + * The setTrimmerHeaterPWM function sets the PWM of the trimmer heater. * @details * Inputs : none - * Outputs : none - * @param : pwm : PWM duty cycle to set for trimmer heater + * Outputs : Sets the PWM duty cycle for the trimmer heater + * @param : pwm PWM duty cycle to set for trimmer heater * @return none *************************************************************************/ -static void setTrimmerHeaterPWM ( F32 pwm ) +static void setTrimmerHeaterPWM( F32 pwm ) { etpwmSetCmpA( etpwmREG3, (U32)( (S32)( ( pwm * (F32)(etpwmREG3->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); } /*********************************************************************//** * @brief - * The resetHeaterState function resets the PI controller of the selected - * heater + * The resetHeaterState function resets the PI controller of the selected heater. * @details * Inputs : mainPrimaryHeaterDutyCycle, trimmerHeaterDutyCycle * Outputs : mainPrimaryHeaterDutyCycle, trimmerHeaterDutyCycle - * @param : heater : Enumeration of the heater for which the PI controller will be reset + * @param : heater enumeration of the heater for which the PI controller will be reset * @return none *************************************************************************/ static void resetHeaterState ( NAME_OF_HEATER_T heater ) { if ( heater == PRIMARY_HEATER ) { mainPrimaryHeaterDutyCycle = MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE; - resetPIController ( PI_CONTROLLER_ID_PRIMARY_HEATER, MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE ); + resetPIController( PI_CONTROLLER_ID_PRIMARY_HEATER, MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE ); } else if ( heater == TRIMMER_HEATER ) { trimmerHeaterDutyCycle = TRIMMER_HEATER_MAX_DUTY_CYCLE; - resetPIController ( PI_CONTROLLER_ID_TRIMMER_HEATER, TRIMMER_HEATER_MAX_DUTY_CYCLE ); + resetPIController( PI_CONTROLLER_ID_TRIMMER_HEATER, TRIMMER_HEATER_MAX_DUTY_CYCLE ); } } /*********************************************************************//** * @brief - * The getPublishHeatersDataInterval function set the publish interval - * either from override or from actual data + * The getPublishHeatersDataInterval function gets the publish interval. * @details * Inputs : heatersDataPublishInterval * Outputs : none * @return result *************************************************************************/ -U32 getPublishHeatersDataInterval ( void ) +U32 getPublishHeatersDataInterval( void ) { U32 result = heatersDataPublishInterval.data; @@ -833,22 +809,20 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The publishTemperatureData function publishes the temperature sensors - * data into the USB debug port at the defined time interval + * data into the USB debug port at the defined time interval. * @details * Inputs : dataPublicationTimerCounter - * Outputs : dataPublicationTimerCounter + * Outputs : Broadcast temperature sensors' data * @return none *************************************************************************/ -static void publishHeatersData ( void ) +static void publishHeatersData( void ) { if ( ++dataPublicationTimerCounter >= getPublishHeatersDataInterval() ) { - broadcastHeatersData ( (U32)(mainPrimaryHeaterDutyCycle*100), - (U32)(smallPrimaryHeaterDutyCycle*100), - (U32)(trimmerHeaterDutyCycle*100) ); + broadcastHeatersData( (U32)(mainPrimaryHeaterDutyCycle*100), (U32)(smallPrimaryHeaterDutyCycle*100), (U32)(trimmerHeaterDutyCycle*100) ); //NOTE: This section will be removed #ifdef DEBUG_ENABLED #ifdef HEATERS_DEBUG @@ -876,16 +850,16 @@ * TEST SUPPORT FUNCTIONS *************************************************************************/ -/************************************************************************* +/*********************************************************************//** * @brief * The testSetHeatersPublishIntervalOverride function overrides the heaters - * publish data time interval + * publish data time interval. * @details * Inputs : heatersDataPublishInterval * Outputs : heatersDataPublishInterval * @return result *************************************************************************/ -BOOL testSetHeatersPublishIntervalOverride ( U32 value ) +BOOL testSetHeatersPublishIntervalOverride( U32 value ) { BOOL result = FALSE; @@ -901,16 +875,16 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The testResetHeatersPublishIntervalOverride function resets the heaters - * publish time interval to its previous time interval + * publish time interval to its previous time interval. * @details * Inputs : heatersDataPublishInterval * Outputs : heatersDataPublishInterval * @return result *************************************************************************/ -BOOL testResetHeatersPublishIntervalOverride ( void ) +BOOL testResetHeatersPublishIntervalOverride( void ) { BOOL result = FALSE; Index: firmware/App/Controllers/Heaters.h =================================================================== diff -u -ra7bf3ca23ea37a61000379facae628a31b3ecc59 -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/Heaters.h (.../Heaters.h) (revision a7bf3ca23ea37a61000379facae628a31b3ecc59) +++ firmware/App/Controllers/Heaters.h (.../Heaters.h) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -18,37 +18,37 @@ #ifndef _HEATERS_H_ #define _HEATERS_H_ -#include "Common.h" +#include "DGCommon.h" /** * @defgroup Heaters Heaters - * @brief Heaters driver modules. - * Controls the Primary and Trimmer Heaters + * @brief Heaters driver modules. Controls the primary and trimmer heaters. * * @addtogroup Heaters * @{ */ -void initHeaters ( void ); +void initHeaters( void ); -void setPrimaryHeaterTargetTemperature ( F32 targetTemp ); -void setTrimmerHeaterTargetTemperature ( F32 targetTemp ); +void setPrimaryHeaterTargetTemperature( F32 targetTemp ); +void setTrimmerHeaterTargetTemperature( F32 targetTemp ); -BOOL startPrimaryHeater ( void ); -BOOL startTrimmerHeater ( void ); +BOOL startPrimaryHeater( void ); +BOOL startTrimmerHeater( void ); -void stopPrimaryHeater ( void ); -void stopTrimmerHeater ( void ); +void stopPrimaryHeater( void ); +void stopTrimmerHeater( void ); -void execHeatersMonitor ( void ); +void execHeatersMonitor( void ); -SELF_TEST_STATUS_T execHeatersSelfTest ( void ); +SELF_TEST_STATUS_T execHeatersSelfTest( void ); -void execPrimaryHeaters ( void ); +void execPrimaryHeaters( void ); +void execTrimmerHeater( void ); -void execTrimmerHeater ( void ); +BOOL testSetHeatersPublishIntervalOverride( U32 value ); +BOOL testResetHeatersPublishIntervalOverride( void ); -BOOL testSetHeatersPublishIntervalOverride ( U32 value ); -BOOL testResetHeatersPublishIntervalOverride ( void ); +/**@}*/ #endif Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -rdc0d9b087c609e71cacdb7f0395cccf29d749c00 -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision dc0d9b087c609e71cacdb7f0395cccf29d749c00) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -15,9 +15,9 @@ * ***************************************************************************/ +#include "FPGA.h" #include "LoadCell.h" #include "SystemCommMessages.h" -#include "FPGA.h" #include "TaskPriority.h" /** @@ -27,21 +27,22 @@ // ********** private definitions ********** -#define LOAD_CELL_REPORT_PERIOD (100 / TASK_PRIORITY_INTERVAL) ///< Broadcast load cell values message every 100 ms. -#define LOAD_CELL_SAMPLES_TO_AVERAGE LOAD_CELL_REPORT_PERIOD ///< Averaging load cell data over the reporting interval. -#define LOAD_CELL_AVERAGE_MULTIPLIER (1.0 / (F32)LOAD_CELL_SAMPLES_TO_AVERAGE) ///< Optimization - multiplying is faster than dividing. +#define LOAD_CELL_REPORT_PERIOD (100 / TASK_PRIORITY_INTERVAL) ///< Broadcast load cell values message every 100 ms. +#define LOAD_CELL_SAMPLES_TO_AVERAGE (100 / TASK_PRIORITY_INTERVAL) ///< Averaging load cell data over the reporting interval. +#define LOAD_CELL_AVERAGE_MULTIPLIER (1.0 / (F32)LOAD_CELL_SAMPLES_TO_AVERAGE) ///< Optimization - multiplying is faster than dividing. // TODO - gain and offset for load cells should be read from NV Data calibration record. -#define ADC2GRAM (0.0894 * 1.1338) ///< Conversion factor from ADC counts to grams. -#define LOAD_CELL_ZERO_OFFSET -1215.0 ///< Zero offset (in grams). TODO - right now, this is empty reservoir weight. +#define ADC2GRAM (0.0894 * 1.1338) ///< Conversion factor from ADC counts to grams. +#define LOAD_CELL_ZERO_OFFSET -1215.0 ///< Zero offset (in grams). TODO - right now, this is empty reservoir weight. // ********** private data ********** -static OVERRIDE_U32_T loadCellDataPublishInterval = { LOAD_CELL_REPORT_PERIOD, LOAD_CELL_REPORT_PERIOD, 0, 0 }; ///< Broadcast load cell data interval in ms/task interval. -static U32 measuredLoadCellReadingsRaw[ NUM_OF_LOAD_CELLS ]; ///< Latest measured raw load cell readings. -static U32 measuredLoadCellReadingsSum[ NUM_OF_LOAD_CELLS ]; ///< Raw load cell sums for averaging. -static OVERRIDE_F32_T filteredLoadCellWeights[ NUM_OF_LOAD_CELLS ]; ///< Latest filtered load cell weights. -static U32 loadCellFilterTimerCount = 0; ///< used to schedule load cell filtering. -static U32 loadCellDataPublicationTimerCounter = 0; ///< used to schedule load cell data publication to CAN bus. +static OVERRIDE_U32_T loadCellDataPublishInterval = { LOAD_CELL_REPORT_PERIOD, + LOAD_CELL_REPORT_PERIOD, 0, 0 }; ///< Broadcast load cell data publish interval. +static U32 measuredLoadCellReadingsRaw[ NUM_OF_LOAD_CELLS ]; ///< Latest measured raw load cell readings. +static U32 measuredLoadCellReadingsSum[ NUM_OF_LOAD_CELLS ]; ///< Raw load cell sums for averaging. +static OVERRIDE_F32_T filteredLoadCellWeights[ NUM_OF_LOAD_CELLS ]; ///< Latest filtered load cell weights. +static U32 loadCellFilterTimerCount = 0; ///< Load cell filtering timer count. +static U32 loadCellDataPublicationTimerCounter = 0; ///< Load cell data publication timer counter to CAN bus. // ********** private function prototypes ********** @@ -73,13 +74,14 @@ /*********************************************************************//** * @brief - * The execLoadCell function gets load cell data from FPGA and advertises them over CAN. + * The execLoadCell function gets load cell data from FPGA, applies filters, + * and advertises them over CAN. * @details * Inputs : none - * Outputs : Advertising load call data. + * Outputs : Filtered and advertised load cell data. * @return none *************************************************************************/ -void execLoadCell(void) +void execLoadCell( void ) { // get latest raw load cell readings measuredLoadCellReadingsRaw[ LOAD_CELL_A1 ] = getFPGALoadCellA1(); @@ -127,7 +129,7 @@ /*********************************************************************//** * @brief - * The getLoadCellFilteredWeight function gets the measured filtered load cell \n + * The getLoadCellFilteredWeight function gets the measured filtered load cell * weight for a given load cell ID. * @details * Inputs : filteredLoadCellWeights[] @@ -160,8 +162,7 @@ /*********************************************************************//** * @brief - * The getLoadCellDataPublishInterval function gets the load cell data \n - * publication interval. + * The getLoadCellDataPublishInterval function gets the load cell data publish interval. * @details * Inputs : loadCellDataPublishInterval * Outputs : none @@ -184,11 +185,9 @@ * TEST SUPPORT FUNCTIONS *************************************************************************/ - /*********************************************************************//** * @brief - * The testSetLoadCellOverride function overrides the measured \n - * load cell A1. + * The testSetLoadCellOverride function overrides the measured load cell data. * @details * Inputs : none * Outputs : filteredLoadCellWeights[] @@ -205,7 +204,7 @@ if ( TRUE == isTestingActivated() ) { result = TRUE; - filteredLoadCellWeights[ loadCellID ].ovData = value; + filteredLoadCellWeights[ loadCellID ].ovData = value; filteredLoadCellWeights[ loadCellID ].override = OVERRIDE_KEY; } } @@ -215,8 +214,7 @@ /*********************************************************************//** * @brief - * The testResetLoadCellOverride function resets the override of the \n - * load cell A1. + * The testResetLoadCellOverride function resets the override of the load cell. * @details * Inputs : none * Outputs : filteredLoadCellWeights[] @@ -233,7 +231,7 @@ { result = TRUE; filteredLoadCellWeights[ loadCellID ].override = OVERRIDE_RESET; - filteredLoadCellWeights[ loadCellID ].ovData = filteredLoadCellWeights[ loadCellID ].ovInitData; + filteredLoadCellWeights[ loadCellID ].ovData = filteredLoadCellWeights[ loadCellID ].ovInitData; } } @@ -242,7 +240,7 @@ /*********************************************************************//** * @brief - * The testSetLoadCellDataPublishIntervalOverride function overrides the \n + * The testSetLoadCellDataPublishIntervalOverride function overrides the * load cell data publish interval. * @details * Inputs : none @@ -268,7 +266,7 @@ /*********************************************************************//** * @brief - * The testResetLoadCellDataPublishIntervalOverride function resets the override \n + * The testResetLoadCellDataPublishIntervalOverride function resets the override * of the load cell data publish interval. * @details * Inputs : none Index: firmware/App/Controllers/LoadCell.h =================================================================== diff -u -ra7bf3ca23ea37a61000379facae628a31b3ecc59 -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/LoadCell.h (.../LoadCell.h) (revision a7bf3ca23ea37a61000379facae628a31b3ecc59) +++ firmware/App/Controllers/LoadCell.h (.../LoadCell.h) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -22,8 +22,7 @@ /** * @defgroup LoadCells LoadCells - * @brief LoadCells monitor module. - * Monitors and filters load cell sensor readings. + * @brief LoadCells monitor module. Monitors and filters load cell sensor readings. * * @addtogroup LoadCells * @{ @@ -34,11 +33,11 @@ /// Enumeration of load cells. typedef enum LoadCells { - LOAD_CELL_A1 = 0, ///< Load cell A1. - LOAD_CELL_A2, ///< Load cell A2. - LOAD_CELL_B1, ///< Load cell B1. - LOAD_CELL_B2, ///< Load cell B2. - NUM_OF_LOAD_CELLS ///< Number of reservoirs. + LOAD_CELL_A1 = 0, ///< Load cell A1 + LOAD_CELL_A2, ///< Load cell A2 + LOAD_CELL_B1, ///< Load cell B1 + LOAD_CELL_B2, ///< Load cell B2 + NUM_OF_LOAD_CELLS ///< Number of reservoirs } LOAD_CELL_ID_T; // ********** public function prototypes ********** @@ -55,4 +54,4 @@ /**@}*/ -#endif /* APP_CONTROLLERS_LOADCELL_H_ */ +#endif Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -rdc0d9b087c609e71cacdb7f0395cccf29d749c00 -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision dc0d9b087c609e71cacdb7f0395cccf29d749c00) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -16,11 +16,11 @@ ***************************************************************************/ #include -#include "Pressures.h" #include "AlarmMgmt.h" #include "FPGA.h" #include "InternalADC.h" #include "OperationModes.h" +#include "Pressures.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "TaskPriority.h" @@ -40,46 +40,46 @@ #define PRESSURE_SAMPLES_TO_AVERAGE (200 / TASK_PRIORITY_INTERVAL) ///< Averaging pressure data over the reporting interval. #define PRESSURE_AVERAGE_MULTIPLIER (1.0 / (F32)PRESSURE_SAMPLES_TO_AVERAGE) ///< Optimization - multiplying is faster than dividing. -#define PRESSURE_SENSORS_ADC_BITS 12U ///< Pressure sensors ADC bits -#define PRESSURE_SENSORS_ADC_MAX_COUNT ( pow(2, PRESSURE_SENSORS_ADC_BITS) - 1 ) ///< Pressure sensors max ADC count +#define PRESSURE_SENSORS_ADC_BITS 12U ///< Pressure sensors ADC bits. +#define PRESSURE_SENSORS_ADC_MAX_COUNT ( pow(2, PRESSURE_SENSORS_ADC_BITS) - 1 ) ///< Pressure sensors max ADC count. -#define MIN_INLET_WATER_PRESSURE 25 ///< Minimum water input pressure -#define INLET_WATER_PRESSURE_PERSISTENCE_COUNT ( 5 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Persistence count for pressure out of range error -#define PRESSURES_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< interval (ms/task time) at which the pressures data is published on the CAN bus. +#define MIN_INLET_WATER_PRESSURE 25 ///< Minimum water input pressure. +#define INLET_WATER_PRESSURE_PERSISTENCE_COUNT ( 5 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Persistence count for pressure out of range error. +#define PRESSURES_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the pressures data is published on the CAN bus. /// Defined states for the pressures monitor state machine. typedef enum PresOccl_States { - PRESSURE_INIT_STATE = 0, ///< Initialization state. - PRESSURE_CONTINUOUS_READ_STATE, ///< Continuous read sensors state. - NUM_OF_PRESSURE_STATES ///< Number of pressure monitor states. + PRESSURE_INIT_STATE = 0, ///< Initialization state + PRESSURE_CONTINUOUS_READ_STATE, ///< Continuous read sensors state + NUM_OF_PRESSURE_STATES ///< Number of pressure monitor states } PRESSURE_STATE_T; /// Defined states for the pressures self test state machine. typedef enum Pressures_Self_Test_States { - PRESSURE_SELF_TEST_STATE_START = 0, ///< Self test start state. - PRESSURE_TEST_STATE_IN_PROGRESS, ///< Self test in progress state. - PRESSURE_TEST_STATE_COMPLETE, ///< Self test completed state. - NUM_OF_PRESSURE_SELF_TEST_STATES ///< Number of pressure self test states. + PRESSURE_SELF_TEST_STATE_START = 0, ///< Self test start state + PRESSURE_TEST_STATE_IN_PROGRESS, ///< Self test in progress state + PRESSURE_TEST_STATE_COMPLETE, ///< Self test completed state + NUM_OF_PRESSURE_SELF_TEST_STATES ///< Number of pressure self test states } PRESSURE_SELF_TEST_STATE_T; // ********** private data ********** -static PRESSURE_STATE_T pressuresState; ///< current state of pressure monitor state machine. -static U32 pressuresDataPublicationTimerCounter = 0; ///< used to schedule pressure data publication to CAN bus. +static PRESSURE_STATE_T pressuresState; ///< current state of pressure monitor state machine. +static U32 pressuresDataPublicationTimerCounter = 0; ///< used to schedule pressure data publication to CAN bus. -/// interval (in ms/task interval) at which to publish pressures data to CAN bus. -static OVERRIDE_U32_T pressuresDataPublishInterval = { PRESSURES_DATA_PUB_INTERVAL, PRESSURES_DATA_PUB_INTERVAL, 0, 0 }; -static OVERRIDE_F32_T pressures[ NUM_OF_PRESSURE_SENSORS ]; ///< Measured pressure from sensors. +static OVERRIDE_U32_T pressuresDataPublishInterval = { PRESSURES_DATA_PUB_INTERVAL, + PRESSURES_DATA_PUB_INTERVAL, 0, 0 }; /// Pressure data publish interval. +static OVERRIDE_F32_T pressures[ NUM_OF_PRESSURE_SENSORS ]; ///< Measured pressure from sensors. -static S32 measuredPressureReadingsSum[ NUM_OF_PRESSURE_SENSORS ]; ///< Raw pressure sensor sums for averaging. -static U32 pressureFilterCounter = 0; ///< Used to schedule pressure sensor filtering. -static U32 inletWaterLowPressureCounter = 0; ///< Persistence counter for inlet water low pressure -static U32 inletWaterPressureInRangeCounter = 0; ///< Persistence counter for inlet water in range pressure +static S32 measuredPressureReadingsSum[ NUM_OF_PRESSURE_SENSORS ]; ///< Raw pressure sensor sums for averaging. +static U32 pressureFilterCounter = 0; ///< Used to schedule pressure sensor filtering. +static U32 inletWaterLowPressureCounter = 0; ///< Persistence counter for inlet water low pressure. +static U32 inletWaterPressureInRangeCounter = 0; ///< Persistence counter for inlet water in range pressure. -static PRESSURE_SELF_TEST_STATE_T pressuresSelfTestState; ///< Current pressure self test state. -static SELF_TEST_STATUS_T pressuresSelfTestResult; ///< Self test result of the Pressures module +static PRESSURE_SELF_TEST_STATE_T pressuresSelfTestState; ///< Current pressure self test state. +static SELF_TEST_STATUS_T pressuresSelfTestResult; ///< Self test result of the Pressures module. // ********** private function prototypes ********** @@ -121,7 +121,8 @@ /*********************************************************************//** * @brief - * The execPressures function executes the pressure monitor. + * The execPressures function executes the pressures' monitor state machine + * and publish pressures' data. * @details * Inputs : pressuresState * Outputs : pressuresState @@ -152,11 +153,11 @@ /*********************************************************************//** * @brief - * The handlePressuresInitState function handles the pressures initialize state \n + * The handlePressuresInitState function handles the pressures initialize state * of the pressures monitor state machine. * @details - * Inputs : TBD - * Outputs : TBD + * Inputs : none + * Outputs : none * @return next state *************************************************************************/ static PRESSURE_STATE_T handlePressuresInitState( void ) @@ -168,10 +169,10 @@ /*********************************************************************//** * @brief - * The handlePressuresContReadState function handles the continuous read state \n + * The handlePressuresContReadState function handles the continuous read state * of the pressures monitor state machine. * @details - * Inputs : TBD + * Inputs : pressureFilterCounter * Outputs : pressure sensor values updated * @return next state *************************************************************************/ @@ -222,8 +223,7 @@ /*********************************************************************//** * @brief - * The getPublishPresOcclDataInterval function gets the pressure/occlusion data \n - * publication interval. + * The getPublishPressuresDataInterval function gets the pressure data publish internval. * @details * Inputs : pressuresDataPublishInterval * Outputs : none @@ -243,11 +243,11 @@ /*********************************************************************//** * @brief - * The checkInletPressures function checks inlet water pressure value + * The checkInletPressure function checks inlet water pressure value * and triggers an alarm when pressure value is out of allowed range. * @details - * Inputs : pressures[] - * Outputs : none + * Inputs : RO pump inlet pressure sensor value + * Outputs : Triggers or clears pressure persistent alarm * @return none *************************************************************************/ void checkInletPressure( void ) @@ -278,7 +278,8 @@ * The getMeasuredArterialPressure function gets the current arterial pressure. * @details * Inputs : arterialPressure - * Outputs : none + * Outputs : none + * @param pressureID pressure sensor ID * @return the current arterial pressure (in mmHg). *************************************************************************/ F32 getMeasuredDGPressure( U32 pressureID ) @@ -306,11 +307,10 @@ /*********************************************************************//** * @brief - * The publishPressuresData function publishes DG pressures data at the \n - * set interval. + * The publishPressuresData function publishes DG pressures data at a set interval. * @details * Inputs : pressuresDataPublicationTimerCounter - * Outputs : DG Pressures data are published to CAN bus. + * Outputs : Pressures data are published to CAN bus * @return none *************************************************************************/ static void publishPressuresData( void ) @@ -343,8 +343,7 @@ /*********************************************************************//** * @brief - * The execPressureSelfTest function executes the state machine for the \n - * Pressures self test. + * The execPressureSelfTest function executes the pressures self test's state machine. * @details * Inputs : pressuresSelfTestState * Outputs : pressuresSelfTestState @@ -381,11 +380,10 @@ * @brief * The handleSelfTestADCCheck function checks whether the ADC reads and * report status back. If the reads are above the maximum 12bit ADC count - * or below 0, it will throw an alarm. + * or equals zero, it will throw an alarm. * @details - * Inputs : none - * Outputs : none - * @param none + * Inputs : ADC reading for RO pump inlet pressure sensor + * Outputs : Performed ADC check self test. * @return result (SELF_TEST_STATUS_T) *************************************************************************/ static SELF_TEST_STATUS_T handleSelfTestADCCheck( void ) @@ -407,15 +405,14 @@ * TEST SUPPORT FUNCTIONS *************************************************************************/ - /*********************************************************************//** * @brief - * The testSetPressuresDataPublishIntervalOverride function overrides the \n - * pressure and occlusion data publish interval. + * The testSetPressuresDataPublishIntervalOverride function overrides the + * pressure data publish interval. * @details * Inputs : none * Outputs : pressuresDataPublishInterval - * @param value override pressure and occlusion data publish interval with (in ms) + * @param value value to override pressure data publish interval with (in ms) * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testSetPressuresDataPublishIntervalOverride( U32 value ) @@ -436,7 +433,7 @@ /*********************************************************************//** * @brief - * The testResetPressuresDataPublishIntervalOverride function resets the override \n + * The testResetPressuresDataPublishIntervalOverride function resets the override * of the pressure and occlusion data publish interval. * @details * Inputs : none @@ -459,12 +456,12 @@ /*********************************************************************//** * @brief - * The testSetDGPressureSensorOverride function overrides the value of the \n + * The testSetDGPressureSensorOverride function overrides the value of the * specified pressure sensor with a given value. * Inputs : none * Outputs : pressures[] - * @param sensor ID of pressure sensor to override for - * @param value override value for the given pressure sensor ID + * @param sensor pressure sensor ID + * @param value override value for pressure data * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testSetDGPressureSensorOverride( U32 sensor, F32 value ) @@ -491,7 +488,7 @@ * @details * Inputs : none * Outputs : pressures[] - * @param value ID of sensor to reset override pressure for + * @param sensor pressure sensor ID * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testResetDGPressureSensorOverride( U32 sensor ) Index: firmware/App/Controllers/Pressures.h =================================================================== diff -u -r43ec4d03e577681a98ea4ed58082ffd6ab012fd3 -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/Pressures.h (.../Pressures.h) (revision 43ec4d03e577681a98ea4ed58082ffd6ab012fd3) +++ firmware/App/Controllers/Pressures.h (.../Pressures.h) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -34,11 +34,11 @@ /// Enumeration of pressure sensors monitored by this module. typedef enum PressureSensors { - PRESSURE_SENSOR_RO_PUMP_INLET = 0, ///< RO pump pressure sensor. - PRESSURE_SENSOR_RO_PUMP_OUTLET, ///< RO pump pressure sensor. - PRESSURE_SENSOR_DRAIN_PUMP_INLET, ///< drain pump inlet pressure. - PRESSURE_SENSOR_DRAIN_PUMP_OUTLET, ///< drain pump outlet pressure. - NUM_OF_PRESSURE_SENSORS ///< Number of pressure sensors. + PRESSURE_SENSOR_RO_PUMP_INLET = 0, ///< RO pump pressure sensor + PRESSURE_SENSOR_RO_PUMP_OUTLET, ///< RO pump pressure sensor + PRESSURE_SENSOR_DRAIN_PUMP_INLET, ///< drain pump inlet pressure + PRESSURE_SENSOR_DRAIN_PUMP_OUTLET, ///< drain pump outlet pressure + NUM_OF_PRESSURE_SENSORS ///< Number of pressure sensors } PRESSURE_SENSORS_T; // ********** public function prototypes ********** Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -rdc0d9b087c609e71cacdb7f0395cccf29d749c00 -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision dc0d9b087c609e71cacdb7f0395cccf29d749c00) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -24,11 +24,11 @@ #include "OperationModes.h" #include "PIControllers.h" #include "Pressures.h" +#include "ROPump.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "TaskPriority.h" #include "Timers.h" -#include "ROPump.h" #ifdef EMC_TEST_BUILD #include "Heaters.h" #endif @@ -43,40 +43,40 @@ // ********** private definitions ********** -#define RO_PUMP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< interval (ms/task time) at which the RO Pump data is published on the CAN bus +#define RO_PUMP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the RO Pump data is published on the CAN bus. -#define MAX_RO_PUMP_PWM_STEP_CHANGE 0.01 ///< max duty cycle change for controller -#define MAX_RO_PUMP_PWM_DUTY_CYCLE 0.99 ///< max duty cycle -#define MIN_RO_PUMP_PWM_DUTY_CYCLE 0.00 ///< min duty cycle +#define MAX_RO_PUMP_PWM_STEP_CHANGE 0.01 ///< Max duty cycle change for controller. +#define MAX_RO_PUMP_PWM_DUTY_CYCLE 0.99 ///< Max duty cycle. +#define MIN_RO_PUMP_PWM_DUTY_CYCLE 0.00 ///< Min duty cycle. -#define ROP_CONTROL_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the RO pump is controlled -#define ROP_P_COEFFICIENT 0.0020 ///< P term for RO pump control -#define ROP_I_COEFFICIENT 0.0015 ///< I term for RO pump control +#define ROP_CONTROL_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the RO pump is controlled. +#define ROP_P_COEFFICIENT 0.0020 ///< P term for RO pump control. +#define ROP_I_COEFFICIENT 0.0015 ///< I term for RO pump control. -#define FLOW_SENSOR_ZERO_READING 0xFFFF ///< Flow sensor reading indicates zero flow (or flow lower than can be detected by sensor) +#define FLOW_SENSOR_ZERO_READING 0xFFFF ///< Flow sensor reading indicates zero flow (or flow lower than can be detected by sensor). #define FLOW_SAMPLES_TO_AVERAGE (250 / TASK_PRIORITY_INTERVAL) ///< Averaging flow data over 250 ms intervals. #define FLOW_AVERAGE_MULTIPLIER (1.0 / (F32)FLOW_SAMPLES_TO_AVERAGE) ///< Optimization - multiplying is faster than dividing. + +// TODO - this is a place holder for real conversion +#define ROP_PSI_TO_PWM_DC(p) ( 0.2 + ( (F32)((p) - 100) * 0.01 ) ) ///< conversion factor from target PSI to PWM duty cycle estimate. +#define RO_FLOW_ADC_TO_LPM_FACTOR 10909.0909 ///< conversion factor from ADC counts to LPM (liters/min) for RO flow rate (multiply this by inverse of FPGA reading). -#define ROP_PSI_TO_PWM_DC(p) ( 0.2 + ( (F32)((p) - 100) * 0.01 ) ) ///< conversion factor from target PSI to PWM duty cycle estimate TODO - this is a place holder for real conversion - -#define RO_FLOW_ADC_TO_LPM_FACTOR 10909.0909 ///< conversion factor from ADC counts to LPM (liters/min) for RO flow rate (multiply this by inverse of FPGA reading). - /// Enumeration of RO pump states. typedef enum ROPump_States { - RO_PUMP_OFF_STATE = 0, ///< RO pump off state. - RO_PUMP_CONTROL_TO_TARGET_STATE, ///< RO pump control to target pressure state. - NUM_OF_RO_PUMP_STATES ///< Number of RO pump states. + RO_PUMP_OFF_STATE = 0, ///< RO pump off state + RO_PUMP_CONTROL_TO_TARGET_STATE, ///< RO pump control to target pressure state + NUM_OF_RO_PUMP_STATES ///< Number of RO pump states } RO_PUMP_STATE_T; /// Enumeration of RO pump self test states. typedef enum ROPump_Self_Test_States { - RO_PUMP_SELF_TEST_STATE_START = 0, ///< RO pump self test start state. - RO_PUMP_TEST_STATE_IN_PROGRESS, ///< RO pump self tests in progress state. - RO_PUMP_TEST_STATE_COMPLETE, ///< RO pump self tests completed state. - NUM_OF_RO_PUMP_SELF_TEST_STATES ///< Number of RO pump self test states. + RO_PUMP_SELF_TEST_STATE_START = 0, ///< RO pump self test start state + RO_PUMP_TEST_STATE_IN_PROGRESS, ///< RO pump self tests in progress state + RO_PUMP_TEST_STATE_COMPLETE, ///< RO pump self tests completed state + NUM_OF_RO_PUMP_SELF_TEST_STATES ///< Number of RO pump self test states } RO_PUMP_SELF_TEST_STATE_T; // TODO - test code - remove later @@ -87,26 +87,27 @@ // ********** private data ********** -static RO_PUMP_STATE_T roPumpState = RO_PUMP_OFF_STATE; ///< current state of RO pump controller state machine -static U32 roPumpDataPublicationTimerCounter = 0; ///< used to schedule RO pump data publication to CAN bus -static BOOL isROPumpOn = FALSE; ///< RO pump is currently running -static F32 roPumpPWMDutyCyclePct = 0.0; ///< initial RO pump PWM duty cycle -static F32 roPumpPWMDutyCyclePctSet = 0.0; ///< currently set RO pump PWM duty cycle -static PUMP_CONTROL_MODE_T roPumpControlMode = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< requested RO pump control mode. -static PUMP_CONTROL_MODE_T roPumpControlModeSet = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< currently set RO pump control mode. +static RO_PUMP_STATE_T roPumpState = RO_PUMP_OFF_STATE; ///< Current state of RO pump controller state machine. +static U32 roPumpDataPublicationTimerCounter = 0; ///< RO pump data publication timer counter. +static BOOL isROPumpOn = FALSE; ///< RO pump is currently running. +static F32 roPumpPWMDutyCyclePct = 0.0; ///< Initial RO pump PWM duty cycle. +static F32 roPumpPWMDutyCyclePctSet = 0.0; ///< Currently set RO pump PWM duty cycle. +static PUMP_CONTROL_MODE_T roPumpControlMode = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< Requested RO pump control mode. +static PUMP_CONTROL_MODE_T roPumpControlModeSet = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< Currently set RO pump control mode. -static OVERRIDE_U32_T roPumpDataPublishInterval = { RO_PUMP_DATA_PUB_INTERVAL, RO_PUMP_DATA_PUB_INTERVAL, 0, 0 }; ///< interval (in ms) at which to publish RO flow data to CAN bus. -static OVERRIDE_U32_T targetROPumpPressure = { 0, 0, 0, 0 }; ///< Target RO pressure (in PSI). -static OVERRIDE_F32_T measuredROFlowRateLPM = { 0.0, 0.0, 0.0, 0 }; ///< measured RO flow rate (in LPM). -static F32 measuredROPumpPressure = 0.0; ///< measured RO pressure (in PSI). +static OVERRIDE_U32_T roPumpDataPublishInterval = { RO_PUMP_DATA_PUB_INTERVAL, + RO_PUMP_DATA_PUB_INTERVAL, 0, 0 }; ///< Interval (in ms) at which to publish RO flow data to CAN bus. +static OVERRIDE_U32_T targetROPumpPressure = { 0, 0, 0, 0 }; ///< Target RO pressure (in PSI). +static OVERRIDE_F32_T measuredROFlowRateLPM = { 0.0, 0.0, 0.0, 0 }; ///< Measured RO flow rate (in LPM). +static F32 measuredROPumpPressure = 0.0; ///< Measured RO pressure (in PSI). -static S32 measuredFlowReadingsSum = 0; ///< Raw flow reading sums for averaging. -static U32 flowFilterCounter = 0; ///< used to schedule flow filtering. +static S32 measuredFlowReadingsSum = 0; ///< Raw flow reading sums for averaging. +static U32 flowFilterCounter = 0; ///< Flow filtering counter. -static U32 roControlTimerCounter = 0; ///< determines when to perform control on ro pump +static U32 roControlTimerCounter = 0; ///< Timer counter for perform control on RO pump. -static RO_PUMP_SELF_TEST_STATE_T roPumpSelfTestState = RO_PUMP_SELF_TEST_STATE_START; ///< current ro pump self test state -static U32 roPumpSelfTestTimerCount = 0; ///< timer counter for ro pump self test +static RO_PUMP_SELF_TEST_STATE_T roPumpSelfTestState = RO_PUMP_SELF_TEST_STATE_START; ///< Current RO pump self test state. +static U32 roPumpSelfTestTimerCount = 0; ///< Timer counter for RO pump self test. // ********** private function prototypes ********** @@ -130,15 +131,13 @@ stopROPump(); // initialize RO pump PI controller - initializePIController( PI_CONTROLLER_ID_RO_PUMP, MIN_RO_PUMP_PWM_DUTY_CYCLE, - ROP_P_COEFFICIENT, ROP_I_COEFFICIENT, - MIN_RO_PUMP_PWM_DUTY_CYCLE, MAX_RO_PUMP_PWM_DUTY_CYCLE ); + initializePIController( PI_CONTROLLER_ID_RO_PUMP, MIN_RO_PUMP_PWM_DUTY_CYCLE, ROP_P_COEFFICIENT, + ROP_I_COEFFICIENT, MIN_RO_PUMP_PWM_DUTY_CYCLE, MAX_RO_PUMP_PWM_DUTY_CYCLE ); } /*********************************************************************//** * @brief - * The setROPumpTargetPressure function sets a new target pressure for the \n - * RO pump. + * The setROPumpTargetPressure function sets a new target pressure for the RO pump. * @details * Inputs : none * Outputs : targetROPumpPressure, roPumpPWMDutyCyclePct @@ -194,7 +193,7 @@ * @brief * The execROPumpMonitor function executes the RO Pump monitor. * @details - * Inputs : none + * Inputs : flowFilterCounter * Outputs : measuredROPumpPressure, measuredROFlowRateLPM * @return none *************************************************************************/ @@ -261,7 +260,7 @@ /*********************************************************************//** * @brief - * The isROPumpOn function returns the status of RO pump + * The isROPumpOn function returns the status of RO pump. * @details * Inputs : none * Outputs : none @@ -274,8 +273,8 @@ /*********************************************************************//** * @brief - * The handleROPumpOffState function handles the ro pump off state \n - * of the ro pump controller state machine. + * The handleROPumpOffState function handles the RO pump off state of the + * RO pump controller state machine. * @details * Inputs : targetROPumpPressure * Outputs : roPumpPWMDutyCyclePctSet, isROPumpOn @@ -328,8 +327,8 @@ /*********************************************************************//** * @brief - * The handleROPumpControlToTargetState function handles the "control to \n - * target" state of the ro pump controller state machine. + * The handleROPumpControlToTargetState function handles the "control to + * target" state of the RO pump controller state machine. * @details * Inputs : none * Outputs : roPumpState @@ -378,8 +377,8 @@ /*********************************************************************//** * @brief - * The setROPumpControlSignalPWM function sets the PWM duty cycle for \n - * the RO pump to a given %. + * The setROPumpControlSignalPWM function sets the PWM duty cycle for the + * RO pump to a given %. * @details * Inputs : none * Outputs : PWM duty cycle zeroed @@ -408,8 +407,7 @@ /*********************************************************************//** * @brief - * The getPublishROPumpDataInterval function gets the RO pump data \n - * publication interval. + * The getPublishROPumpDataInterval function gets the RO pump data publish interval. * @details * Inputs : roPumpDataPublishInterval * Outputs : none @@ -429,8 +427,7 @@ /*********************************************************************//** * @brief - * The getTargetROPumpPressure function gets the current target RO pump \n - * pressure. + * The getTargetROPumpPressure function gets the current target RO pump pressure. * @details * Inputs : targetROPumpPressure * Outputs : none @@ -450,8 +447,7 @@ /*********************************************************************//** * @brief - * The getMeasuredROFlowRate function gets the measured RO pump \n - * flow rate. + * The getMeasuredROFlowRate function gets the measured RO pump flow rate. * @details * Inputs : measuredROFlowRateLPM * Outputs : none @@ -471,8 +467,7 @@ /*********************************************************************//** * @brief - * The publishROPumpData function publishes RO pump data at the set \n - * interval. + * The publishROPumpData function publishes RO pump data at the set interval. * @details * Inputs : target pressure, measured pressure, measured RO pump speed. * Outputs : RO pump data is published to CAN bus. @@ -513,10 +508,9 @@ * TEST SUPPORT FUNCTIONS *************************************************************************/ - /*********************************************************************//** * @brief - * The testSetROPumpDataPublishIntervalOverride function overrides the \n + * The testSetROPumpDataPublishIntervalOverride function overrides the * RO pump data publish interval. * @details * Inputs : none @@ -542,7 +536,7 @@ /*********************************************************************//** * @brief - * The testResetROPumpDataPublishIntervalOverride function resets the override \n + * The testResetROPumpDataPublishIntervalOverride function resets the override * of the RO pump data publish interval. * @details * Inputs : none @@ -565,8 +559,8 @@ /*********************************************************************//** * @brief - * The testSetTargetROPumpPressureOverride function overrides the target \n - * RO pressure. \n + * The testSetTargetROPumpPressureOverride function overrides the target + * RO pressure. * @details * Inputs : none * Outputs : targetROPumpPressure @@ -590,7 +584,7 @@ /*********************************************************************//** * @brief - * The testResetTargetROPumpPressureOverride function resets the override of the \n + * The testResetTargetROPumpPressureOverride function resets the override of the * target RO pressure. * @details * Inputs : none @@ -615,7 +609,7 @@ /*********************************************************************//** * @brief - * The testSetMeasuredROFlowRateOverride function overrides the measured \n + * The testSetMeasuredROFlowRateOverride function overrides the measured * RO flow rate. * @details * Inputs : none @@ -639,7 +633,7 @@ /*********************************************************************//** * @brief - * The testResetMeasuredROFlowRateOverride function resets the override of the \n + * The testResetMeasuredROFlowRateOverride function resets the override of the * measured RO flow rate. * @details * Inputs : none Index: firmware/App/Controllers/ROPump.h =================================================================== diff -u -ra7bf3ca23ea37a61000379facae628a31b3ecc59 -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/ROPump.h (.../ROPump.h) (revision a7bf3ca23ea37a61000379facae628a31b3ecc59) +++ firmware/App/Controllers/ROPump.h (.../ROPump.h) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -22,7 +22,7 @@ /** * @defgroup ROPump ROPump - * @brief RO Pump monitor/controller module. Controls and monitors the RO pump. + * @brief RO Pump monitor and controller module. Controls and monitors the RO pump. * * @addtogroup ROPump * @{ Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r9b56de8996e71443e7963a5337119ae594188274 -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 9b56de8996e71443e7963a5337119ae594188274) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -32,105 +32,105 @@ // ********** private definitions ********** -#define PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN 16U ///< Primary heater external temperature sensors gain -#define PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 19600U ///< Primary heater external temperature sensors reference resistance -#define PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 1000U ///< Primary heater external temperature sensors zero degree resistance +#define PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN 16U ///< Primary heater external temperature sensors gain. +#define PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 19600U ///< Primary heater external temperature sensors reference resistance. +#define PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 1000U ///< Primary heater external temperature sensors zero degree resistance. -#define COND_SENSORS_TEMP_SENSOR_GAIN 16U ///< Conductivity sensor gain -#define COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE 19600U ///< Conductivity sensor reference resistance -#define COND_SENSORS_TEMP_SENSOR_0_DEGREE_RESISTANCE 1000U ///< Conductivity sensor zero degree resistance +#define COND_SENSORS_TEMP_SENSOR_GAIN 16U ///< Temperature sensor for conductivity gain. +#define COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE 19600U ///< Temperature sensor for conductivity reference resistance. +#define COND_SENSORS_TEMP_SENSOR_0_DEGREE_RESISTANCE 1000U ///< Temperature sensor for conductivity zero degree resistance. -#define TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN 32U ///< Trimmer heater external temperature sensors gain -#define TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 5110U ///< Trimmer heater external temperature sensors reference resistance -#define TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 100U ///< Trimmer heater external temperature sensors zero degree resistance +#define TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN 32U ///< Trimmer heater external temperature sensors gain. +#define TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 5110U ///< Trimmer heater external temperature sensors reference resistance. +#define TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 100U ///< Trimmer heater external temperature sensors zero degree resistance. -#define TEMP_SENSORS_ADC_BITS 24U ///< External temperature sensors ADC bits -#define TEMP_SENSORS_ADC_MAX_COUNT ( pow(2,TEMP_SENSORS_ADC_BITS) - 1 ) ///< Temperature sensors max ADC count +#define TEMP_SENSORS_ADC_BITS 24U ///< External temperature sensors ADC bits. +#define TEMP_SENSORS_ADC_MAX_COUNT ( pow(2,TEMP_SENSORS_ADC_BITS) - 1 ) ///< Temperature sensors max ADC count. -#define TEMP_EQUATION_COEFF_A (3.9083 * pow(10,-3)) ///< ADC to temperature conversion coefficient A -#define TEMP_EQUATION_COEFF_B (-5.775 * pow(10,-7)) ///< ADC to temperature conversion coefficient B +#define TEMP_EQUATION_COEFF_A (3.9083 * pow(10,-3)) ///< ADC to temperature conversion coefficient A. +#define TEMP_EQUATION_COEFF_B (-5.775 * pow(10,-7)) ///< ADC to temperature conversion coefficient B. -#define ADC_FPGA_READ_DELAY 30U ///< Delay in ms before reading the ADC values from FPGA -#define MAX_NUM_OF_RAW_ADC_SAMPLES 32U ///< Number of ADC reads for moving average calculations -#define MAX_ALLOWED_TEMP_DELTA_BETWEEN_SENSORS 2U ///< Maximum allowed temperature delta between sensors -#define MAX_ALLOWED_UNCHANGED_ADC_READS 4U ///< Maximum number of times that the read of a sensor cannot change -#define SHIFT_BITS_BY_2 2U ///< Shift bits by 2 -#define SHIFT_BITS_BY_5_FOR_AVERAGING 5U ///< Shift the ADCs of the temperature sensors by 5 to average them -#define INLET_WATER_TEMPERATURE_PERSISTENCE_COUNT (5 * MS_PER_SECOND / TASK_GENERAL_INTERVAL) ///< Number of persistence count for temperature sensors out of range error +#define ADC_FPGA_READ_DELAY 30U ///< Delay in ms before reading the ADC values from FPGA. +#define MAX_NUM_OF_RAW_ADC_SAMPLES 32U ///< Number of ADC reads for moving average calculations. +#define MAX_ALLOWED_TEMP_DELTA_BETWEEN_SENSORS 2U ///< Maximum allowed temperature delta between sensors. +#define MAX_ALLOWED_UNCHANGED_ADC_READS 4U ///< Maximum number of times that the read of a sensor cannot change. +#define SHIFT_BITS_BY_2 2U ///< Shift bits by 2. +#define SHIFT_BITS_BY_5_FOR_AVERAGING 5U ///< Shift the ADCs of the temperature sensors by 5 to average them. +#define INLET_WATER_TEMPERATURE_PERSISTENCE_COUNT (5 * MS_PER_SECOND / TASK_GENERAL_INTERVAL) ///< Number of persistence count for temperature sensors out of range error. -#define MIN_WATER_INPUT_TEMPERATURE 10U ///< Minimum water input temperature -#define MAX_WATER_INPUT_TEMPERATURE 35U ///< Maximum water input temperature +#define MIN_WATER_INPUT_TEMPERATURE 10U ///< Minimum water input temperature. +#define MAX_WATER_INPUT_TEMPERATURE 35U ///< Maximum water input temperature. -#define HEATERS_INTERNAL_TEMPERTURE_CALCULATION_INTERVAL 20U ///< Time interval that is used to calculate the heaters internal temperature -#define HEATERS_INTERNAL_TC_ADC_TO_TEMP_CONVERSION_COEFF 0.25 ///< Heaters internal temperature sensors ADC to temperature conversion coefficient -#define HEATERS_COLD_JUNCTION_ADC_TO_TEMP_CONVERSION_COEFF 0.0625 ///< Heaters cold junction temperature sensors ADC to temperature conversion coefficient +#define HEATERS_INTERNAL_TEMPERTURE_CALCULATION_INTERVAL 20U ///< Time interval that is used to calculate the heaters internal temperature. +#define HEATERS_INTERNAL_TC_ADC_TO_TEMP_CONVERSION_COEFF 0.25 ///< Heaters internal temperature sensors ADC to temperature conversion coefficient. +#define HEATERS_COLD_JUNCTION_ADC_TO_TEMP_CONVERSION_COEFF 0.0625 ///< Heaters cold junction temperature sensors ADC to temperature conversion coefficient. -#define K_THERMOCOUPLE_TEMP_2_MILLI_VOLT_CONVERSION_COEFF 0.041276 ///< K thermocouple temperature to millivolt conversion coefficient -#define SIZE_OF_THERMOCOUPLE_COEFFICIENTS 10U ///< Size of the thermocouple coefficients +#define K_THERMOCOUPLE_TEMP_2_MILLI_VOLT_CONVERSION_COEFF 0.041276 ///< K thermocouple temperature to millivolt conversion coefficient. +#define SIZE_OF_THERMOCOUPLE_COEFFICIENTS 10U ///< Size of the thermocouple coefficients. -#define EXTERNAL_TEMP_SENSORS_ERROR_VALUE 0x80 ///< External temperature sensors error value -#define HEATERS_INTERNAL_TEMP_SENSOR_FAULT 0x01 ///< Heaters internal temperature sensor fault +#define EXTERNAL_TEMP_SENSORS_ERROR_VALUE 0x80 ///< External temperature sensors error value. +#define HEATERS_INTERNAL_TEMP_SENSOR_FAULT 0x01 ///< Heaters internal temperature sensor fault. -#define TEMP_SENSORS_DATA_PUBLISH_INTERVAL (MS_PER_SECOND / TASK_PRIORITY_INTERVAL) ///< Temperature sensors publish data time interval -#define MAX_TEMPERATURE_SENSOR_FAILURES 10 ///< Maximum number of temperature sensor errors within window period before alarm -#define MAX_TEMPERATURE_SENSOR_FAILURE_WINDOW_MS (10 * MS_PER_SECOND) ///< Temperature sensor error window +#define TEMP_SENSORS_DATA_PUBLISH_INTERVAL (MS_PER_SECOND / TASK_PRIORITY_INTERVAL) ///< Temperature sensors publish data time interval. +#define MAX_TEMPERATURE_SENSOR_FAILURES 10 ///< Maximum number of temperature sensor errors within window period before alarm. +#define MAX_TEMPERATURE_SENSOR_FAILURE_WINDOW_MS (10 * MS_PER_SECOND) ///< Temperature sensor error window. -/// Temperature sensor self test states +/// Temperature sensor self test states. typedef enum tempSensors_Self_Test_States { - TEMPSENSORS_SELF_TEST_START = 0, ///< Temperature sensors self test start - TEMPSENSORS_SELF_TEST_ADC_CHECK, ///< Temperature sensors self ADC check - TEMPSENSORS_SELF_TEST_CONSISTENCY_CHECK, ///< Temperature sensors self test consistency check - TEMPSENSORS_SELF_TEST_COMPLETE, ///< Temperature sensors self test complete - NUM_OF_TEMPSENSORS_SELF_TEST_STATES ///< Total number of self test states + TEMPSENSORS_SELF_TEST_START = 0, ///< Temperature sensors self test start + TEMPSENSORS_SELF_TEST_ADC_CHECK, ///< Temperature sensors self ADC check + TEMPSENSORS_SELF_TEST_CONSISTENCY_CHECK, ///< Temperature sensors self test consistency check + TEMPSENSORS_SELF_TEST_COMPLETE, ///< Temperature sensors self test complete + NUM_OF_TEMPSENSORS_SELF_TEST_STATES ///< Total number of self test states } TEMPSENSORS_SELF_TEST_STATES_T; -/// Temperature sensor exec states +/// Temperature sensor exec states. typedef enum tempSensors_Exec_States { - TEMPSENSORS_EXEC_STATE_START = 0, ///< Temperature sensors exec start - TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES, ///< Temperature sensors exec get ADC values - NUM_OF_TEMPSENSORS_EXEC_STATES, ///< Total number of exec states + TEMPSENSORS_EXEC_STATE_START = 0, ///< Temperature sensors exec start + TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES, ///< Temperature sensors exec get ADC values + NUM_OF_TEMPSENSORS_EXEC_STATES, ///< Total number of exec states } TEMPSENSORS_EXEC_STATES_T; -/// Temperature sensor struct +/// Temperature sensor struct. typedef struct { - F32 gain; ///< ADC gain - F32 refResistance; ///< ADC reference resistance - F32 conversionCoef; ///< ADC conversion coefficient - F32 zeroDegreeResistance; ///< ADC zero degree resistance + F32 gain; ///< ADC gain + F32 refResistance; ///< ADC reference resistance + F32 conversionCoef; ///< ADC conversion coefficient + F32 zeroDegreeResistance; ///< ADC zero degree resistance - S32 rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES ]; ///< Raw ADC reads array - S32 adcNextIndex; ///< Next ADC read index - S32 adcRunningSum; ///< ADC running sum + S32 rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES ]; ///< Raw ADC reads array + S32 adcNextIndex; ///< Next ADC read index + S32 adcRunningSum; ///< ADC running sum - U32 readCount; ///< Read counts from FPGA - U32 internalErrorCount; ///< Internal error counts + U32 readCount; ///< Read counts from FPGA + U32 internalErrorCount; ///< Internal error counts - OVERRIDE_F32_T temperatureValues; ///< Temperature values with override + OVERRIDE_F32_T temperatureValues; ///< Temperature values with override } TEMP_SENSOR_T; // ********** private data ********** -static SELF_TEST_STATUS_T tempSensorsSelfTestResult; ///< Self test result of the TemperatureSensors module -static TEMPSENSORS_SELF_TEST_STATES_T tempSensorsSelfTestState; ///< TemperatureSensor self test state -static TEMPSENSORS_EXEC_STATES_T tempSensorsExecState; ///< TemperatureSensor exec state -static TEMP_SENSOR_T tempSensors [ NUM_OF_TEMPERATURE_SENSORS ]; ///< Temperature sensors' data structure +static SELF_TEST_STATUS_T tempSensorsSelfTestResult; ///< Self test result of the TemperatureSensors module. +static TEMPSENSORS_SELF_TEST_STATES_T tempSensorsSelfTestState; ///< TemperatureSensor self test state. +static TEMPSENSORS_EXEC_STATES_T tempSensorsExecState; ///< TemperatureSensor exec state. +static TEMP_SENSOR_T tempSensors [ NUM_OF_TEMPERATURE_SENSORS ]; ///< Temperature sensors' data structure. -static U32 elapsedTime; ///< Elapsed time variable -static U32 internalHeatersConversionTimer; ///< Conversion timer variable to calculate the heaters internal temperature +static U32 elapsedTime; ///< Elapsed time variable. +static U32 internalHeatersConversionTimer; ///< Conversion timer variable to calculate the heaters internal temperature. -static F32 tempValuesForPublication [ NUM_OF_TEMPERATURE_SENSORS ]; ///< Temperature sensors data publication array -static U32 dataPublicationTimerCounter; ///< Temperature sensors data publish timer counter +static F32 tempValuesForPublication [ NUM_OF_TEMPERATURE_SENSORS ]; ///< Temperature sensors data publication array. +static U32 dataPublicationTimerCounter; ///< Temperature sensors data publish timer counter. static OVERRIDE_U32_T tempSensorsPublishInterval = { TEMP_SENSORS_DATA_PUBLISH_INTERVAL, - TEMP_SENSORS_DATA_PUBLISH_INTERVAL, 0, 0 }; ///< Temperature sensors publish time interval override + TEMP_SENSORS_DATA_PUBLISH_INTERVAL, 0, 0 }; ///< Temperature sensors publish time interval override. -static const F32 positiveTCExpA0 = 0.118597600000E0; ///< K TC positive temperature exponent coefficient A0 -static const F32 positiveTCExpA1 = -0.118343200000E-3; ///< K TC positive temperature exponent coefficient A1 -static const F32 positiveTCExpA2 = 0.126968600000E3; ///< K TC positive temperature exponent coefficient A2 +static const F32 positiveTCExpA0 = 0.118597600000E0; ///< K TC positive temperature exponent coefficient A0. +static const F32 positiveTCExpA1 = -0.118343200000E-3; ///< K TC positive temperature exponent coefficient A1. +static const F32 positiveTCExpA2 = 0.126968600000E3; ///< K TC positive temperature exponent coefficient A2. -/// Thermocouple correction coefficients for positive cold junction temperature +///< Thermocouple correction coefficients for positive cold junction temperature. static const F32 positiveTCCoeffs [ SIZE_OF_THERMOCOUPLE_COEFFICIENTS ] = { -0.176004136860E-1, 0.389212049750E-1, 0.185587700320E-4, -0.994575928740E-7, @@ -139,42 +139,40 @@ 0.971511471520E-22,-0.121047212750E-25 }; -/// Thermcouple inverse coefficient for positive cold junction temperature +///< Thermcouple inverse coefficient for positive cold junction temperature. static const F32 positiveTCInverserCoeffs [ SIZE_OF_THERMOCOUPLE_COEFFICIENTS ] = { 0.0, 2.508355E1, 7.860106E-2, -2.503131E-1, 8.315270E-2, -1.228034E-2, 9.804036E-4, -4.413030E-5, 1.057734E-6, -1.052755E-8 }; // ********** private function prototypes ********** -static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestStart ( void ); -static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestADCCheck ( void ); -static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestConsistencyCheck ( void ); +static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestStart( void ); +static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestADCCheck( void ); +static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestConsistencyCheck( void ); -static TEMPSENSORS_EXEC_STATES_T handleExecStart ( void ); -static TEMPSENSORS_EXEC_STATES_T handleExecGetADCValues ( void ); +static TEMPSENSORS_EXEC_STATES_T handleExecStart( void ); +static TEMPSENSORS_EXEC_STATES_T handleExecGetADCValues( void ); -static F32 getADC2TempConversion ( F32 avgADC, U32 gain, U32 refResistance, U32 zeroDegResistance, F32 adcConversionCoeff ); -static void getHeaterInternalTemp ( U32 TCIndex, U32 CJIndex ); +static F32 getADC2TempConversion( F32 avgADC, U32 gain, U32 refResistance, U32 zeroDegResistance, F32 adcConversionCoeff ); +static void getHeaterInternalTemp( U32 TCIndex, U32 CJIndex ); -static void processTempSnsrsADCRead ( U32 sensorIndex, U32 adc, U32 fpgaError, U32 fpgaCount ); -static void processHtrsTempSnsrsADCRead ( U32 sensorIndex, U32 adc, U32 fpgaError, U32 fpgaCount ); -static BOOL isADCReadValid ( U32 sensorIndex, U32 fpgaError, U32 fpgaCount ); -static void processADCRead ( U32 sensorIndex, S32 adc ); -static void publishTemperatureSensorsData ( void ); +static void processTempSnsrsADCRead( U32 sensorIndex, U32 adc, U32 fpgaError, U32 fpgaCount ); +static void processHtrsTempSnsrsADCRead( U32 sensorIndex, U32 adc, U32 fpgaError, U32 fpgaCount ); +static BOOL isADCReadValid( U32 sensorIndex, U32 fpgaError, U32 fpgaCount ); +static void processADCRead( U32 sensorIndex, S32 adc ); +static void publishTemperatureSensorsData( void ); static DATA_GET_PROTOTYPE( U32, getPublishTemperatureSensorsDataInterval ); -// ********** Public functions ********** - -/************************************************************************* +/*********************************************************************//** * @brief * The initTemperatureSensors function initializes the module * @details * Inputs : none * Outputs : TemperatureSensors module initialized * @return none *************************************************************************/ -void initTemperatureSensors ( void ) +void initTemperatureSensors( void ) { U08 i; tempSensorsSelfTestState = TEMPSENSORS_SELF_TEST_START; @@ -193,43 +191,43 @@ for ( i = 0; i < NUM_OF_TEMPERATURE_SENSORS; ++i ) { - memset(&tempSensors[ i ], 0x0, sizeof( TEMP_SENSOR_T ) ); + memset( &tempSensors[ i ], 0x0, sizeof( TEMP_SENSOR_T ) ); } // Initialize TPi and TPo constants - tempSensors [ TEMPSENSORS_INLET_PRIMARY_HEATER ].gain = PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN; - tempSensors [ TEMPSENSORS_INLET_PRIMARY_HEATER ].refResistance = PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; - tempSensors [ TEMPSENSORS_INLET_PRIMARY_HEATER ].zeroDegreeResistance = PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensors[ TEMPSENSORS_INLET_PRIMARY_HEATER ].gain = PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN; + tempSensors[ TEMPSENSORS_INLET_PRIMARY_HEATER ].refResistance = PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; + tempSensors[ TEMPSENSORS_INLET_PRIMARY_HEATER ].zeroDegreeResistance = PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; - tempSensors [ TEMPSENSORS_OUTLET_PRIMARY_HEATER ].gain = PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN; - tempSensors [ TEMPSENSORS_OUTLET_PRIMARY_HEATER ].refResistance = PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; - tempSensors [ TEMPSENSORS_OUTLET_PRIMARY_HEATER ].zeroDegreeResistance = PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensors[ TEMPSENSORS_OUTLET_PRIMARY_HEATER ].gain = PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN; + tempSensors[ TEMPSENSORS_OUTLET_PRIMARY_HEATER ].refResistance = PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; + tempSensors[ TEMPSENSORS_OUTLET_PRIMARY_HEATER ].zeroDegreeResistance = PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; // Initialize TD1 and TD2 constants - tempSensors [ TEMPSENSORS_CONDUCTIVITY_SENSOR_1 ].gain = COND_SENSORS_TEMP_SENSOR_GAIN; - tempSensors [ TEMPSENSORS_CONDUCTIVITY_SENSOR_1 ].refResistance = COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE; - tempSensors [ TEMPSENSORS_CONDUCTIVITY_SENSOR_1 ].zeroDegreeResistance = COND_SENSORS_TEMP_SENSOR_0_DEGREE_RESISTANCE; + tempSensors[ TEMPSENSORS_CONDUCTIVITY_SENSOR_1 ].gain = COND_SENSORS_TEMP_SENSOR_GAIN; + tempSensors[ TEMPSENSORS_CONDUCTIVITY_SENSOR_1 ].refResistance = COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE; + tempSensors[ TEMPSENSORS_CONDUCTIVITY_SENSOR_1 ].zeroDegreeResistance = COND_SENSORS_TEMP_SENSOR_0_DEGREE_RESISTANCE; - tempSensors [ TEMPSENSORS_CONDUCTIVITY_SENSOR_2 ].gain = COND_SENSORS_TEMP_SENSOR_GAIN; - tempSensors [ TEMPSENSORS_CONDUCTIVITY_SENSOR_2 ].refResistance = COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE; - tempSensors [ TEMPSENSORS_CONDUCTIVITY_SENSOR_2 ].zeroDegreeResistance = COND_SENSORS_TEMP_SENSOR_0_DEGREE_RESISTANCE; + tempSensors[ TEMPSENSORS_CONDUCTIVITY_SENSOR_2 ].gain = COND_SENSORS_TEMP_SENSOR_GAIN; + tempSensors[ TEMPSENSORS_CONDUCTIVITY_SENSOR_2 ].refResistance = COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE; + tempSensors[ TEMPSENSORS_CONDUCTIVITY_SENSOR_2 ].zeroDegreeResistance = COND_SENSORS_TEMP_SENSOR_0_DEGREE_RESISTANCE; // Initialize TRo and TDi constants - tempSensors [ TEMPSENSORS_OUTLET_REDUNDANCY ].gain = TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN; - tempSensors [ TEMPSENSORS_OUTLET_REDUNDANCY ].refResistance = TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; - tempSensors [ TEMPSENSORS_OUTLET_REDUNDANCY ].zeroDegreeResistance = TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensors[ TEMPSENSORS_OUTLET_REDUNDANCY ].gain = TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN; + tempSensors[ TEMPSENSORS_OUTLET_REDUNDANCY ].refResistance = TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; + tempSensors[ TEMPSENSORS_OUTLET_REDUNDANCY ].zeroDegreeResistance = TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; - tempSensors [ TEMPSENSORS_INLET_DIALYSATE ].gain = TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN; - tempSensors [ TEMPSENSORS_INLET_DIALYSATE ].refResistance = TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; - tempSensors [ TEMPSENSORS_INLET_DIALYSATE ].zeroDegreeResistance = TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensors[ TEMPSENSORS_INLET_DIALYSATE ].gain = TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN; + tempSensors[ TEMPSENSORS_INLET_DIALYSATE ].refResistance = TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; + tempSensors[ TEMPSENSORS_INLET_DIALYSATE ].zeroDegreeResistance = TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; // Initialize the heaters internal thermocouples constants - tempSensors [ TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE ].conversionCoef = HEATERS_INTERNAL_TC_ADC_TO_TEMP_CONVERSION_COEFF; - tempSensors [ TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE ].conversionCoef = HEATERS_INTERNAL_TC_ADC_TO_TEMP_CONVERSION_COEFF; + tempSensors[ TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE ].conversionCoef = HEATERS_INTERNAL_TC_ADC_TO_TEMP_CONVERSION_COEFF; + tempSensors[ TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE ].conversionCoef = HEATERS_INTERNAL_TC_ADC_TO_TEMP_CONVERSION_COEFF; // Initialize the heaters cold junction constants - tempSensors [ TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION ].conversionCoef = HEATERS_COLD_JUNCTION_ADC_TO_TEMP_CONVERSION_COEFF; - tempSensors [ TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION ].conversionCoef = HEATERS_COLD_JUNCTION_ADC_TO_TEMP_CONVERSION_COEFF; + tempSensors[ TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION ].conversionCoef = HEATERS_COLD_JUNCTION_ADC_TO_TEMP_CONVERSION_COEFF; + tempSensors[ TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION ].conversionCoef = HEATERS_COLD_JUNCTION_ADC_TO_TEMP_CONVERSION_COEFF; // Initialize the heaters calculated internal temperature sensors. The constants are zero since they will not be used for conversion @@ -243,7 +241,7 @@ TRUE, INLET_WATER_TEMPERATURE_PERSISTENCE_COUNT, INLET_WATER_TEMPERATURE_PERSISTENCE_COUNT ); } -/************************************************************************* +/*********************************************************************//** * @brief * The execTemperatureSensorsSelfTest function runs the TemperatureSensors * POST during the self test @@ -252,7 +250,7 @@ * Outputs : tempSensorsSelfTestState * @return tempSensorsSelfTestState *************************************************************************/ -SELF_TEST_STATUS_T execTemperatureSensorsSelfTest ( void ) +SELF_TEST_STATUS_T execTemperatureSensorsSelfTest( void ) { switch ( tempSensorsSelfTestState ) { @@ -273,25 +271,23 @@ break; default: - SET_ALARM_WITH_2_U32_DATA ( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_TEMPERATURE_SENSORS_INVALID_SELF_TEST_STATE, - tempSensorsSelfTestState ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_TEMPERATURE_SENSORS_INVALID_SELF_TEST_STATE, tempSensorsSelfTestState ); tempSensorsSelfTestState = TEMPSENSORS_SELF_TEST_COMPLETE; break; } return tempSensorsSelfTestResult; } -/************************************************************************* +/*********************************************************************//** * @brief - * The execTemperatureSensors function runs the TemperatureSensors main - * tasks + * The execTemperatureSensors function executes the temperature sensors' state machine. * @details * Inputs : tempSensorsExecState * Outputs : tempSensorsExecState * @return none *************************************************************************/ -void execTemperatureSensors ( void ) +void execTemperatureSensors( void ) { // Read the sensors all the time switch ( tempSensorsExecState ) @@ -305,13 +301,13 @@ break; default: - SET_ALARM_WITH_2_U32_DATA ( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_TEMPERATURE_SENSORS_EXEC_INVALID_STATE, tempSensorsExecState ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_TEMPERATURE_SENSORS_EXEC_INVALID_STATE, tempSensorsExecState ); tempSensorsExecState = TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES; break; } } -/************************************************************************* +/*********************************************************************//** * @brief * The checkInletWaterTemperature checks inlet water temperature value * and triggers an alarm when temperature value is out of allowed range. @@ -330,17 +326,16 @@ checkPersistentAlarm( PERSISTENT_ALARM_INLET_WATER_LOW_TEMPERATURE, isWaterTempTooLow, temperature ); } -/************************************************************************* +/*********************************************************************//** * @brief - * The getTemperatureValue function gets the enum of the requested - * temperature sensor and returns the temperature + * The getTemperatureValue function gets the temperature of the requested sensor. * @details * Inputs : none * Outputs : none - * @param sensor Temperature sensor index + * @param sensor temperature sensor index * @return temperature *************************************************************************/ -F32 getTemperatureValue ( U32 sensorIndex ) +F32 getTemperatureValue( U32 sensorIndex ) { F32 temperature = 0.0; @@ -359,12 +354,9 @@ return temperature; } -// ********** Private functions ********** - -/************************************************************************* +/*********************************************************************//** * @brief - * The getADC2TempConversion function calculates the temperature from - * ADC read from FPGA + * The getADC2TempConversion function calculates the temperature from ADC read from FPGA. * @details * Inputs : none * Outputs : none @@ -375,17 +367,17 @@ * @param adcConversionCoeff ADC conversion coefficient * @return temperature *************************************************************************/ -static F32 getADC2TempConversion ( F32 avgADC, U32 gain, U32 refResistance, U32 zeroDegResistance, F32 adcConversionCoeff ) +static F32 getADC2TempConversion( F32 avgADC, U32 gain, U32 refResistance, U32 zeroDegResistance, F32 adcConversionCoeff ) { F32 temperature; if ( fabs( adcConversionCoeff ) < NEARLY_ZERO ) { - // R(RTD) = R(ref) * (adc – 2^N-1) / (G *2^N-1); - F32 resistance = (refResistance * (avgADC - pow(2,(TEMP_SENSORS_ADC_BITS - 1)))) / (gain * pow(2,(TEMP_SENSORS_ADC_BITS - 1))); - // T=(-A+√(A^2-4B(1-R_T/R_0 )))/2B - F32 secondSqrtPart = 4 * TEMP_EQUATION_COEFF_B * (1 - (resistance / zeroDegResistance)); - temperature = (-TEMP_EQUATION_COEFF_A + sqrt(pow(TEMP_EQUATION_COEFF_A, 2) - secondSqrtPart)) / (2 * TEMP_EQUATION_COEFF_B); + // R(RTD) = R(ref) * ( adc – 2^N - 1 ) / ( G * 2^N - 1 ); + F32 resistance = ( refResistance * ( avgADC - pow( 2,(TEMP_SENSORS_ADC_BITS - 1 ) ) ) ) / ( gain * pow( 2, ( TEMP_SENSORS_ADC_BITS - 1 ) ) ); + // T = (-A + √( A^2 - 4B * ( 1 - R_T / R_0 ) ) ) / 2B + F32 secondSqrtPart = 4 * TEMP_EQUATION_COEFF_B * (1 - ( resistance / zeroDegResistance ) ); + temperature = ( -TEMP_EQUATION_COEFF_A + sqrt( pow( TEMP_EQUATION_COEFF_A, 2 ) - secondSqrtPart ) ) / ( 2 * TEMP_EQUATION_COEFF_B ); } else { @@ -395,18 +387,17 @@ return temperature; } -/************************************************************************* +/*********************************************************************//** * @brief - * The getHeaterInternalTemp function calculates the internal temperature - * of the heaters + * The getHeaterInternalTemp function calculates the heaters' internal temperature. * @details * Inputs : temperatureValues * Outputs : temperatureValues * @param TCIndex thermocouple index * @param CJIndex cold junction index * @return none *************************************************************************/ -static void getHeaterInternalTemp ( U32 TCIndex, U32 CJIndex ) +static void getHeaterInternalTemp( U32 TCIndex, U32 CJIndex ) { F32 temperature = 0.0; F32 equiVoltage = 0.0; @@ -423,16 +414,16 @@ { for ( i = 0; i < SIZE_OF_THERMOCOUPLE_COEFFICIENTS; i++ ) { - equiVoltage = equiVoltage + ( positiveTCCoeffs [ i ] * pow(CJTemp, i) ); + equiVoltage = equiVoltage + ( positiveTCCoeffs[ i ] * pow( CJTemp, i ) ); } - equiVoltage = equiVoltage + ( positiveTCExpA0 * ( exp(positiveTCExpA1 * pow((CJTemp - positiveTCExpA2), 2)) ) ); + equiVoltage = equiVoltage + ( positiveTCExpA0 * ( exp( positiveTCExpA1 * pow( ( CJTemp - positiveTCExpA2 ), 2 ) ) ) ); correctedVoltage = rawVoltage + equiVoltage; for ( i = 0; i < SIZE_OF_THERMOCOUPLE_COEFFICIENTS; i++ ) { - temperature = temperature + ( positiveTCInverserCoeffs [ i ] * pow(correctedVoltage, i) ); + temperature = temperature + ( positiveTCInverserCoeffs[ i ] * pow( correctedVoltage, i ) ); } } else @@ -451,12 +442,12 @@ } } -/************************************************************************* +/*********************************************************************//** * @brief * The processTemperatureSensorsADCRead function masks the MSB of the ADC * read from FPGA and converts it to an S32. Then it calls another function * to check if the read ADC is valid or not and if it is, it calls another - * function to process the ADC value and covert it to temperature + * function to process the ADC value and covert it to temperature. * @details * Inputs : none * Outputs : Processed valid ADC reading @@ -466,23 +457,23 @@ * @param fpgaCount reported FPGA read count * @return none *************************************************************************/ -static void processTempSnsrsADCRead ( U32 sensorIndex, U32 adc, U32 fpgaError, U32 fpgaCount ) +static void processTempSnsrsADCRead( U32 sensorIndex, U32 adc, U32 fpgaError, U32 fpgaCount ) { - S32 convertedADC = (S32)(adc & MASK_OFF_U32_MSB); + S32 convertedADC = (S32)( adc & MASK_OFF_U32_MSB ); - if ( isADCReadValid ( sensorIndex, fpgaError, fpgaCount ) ) + if ( isADCReadValid( sensorIndex, fpgaError, fpgaCount ) ) { - processADCRead ( sensorIndex, convertedADC ); + processADCRead( sensorIndex, convertedADC ); } } -/************************************************************************* +/*********************************************************************//** * @brief * The processHeatersInternalSensorsADCRead function checks whether the provided * sensor is the heaters thermocouple or cold junction sensors and performs * different bit shifts on them accordingly. Then it call another function to * check if the read ADC is valid and if it is, the function calls another function - * process the ADC and convert it to temperature + * process the ADC and convert it to temperature. * @details * Inputs : none * Outputs : Processed heater ADC reading @@ -492,22 +483,20 @@ * @param fpgaCount reported read count by FPGA * @return none *************************************************************************/ -static void processHtrsTempSnsrsADCRead ( U32 sensorIndex, U32 adc, U32 fpgaError, U32 fpgaCount ) +static void processHtrsTempSnsrsADCRead( U32 sensorIndex, U32 adc, U32 fpgaError, U32 fpgaCount ) { U16 adcConv; S16 convertedADC; - if ( sensorIndex == TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE || - sensorIndex == TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE ) + if ( ( sensorIndex == TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE ) || ( sensorIndex == TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE ) ) { // Cast the adc from U32 to U16 and shit it to left by 2 adcConv = ( (U16)adc ) << SHIFT_BITS_BY_2; // Cast from U16 to S16 and shift the bits to right by 2 // so if the sign bit is 1, the sign bit is extended convertedADC = ( (S16)adcConv ) >> SHIFT_BITS_BY_2; } - else if ( sensorIndex == TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION || - sensorIndex == TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION ) + else if ( ( sensorIndex == TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION ) || (sensorIndex == TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION ) ) { // Cast the adc from U32 to U16 and shift it by 4 adcConv = ( (U16)adc ) << SHIFT_BITS_BY_4; @@ -516,13 +505,13 @@ convertedADC = ( (S16)adcConv ) >> SHIFT_BITS_BY_4; } - if ( isADCReadValid ( sensorIndex, fpgaError, fpgaCount ) ) + if ( isADCReadValid( sensorIndex, fpgaError, fpgaCount ) ) { - processADCRead ( sensorIndex, convertedADC ); + processADCRead( sensorIndex, convertedADC ); } } -/************************************************************************* +/*********************************************************************//** * @brief * The isADCReadValid function checks if there is an FPGA error and FPGA * count. If there is any FPGA, it raises an alarm. If the count has changed @@ -536,7 +525,7 @@ * @param fpgaCount FPGA read count * @return isADCValid (BOOL) *************************************************************************/ -static BOOL isADCReadValid ( U32 sensorIndex, U32 fpgaError, U32 fpgaCount ) +static BOOL isADCReadValid( U32 sensorIndex, U32 fpgaError, U32 fpgaCount ) { BOOL isADCValid = FALSE; #ifndef _VECTORCAST_ @@ -570,19 +559,19 @@ return isADCValid; } -/************************************************************************* +/*********************************************************************//** * @brief * The processADCRead function receives the ADC value and the sensor * index and calculates the running sum and the moving average of the ADCs - * The temperatureSensorsADCRead and tempSensorsAvgADCValues are updated + * The temperatureSensorsADCRead and tempSensorsAvgADCValues are updated. * @details * Inputs : adcNextIndex, rawADCReads, adcRunningSum * Outputs : adcNextIndex, rawADCReads, adcRunningSum, temperatureValues * @param sensorIndex Temperature sensor index * @param adc adc reading from fpga * @return none *************************************************************************/ -static void processADCRead ( U32 sensorIndex, S32 adc ) +static void processADCRead( U32 sensorIndex, S32 adc ) { U32 const index = tempSensors[ sensorIndex ].adcNextIndex; S32 const indexValue = tempSensors[ sensorIndex ].rawADCReads [ index ]; @@ -603,32 +592,31 @@ tempSensors[ sensorIndex ].temperatureValues.data = temperature; } -/************************************************************************* +/*********************************************************************//** * @brief - * The handleSelfTestStart function transitions the self test state to - * check ADC + * The handleSelfTestStart function transitions the self test state to check ADC. * @details * Inputs : tempSensorsSelfTestResult * Outputs : none * @return state (TEMPSENSORS_SELF_TEST_STATES_T) *************************************************************************/ -static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestStart ( void ) +static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestStart( void ) { tempSensorsSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; return TEMPSENSORS_SELF_TEST_ADC_CHECK; } -/************************************************************************* +/*********************************************************************//** * @brief * The handleSelfTestADCCheck function checks whether the ADC reads. If the * reads are above the maximum 24bit ADC count, it will throw an alarm and - * switches to the next state + * switches to the next state. * @details * Inputs : TPi ADC reading from FPGA * Outputs : none * @return TEMPSENSORS_SELF_TEST_CONSISTENCY_CHECK (TEMPSENSORS_SELF_TEST_STATES_T) *************************************************************************/ -static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestADCCheck ( void ) +static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestADCCheck( void ) { S32 const tpiADC = (S32)getFPGATPiTemp(); @@ -643,16 +631,16 @@ return TEMPSENSORS_SELF_TEST_CONSISTENCY_CHECK; } -/************************************************************************* +/*********************************************************************//** * @brief * The handleSelfTestConsistencyCheck function checks the values of the - * sensors to make sure they are within the allowed range from each other + * sensors to make sure they are within the allowed range from each other. * @details * Inputs : TPi and TPo ADC reading from FPGA * Outputs : none * @return TEMPSENSORS_SELF_TEST_COMPLETE (TEMPSENSORS_SELF_TEST_STATES_T) *************************************************************************/ -static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestConsistencyCheck ( void ) +static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestConsistencyCheck( void ) { S32 const tpiConvertedADC = ( (S32)getFPGATPiTemp() & MASK_OFF_U32_MSB ); F32 const tpiTemperature = getADC2TempConversion( tpiConvertedADC, @@ -668,11 +656,11 @@ (U32) tempSensors[ TEMPSENSORS_OUTLET_PRIMARY_HEATER ].zeroDegreeResistance, tempSensors[ TEMPSENSORS_OUTLET_PRIMARY_HEATER ].conversionCoef ); - F32 const tempDiff = fabs(tpiTemperature - tpoTemperature); + F32 const tempDiff = fabs( tpiTemperature - tpoTemperature ); if ( tempDiff > MAX_ALLOWED_TEMP_DELTA_BETWEEN_SENSORS ) { tempSensorsSelfTestResult = SELF_TEST_STATUS_FAILED; - SET_ALARM_WITH_1_U32_DATA ( ALARM_ID_TEMPERATURE_SENSORS_INCONSISTENT, TEMPSENSORS_SELF_TEST_CONSISTENCY_CHECK ); + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_TEMPERATURE_SENSORS_INCONSISTENT, TEMPSENSORS_SELF_TEST_CONSISTENCY_CHECK ); } else { @@ -682,16 +670,16 @@ return TEMPSENSORS_SELF_TEST_COMPLETE; } -/************************************************************************* +/*********************************************************************//** * @brief * The handleExecStart function waits for a period of time and switches to - * the state that reads the ADC values from FPGA + * the state that reads the ADC values from FPGA. * @details * Inputs : none * Outputs : elapsedTime * @return state (TEMPSENSORS_EXEC_STATES_T) *************************************************************************/ -static TEMPSENSORS_EXEC_STATES_T handleExecStart ( void ) +static TEMPSENSORS_EXEC_STATES_T handleExecStart( void ) { TEMPSENSORS_EXEC_STATES_T state = TEMPSENSORS_EXEC_STATE_START; @@ -708,40 +696,37 @@ return state; } -/************************************************************************* +/*********************************************************************//** * @brief * The handleExecGetADCValues function reads the ADC values from FPGA and * at the specified time intervals and calls other functions to calculate - * the internal temperature of the heaters + * the internal temperature of the heaters. * @details * Inputs : none * Outputs : internalHeatersConversionTimer, elapsedTime, temperatureValues * @return state (TEMPSENSORS_EXEC_STATES_T) *************************************************************************/ -static TEMPSENSORS_EXEC_STATES_T handleExecGetADCValues ( void ) +static TEMPSENSORS_EXEC_STATES_T handleExecGetADCValues( void ) { // Look at the error counter and the specific error flag to make sure the error is a temp sensor // Add a byte array to have bits for each sensor to find out exactly what sensor failed - processTempSnsrsADCRead ( TEMPSENSORS_INLET_PRIMARY_HEATER, getFPGATPiTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - processTempSnsrsADCRead ( TEMPSENSORS_OUTLET_PRIMARY_HEATER, getFPGATPoTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - processTempSnsrsADCRead ( TEMPSENSORS_CONDUCTIVITY_SENSOR_1, getFPGACD1Temp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - processTempSnsrsADCRead ( TEMPSENSORS_CONDUCTIVITY_SENSOR_2, getFPGACD2Temp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - processTempSnsrsADCRead ( TEMPSENSORS_OUTLET_REDUNDANCY, getFPGATHDoTemp(), getFPGATHDoErrorCount(), getFPGATHDoReadCount() ); - processTempSnsrsADCRead ( TEMPSENSORS_INLET_DIALYSATE, getFPGATDiTemp(), getFPGATDiErrorCount(), getFPGATDiReadCount() ); + processTempSnsrsADCRead( TEMPSENSORS_INLET_PRIMARY_HEATER, getFPGATPiTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); + processTempSnsrsADCRead( TEMPSENSORS_OUTLET_PRIMARY_HEATER, getFPGATPoTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); + processTempSnsrsADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_1, getFPGACD1Temp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); + processTempSnsrsADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_2, getFPGACD2Temp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); + processTempSnsrsADCRead( TEMPSENSORS_OUTLET_REDUNDANCY, getFPGATHDoTemp(), getFPGATHDoErrorCount(), getFPGATHDoReadCount() ); + processTempSnsrsADCRead( TEMPSENSORS_INLET_DIALYSATE, getFPGATDiTemp(), getFPGATDiErrorCount(), getFPGATDiReadCount() ); - processHtrsTempSnsrsADCRead ( TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE, getFPGAPrimaryHeaterTemp(), getFPGAPrimaryHeaterFlags(), getFPGAPrimaryHeaterReadCount() ); - processHtrsTempSnsrsADCRead ( TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE, getFPGATrimmerHeaterTemp(), getFPGATrimmerHeaterFlags(), getFPGATrimmerHeaterReadCount() ); - processHtrsTempSnsrsADCRead ( TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION, getFPGAPrimaryColdJunctionTemp(), getFPGATrimmerHeaterFlags(), getFPGAPrimaryHeaterReadCount() ); - processHtrsTempSnsrsADCRead ( TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION, getFPGATrimmerColdJunctionTemp(), getFPGATrimmerHeaterFlags(), getFPGATrimmerHeaterReadCount() ); + processHtrsTempSnsrsADCRead( TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE, getFPGAPrimaryHeaterTemp(), getFPGAPrimaryHeaterFlags(), getFPGAPrimaryHeaterReadCount() ); + processHtrsTempSnsrsADCRead( TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE, getFPGATrimmerHeaterTemp(), getFPGATrimmerHeaterFlags(), getFPGATrimmerHeaterReadCount() ); + processHtrsTempSnsrsADCRead( TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION, getFPGAPrimaryColdJunctionTemp(), getFPGATrimmerHeaterFlags(), getFPGAPrimaryHeaterReadCount() ); + processHtrsTempSnsrsADCRead( TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION, getFPGATrimmerColdJunctionTemp(), getFPGATrimmerHeaterFlags(), getFPGATrimmerHeaterReadCount() ); // Check if time has elapsed to calculate the internal temperature of the heaters if ( internalHeatersConversionTimer >= HEATERS_INTERNAL_TEMPERTURE_CALCULATION_INTERVAL ) { - getHeaterInternalTemp ( TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE, - TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION); - - getHeaterInternalTemp ( TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE, - TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION); + getHeaterInternalTemp( TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE, TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION ); + getHeaterInternalTemp( TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE, TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION ); internalHeatersConversionTimer = 0; } else @@ -754,16 +739,16 @@ return TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES; } -/************************************************************************* +/*********************************************************************//** * @brief * The getPublishTemperatureSensorsDataInterval function returns the data - * publication interval either from the data or from the override + * publication interval either from the data or from the override. * @details * Inputs : tempSensorsPublishInterval * Outputs : none * @return result *************************************************************************/ -U32 getPublishTemperatureSensorsDataInterval ( void ) +U32 getPublishTemperatureSensorsDataInterval( void ) { U32 result = tempSensorsPublishInterval.data; @@ -775,7 +760,7 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The publishTemperatureSensorsData function broadcasts the temperature * sensors data at the publication interval @@ -784,18 +769,17 @@ * Outputs : dataPublicationTimerCounter, tempValuesForPublication * @return none *************************************************************************/ -static void publishTemperatureSensorsData ( void ) +static void publishTemperatureSensorsData( void ) { if ( ++dataPublicationTimerCounter >= getPublishTemperatureSensorsDataInterval() ) { U32 i; for ( i = 0; i < NUM_OF_TEMPERATURE_SENSORS; i++ ) { - tempValuesForPublication [ i ] = getTemperatureValue ( i ); + tempValuesForPublication[ i ] = getTemperatureValue ( i ); } - broadcastTemperatureSensorsData ( (U08*)(&tempValuesForPublication), - NUM_OF_TEMPERATURE_SENSORS * sizeof(F32) ); + broadcastTemperatureSensorsData( (U08*)(&tempValuesForPublication), NUM_OF_TEMPERATURE_SENSORS * sizeof(F32) ); dataPublicationTimerCounter = 0; } } @@ -804,18 +788,18 @@ * TEST SUPPORT FUNCTIONS *************************************************************************/ -/************************************************************************* +/*********************************************************************//** * @brief * The testSetMeasuredTemperatureOverride function sets the override value - * for a specific temperature sensor + * for a specific temperature sensor. * @details * Inputs : temperatureValues * Outputs : temperatureValues - * @param sensorIndex Temperature sensor index - * @param temperature Temperature value to override if testing activated + * @param sensorIndex temperature sensor index + * @param temperature temperature value to override if testing activated * @return result *************************************************************************/ -BOOL testSetMeasuredTemperatureOverride ( U32 sensorIndex, F32 temperature ) +BOOL testSetMeasuredTemperatureOverride( U32 sensorIndex, F32 temperature ) { BOOL result = FALSE; @@ -832,17 +816,17 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The testSetMeasuredTemperatureOverride function resets the override value - * of a specified temperature sensor + * of a specified temperature sensor. * @details * Inputs : temperatureValues * Outputs : temperatureValues - * @param sensorIndex Temperature sensor index + * @param sensorIndex temperature sensor index * @return result *************************************************************************/ -BOOL testResetMeasuredTemperatureOverride ( U32 sensorIndex ) +BOOL testResetMeasuredTemperatureOverride( U32 sensorIndex ) { BOOL result = FALSE; @@ -859,17 +843,17 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The testSetTemperatureSensorsPublishIntervalOverride function overrides - * the temperature sensors publish data interval + * the temperature sensors publish data interval. * @details * Inputs : tempSensorsPublishInterval * Outputs : tempSensorsPublishInterval * @param value temperature sensor data broadcast interval (in ms) to override to * @return result *************************************************************************/ -BOOL testSetTemperatureSensorsPublishIntervalOverride ( U32 value ) +BOOL testSetTemperatureSensorsPublishIntervalOverride( U32 value ) { BOOL result = FALSE; @@ -885,16 +869,16 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The testResetTemperatureSensorsPublishIntervalOverride function resets - * the override value of temperature sensors publish data interval + * the override value of temperature sensors publish data interval. * @details * Inputs : tempSensorsPublishInterval * Outputs : tempSensorsPublishInterval * @return result *************************************************************************/ -BOOL testResetTemperatureSensorsPublishIntervalOverride ( void ) +BOOL testResetTemperatureSensorsPublishIntervalOverride( void ) { BOOL result = FALSE; Index: firmware/App/Controllers/TemperatureSensors.h =================================================================== diff -u -r8c3db9c2d3957a1a9d53ad5d20d9594a09bc21be -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision 8c3db9c2d3957a1a9d53ad5d20d9594a09bc21be) +++ firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -22,16 +22,15 @@ /** * @defgroup TemperatureSensors TemperatureSensors - * @brief Temperature Sensors driver module. - * Reads and processes the temperature sensors. + * @brief Temperature Sensors driver module. Reads and processes the temperature sensors. * * @addtogroup TemperatureSensors * @{ */ // ********** public definitions ********** -/// Enumeration of temperature sensors +/// Enumeration of temperature sensors. typedef enum SENSORS_NAME { TEMPSENSORS_INLET_PRIMARY_HEATER = 0, ///< Inlet primary heaters temperature sensor @@ -51,20 +50,20 @@ // ********** public function prototypes ********** -void initTemperatureSensors ( void ); +void initTemperatureSensors( void ); -SELF_TEST_STATUS_T execTemperatureSensorsSelfTest ( void ); +SELF_TEST_STATUS_T execTemperatureSensorsSelfTest( void ); -void execTemperatureSensors ( void ); +void execTemperatureSensors( void ); void checkInletWaterTemperature( void ); -DATA_ARRAY_GET_PROTOTYPE ( F32, getTemperatureValue, sensorIndex ); +DATA_ARRAY_GET_PROTOTYPE( F32, getTemperatureValue, sensorIndex ); -BOOL testSetMeasuredTemperatureOverride ( U32 sensorIndex, F32 temperature ); -BOOL testResetMeasuredTemperatureOverride ( U32 sensorIndex ); +BOOL testSetMeasuredTemperatureOverride( U32 sensorIndex, F32 temperature ); +BOOL testResetMeasuredTemperatureOverride( U32 sensorIndex ); -BOOL testSetTemperatureSensorsPublishIntervalOverride ( U32 value ); -BOOL testResetTemperatureSensorsPublishIntervalOverride ( void ); +BOOL testSetTemperatureSensorsPublishIntervalOverride( U32 value ); +BOOL testResetTemperatureSensorsPublishIntervalOverride( void ); /**@}*/ Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -rdc0d9b087c609e71cacdb7f0395cccf29d749c00 -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision dc0d9b087c609e71cacdb7f0395cccf29d749c00) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -27,29 +27,28 @@ // ********** private definitions ********** -#define DEENERGIZED 0 ///< 0 for de-energized valve -#define ENERGIZED 1 ///< 1 for energized valve -#define ALL_VALVES_DEENERGIZED 0x0000 ///< 0 in U16 bit field for all valves +#define DEENERGIZED 0 ///< 0 for de-energized valve. +#define ENERGIZED 1 ///< 1 for energized valve. +#define ALL_VALVES_DEENERGIZED 0x0000 ///< 0 in U16 bit field for all valves. -#define MAX_VALVE_STATE_MISMATCH_COUNT 3 ///< maximum number of times commanded valves state can fail to match read back valve states in a row. +#define MAX_VALVE_STATE_MISMATCH_COUNT 3 ///< Maximum number of times commanded valves state can fail to match read back valve states in a row. -/// Default publication interval for valves states -#define VALVES_STATE_PUB_INTERVAL ( 500 / TASK_PRIORITY_INTERVAL ) ///< interval ( ms / task time) at which valves states are published on CAN bus +#define VALVES_STATE_PUB_INTERVAL ( 500 / TASK_PRIORITY_INTERVAL ) ///< Interval ( ms / task time) at which valves states are published on CAN bus. // ********** private data ********** -static U32 valvesStatesPublicationTimerCounter = 0; ///< used to schedule valve state publication to CAN bus -static U16 commandedValvesStates = ALL_VALVES_DEENERGIZED; ///< initialize commanded valves states bit field. -static U32 valveStateMismatchCounter = 0; ///< initialize valve state mismatch counter +static U32 valvesStatesPublicationTimerCounter = 0; ///< Timer counter used to schedule valve state publication to CAN bus. +static U16 commandedValvesStates = ALL_VALVES_DEENERGIZED; ///< Initialize commanded valves states bit field. +static U32 valveStateMismatchCounter = 0; ///< Initialize valve state mismatch counter. -static OVERRIDE_U32_T valveStates[ NUM_OF_VALVES ]; ///< Currently commanded valves states -static OVERRIDE_U32_T valvesStatesPublishInterval = { VALVES_STATE_PUB_INTERVAL, VALVES_STATE_PUB_INTERVAL, 0, 0 }; ///< interval (in ms/task interval) at which to publish valves state to CAN bus +static OVERRIDE_U32_T valveStates[ NUM_OF_VALVES ]; ///< Currently commanded valves states. +static OVERRIDE_U32_T valvesStatesPublishInterval = { VALVES_STATE_PUB_INTERVAL, VALVES_STATE_PUB_INTERVAL, 0, 0 }; ///< Interval (in ms/task interval) at which to publish valves state to CAN bus. // ********** private function prototypes ********** -static BOOL checkValveStateName( VALVES_T valve, VALVE_STATE_NAMES_T valveStateName ); ///< check validity of requested valve state name for given valve -static U32 convertValveStateNameToValveState(VALVE_STATE_NAMES_T valveStateName); ///< Convert valve state name to de-/energized valve state -static U16 fromU32ArrayToU16( void ); ///< convert array of U32 to U16 for statesValves preparation +static BOOL checkValveStateName( VALVES_T valve, VALVE_STATE_NAMES_T valveStateName ); +static U32 convertValveStateNameToValveState(VALVE_STATE_NAMES_T valveStateName); +static U16 fromU32ArrayToU16( void ); static void publishValvesStates( void ); static DATA_GET_PROTOTYPE( U32, getPublishValvesStatesInterval ); @@ -66,7 +65,7 @@ U32 i; // initialize commanded valve states - for (i = 0; i < NUM_OF_VALVES; i++) + for ( i = 0; i < NUM_OF_VALVES; i++ ) { valveStates[ i ].data = DEENERGIZED; valveStates[ i ].ovInitData = DEENERGIZED; @@ -115,7 +114,7 @@ /*********************************************************************//** * @brief - * The checkValveStateName function checks the validity of requested valve \n + * The checkValveStateName function checks the validity of requested valve * state name for given valve. * @details * Inputs : none @@ -224,8 +223,7 @@ /*********************************************************************//** * @brief - * The getPublishValveStateInterval function gets the valves states \n - * publication interval. + * The getPublishValveStateInterval function gets the valves states publication interval. * @details * Inputs : valvesStatesPublishInterval * Outputs : none @@ -245,14 +243,14 @@ /*********************************************************************//** * @brief - * The fromU32ArrayToU16 function converts an array of U32 valve states \n + * The fromU32ArrayToU16 function converts an array of U32 valve states * to U16 valvesStates that can be passed to FPGA for setting valves. * @details * Inputs : valveStates[] * Outputs : none * @return converted U16 bit field for currently commanded valve states *************************************************************************/ -U16 fromU32ArrayToU16( void ) +static U16 fromU32ArrayToU16( void ) { U16 result = ALL_VALVES_DEENERGIZED; // start result flag as all valves de-energized U32 i; @@ -276,7 +274,7 @@ * @param valveStateName valve state name enumeration to convert to energized/de-energized * @return converted valve state for given valve state name *************************************************************************/ -U32 convertValveStateNameToValveState( VALVE_STATE_NAMES_T valveStateName ) +static U32 convertValveStateNameToValveState( VALVE_STATE_NAMES_T valveStateName ) { U32 vState = DEENERGIZED; // initialize valve state to de-energized @@ -345,7 +343,7 @@ * Inputs : none * Outputs : none * @param valveID ID of valve to set state for - * @param valveStateName Name of valve state to set given valve to + * @param valveStateName name of valve state to set given valve to * @return TRUE if new valve state is set for given valve ID, FALSE if not. *************************************************************************/ BOOL setValveState( VALVES_T valveID, VALVE_STATE_NAMES_T valveStateName ) @@ -354,7 +352,7 @@ if ( valveID < NUM_OF_VALVES ) { - if ( checkValveStateName ( valveID, valveStateName ) ) + if ( checkValveStateName( valveID, valveStateName ) ) { valveStates[ valveID ].data = convertValveStateNameToValveState( valveStateName ); result = TRUE; @@ -402,8 +400,7 @@ /*********************************************************************//** * @brief - * The publishValvesStates function publishes DG valves states at the \n - * set interval. + * The publishValvesStates function publishes DG valves states at the set interval. * @details * Inputs : valvesStatesPublicationTimerCounter * Outputs : DG valves states are published to CAN bus on interval. @@ -423,10 +420,9 @@ * TEST SUPPORT FUNCTIONS *************************************************************************/ - /*********************************************************************//** * @brief - * The testSetValvesStatesPublishIntervalOverride function overrides the \n + * The testSetValvesStatesPublishIntervalOverride function overrides the * valves states publish interval. * @details * Inputs : none @@ -452,7 +448,7 @@ /*********************************************************************//** * @brief - * The testResetValvesStatesPublishIntervalOverride function resets the override \n + * The testResetValvesStatesPublishIntervalOverride function resets the override * of the valves states publish interval. * @details * Inputs : none @@ -475,7 +471,7 @@ /*********************************************************************//** * @brief - * The testSetValveStateOverride function overrides the value of the \n + * The testSetValveStateOverride function overrides the value of the * specified valve with a given value. * Inputs : none * Outputs : valves[] @@ -502,8 +498,7 @@ /*********************************************************************//** * @brief - * The testResetValveStateOverride function resets the override of the \n - * specified valve. + * The testResetValveStateOverride function resets the override of the specified valve. * @details * Inputs : none * Outputs : valves[] Index: firmware/App/Controllers/Valves.h =================================================================== diff -u -ra7bf3ca23ea37a61000379facae628a31b3ecc59 -r5a882c7292cea58e74b5a28d4e85dd60e741b834 --- firmware/App/Controllers/Valves.h (.../Valves.h) (revision a7bf3ca23ea37a61000379facae628a31b3ecc59) +++ firmware/App/Controllers/Valves.h (.../Valves.h) (revision 5a882c7292cea58e74b5a28d4e85dd60e741b834) @@ -22,16 +22,15 @@ /** * @defgroup Valves Valves - * @brief Valves driver module. - * Controls valves. + * @brief Valves driver module. Controls valves. * * @addtogroup Valves * @{ */ // ********** public definitions ********** -/// Enumeration of available valve state names per valve type (from SA and DG SRS documents) +/// Enumeration of available valve state names per valve type (from SA and DG SRS documents). typedef enum ValveStateNames { VALVE_STATE_OPEN = 0, ///< Open valve state, used only for VPi, VBf, and VSP @@ -49,7 +48,7 @@ NUM_OF_VALVE_STATES ///< number of valve states } VALVE_STATE_NAMES_T; -/// Enumeration of valves +/// Enumeration of valves. typedef enum Valves { VRF = 0, ///< Valve Reservoir Fill @@ -70,11 +69,11 @@ // ********** public function prototypes ********** -void initValves( void ); // initialize the valves driver -void execValves( void ); // execute the valves driver +void initValves( void ); +void execValves( void ); -BOOL setValveState( VALVES_T valve, VALVE_STATE_NAMES_T valveState ); // set valve's state to valveState -DATA_ARRAY_GET_PROTOTYPE( U32, getValveState, valveID ); // get valve state for given valve +BOOL setValveState( VALVES_T valve, VALVE_STATE_NAMES_T valveState ); +DATA_ARRAY_GET_PROTOTYPE( U32, getValveState, valveID ); BOOL testSetValvesStatesPublishIntervalOverride( U32 value ); BOOL testResetValvesStatesPublishIntervalOverride( void ); @@ -83,4 +82,4 @@ /**@}*/ -#endif /* __VALVES_H__ */ +#endif