Index: firmware/App/Controllers/BalancingChamber.c =================================================================== diff -u -r42541cc4700d748d524400f61d99e288a0e11f3e -rfc6a157a48debd4ee8c2fb8dec8af21f5b07abe2 --- firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision 42541cc4700d748d524400f61d99e288a0e11f3e) +++ firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision fc6a157a48debd4ee8c2fb8dec8af21f5b07abe2) @@ -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 -r917d510b37f14e22cde8c28b223f8e4894aeda94 -rfc6a157a48debd4ee8c2fb8dec8af21f5b07abe2 --- firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision 917d510b37f14e22cde8c28b223f8e4894aeda94) +++ firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision fc6a157a48debd4ee8c2fb8dec8af21f5b07abe2) @@ -52,13 +52,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 @@ -1152,7 +1151,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/Controllers/MixingControl.c =================================================================== diff -u -r917d510b37f14e22cde8c28b223f8e4894aeda94 -rfc6a157a48debd4ee8c2fb8dec8af21f5b07abe2 --- firmware/App/Controllers/MixingControl.c (.../MixingControl.c) (revision 917d510b37f14e22cde8c28b223f8e4894aeda94) +++ firmware/App/Controllers/MixingControl.c (.../MixingControl.c) (revision fc6a157a48debd4ee8c2fb8dec8af21f5b07abe2) @@ -121,6 +121,8 @@ #define FINAL_BICARB_MIX ( BICARB_MIX_VOLUME_ML * BICARB_PERCENT_CHANGE ) ///< Final bicarb mix volume +#define FINAL_BICARB_MIX_VOLUME_UPDATE ( FINAL_BICARB_MIX / 1.25 ) + #define BICARB_CONDUCTIVITY_PRE ( STD_DILUTION_BICARB_POST_MIX_NA * BICARB_PERCENT_CHANGE * getTDBicarbConversionFactor() ) ///< Theoretical bicarb conductivity pre mix #define BICARB_CONDUCTIVITY_POST ( STD_DILUTION_BICARB_POST_MIX_CHO3 * BICARB_PERCENT_CHANGE * getTDBicarbConversionFactor() ) ///< Theoretical bicarb conductivity post mix @@ -253,8 +255,8 @@ mixingControlAcidVolume.ovInitData = 0.0F; mixingControlAcidVolume.override = OVERRIDE_RESET; - mixingControlBicarbVolume.data = FINAL_BICARB_MIX; - mixingControlBicarbVolume.ovData = FINAL_BICARB_MIX; + mixingControlBicarbVolume.data = FINAL_BICARB_MIX_VOLUME_UPDATE; + mixingControlBicarbVolume.ovData = FINAL_BICARB_MIX_VOLUME_UPDATE; mixingControlBicarbVolume.ovInitData = 0.0F; mixingControlBicarbVolume.override = OVERRIDE_RESET; @@ -324,8 +326,8 @@ mixingControlAcidControlInterval.override = OVERRIDE_RESET; mixingControlDataPublicationTimerCounter = 0; - mixingControlLastBicarbMixVolume = 0; - mixingControlLastAcidMixVolume = 0; + mixingControlLastBicarbMixVolume = 0.0F; + mixingControlLastAcidMixVolume = 0.0F; initializePIController( PI_CONTROLLER_ID_BICARB_VOL, 0.0F,\ getBicarbKpGainCoefficient(), getBicarbKiGainCoefficient(),\ Index: firmware/App/Controllers/MixingControl.h =================================================================== diff -u -r917d510b37f14e22cde8c28b223f8e4894aeda94 -rfc6a157a48debd4ee8c2fb8dec8af21f5b07abe2 --- firmware/App/Controllers/MixingControl.h (.../MixingControl.h) (revision 917d510b37f14e22cde8c28b223f8e4894aeda94) +++ firmware/App/Controllers/MixingControl.h (.../MixingControl.h) (revision fc6a157a48debd4ee8c2fb8dec8af21f5b07abe2) @@ -66,7 +66,7 @@ // ********** public function prototypes ********** void initMixingControl( void ); - void execMixingControl( void ); +void execMixingControl( void ); F32 getBicarbMixVol( void ); F32 getAcidMixVol( void ); Index: firmware/App/Monitors/Conductivity.c =================================================================== diff -u -r917d510b37f14e22cde8c28b223f8e4894aeda94 -rfc6a157a48debd4ee8c2fb8dec8af21f5b07abe2 --- firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision 917d510b37f14e22cde8c28b223f8e4894aeda94) +++ firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision fc6a157a48debd4ee8c2fb8dec8af21f5b07abe2) @@ -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 *************************************************************************/