Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r4e11c80367b5ae522aa34fb137079e516c98831b -r3e02c078209aa85ad65e3e64686f53fd16e70b98 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 3e02c078209aa85ad65e3e64686f53fd16e70b98) @@ -652,24 +652,17 @@ *************************************************************************/ static void setHeaterDutyCycle( DG_HEATERS_T heater, F32 pwm ) { - // Check if the requested duty cycle is different from what the heater's duty cycle is. - // If the same duty cycle is requested, then it is not needed to send it again. This is to make sure - // the same duty cycle is not sent to the hardware all the time. - //if ( ( fabs( heatersStatus[ heater ].dutyCycle - pwm ) > NEARLY_ZERO ) || ( fabs( heatersStatus[ heater ].dutyCycle - HEATERS_MIN_DUTY_CYCLE ) < NEARLY_ZERO ) ) TODO remove + if ( DG_PRIMARY_HEATER == heater ) { - if ( DG_PRIMARY_HEATER == heater ) - { - setMainPrimaryHeaterPWM( pwm ); - setSmallPrimaryHeaterPWM( pwm ); - } - else if ( DG_TRIMMER_HEATER == heater ) - { - setTrimmerHeaterPWM( pwm ); - } - - // Updated the heater's information - //heatersStatus[ heater ].dutyCycle = pwm; TODO remove + setMainPrimaryHeaterPWM( pwm ); + setSmallPrimaryHeaterPWM( pwm ); } + else if ( DG_TRIMMER_HEATER == heater ) + { + setTrimmerHeaterPWM( pwm ); + } + + heatersStatus[ heater ].dutyCycle = pwm; } /*********************************************************************//** @@ -769,7 +762,15 @@ *************************************************************************/ static void setMainPrimaryHeaterPWM( F32 pwm ) { - etpwmSetCmpA( etpwmREG1, (U32)( (S32)( ( pwm * (F32)(etpwmREG1->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + etpwm_config_reg_t mainPriConfig; + U32 pwmValue = (U32)( (S32)( ( pwm * (F32)(etpwmREG1->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ); + + etpwm1GetConfigValue( &mainPriConfig, CurrentValue ); + + if ( mainPriConfig.CONFIG_CMPA != pwmValue ) + { + etpwmSetCmpA( etpwmREG1, pwmValue ); + } } /*********************************************************************//** @@ -782,7 +783,15 @@ *************************************************************************/ static void setSmallPrimaryHeaterPWM( F32 pwm ) { - etpwmSetCmpB( etpwmREG1, (U32)( (S32)( ( pwm * (F32)(etpwmREG1->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + etpwm_config_reg_t smallPriConfig; + U32 pwmValue = (U32)( (S32)( ( pwm * (F32)(etpwmREG1->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ); + + etpwm1GetConfigValue( &smallPriConfig, CurrentValue ); + + if ( smallPriConfig.CONFIG_CMPB != pwmValue ) + { + etpwmSetCmpB( etpwmREG1, pwmValue ); + } } /*********************************************************************//** @@ -804,10 +813,6 @@ { etpwmSetCmpA( etpwmREG3, pwmValue ); } - else - { - heatersStatus[ DG_TRIMMER_HEATER ].dutyCycle = pwm; - } } /*********************************************************************//** @@ -853,13 +858,15 @@ { F32 powerMainPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_POWER_PRIM_HTR_V ); F32 mainPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_MAIN_PRIM_HTR_V ); + #ifndef _RELEASE_ if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_ENABLE_V3_SYSTEM ) ) { // V3 use CPU based value for Primary, same as Secondary mainPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_SMALL_PRIM_HTR_V ); } #endif + F32 smallPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_SMALL_PRIM_HTR_V ); F32 trimmerVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_TRIM_HTR_V ); @@ -878,9 +885,9 @@ if ( getCurrentOperationMode() != DG_MODE_INIT ) { - //checkPersistentAlarm( ALARM_ID_DG_MAIN_PRIMARY_HEATER_VOLTAGE_OUT_OF_RANGE, isMainPriOut, mainPriDC, HEATERS_VOLTAGE_TOLERANCE_V ); - //checkPersistentAlarm( ALARM_ID_DG_SMALL_PRIMARY_HEATER_VOLTAGE_OUT_OF_RANGE, isSmallPriOut, smallPriDC, HEATERS_VOLTAGE_TOLERANCE_V ); - //checkPersistentAlarm( ALARM_ID_DG_TRIMMER_HEATER_VOLTAGE_OUT_OF_RANGE, isTrimmerOut, trimmerDC, HEATERS_VOLTAGE_TOLERANCE_V ); + checkPersistentAlarm( ALARM_ID_DG_MAIN_PRIMARY_HEATER_VOLTAGE_OUT_OF_RANGE, isMainPriOut, mainPriDC, HEATERS_VOLTAGE_TOLERANCE_V ); + checkPersistentAlarm( ALARM_ID_DG_SMALL_PRIMARY_HEATER_VOLTAGE_OUT_OF_RANGE, isSmallPriOut, smallPriDC, HEATERS_VOLTAGE_TOLERANCE_V ); + checkPersistentAlarm( ALARM_ID_DG_TRIMMER_HEATER_VOLTAGE_OUT_OF_RANGE, isTrimmerOut, trimmerDC, HEATERS_VOLTAGE_TOLERANCE_V ); } }