Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r4498cae8c39b40a3756f8f009c124f12772a0b51 -r577532788d2042e5299fd22aff6bae46c292002d --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 4498cae8c39b40a3756f8f009c124f12772a0b51) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 577532788d2042e5299fd22aff6bae46c292002d) @@ -115,7 +115,12 @@ static U32 dataPublicationTimerCounter; ///< Data publication timer counter. static const F32 WATER_SPECIFIC_HEAT_DIVIDED_BY_MINUTES = 4184 / 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 +//For testing +#ifdef __HEATERS_DEBUG__ +static F32 pIControlSignal[ NUM_OF_CONTROLLER_SIGNAL ]; +#endif // ********** private function prototypes ********** static HEATERS_STATE_T handleHeaterStateOff( DD_HEATERS_T heater ); @@ -141,6 +146,10 @@ DD_HEATERS_T heater; dataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; +#ifdef __HEATERS_DEBUG__ + U32 i; +#endif + #ifndef __ALPHA_AO_VER__ //Enable PWM based heater control setFPGAD5HeaterPWMEnableControl( TRUE ); @@ -157,6 +166,9 @@ pwmPeriod[ D45_HEAT ].ovInitData = 0.0F; pwmPeriod[ D45_HEAT ].override = OVERRIDE_RESET; + //Initialize Converted Duty cycle + convertDC = 0.0F; + #endif for ( heater = DD_HEATERS_FIRST; heater < NUM_OF_DD_HEATERS; heater++ ) @@ -189,6 +201,13 @@ initializePIController( PI_CONTROLLER_ID_D45_HEAT, HEATERS_MIN_DUTY_CYCLE, D45_HEAT_P_COEFFICIENT, D45_HEAT_I_COEFFICIENT, HEATERS_MIN_DUTY_CYCLE, HEATERS_MAX_DUTY_CYCLE ); +#ifdef __HEATERS_DEBUG__ + for ( i = 0; i < NUM_OF_CONTROLLER_SIGNAL; i++ ) + { + pIControlSignal[ i ] = 0.0F; + } +#endif + // Initialize the persistent alarms //initPersistentAlarm( ALARM_ID_DD_D5_HEAT_VOLTAGE_OUT_OF_RANGE, 0, HEATERS_VOLTAGE_OUT_OF_RANGE_TIMEOUT_MS ); //initPersistentAlarm( ALARM_ID_DD_D45_HEAT_VOLTAGE_OUT_OF_RANGE, 0, HEATERS_VOLTAGE_OUT_OF_RANGE_TIMEOUT_MS ); @@ -485,7 +504,6 @@ if ( DD_MODE_HEAT != opMode ) { #ifndef __ALPHA_AO_VER__ - F32 deltaTempC = targetTemperature - measuredTemperature; F32 capDeltaTempC = MAX( deltaTempC, HEATERS_ZERO_DELTA_TEMP_C ); F32 dutyCycle = sqrt( ( WATER_SPECIFIC_HEAT_DIVIDED_BY_MINUTES * capDeltaTempC * MAX_INLET_FLOW_LPM ) / TX_PRIMARY_HEATER_MAX_PWR_WATTS ); @@ -495,7 +513,6 @@ control[ heater ].data = dutyCycle; resetPIController( PI_CONTROLLER_ID_D5_HEAT, dutyCycle ); - #else // Assign initial value control[ heater ].data = D5_HEAT_ON; @@ -570,10 +587,8 @@ measuredTemperature = getTemperatureValue( D4_TEMP ); #ifndef __ALPHA_AO_VER__ - ctrl = runPIController( PI_CONTROLLER_ID_D5_HEAT, targetTemperature, measuredTemperature ); control[ heater ].data = ctrl; - #else if ( measuredTemperature >= targetTemperature ) { @@ -586,16 +601,23 @@ control[ heater ].data = D5_HEAT_ON; } #endif +#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 = getTemperatureValue( D50_TEMP ); #ifndef __ALPHA_AO_VER__ - ctrl = runPIController( PI_CONTROLLER_ID_D45_HEAT, targetTemperature, measuredTemperature ); control[ heater ].data = ctrl; - #else if ( targetTemperature > 0.0F ) { @@ -662,7 +684,7 @@ { #ifndef __ALPHA_AO_VER__ //Convert duty cycle into LowState and multiply by period for now - F32 convertDC = ( HEATERS_DUTY_CYCLE_CONVERSION_FACTOR - control ) * period; + convertDC = ( HEATERS_DUTY_CYCLE_CONVERSION_FACTOR - control ) * period; setFPGAD5HeaterPWMPeriod( (U16)period ); setFPGAD5HeaterPWMLowState( (U16)convertDC ); @@ -759,8 +781,23 @@ data.d45_HeaterTargetTemp = getHeaterTargetTemperature( D45_HEAT ); data.d5_HeaterState = heatersStatus[ D5_HEAT ].state; data.d45_HeaterState = heatersStatus[ D45_HEAT ].state; +#ifndef __HEATERS_DEBUG__ data.d5_HeaterControlCounter = heatersStatus[ D5_HEAT ].controlIntervalCounter; data.d45_HeaterControlCounter = heatersStatus[ D45_HEAT ].controlIntervalCounter; +#else + data.d5_HeaterControlCounter = (U32)convertDC; + data.d45_HeaterControlCounter = (U32)getHeaterPWMPeriod( D5_HEAT ); +#endif +#ifdef __HEATERS_DEBUG__ + data.dbg1 = pIControlSignal[ 0 ]; + data.dbg2 = pIControlSignal[ 1 ]; + data.dbg3 = pIControlSignal[ 2 ]; + data.dbg4 = pIControlSignal[ 3 ]; + data.dbg5 = pIControlSignal[ 4 ]; + data.dbg6 = pIControlSignal[ 5 ]; + data.dbg7 = pIControlSignal[ 6 ]; + data.dbg8 = pIControlSignal[ 7 ]; +#endif dataPublicationTimerCounter = 0;