Index: firmware/App/Controllers/BalancingChamber.c =================================================================== diff -u -r02dbfcdab541781a4ba310eb6e7f9278c0764887 -r483ebbb75171ec93ab24d1f69f83a6248376266f --- firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision 02dbfcdab541781a4ba310eb6e7f9278c0764887) +++ firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision 483ebbb75171ec93ab24d1f69f83a6248376266f) @@ -66,6 +66,9 @@ #define BC_BICARB_SPEED_OFFSET_MLPM 240.0F ///< Bicarb speed formula offset (mL/min). #define BC_BICARB_SPEED_DISC_CONST 230400.0F ///< Bicarb speed formula discriminant constant. #define BC_BICARB_SPEED_DISC_VOL_COEF 96000.0F ///< Bicarb speed formula volume coefficient. +#define BC_ACID_SPEED_OFFSET_MLPM 160.0F +#define BC_ACID_SPEED_DISC_CONSTANT 102400.0F +#define BC_ACID_SPEED_DISC_VOL_COEF 96000.0F /// Payload record structure for balancing chamber switch only request typedef struct @@ -142,6 +145,7 @@ static void closeFreshSideValvesWhenFillComplete( void ); static void calculateBalancingChamberError( void ); static F32 getBicarbConcentratePumpSpeedMlMin( F32 bicarbVolumeMl ); +static F32 getAcidConcentratePumpSpeedMlMin( F32 acidVolumeMl ); static void startBalChamberConcPumpDosing( F32 acidVolume, F32 bicarbVolume ); /*********************************************************************//** @@ -210,6 +214,41 @@ /*********************************************************************//** * @brief + * The getAcidConcentratePumpSpeedMlMin function computes D11 pump speed + * from the instantaneous acid mix volume: + * speed = 160 - sqrt(102400 - 96000*v) / 2 + * Result is clamped to [CONCENTRATE_PUMP_MIN_SPEED, CONCENTRATE_PUMP_MAX_SPEED]. + * @details \b Inputs: acidVolumeMl + * @details \b Outputs: none + * @param acidVolumeMl Instantaneous acid mix volume (mL) + * @return Acid concentrate pump speed (mL/min) + *************************************************************************/ +static F32 getAcidConcentratePumpSpeedMlMin( F32 acidVolumeMl) +{ + + F32 discriminant = BC_ACID_SPEED_DISC_CONSTANT - ( BC_ACID_SPEED_DISC_VOL_COEF * acidVolumeMl ); + F32 result = 0.0F; + + if ( discriminant < 0.0F ) + { + discriminant = 0.0F; + } + + result = BC_ACID_SPEED_OFFSET_MLPM - ( sqrtf( discriminant ) / 2.0F ); + + if ( result > CONCENTRATE_PUMP_MAX_SPEED ) + { + result = CONCENTRATE_PUMP_MAX_SPEED; + } + else if ( result < 0.0F ) + { + result = CONCENTRATE_PUMP_MIN_SPEED; + } + + return result; +} +/*********************************************************************//** + * @brief * The getBicarbConcentratePumpSpeedMlMin function computes D10 pump speed * from the instantaneous bicarb mix volume: * speed = 240 - sqrt(230400 - 96000*v) / 2 @@ -256,7 +295,7 @@ *************************************************************************/ static void startBalChamberConcPumpDosing( F32 acidVolume, F32 bicarbVolume ) { - F32 acidSpeed = DOSING_ACID_CONCENTRATE_PUMP_SPEED; + F32 acidSpeed = getAcidConcentratePumpSpeedMlMin( acidVolume ); F32 bicarbSpeed = getBicarbConcentratePumpSpeedMlMin( bicarbVolume ); setConcentratePumpTargetSpeed( D11_PUMP, acidSpeed, acidVolume ); Index: firmware/App/Controllers/DryBiCart.c =================================================================== diff -u -r7f309e4b0ca59f359080fe7e77ad407209fa35bc -r483ebbb75171ec93ab24d1f69f83a6248376266f --- firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision 7f309e4b0ca59f359080fe7e77ad407209fa35bc) +++ firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision 483ebbb75171ec93ab24d1f69f83a6248376266f) @@ -51,13 +51,12 @@ // Dry Bicart Fill #define DRY_BICART_FILL_COMPLETE_TIME_MS ( 1 * MS_PER_SECOND ) ///< Wait time to reset the request flag after fill complete -#define DRY_BICART_WCID2_FILL_COMPLETE_PRESSURE_PSI ( 10.0F + WCDI2_PRESSURE_OFFSET_PSI ) ///< Maximum pressure reached to indicate the dry bicart fill being completed for WCID2 +#define DRY_BICART_WCID2_FILL_COMPLETE_PRESSURE_PSI ( 3.0F + WCDI2_PRESSURE_OFFSET_PSI ) ///< Maximum pressure reached to indicate the dry bicart fill being completed for WCID2 #define DRY_BICART_WCID1_FILL_COMPLETE_PRESSURE_PSI ( 10.0F + WCID1_PRESSURE_OFFSET_PSI ) ///< Maximum pressure reached to indicate the dry bicart fill being completed for WCID1. #define GET_FILL_COMPLETE_PRESSURE_PSI (getTestConfigStatus( TEST_CONFIG_DD_ENABLE_WCID_1 ) != TRUE ? \ DRY_BICART_WCID2_FILL_COMPLETE_PRESSURE_PSI : DRY_BICART_WCID1_FILL_COMPLETE_PRESSURE_PSI ) ///< Get fill complete pressure based on the WCID configuration #define DRY_BICART_FILL_INITIATE_PRESSURE_PSI 1.5F ///< Minimum pressure required to initiate the dry bicart fill process. -//#define DRY_BICART_FILL_COMPLETE_SUPPLY_PRESSURE_PSI 10.0F ///< Maximum pressure allowed at bicart fill during supply process/state -#define DRY_BICART_FILL_COMPLETE_SUPPLY_PRESSURE_PSI 17.0F ///< Maximum pressure allowed at bicart fill during supply process/state +#define DRY_BICART_FILL_COMPLETE_SUPPLY_PRESSURE_PSI 10.0F ///< Maximum pressure allowed at bicart fill during supply process/state #define DRY_BICART_FILL_INITIATE_SUPPLY_PRESSURE_PSI 4.0F ///< Minimum pressure required to initiate the dry bicart fill during supply process/state #define DRY_BICART_MAX_FILL_CYCLE_CNT 10 ///< Max fill cycle allowed (by override) for dry bicart fill/mix with water. #define DRY_BICART_MINIMUM_FILL_CYCLE_CNT 3 ///< Minimum fill cycle count for filling dry bicart @@ -1155,7 +1154,7 @@ /*********************************************************************//** * @brief - * The handleBicarbChamberCartridgeFillWaterStartState function stop water in the fill water end state + * The handleBicarbChamberCartridgeFillWaterStartState function stops the inlet water to cartridge. * @details \b Inputs: dryBiCartPersistenceStartTime * @details \b Outputs: valve states * @return the next bicarb chamber check level state. Index: firmware/App/Monitors/Conductivity.c =================================================================== diff -u -r7f309e4b0ca59f359080fe7e77ad407209fa35bc -r483ebbb75171ec93ab24d1f69f83a6248376266f --- firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision 7f309e4b0ca59f359080fe7e77ad407209fa35bc) +++ firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision 483ebbb75171ec93ab24d1f69f83a6248376266f) @@ -390,7 +390,7 @@ * @brief * The resetConductivityFilterReadings function clears conductivity rolling * average data when the active filter window changes. - * @details \b Inputs: none + * @details \b Inputs: filteredConductivityReadings * @details \b Outputs: filteredConductivityReadings * @return none *************************************************************************/