/************************************************************************** * * Copyright (c) 2020-2024 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file ROPump.h * * @author (last) Sean Nash * @date (last) 12-Nov-2024 * * @author (original) Sean Nash * @date (original) 12-Nov-2024 * ***************************************************************************/ #ifndef __RO_PUMP_H__ #define __RO_PUMP_H__ #include "FluidPump.h" #include "FPCommon.h" /** * @defgroup ROPump ROPump * @brief RO Pump controller unit. Controls and monitors the RO pump. * The diaphragm (RO) pump is manufactured by Aquatec, PN: 5889-2MM1-V724DY. * * @addtogroup ROPump * @{ */ // ********** public definitions ********** #define MAX_RO_FLOWRATE_MLPM 1500 ///< Maximum target RO flow rate in mL/min. #define MIN_RO_FLOWRATE_MLPM 0 ///< Minimum target RO flow rate in mL/min. #define MAX_RO_PRESSURE_PSI 120.0F ///< Maximum allowed pressure that the RO pump can go to. #define MIN_RO_PRESSURE_PSI 0.0F ///< Minimum allowed pressure that the RO pump can go to. /// Enumeration of RO pump states. typedef enum ROPump_States { RO_PUMP_OFF_STATE = 0, ///< RO pump off state. RO_PUMP_CONTROL_TO_TARGET_FLOW_STATE, ///< RO pump control to target flow state. RO_PUMP_CONTROL_TO_TARGET_PRESSURE_STATE, ///< RO pump control to max pressure state. RO_PUMP_OPEN_LOOP_STATE, ///< RO pump open loop state. NUM_OF_RO_PUMP_STATES ///< Number of RO pump states. } RO_PUMP_STATE_T; /// RO pump data record. typedef struct { U32 p12PumpState; ///< RO pump current state. U32 p12PumpDutyCycle; ///< RO pump duty cycle at driver level. U32 p12PumpFBDutyCycle; ///< RO pump feedback duty cycle. F32 p12PumpSpeed; ///< RO pump speed (RPM). F32 p12TargetPressure; ///< RO pump target pressure for control. F32 p12TargetFlow; ///< RO pump target flow ( in mL/min ) for control. F32 p12TargetDutyCycle; ///< RO pump target duty cycle for open loop control. F32 p12PumpDutyCyclePct; ///< RO pump duty cycle as a percentage. F32 p12PumpFBDutyCyclePct; ///< RO pump feedback duty cycle as a percentage. } RO_PUMP_DATA_T; // ********** public function prototypes ********** void initROPump( void ); void execROPumpMonitor( void ); void execROPumpController( void ); void signalROPumpHardStop( void ); BOOL isROPumpRunning( void ); BOOL setROPumpTargetFlowRateMLPM( U32 roFlowRate, BOOL firmwareCall ); BOOL setROPumpTargetPressure( F32 roPressure, BOOL firmwareCall ); BOOL setROPumpTargetDutyCycle( F32 duty, BOOL firmwareCall ); F32 getCurrentROPumpDutyCyclePCT( void ); F32 getTargetROPumpDutyCyclePCT( void ); U32 getTargetROPumpFlowRateMLPM( void ); F32 getTargetROPumpPressure( void ); BOOL testROPumpDataPublishIntervalOverride( MESSAGE_T *message ); BOOL testROPumpTargetPressureOverride( MESSAGE_T *message ); BOOL testROPumpTargetFlowOverride( MESSAGE_T *message ); BOOL testROPumpTargetDutyCycleOverride( MESSAGE_T *message ); BOOL testROPumpHardStop( MESSAGE_T *message ); /**@}*/ #endif