Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r3417933e6edf61a914c428e2fa944b3b349272a4 -r6dd41ba21a4a1f7b8dd62627306f71c5d055307d --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 3417933e6edf61a914c428e2fa944b3b349272a4) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 6dd41ba21a4a1f7b8dd62627306f71c5d055307d) @@ -136,7 +136,7 @@ static const F32 WATER_SPECIFIC_HEAT_DIVIDED_BY_MINUTES = 4184.0F / (F32)SEC_PER_MIN; ///< Water specific heat in J/KgC / 60. static OVERRIDE_U32_T heatersDataPublishInterval = { HEATERS_DATA_PUBLISH_INTERVAL, HEATERS_DATA_PUBLISH_INTERVAL, 0, 0 }; ///< Heaters data publish time interval. static F32 convertDC; ///< AC Heater converted duty cycle -static F32 lastDialTargetTemperatureSet; ///< last dialysate target temperature set for heater control +static F32 lastDialTargetTemperatureSet[ NUM_OF_DD_HEATERS ]; ///< last dialysate target temperature set for heater control static BOOL startupHeaterControl; ///< First time control with the energy equation. //For testing @@ -200,7 +200,8 @@ heatersStatus[ D5_HEAT ].controlIntervalCounter = D5_HEAT_CONTROL_INTERVAL_START_COUNT; heatersStatus[ D45_HEAT ].controlIntervalCounter = 0; startupHeaterControl = TRUE; - lastDialTargetTemperatureSet = 0.0F; + lastDialTargetTemperatureSet[ D5_HEAT ] = 0.0F; + lastDialTargetTemperatureSet[ D45_HEAT ] = 0.0F; primaryTargetTempAdjCounter = 0; adjustedPrimaryTargetTemp = 0.0F; isTargetTempAdjusted = FALSE; @@ -273,12 +274,12 @@ // Check if the requested temperature is within the allowed range if ( ( ( targetTemperature >= HEATER_TARGET_TEMPERATURE_MIN ) && ( targetTemperature <= HEATER_TARGET_TEMPERATURE_MAX ) ) && - ( lastDialTargetTemperatureSet != targetTemperature ) ) + ( lastDialTargetTemperatureSet[ heater ] != targetTemperature ) ) { targetTempC[ heater ].data = targetTemperature; heatersStatus[ heater ].hasTargetTempChanged = TRUE; result = TRUE; - lastDialTargetTemperatureSet = targetTemperature; + lastDialTargetTemperatureSet[ heater ] = targetTemperature; if ( D5_HEAT == heater ) { @@ -773,31 +774,31 @@ control[ heater ].data = ctrl; } } -#ifdef __HEATERS_DEBUG__ - U32 i; - - for ( i = 0; i < NUM_OF_CONTROLLER_SIGNAL; i++ ) - { - pIControlSignal[ i ] = getPIControllerSignals( PI_CONTROLLER_ID_D5_HEAT, (PI_CONTROLLER_SIGNALS_ID)i ); - } -#endif - } - else - { - measuredTemperature = getD50AverageTemperature(); - - ctrl = runPIController( PI_CONTROLLER_ID_D45_HEAT, targetTemperature, measuredTemperature ); - control[ heater ].data = ctrl; //#ifdef __HEATERS_DEBUG__ // U32 i; // // for ( i = 0; i < NUM_OF_CONTROLLER_SIGNAL; i++ ) // { -// pIControlSignal[ i ] = getPIControllerSignals( PI_CONTROLLER_ID_D45_HEAT, (PI_CONTROLLER_SIGNALS_ID)i ); +// pIControlSignal[ i ] = getPIControllerSignals( PI_CONTROLLER_ID_D5_HEAT, (PI_CONTROLLER_SIGNALS_ID)i ); // } //#endif } + else + { + measuredTemperature = getD50AverageTemperature(); + ctrl = runPIController( PI_CONTROLLER_ID_D45_HEAT, targetTemperature, measuredTemperature ); + control[ heater ].data = ctrl; +#ifdef __HEATERS_DEBUG__ + U32 i; + + for ( i = 0; i < NUM_OF_CONTROLLER_SIGNAL; i++ ) + { + pIControlSignal[ i ] = getPIControllerSignals( PI_CONTROLLER_ID_D45_HEAT, (PI_CONTROLLER_SIGNALS_ID)i ); + } +#endif + } + heatersStatus[ heater ].hasTargetTempChanged = FALSE; heatersStatus[ heater ].controlIntervalCounter = 0; Index: firmware/App/DDCommon.h =================================================================== diff -u -r71315c02767ed6da480af9939d117ca51a165290 -r6dd41ba21a4a1f7b8dd62627306f71c5d055307d --- firmware/App/DDCommon.h (.../DDCommon.h) (revision 71315c02767ed6da480af9939d117ca51a165290) +++ firmware/App/DDCommon.h (.../DDCommon.h) (revision 6dd41ba21a4a1f7b8dd62627306f71c5d055307d) @@ -52,7 +52,7 @@ //#define __BICARB_CHAMBER_FILL__ 1 //Uncomment below for Maxon controller speed change -//#define __MAXON_SPEED_UPDATE__ 1 +#define __MAXON_SPEED_UPDATE__ 1 //Uncomment below to disable heaters debug message #define __HEATERS_DEBUG__ 1 Index: firmware/App/Monitors/Temperature.c =================================================================== diff -u -r3f65e4b1e11315bd6ca3a30a80fd4848a9081dda -r6dd41ba21a4a1f7b8dd62627306f71c5d055307d --- firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision 3f65e4b1e11315bd6ca3a30a80fd4848a9081dda) +++ firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision 6dd41ba21a4a1f7b8dd62627306f71c5d055307d) @@ -42,7 +42,7 @@ #define TEMP_SENSORS_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Temperature sensors publish data time interval. #define TEMP_SENSORS_FPGA_ERROR_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Temperature sensors FPGA error timeout in milliseconds. #define D4_TEMP_MOVING_AVG_NUM_OF_SAMPLES 50 ///< D4 temperature sensor moving average number of samples. -#define D50_TEMP_MOVING_AVG_NUM_OF_SAMPLES 50 ///< D50 temperature sensor moving average number of samples ( 250ms filter ). +#define D50_TEMP_MOVING_AVG_NUM_OF_SAMPLES 50 ///< D50 temperature sensor moving average number of samples. #define DATA_PUBLISH_COUNTER_START_COUNT 30 ///< Data publish counter start count. #define DIAL_TEMP_MOVING_AVG_NUM_OF_SAMPLES 30 ///< Dialysate temperature sensors moving average number of samples. #define D28_D30_DATA_COLLECTION_TIME_MS ( 1 * MS_PER_SECOND ) ///< Dialysate temperature sensors data collection time in milliseconds.