Index: firmware/App/Controllers/MixingControl.c =================================================================== diff -u -rfc6a157a48debd4ee8c2fb8dec8af21f5b07abe2 -r095866efd8f10bdead490578e7584051d79292f0 --- firmware/App/Controllers/MixingControl.c (.../MixingControl.c) (revision fc6a157a48debd4ee8c2fb8dec8af21f5b07abe2) +++ firmware/App/Controllers/MixingControl.c (.../MixingControl.c) (revision 095866efd8f10bdead490578e7584051d79292f0) @@ -46,8 +46,8 @@ #define MIXING_CONTROL_DATA_PUBLISH_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the mixing control data published. // drybicarb mixing -#define BICARB_VOL_CONTROL_P_COEFFICIENT ( 0.00008484F ) ///< Bicarb proportional gain (kp) -#define BICARB_VOL_CONTROL_I_COEFFICIENT ( 0.00033936F / 8 ) ///< Bicarb integral gain. (ki) +#define BICARB_VOL_CONTROL_P_COEFFICIENT ( 0.00008484F * 2 ) ///< Bicarb proportional gain (kp) +#define BICARB_VOL_CONTROL_I_COEFFICIENT ( 0.00033936F / 4 ) ///< Bicarb integral gain. (ki) #define MIN_BICARB_VOLUME_ML 0.4F ///< Minimum bicarb volume in mL #define MAX_BICARB_VOLUME_ML 1.8F ///< Maximum bicarb volume in mL @@ -69,11 +69,11 @@ #define MIX_NO_FEED_FORWARD 0.0F ///< Feed forward term for dialysate closed loop control -#define BICARB_MIX_CONTROL_INTERVAL_MULTIPLIER ( 3 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the bicarb mix is controlled. -#define ACID_MIX_CONTROL_INTERVAL_MULTIPLIER ( 5 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the dialysate mix is controlled. +#define BICARB_MIX_CONTROL_INTERVAL ( 9 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the bicarb mix is controlled. +#define ACID_MIX_CONTROL_INTERVAL ( 15 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the dialysate mix is controlled. -#define BICARB_DEADBAND_CONTROL 30.0F ///< Bicarb dead band control -#define ACID_DEADBAND_CONTROL 70.0F ///< Acid dead band control +#define BICARB_DEADBAND_CONTROL 15.0F ///< Bicarb dead band control +#define ACID_DEADBAND_CONTROL 50.0F ///< Acid dead band control // Proportioning Ratios: 1 Part Acid : 1.72 Parts Bicarb : 42.28 Parts Water // Total parts = 1 + 1.72 + 42.28 = 45.0 @@ -121,8 +121,6 @@ #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 @@ -203,7 +201,6 @@ static void setBicarbMixVol( F32 targetValue ); static void setAcidMixVol( F32 targetValue ); -static void updatedCMixingControlInterval( void ); static F32 getBicarbDeltaConductivity( void ); static F32 getBicarbTargetConductivity( void ); @@ -255,8 +252,8 @@ mixingControlAcidVolume.ovInitData = 0.0F; mixingControlAcidVolume.override = OVERRIDE_RESET; - mixingControlBicarbVolume.data = FINAL_BICARB_MIX_VOLUME_UPDATE; - mixingControlBicarbVolume.ovData = FINAL_BICARB_MIX_VOLUME_UPDATE; + mixingControlBicarbVolume.data = FINAL_BICARB_MIX; + mixingControlBicarbVolume.ovData = FINAL_BICARB_MIX; mixingControlBicarbVolume.ovInitData = 0.0F; mixingControlBicarbVolume.override = OVERRIDE_RESET; @@ -315,19 +312,19 @@ mixingControlTargetAdjBicarbSettings.ovInitData = 0.0F; mixingControlTargetAdjBicarbSettings.override = OVERRIDE_RESET; - mixingControlBicarbControlInterval.data = BICARB_MIX_CONTROL_INTERVAL_MULTIPLIER; - mixingControlBicarbControlInterval.ovData = BICARB_MIX_CONTROL_INTERVAL_MULTIPLIER; + mixingControlBicarbControlInterval.data = BICARB_MIX_CONTROL_INTERVAL; + mixingControlBicarbControlInterval.ovData = BICARB_MIX_CONTROL_INTERVAL; mixingControlBicarbControlInterval.ovInitData = 0; mixingControlBicarbControlInterval.override = OVERRIDE_RESET; - mixingControlAcidControlInterval.data = ACID_MIX_CONTROL_INTERVAL_MULTIPLIER; - mixingControlAcidControlInterval.ovData = ACID_MIX_CONTROL_INTERVAL_MULTIPLIER; + mixingControlAcidControlInterval.data = ACID_MIX_CONTROL_INTERVAL; + mixingControlAcidControlInterval.ovData = ACID_MIX_CONTROL_INTERVAL; mixingControlAcidControlInterval.ovInitData = 0; mixingControlAcidControlInterval.override = OVERRIDE_RESET; mixingControlDataPublicationTimerCounter = 0; - mixingControlLastBicarbMixVolume = 0.0F; - mixingControlLastAcidMixVolume = 0.0F; + mixingControlLastBicarbMixVolume = 0; + mixingControlLastAcidMixVolume = 0; initializePIController( PI_CONTROLLER_ID_BICARB_VOL, 0.0F,\ getBicarbKpGainCoefficient(), getBicarbKiGainCoefficient(),\ @@ -364,8 +361,6 @@ { if ( getCurrentBalancingChamberExecState() > BAL_CHAMBER_STATE_IDLE ) { - updatedCMixingControlInterval(); - // closed loop bicarb and acid mixing controller handleDialysateCompositionMixing(); } @@ -432,36 +427,6 @@ /*********************************************************************//** * @brief - * The updatedCMixingControlInterval function sets both acid and bicarb - * Mix volume provided by the controller - * @details \b Inputs: none - * @details \b Outputs: mixingControlBicarbMixVolume - * @param targetValue bicarb Mix volume - * @return TRUE if successful, FALSE if not. - *************************************************************************/ -static void updatedCMixingControlInterval( void ) -{ - F32 tdDialysateFlowRate = 0.0F; - F32 balChamberSwitchingFreq = 0.0F; - U32 balChamberSwitchingPeriod = 0; - - tdDialysateFlowRate = getTDDialysateFlowrate(); - - balChamberSwitchingFreq = tdDialysateFlowRate / 30.0; - balChamberSwitchingPeriod = ( SEC_PER_MIN ) / (U32)balChamberSwitchingFreq; - - // For acid control period, we are using 3 cycles of balancing chamber switching period (for ex: At Qd = 600, switching period = 3sec, so acid control interval = 3*3 = 9sec - // For bicarb control period, we are using 5 cycles of balancing chamber switching period (for ex: At Qd = 600, switching period = 3sec, so bicarb control interval = 3*5 = 15sec - - if ( balChamberSwitchingPeriod > 0) - { - mixingControlAcidControlInterval.data = ACID_MIX_CONTROL_INTERVAL_MULTIPLIER * balChamberSwitchingPeriod; - mixingControlBicarbControlInterval.data = BICARB_MIX_CONTROL_INTERVAL_MULTIPLIER * balChamberSwitchingPeriod; - } -} - -/*********************************************************************//** - * @brief * The getBicarbDeltaConductivity function gets the delta target conductivity * @details \b Inputs: mixingControlBicarbDeltaConductivity * @details \b Outputs: none @@ -1149,7 +1114,7 @@ *************************************************************************/ BOOL testMixingControlBicarbControlIntervalOverride( MESSAGE_T *message ) { - BOOL result = u32Override( message, &mixingControlBicarbControlInterval, 0, BICARB_MIX_CONTROL_INTERVAL_MULTIPLIER ); + BOOL result = u32Override( message, &mixingControlBicarbControlInterval, 0, BICARB_MIX_CONTROL_INTERVAL ); return result; } @@ -1166,7 +1131,7 @@ *************************************************************************/ BOOL testMixingControlAcidControlIntervalOverride( MESSAGE_T *message ) { - BOOL result = u32Override( message, &mixingControlAcidControlInterval, 0, ACID_MIX_CONTROL_INTERVAL_MULTIPLIER ); + BOOL result = u32Override( message, &mixingControlAcidControlInterval, 0, BICARB_MIX_CONTROL_INTERVAL ); return result; }