Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r2506bb824f04982d4cf6ad3d81853f863b2f9c11 -r863f8f88c73ee5dd285242f6e131a14862b4f5c4 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 2506bb824f04982d4cf6ad3d81853f863b2f9c11) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 863f8f88c73ee5dd285242f6e131a14862b4f5c4) @@ -77,7 +77,7 @@ static U32 roPumpDataPublicationTimerCounter; ///< Used to schedule RO pump data publication to CAN bus. static OVERRIDE_U32_T roPumpDataPublishInterval; ///< Interval (in ms) at which to publish boost pump data to CAN bus. static U32 roControlTimerCounter; ///< Determines when to perform control on RO pump. -static OVERRIDE_F32_T targetROPumpFlowRate; ///< Target RO flow rate (in L/min). +static OVERRIDE_U32_T targetROPumpFlowRate; ///< Target RO flow rate (in L/min). static OVERRIDE_F32_T targetROPumpPressure; ///< Target RO max allowed pressure (in PSI). static F32 roPumpDutyCyclePctSet; ///< Currently set RO pump PWM duty cycle. static F32 roPumpOpenLoopTargetDutyCycle; ///< Target RO pump open loop PWM. @@ -90,7 +90,7 @@ static RO_PUMP_STATE_T handleROPumpOpenLoopState( void ); static F32 roPumpPresToPWM( F32 targetPressure ); -static F32 roPumpFlowToPWM( F32 targetFlow ); +static F32 roPumpFlowToPWM( U32 targetFlow ); static void stopROPump( void ); static void publishROPumpData( void ); @@ -127,9 +127,9 @@ roPumpDataPublishInterval.ovData = RO_PUMP_DATA_PUB_INTERVAL; roPumpDataPublishInterval.ovInitData = 0; roPumpDataPublishInterval.override = OVERRIDE_RESET; - targetROPumpFlowRate.data = 0.0F; - targetROPumpFlowRate.ovData = 0.0F; - targetROPumpFlowRate.ovInitData = 0.0F; + targetROPumpFlowRate.data = 0; + targetROPumpFlowRate.ovData = 0; + targetROPumpFlowRate.ovInitData = 0; targetROPumpFlowRate.override = OVERRIDE_RESET; targetROPumpPressure.data = 0.0F; targetROPumpPressure.ovData = 0.0F; @@ -204,11 +204,11 @@ } // If there is a target flow set, transition to the PI controller and control to flow - else if ( ( getTargetROPumpFlowRateLPM() > 0.0F ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) ) + else if ( ( getTargetROPumpFlowRateMLPM() > 0 ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) ) { // Set pump to on isROPumpOn = TRUE; - roPumpDutyCyclePctSet = roPumpFlowToPWM( getTargetROPumpFlowRateLPM() ); + roPumpDutyCyclePctSet = roPumpFlowToPWM( getTargetROPumpFlowRateMLPM() ); setFluidPumpPctToPWMDutyCycle( P12_PUMP, roPumpDutyCyclePctSet ); state = RO_PUMP_CONTROL_TO_TARGET_FLOW_STATE; } @@ -252,7 +252,7 @@ } // If there is a target flow set, transition to the PI controller and control to flow - else if ( ( getTargetROPumpFlowRateLPM() > 0.0F ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) ) + else if ( ( getTargetROPumpFlowRateMLPM() > 0 ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) ) { ///transition to closed loop resetPIController( PI_CONTROLLER_ID_RO_PUMP_FLOW, roPumpDutyCyclePctSet, 0 ); @@ -290,7 +290,7 @@ // Control at set interval else if ( ( ++roControlTimerCounter >= ROP_CONTROL_INTERVAL ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) ) { - roPumpDutyCyclePctSet = runPIController( PI_CONTROLLER_ID_RO_PUMP_FLOW, getTargetROPumpFlowRateLPM(), getFlowRate( P16_FLOW ) ); + roPumpDutyCyclePctSet = runPIController( PI_CONTROLLER_ID_RO_PUMP_FLOW, getTargetROPumpFlowRateMLPM(), getFilteredFlow( P16_FLOW ) ); setFluidPumpPctToPWMDutyCycle( P12_PUMP, roPumpDutyCyclePctSet ); roControlTimerCounter = 0; } @@ -310,7 +310,7 @@ { RO_PUMP_STATE_T state = RO_PUMP_CONTROL_TO_TARGET_PRESSURE_STATE; - if ( getTargetROPumpFlowRateLPM() > 0.0F && ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) ) + if ( getTargetROPumpFlowRateMLPM() > 0 && ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) ) { // Transition to target flow resetPIController( PI_CONTROLLER_ID_RO_PUMP_FLOW, roPumpDutyCyclePctSet, 0 ); @@ -335,25 +335,25 @@ /*********************************************************************//** * @brief - * The setROPumpTargetFlowRateLPM function sets a new target flow rate for the + * The setROPumpTargetFlowRateMLPM function sets a new target flow rate for the * RO pump. * @details \b Inputs: roPumpOpenLoopTargetDutyCycle * @details \b Outputs: targetROPumpFlowRate, roPumpControlMode, roPumpDutyCyclePctSet, * roControlTimerCounter, isROPumpOn * @param roFlowRate which is target RO flow rate in mL/min * @return TRUE if new target flow rate is set successfully, FALSE if not *************************************************************************/ -BOOL setROPumpTargetFlowRateLPM( F32 roFlowRate ) +BOOL setROPumpTargetFlowRateMLPM( U32 roFlowRate ) { BOOL result = FALSE; // First of all, the flow rate must be in range - if ( ( roFlowRate <= MAX_RO_FLOWRATE_LPM ) && ( roFlowRate >= MIN_RO_FLOWRATE_LPM ) ) + if ( ( roFlowRate <= MAX_RO_FLOWRATE_MLPM ) && ( roFlowRate >= MIN_RO_FLOWRATE_MLPM ) ) { targetROPumpFlowRate.data = roFlowRate; roPumpControlMode = PUMP_CONTROL_MODE_CLOSED_LOOP; // Get the initial guess of the duty cycle - roPumpDutyCyclePctSet = roPumpFlowToPWM( getTargetROPumpFlowRateLPM() ); + roPumpDutyCyclePctSet = roPumpFlowToPWM( getTargetROPumpFlowRateMLPM() ); roControlTimerCounter = 0; isROPumpOn = TRUE; @@ -401,9 +401,9 @@ roControlTimerCounter = 0; isROPumpOn = TRUE; // Clear previous target data - if ( getTargetROPumpFlowRateLPM() > 0.0F ) + if ( getTargetROPumpFlowRateMLPM() > 0 ) { - targetROPumpFlowRate.data = 0.0F; + targetROPumpFlowRate.data = 0; } if ( roPumpOpenLoopTargetDutyCycle > 0.0F ) { @@ -444,9 +444,9 @@ // Set the new duty cycle of the pump setFluidPumpPctToPWMDutyCycle( P12_PUMP, roPumpOpenLoopTargetDutyCycle ); // Clear previous target data - if ( getTargetROPumpFlowRateLPM() > 0.0F ) + if ( getTargetROPumpFlowRateMLPM() > 0 ) { - targetROPumpFlowRate.data = 0.0F; + targetROPumpFlowRate.data = 0; } if ( getTargetROPumpPressure() > 0.0F ) { @@ -482,11 +482,11 @@ * flow rate. * @details \b Inputs: targetROPumpFlowRate * @details \b Outputs: none - * @return the current target RO flow rate (in L/min). + * @return the current target RO flow rate (in mL/min). *************************************************************************/ -F32 getTargetROPumpFlowRateLPM( void ) +U32 getTargetROPumpFlowRateMLPM( void ) { - F32 flowRate = getF32OverrideValue( &targetROPumpFlowRate ); + U32 flowRate = getU32OverrideValue( &targetROPumpFlowRate ); return flowRate; } @@ -516,7 +516,7 @@ * @param targetFlow target flow value to control in in mL/min * @return the current target RO pump PWM in a percentage. *************************************************************************/ -static F32 roPumpFlowToPWM( F32 targetFlow ) +static F32 roPumpFlowToPWM( U32 targetFlow ) { F32 dutyCyclePct = ROP_FLOW_TO_PWM( targetFlow ); @@ -533,9 +533,9 @@ *************************************************************************/ void signalROPumpHardStop( void ) { - if( targetROPumpFlowRate.data > 0.0F ) + if( targetROPumpFlowRate.data > 0 ) { - targetROPumpFlowRate.data = 0.0F; + targetROPumpFlowRate.data = 0; resetPIController( PI_CONTROLLER_ID_RO_PUMP_FLOW, MIN_FLUID_PUMP_DUTY_CYCLE_PCT, 0.0F ); } @@ -599,7 +599,7 @@ pumpData.p12PumpFBDutyCycle = (U32)getFluidPumpReadPWMDutyCycle( P12_PUMP ); pumpData.p12PumpSpeed = getFluidPumpRPM( P12_PUMP ); pumpData.p12TargetPressure = getTargetROPumpPressure(); - pumpData.p12TargetFlow = getTargetROPumpFlowRateLPM(); + pumpData.p12TargetFlow = getTargetROPumpFlowRateMLPM(); pumpData.p12TargetDutyCycle = roPumpOpenLoopTargetDutyCycle; broadcastData( MSG_ID_FP_RO_PUMP_DATA, COMM_BUFFER_OUT_CAN_RO_BROADCAST, (U08*)&pumpData, sizeof( RO_PUMP_DATA_T ) ); @@ -637,7 +637,7 @@ * @details \b Inputs: targetROPumpPressure * @details \b Outputs: targetROPumpPressure * @param message Override message from Dialin which includes the value - * that override ro pump data publish interval with (in ms) + * of the target pressure * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testROPumpTargetPressureOverride( MESSAGE_T *message ) @@ -654,12 +654,12 @@ * @details \b Inputs: targetROPumpFlowRate * @details \b Outputs: targetROPumpFlowRate * @param message Override message from Dialin which includes the value - * that override ro pump data publish interval with (in ms) + * of the target flow * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testROPumpTargetFlowOverride( MESSAGE_T *message ) { - BOOL result = f32Override( message, &targetROPumpFlowRate ); + BOOL result = u32Override( message, &targetROPumpFlowRate, MIN_RO_FLOWRATE_MLPM, MAX_RO_FLOWRATE_MLPM ); return result; }