Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -rff676a9640e5dfe162de78d2b24f356f63bad5bb -r417631131615f93f77d6d1bfe44c385a8eab6d5b --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision ff676a9640e5dfe162de78d2b24f356f63bad5bb) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 417631131615f93f77d6d1bfe44c385a8eab6d5b) @@ -7,8 +7,8 @@ * * @file Heaters.c * -* @author (last) Michael Garthwaite -* @date (last) 16-Mar-2023 +* @author (last) Bill Bracken +* @date (last) 31-Mar-2023 * * @author (original) Dara Navaei * @date (original) 23-Apr-2020 @@ -114,7 +114,7 @@ static HEATERS_STATE_T handleHeaterStateTrimmerRampToTarget( void ); static HEATERS_STATE_T handleHeaterStateTrimmerControlToTarget( void ); -static void setHeaterDutyCycle( DG_HEATERS_T heater, F32 pwm ); +static void setHeaterDutyCycle( DG_HEATERS_T heater ); static F32 calculatePrimaryHeaterDutyCycle( F32 targetTemperature, F32 currentTemperature, F32 flow, BOOL checkEfficiency ); static F32 calculateTrimmerHeaterDutyCycle( F32 targetTemperature, F32 currentTemperature, F32 flow, BOOL checkEfficiency ); static BOOL haveHeaterControlConditionsChanged( DG_HEATERS_T heater ); @@ -339,7 +339,8 @@ // Check if the heater is requested to be off if ( FALSE == heatersStatus[ heater ].isHeaterOn ) { - setHeaterDutyCycle( heater, HEATERS_MIN_DUTY_CYCLE ); + heatersStatus[ heater ].dutyCycle.data = HEATERS_MIN_DUTY_CYCLE; + setHeaterDutyCycle( heater ); heatersStatus[ heater ].state = HEATER_EXEC_STATE_OFF; } } @@ -558,7 +559,8 @@ heatersStatus[ DG_PRIMARY_HEATER ].calculatedTemperatureC = targetTemperature; heatersStatus[ DG_PRIMARY_HEATER ].targetFlowLPM = targetFlowLPM; heatersStatus[ DG_PRIMARY_HEATER ].nomTargetFlowLPM = getTargetROPumpFlowRateLPM(); - setHeaterDutyCycle( heater, dutyCycle ); + heatersStatus[ DG_PRIMARY_HEATER ].dutyCycle.data = dutyCycle; + setHeaterDutyCycle( heater ); return state; } @@ -590,7 +592,8 @@ heatersStatus[ heater ].calculatedTemperatureC = targetTemperature; heatersStatus[ heater ].targetFlowLPM = targetFlow; heatersStatus[ heater ].hasTargetTempChanged = FALSE; - setHeaterDutyCycle( heater, dutyCycle ); + heatersStatus[ heater ].dutyCycle.data = dutyCycle; + setHeaterDutyCycle( heater ); } return state; @@ -614,18 +617,24 @@ if ( currentTemperature < targetTemperature ) { - setHeaterDutyCycle( DG_TRIMMER_HEATER, HEATERS_MAX_DUTY_CYCLE ); - setHeaterDutyCycle( DG_PRIMARY_HEATER, HEATERS_MAX_DUTY_CYCLE ); + heatersStatus[ DG_TRIMMER_HEATER ].dutyCycle.data = HEATERS_MAX_DUTY_CYCLE; + heatersStatus[ DG_PRIMARY_HEATER ].dutyCycle.data = HEATERS_MAX_DUTY_CYCLE; + setHeaterDutyCycle( DG_TRIMMER_HEATER ); + setHeaterDutyCycle( DG_PRIMARY_HEATER ); } else if ( currentTemperature - targetTemperature < HEATERS_DISINFECT_TEMPERATURE_DRIFT_C ) { - setHeaterDutyCycle( DG_TRIMMER_HEATER, HEATERS_DISINFECT_DUTY_CYCLE ); - setHeaterDutyCycle( DG_PRIMARY_HEATER, HEATERS_DISINFECT_DUTY_CYCLE ); + heatersStatus[ DG_TRIMMER_HEATER ].dutyCycle.data = HEATERS_DISINFECT_DUTY_CYCLE; + heatersStatus[ DG_PRIMARY_HEATER ].dutyCycle.data = HEATERS_DISINFECT_DUTY_CYCLE; + setHeaterDutyCycle( DG_TRIMMER_HEATER ); + setHeaterDutyCycle( DG_PRIMARY_HEATER ); } else { - setHeaterDutyCycle( DG_TRIMMER_HEATER, HEATERS_MIN_DUTY_CYCLE ); - setHeaterDutyCycle( DG_PRIMARY_HEATER, HEATERS_MIN_DUTY_CYCLE ); + heatersStatus[ DG_TRIMMER_HEATER ].dutyCycle.data = HEATERS_MIN_DUTY_CYCLE; + heatersStatus[ DG_PRIMARY_HEATER ].dutyCycle.data = HEATERS_MIN_DUTY_CYCLE; + setHeaterDutyCycle( DG_TRIMMER_HEATER ); + setHeaterDutyCycle( DG_PRIMARY_HEATER ); } return state; @@ -689,8 +698,8 @@ heatersStatus[ heater ].isThisFirstControl = TRUE; // Cap the minimum duty cycle. So if it is calculated to negative, set it to 0 - dutyCycle = MAX( dutyCycle, HEATERS_MIN_DUTY_CYCLE ); - setHeaterDutyCycle( heater, dutyCycle ); + heatersStatus[ heater ].dutyCycle.data = MAX( dutyCycle, HEATERS_MIN_DUTY_CYCLE ); + setHeaterDutyCycle( heater ); return state; } @@ -733,8 +742,8 @@ tempDutyCycle = heatersStatus[ heater ].dutyCycle.data + dutyCycle; tempDutyCycle = MIN( tempDutyCycle, HEATERS_MAX_DUTY_CYCLE ); tempDutyCycle = MAX( tempDutyCycle, HEATERS_MIN_DUTY_CYCLE ); - - setHeaterDutyCycle( heater, tempDutyCycle ); + heatersStatus[ heater ].dutyCycle.data = tempDutyCycle; + setHeaterDutyCycle( heater ); } return state; @@ -749,14 +758,13 @@ * @param pwm: The PWM that is set * @return none *************************************************************************/ -static void setHeaterDutyCycle( DG_HEATERS_T heater, F32 pwm ) +static void setHeaterDutyCycle( DG_HEATERS_T heater ) { if ( heater < NUM_OF_DG_HEATERS ) { F32 duty; - heatersStatus[ heater ].dutyCycle.data = pwm; - duty = getHeaterDutyCycle( heater ); + duty = getHeaterDutyCycle( heater ); if ( DG_PRIMARY_HEATER == heater ) { @@ -1008,9 +1016,8 @@ else #endif { - // TODO this is not working on DVT-002 - // If the system is DVT, check the FPGA persistent alarm of the main primary heater's voltage ADC - //checkFPGAPersistentAlarms( FPGA_PERS_ERROR_MAIN_PRIMARY_HEATER_VOLTAGE_ADC, getFPGAHeaterGateADCErrorCount(), getFPGAHeaterGateADCReadCount() ); + // If the system is DVT, check the FPGA persistent alarm of the main primary heater's voltage ADC + checkFPGAPersistentAlarms( FPGA_PERS_ERROR_MAIN_PRIMARY_HEATER_VOLTAGE_ADC, getFPGAHeaterGateADCReadCount() ); } isMainPriOut = ( fabs( mainPriExpectedVoltage - mainPriVoltage ) > HEATERS_VOLTAGE_TOLERANCE_V ? TRUE : FALSE ); @@ -1053,7 +1060,7 @@ if ( TRUE == heatersStatus[ (DG_HEATERS_T)heater ].isHeaterOn ) { - setHeaterDutyCycle( (DG_HEATERS_T)heater, value ); + setHeaterDutyCycle( (DG_HEATERS_T)heater ); } } } @@ -1078,11 +1085,8 @@ result = TRUE; heatersStatus[ (DG_HEATERS_T)heater ].dutyCycle.override = OVERRIDE_RESET; heatersStatus[ (DG_HEATERS_T)heater ].dutyCycle.ovData = heatersStatus[ (DG_HEATERS_T)heater ].dutyCycle.ovInitData; + setHeaterDutyCycle( (DG_HEATERS_T)heater ); - if ( TRUE == heatersStatus[ (DG_HEATERS_T)heater ].isHeaterOn ) - { - setHeaterDutyCycle( (DG_HEATERS_T)heater, heatersStatus[ (DG_HEATERS_T)heater ].dutyCycle.data ); - } } return result;