Index: firmware/App/Controllers/MixingControl.c =================================================================== diff -u -r847659965e5823e2e25db62c14f4611db9527f8a -r5b964c8b60808451ece4379fb74aee9e7532b034 --- firmware/App/Controllers/MixingControl.c (.../MixingControl.c) (revision 847659965e5823e2e25db62c14f4611db9527f8a) +++ firmware/App/Controllers/MixingControl.c (.../MixingControl.c) (revision 5b964c8b60808451ece4379fb74aee9e7532b034) @@ -69,11 +69,11 @@ #define MIX_NO_FEED_FORWARD 0.0F ///< Feed forward term for dialysate closed loop control -#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_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_DEADBAND_CONTROL 15.0F ///< Bicarb dead band control -#define ACID_DEADBAND_CONTROL 50.0F ///< Acid dead band control +#define BICARB_DEADBAND_CONTROL 30.0F ///< Bicarb dead band control +#define ACID_DEADBAND_CONTROL 70.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 @@ -130,7 +130,8 @@ #define TOTAL_CONDUCTIVITY ( ACID_CONDUCTIVITY_POST + BICARB_CONDUCTIVITY_POST ) ///< Theoretical Dialysate conductivity - +#define FLOW_SETTING_FOR_STATIC_CONTROL_INTERVAL_UPDATE 100.0F ///< Flowrate at which static update is applied for bicarb and dialysate +#define STATIC_CONTROL_INTERVAL ( 2 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which dialysate and bicarb mix is controlled (for qd <= 100 mL/min) /// Enumeration of dialysate Mixing id. typedef enum DialysateMixingID { @@ -313,13 +314,13 @@ mixingControlTargetAdjBicarbSettings.ovInitData = 0.0F; mixingControlTargetAdjBicarbSettings.override = OVERRIDE_RESET; - mixingControlBicarbControlInterval.data = BICARB_MIX_CONTROL_INTERVAL; - mixingControlBicarbControlInterval.ovData = BICARB_MIX_CONTROL_INTERVAL; + mixingControlBicarbControlInterval.data = BICARB_MIX_CONTROL_INTERVAL_MULTIPLIER; + mixingControlBicarbControlInterval.ovData = BICARB_MIX_CONTROL_INTERVAL_MULTIPLIER; mixingControlBicarbControlInterval.ovInitData = 0; mixingControlBicarbControlInterval.override = OVERRIDE_RESET; - mixingControlAcidControlInterval.data = ACID_MIX_CONTROL_INTERVAL; - mixingControlAcidControlInterval.ovData = ACID_MIX_CONTROL_INTERVAL; + mixingControlAcidControlInterval.data = ACID_MIX_CONTROL_INTERVAL_MULTIPLIER; + mixingControlAcidControlInterval.ovData = ACID_MIX_CONTROL_INTERVAL_MULTIPLIER; mixingControlAcidControlInterval.ovInitData = 0; mixingControlAcidControlInterval.override = OVERRIDE_RESET; @@ -428,6 +429,41 @@ /*********************************************************************//** * @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; + F32 balChamberSwitchingPeriod = 0; + + tdDialysateFlowRate = getTDDialysateFlowrate(); + + balChamberSwitchingFreq = tdDialysateFlowRate / 30.0; + balChamberSwitchingPeriod = (F32)( SEC_PER_MIN ) / balChamberSwitchingFreq; + + // For bicarb 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 acid 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 ) && ( tdDialysateFlowRate <= FLOW_SETTING_FOR_STATIC_CONTROL_INTERVAL_UPDATE ) ) + { + mixingControlAcidControlInterval.data = STATIC_CONTROL_INTERVAL * balChamberSwitchingPeriod; + mixingControlBicarbControlInterval.data = STATIC_CONTROL_INTERVAL * balChamberSwitchingPeriod; + } + else if ( tdDialysateFlowRate > FLOW_SETTING_FOR_STATIC_CONTROL_INTERVAL_UPDATE ) + { + 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 @@ -1115,7 +1151,7 @@ *************************************************************************/ BOOL testMixingControlBicarbControlIntervalOverride( MESSAGE_T *message ) { - BOOL result = u32Override( message, &mixingControlBicarbControlInterval, 0, BICARB_MIX_CONTROL_INTERVAL ); + BOOL result = u32Override( message, &mixingControlBicarbControlInterval, 0, BICARB_MIX_CONTROL_INTERVAL_MULTIPLIER ); return result; } @@ -1132,7 +1168,7 @@ *************************************************************************/ BOOL testMixingControlAcidControlIntervalOverride( MESSAGE_T *message ) { - BOOL result = u32Override( message, &mixingControlAcidControlInterval, 0, BICARB_MIX_CONTROL_INTERVAL ); + BOOL result = u32Override( message, &mixingControlAcidControlInterval, 0, BICARB_MIX_CONTROL_INTERVAL_MULTIPLIER ); return result; }