Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r68fc03b5a22f14190146fc9069f022c109682b63 -r16dfbeeca1bcf1d2115c2f7549999fdaae0700e9 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 68fc03b5a22f14190146fc9069f022c109682b63) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 16dfbeeca1bcf1d2115c2f7549999fdaae0700e9) @@ -21,9 +21,10 @@ #include "etpwm.h" #include "FPGA.h" -#include "InternalADC.h" +//#include "InternalADC.h" #include "OperationModes.h" #include "PIControllers.h" +#include "Pressures.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "TaskPriority.h" @@ -45,6 +46,8 @@ #define ROP_SPEED_ADC_TO_RPM_FACTOR 1.0 ///< conversion factor from ADC counts to RPM for RO pump #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 0.00018 ///< conversion factor from ADC counts to LPM (liters/min) for RO flow rate. + typedef enum ROPump_States { RO_PUMP_OFF_STATE = 0, @@ -72,8 +75,8 @@ static OVERRIDE_U32_T roPumpDataPublishInterval = { 0, 0, 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 measuredROPumpPressure = { 0.0, 0.0, 0.0, 0 }; ///< Tmeasured RO pressure (in PSI). -static OVERRIDE_F32_T roPumpSpeedRPM = { 0.0, 0.0, 0.0, 0 }; ///< measured RO pump motor speed (in RPM). +static OVERRIDE_F32_T measuredROPumpPressure = { 0.0, 0.0, 0.0, 0 }; ///< measured RO pressure (in PSI). +static OVERRIDE_F32_T measuredROFlowRateLPM = { 0.0, 0.0, 0.0, 0 }; ///< measured RO flow rate (in LPM). static U32 roControlTimerCounter = 0; ///< determines when to perform control on ro flow @@ -165,25 +168,31 @@ * The execROPumpMonitor function executes the RO Pump monitor. * @details * Inputs : none - * Outputs : measuredROPumpPressure + * Outputs : measuredROPumpPressure, measuredROFlowRateLPM * @param none * @return none *************************************************************************/ void execROPumpMonitor( void ) { - U16 roRPM = getFPGAROPumpSpeed(); - F32 roPressure = getFPGAROOutPressure(); + S32 roFlow = (S32)getFPGAROPumpFlowRate(); + F32 roPressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_OUTLET ); - roPumpSpeedRPM.data = (F32)((S16)roRPM); + measuredROFlowRateLPM.data = (F32)(roFlow) * RO_FLOW_ADC_TO_LPM_FACTOR; measuredROPumpPressure.data = (F32)((S16)roPressure); - // check pressure -// if ( roPressure < MIN_RO_PRESSURE || roPressure > MAX_RO_PRESSURE ) -// { -// SET_ALARM_WITH_1_F32_DATA( ALARM_ID_RO_PUMP_OUT_PRESSURE_OUR_OF_RANGE, roPressure ) -// } + // check RO flow + // TODO - check flow - // publish RO flow data on interval + // check pressure while RO pump is on + if ( TRUE == isROPumpOn ) + { + if ( roPressure < MIN_RO_PRESSURE || roPressure > MAX_RO_PRESSURE ) + { + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_RO_PUMP_OUT_PRESSURE_OUR_OF_RANGE, roPressure ) // TODO - add persistence + } + } + + // publish RO pump data on interval publishROPumpData(); } @@ -229,7 +238,7 @@ RO_PUMP_STATE_T result = RO_PUMP_OFF_STATE; // if we've been given a pressure, transition to control to target state - if ( getTargetROPressure() > 0 ) + if ( getTargetROPumpPressure() > 0 ) { // set initial PWM duty cycle roPumpPWMDutyCyclePctSet = roPumpPWMDutyCyclePct; @@ -263,11 +272,11 @@ { if ( roPumpControlModeSet == PUMP_CONTROL_MODE_CLOSED_LOOP ) { - F32 tgtFlow = (F32)getTargetROPressure(); - F32 actFlow = getMeasuredROPressure(); + F32 tgtPres = (F32)getTargetROPumpPressure(); + F32 actPres = getMeasuredROPumpPressure(); F32 newPWM; - newPWM = runPIController( PI_CONTROLLER_ID_RO_PUMP, tgtFlow, actFlow ); + newPWM = runPIController( PI_CONTROLLER_ID_RO_PUMP, tgtPres, actPres ); roPumpPWMDutyCyclePctSet = newPWM; setROPumpControlSignalPWM( newPWM ); } @@ -318,8 +327,18 @@ * @param none * @return the current RO pump data publication interval (in ms). *************************************************************************/ -DATA_GET( U32, getPublishROPumpDataInterval, roPumpDataPublishInterval ) +U32 getPublishROPumpDataInterval( void ) +{ + U32 result = roPumpDataPublishInterval.data; + if ( OVERRIDE_KEY == roPumpDataPublishInterval.override ) + { + result = roPumpDataPublishInterval.ovData; + } + + return result; +} + /************************************************************************* * @brief * The getTargetROPumpPressure function gets the current target RO pump \n @@ -330,8 +349,18 @@ * @param none * @return the current target RO pressure (in PSI). *************************************************************************/ -DATA_GET( S32, getTargetROPumpPressure, targetROPumpPressure ) +U32 getTargetROPumpPressure( void ) +{ + U32 result = targetROPumpPressure.data; + if ( OVERRIDE_KEY == targetROPumpPressure.override ) + { + result = targetROPumpPressure.ovData; + } + + return result; +} + /************************************************************************* * @brief * The getMeasuredROPumpPressure function gets the measured RO pump \n @@ -342,20 +371,40 @@ * @param none * @return the current RO pressure (in PSI). *************************************************************************/ -DATA_GET( F32, getMeasuredROPumpPressure, measuredROPumpPressure ) +F32 getMeasuredROPumpPressure( void ) +{ + F32 result = measuredROPumpPressure.data; + if ( OVERRIDE_KEY == measuredROPumpPressure.override ) + { + result = measuredROPumpPressure.ovData; + } + + return result; +} + /************************************************************************* * @brief - * The getMeasuredROPumpSpeed function gets the measured RO pump \n - * speed. + * The getMeasuredROFlowRate function gets the measured RO pump \n + * flow rate. * @details * Inputs : roPumpSpeedRPM * Outputs : none * @param none * @return the current RO pump speed (in RPM). *************************************************************************/ -DATA_GET( F32, getMeasuredROPumpSpeed, roPumpSpeedRPM ) +F32 getMeasuredROFlowRate( void ) +{ + F32 result = measuredROFlowRateLPM.data; + if ( OVERRIDE_KEY == measuredROFlowRateLPM.override ) + { + result = measuredROFlowRateLPM.ovData; + } + + return result; +} + /************************************************************************* * @brief * The publishROPumpData function publishes RO pump data at the set \n @@ -370,11 +419,10 @@ // publish RO pump data on interval if ( ++roPumpDataPublicationTimerCounter >= getPublishROPumpDataInterval() ) { - S32 presStPt = (S32)getTargetROPumpPressure(); - F32 measPres = getMeasuredROPumpPressure(); - F32 measSpd = getMeasuredROPumpSpeed(); + U32 presStPt = getTargetROPumpPressure(); + F32 measFlow = getMeasuredROFlowRate(); F32 pumpPWMPctDutyCycle = roPumpPWMDutyCyclePctSet * FRACTION_TO_PERCENT_FACTOR; - broadcastROPumpData( presStPt, measPres, measSpd, pumpPWMPctDutyCycle ); + broadcastROPumpData( presStPt, measFlow, pumpPWMPctDutyCycle ); roPumpDataPublicationTimerCounter = 0; } } @@ -504,95 +552,47 @@ /************************************************************************* * @brief - * The testResetMeasuredROPumpPressureOverride function overrides the measured \n - * ro pressure. + * The testSetMeasuredROFlowRateOverride function overrides the measured \n + * RO flow rate. * @details * Inputs : none - * Outputs : measuredROPumpPressure - * @param value : override measured RO pressure (in PSI) - * @return TRUE if override successful, FALSE if not - *************************************************************************/ -BOOL testSetMeasuredROPumpPressureOverride( F32 value ) -{ - BOOL result = FALSE; - - if ( TRUE == isTestingActivated() ) - { - result = TRUE; - measuredROPumpPressure.ovData = value; - measuredROPumpPressure.override = OVERRIDE_KEY; - } - - return result; -} - -/************************************************************************* - * @brief - * The testResetOffButtonStateOverride function resets the override of the \n - * measured RO pressure. - * @details - * Inputs : none - * Outputs : measuredROPumpPressure - * @param none - * @return TRUE if override successful, FALSE if not - *************************************************************************/ -BOOL testResetMeasuredROPumpPressureOverride( void ) -{ - BOOL result = FALSE; - - if ( TRUE == isTestingActivated() ) - { - result = TRUE; - measuredROPumpPressure.override = OVERRIDE_RESET; - measuredROPumpPressure.ovData = measuredROPumpPressure.ovInitData; - } - - return result; -} - -/************************************************************************* - * @brief - * The testSetMeasuredROPumpSpeedOverride function overrides the measured \n - * RO pump motor speed. - * @details - * Inputs : none - * Outputs : roPumpSpeedRPM + * Outputs : measuredROFlowRateLPM * @param value : override measured RO pump motor speed (in RPM) * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testSetMeasuredROPumpSpeedOverride( F32 value ) +BOOL testSetMeasuredROFlowRateOverride( F32 value ) { BOOL result = FALSE; if ( TRUE == isTestingActivated() ) { result = TRUE; - roPumpSpeedRPM.ovData = value; - roPumpSpeedRPM.override = OVERRIDE_KEY; + measuredROFlowRateLPM.ovData = value; + measuredROFlowRateLPM.override = OVERRIDE_KEY; } return result; } /************************************************************************* * @brief - * The testResetMeasuredROPumpSpeedOverride function resets the override of the \n - * measured RO pump motor speed. + * The testResetMeasuredROFlowRateOverride function resets the override of the \n + * measured RO flow rate. * @details * Inputs : none - * Outputs : roPumpSpeedRPM + * Outputs : measuredROFlowRateLPM * @param none * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testResetMeasuredROPumpSpeedOverride( void ) +BOOL testResetMeasuredROFlowRateOverride( void ) { BOOL result = FALSE; if ( TRUE == isTestingActivated() ) { result = TRUE; - roPumpSpeedRPM.override = OVERRIDE_RESET; - roPumpSpeedRPM.ovData = roPumpSpeedRPM.ovInitData; + measuredROFlowRateLPM.override = OVERRIDE_RESET; + measuredROFlowRateLPM.ovData = measuredROFlowRateLPM.ovInitData; } return result;