Index: firmware/.settings/org.eclipse.core.resources.prefs =================================================================== diff -u -r97fd3b011a2cdafbeb960fd388b4548c02274a67 -r5206a101e662f660baaf6dc919441916c4a4c966 --- firmware/.settings/org.eclipse.core.resources.prefs (.../org.eclipse.core.resources.prefs) (revision 97fd3b011a2cdafbeb960fd388b4548c02274a67) +++ firmware/.settings/org.eclipse.core.resources.prefs (.../org.eclipse.core.resources.prefs) (revision 5206a101e662f660baaf6dc919441916c4a4c966) @@ -9,8 +9,6 @@ encoding//Debug/App/Services/subdir_vars.mk=UTF-8 encoding//Debug/App/Tasks/subdir_rules.mk=UTF-8 encoding//Debug/App/Tasks/subdir_vars.mk=UTF-8 -encoding//Debug/App/subdir_rules.mk=UTF-8 -encoding//Debug/App/subdir_vars.mk=UTF-8 encoding//Debug/FWCommon/FlashDriver/subdir_rules.mk=UTF-8 encoding//Debug/FWCommon/FlashDriver/subdir_vars.mk=UTF-8 encoding//Debug/FWCommon/FlashDrvr/subdir_rules.mk=UTF-8 Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r31b53220d894e272a8f9a8a49d3c9110150489db -r5206a101e662f660baaf6dc919441916c4a4c966 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 31b53220d894e272a8f9a8a49d3c9110150489db) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 5206a101e662f660baaf6dc919441916c4a4c966) @@ -24,22 +24,26 @@ #include "Common.h" #include "Heaters.h" #include "TemperatureSensors.h" +#include "SystemCommMessages.h" #include "PIControllers.h" #define MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE 0.89 ///< Main primary heater (heater A) max duty cycle (79.5%) #define SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE 0.50 ///< Small Primary heater (heater B) max duty cycle (25%) #define TRIMMER_HEATER_MAX_DUTY_CYCLE 0.25 ///< Trimmer heater max duty cycle (25%) #define HEATERS_MIN_DUTY_CYCLE 0.00 ///< Primary and trimmer heaters min duty cycle (0.00%) -#define PRIMARY_HEATERS_P_COEFFICIENT 0.005 +#define PRIMARY_HEATERS_P_COEFFICIENT 0.02 #define PRIMARY_HEATERS_I_COEFFICIENT 0.001 #define TRIMMER_HEATER_P_COEFFICIENT 0.003 #define TRIMMER_HEATER_I_COEFFICIENT 0.001 -#define DELTA_TEMP_TO_PWM_DUTY_CYCLE_CONVERSION 0.03 +#define DELTA_TEMP_TO_PWM_DUTY_CYCLE_CONVERSION 0.05 #define CONTROLLER_CHECK_INTERVAL_COUNT 10U +#define TEMP_SENSORS_INTERVAL_COUNT 10U ///< Temperature sensors interval count + + typedef enum heaters_self_test_states { HEATERS_SELF_TEST_START = 0, @@ -79,10 +83,11 @@ static F32 primaryHeaterTargetTemperature; static F32 trimmerHeaterTargetTemperature; -static F32 smallPrimaryHeaterPWMDutyCycle; -static F32 mainPrimaryHeaterPWMDutyCycle; -static F32 trimmerHeaterPWMDutyCycle; + +static F32 mainPrimaryHeaterDutyCycle; +static F32 smallPrimaryHeaterDutyCycle; static U32 controllerCheckTimerCounter; +static U32 tempSensorsPublicationTimerCounter; // private functions prototypes @@ -93,12 +98,15 @@ static void setSmallPrimaryHeaterPWM ( F32 pwm ); static void setTrimmerHeaterPWM ( F32 pwm ); static void resetHeaterState ( NAME_OF_HEATER_T heater ); +static void publishTemperatureData ( void ); // TODO: Remove the below code. FOR TESTING ONLY #define PRIMARY_HEATER_MIBSPI1_PORT_MASK 0x00000002 // (CS1 - re-purposed as input GPIO) #define TOGGLEPRIMAYHEATER() (( mibspiREG1->PC2 & PRIMARY_HEATER_MIBSPI1_PORT_MASK ) != 0) static void temporaryStartROPump ( void ); static void temporaryStopROPump ( void ); +static void temporaryStartFan ( void ); +static void temporaryStopFan ( void ); //TODO: Remove the above code. FOR TESTING ONLY // Public functions @@ -120,10 +128,8 @@ primaryHeaterTargetTemperature = 0.0; trimmerHeaterTargetTemperature = 0.0; - smallPrimaryHeaterPWMDutyCycle = 0.0; - mainPrimaryHeaterPWMDutyCycle = 0.0; - trimmerHeaterPWMDutyCycle = 0.0; controllerCheckTimerCounter = 0; + tempSensorsPublicationTimerCounter = 0; // initialize the PI controller for the primary heaters initializePIController( PI_CONTROLLER_ID_PRIMARY_HEATER, HEATERS_MIN_DUTY_CYCLE, @@ -171,14 +177,11 @@ BOOL startPrimaryHeater ( void ) { BOOL status = FALSE; - // TODO: remove this code. For testing only - //setMainPrimaryHeaterPWM ( 0.89 ); - //setSmallPrimaryHeaterPWM ( 0.50 ); - // TODO: remove this code. for testing only if ( primaryHeaterTargetTemperature != 0.0 ) { resetHeaterState ( PRIMARY_HEATER ); + setMainPrimaryHeaterPWM ( mainPrimaryHeaterDutyCycle ); primaryHeatersExecState = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; status = TRUE; } @@ -357,10 +360,15 @@ state = PRIMARY_HEATERS_EXEC_STATE_OFF; if ( TOGGLEPRIMAYHEATER() ) { - setPrimaryHeaterTargetTemperature ( 32 ); - startPrimaryHeater(); - temporaryStartROPump(); - state = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; + setPrimaryHeaterTargetTemperature ( 37 ); + if ( getTemperatureValue ( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ) > 0 ) + { + startPrimaryHeater(); + state = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; + temporaryStartROPump(); + temporaryStartFan(); + } + //state = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; } // TODO remove this code for testing @@ -383,26 +391,31 @@ if ( ++controllerCheckTimerCounter >= CONTROLLER_CHECK_INTERVAL_COUNT ) { F32 outletTemp = getTemperatureValue ( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR ); - F32 newPWM = runPIController ( PI_CONTROLLER_ID_PRIMARY_HEATER, primaryHeaterTargetTemperature, outletTemp ); + mainPrimaryHeaterDutyCycle = runPIController ( PI_CONTROLLER_ID_PRIMARY_HEATER, primaryHeaterTargetTemperature, outletTemp ); - if ( newPWM >= MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE ) + if ( mainPrimaryHeaterDutyCycle >= MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE ) { - setMainPrimaryHeaterPWM ( MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE ); - newPWM = newPWM - MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE; - setSmallPrimaryHeaterPWM ( newPWM ); + smallPrimaryHeaterDutyCycle = mainPrimaryHeaterDutyCycle - MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE; + mainPrimaryHeaterDutyCycle = MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE; + setMainPrimaryHeaterPWM ( mainPrimaryHeaterDutyCycle ); + setSmallPrimaryHeaterPWM ( smallPrimaryHeaterDutyCycle ); } else { - setMainPrimaryHeaterPWM ( newPWM ); + setMainPrimaryHeaterPWM ( mainPrimaryHeaterDutyCycle ); + smallPrimaryHeaterDutyCycle = HEATERS_MIN_DUTY_CYCLE; + setSmallPrimaryHeaterPWM ( smallPrimaryHeaterDutyCycle ); } controllerCheckTimerCounter = 0; } + publishTemperatureData(); // TODO remove this code if ( !TOGGLEPRIMAYHEATER() ) { stopPrimaryHeater(); - temporaryStopROPump (); + temporaryStopROPump(); + temporaryStopFan(); state = PRIMARY_HEATERS_EXEC_STATE_OFF; } // TODO Remove this code @@ -465,27 +478,74 @@ if ( heater == PRIMARY_HEATER ) { F32 inletTemperatrue = getTemperatureValue ( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ); - F32 initialPWMDutyCycle = fabs(primaryHeaterTargetTemperature - inletTemperatrue) * DELTA_TEMP_TO_PWM_DUTY_CYCLE_CONVERSION; - resetPIController ( PI_CONTROLLER_ID_PRIMARY_HEATER, initialPWMDutyCycle ); + mainPrimaryHeaterDutyCycle = fabs(primaryHeaterTargetTemperature - inletTemperatrue) * DELTA_TEMP_TO_PWM_DUTY_CYCLE_CONVERSION; + resetPIController ( PI_CONTROLLER_ID_PRIMARY_HEATER, mainPrimaryHeaterDutyCycle ); } else if ( heater == TRIMMER_HEATER ) { // TODO setup the trimmer heater } } +/************************************************************************* + * @brief publishTemperatureData + * The publishTemperatureData function publishes the temperature sensors + * data into the USB debug port at the defined time interval + * @details + * Inputs : none + * Outputs : none + * @param none + * @return none + *************************************************************************/ +static void publishTemperatureData ( void ) +{ + if ( ++tempSensorsPublicationTimerCounter >= TEMP_SENSORS_INTERVAL_COUNT ) + { +#ifdef DEBUG_ENABLED + { + char debugTempStr[ 256 ]; + sprintf( debugTempStr, "MPDuty: %6.2f, SPDuty: %6.2f, TPi: %6.2f, TPo: %6.2f, TD1: %6.2f, " + "TD2: %6.2f, TRo: %6.2f, TDi: %6.2f, TPh: %6.2f, TTh: %6.2f, PTarg: %6.2f\r\n", + mainPrimaryHeaterDutyCycle, smallPrimaryHeaterDutyCycle, + getTemperatureValue ( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_INLET_DIALYSATE_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP_SESNOR ), + primaryHeaterTargetTemperature ); + sendDebugData ( (U08*)debugTempStr, strlen(debugTempStr) ); + } +#endif + tempSensorsPublicationTimerCounter = 0; + } +} + // TODO REMOVE THE CODE static void temporaryStartROPump ( void ) { - F32 tempPWM = 0.4; + F32 tempPWM = 0.6; etpwmSetCmpB( etpwmREG2, (U32)( (S32)( ( tempPWM * (F32)(etpwmREG2->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); } static void temporaryStopROPump ( void ) { etpwmSetCmpB( etpwmREG2, 0 ); } + +static void temporaryStartFan ( void ) +{ + F32 tempPWM = 0.25; + etpwmSetCmpA( etpwmREG6, (U32)( (S32)( ( tempPWM * (F32)(etpwmREG6->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + etpwmSetCmpB( etpwmREG6, (U32)( (S32)( ( tempPWM * (F32)(etpwmREG6->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); +} +static void temporaryStopFan ( void ) +{ + etpwmSetCmpA( etpwmREG6, 0 ); + etpwmSetCmpB( etpwmREG6, 0 ); +} // TODO REMOVE THE CODE - Index: firmware/App/Controllers/Heaters.h =================================================================== diff -u -r31b53220d894e272a8f9a8a49d3c9110150489db -r5206a101e662f660baaf6dc919441916c4a4c966 --- firmware/App/Controllers/Heaters.h (.../Heaters.h) (revision 31b53220d894e272a8f9a8a49d3c9110150489db) +++ firmware/App/Controllers/Heaters.h (.../Heaters.h) (revision 5206a101e662f660baaf6dc919441916c4a4c966) @@ -38,4 +38,8 @@ void execTrimmerHeater ( void ); +//Todo Remove the function +//F32 getMainPrimayPWM ( void ); +//F32 getSmallPrimaryPWM ( void ); + #endif Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r31b53220d894e272a8f9a8a49d3c9110150489db -r5206a101e662f660baaf6dc919441916c4a4c966 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 31b53220d894e272a8f9a8a49d3c9110150489db) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 5206a101e662f660baaf6dc919441916c4a4c966) @@ -23,6 +23,8 @@ #include "Timers.h" // TODO: For testing only REMOVE +//TODO change the incoming water for ranges + // Private variables #define PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN 16U ///< Primary heater external temperature sensors gain @@ -71,7 +73,6 @@ #define EXTERNAL_TEMP_SENSORS_ERROR_VALUE 0x80 ///< External temperature sensors error value #define HEATERS_INTERNAL_TEMP_SENSOR_FAULT 0x01 ///< Heaters internal temperature sensor fault -#define TEMP_SENSORS_INTERVAL_COUNT 20U ///< Temperature sensors interval count /// Temperature sensor self test states typedef enum tempSensors_Self_Test_States @@ -107,7 +108,6 @@ static F32 temperatureValues [ NUM_OF_TEMPERATURE_SENSORS ]; static U32 readAndErrorCounts [ NUM_OF_TEMPERATURE_SENSORS ] [ NUM_OF_READ_AND_ERROR_ARRAY_COLUMNS ]; -static U32 tempSensorsPublicationTimerCounter; // Private functions prototypes @@ -120,7 +120,6 @@ static F32 getADC2TempConversion ( F32 avgADC, U32 gain, U32 refResistance, U32 zeroDegResistance ); static void processADCRead ( U32 sensorIndex, U32 adc, U32 fpgaError, U32 fpgaCount ); -static void publishTemperatureData ( void ); // Public functions @@ -140,7 +139,6 @@ tempSensorsSelfTestState = TEMPSENSORS_SELF_TEST_START; tempSensorsExecState = TEMPSENSORS_EXEC_STATE_START; sampleCount = 0; - tempSensorsPublicationTimerCounter = 0; // Initialize TPi and TPo constants for ( i = TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR; i < TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR; i++ ) @@ -352,7 +350,7 @@ { U32 error; U32 heatersTemperature; - BOOL isADCValid = TRUE; //TODO make this false + BOOL isADCValid = TRUE; F32 temperature; @@ -389,12 +387,12 @@ { // TODO: alarm? } - isADCValid = FALSE; + //isADCValid = FALSE; } if ( error == EXTERNAL_TEMP_SENSORS_ERROR_VALUE ) { //tODO: FILL UP - isADCValid = FALSE; + //isADCValid = FALSE; } } // It is a heaters temperature sensor @@ -593,46 +591,12 @@ // Add a byte array to have bits for each sensor to find out exactly what sensor failed processADCRead( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR, getFPGATPiTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); processADCRead( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR, getFPGATPoTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - //processADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR, getFPGACD1Temp() ); - //processADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR, getFPGACD2Temp() ); + processADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR, getFPGACD1Temp(), 0, 0 ); + processADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR, getFPGACD2Temp(), 0, 0 ); //processADCRead( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR, getFPGATHDoTemp() ); //processADCRead( TEMPSENSORS_INLET_DIALYSATE_TEMP_SENSOR, getFPGATDiTemp() ); //processADCRead( TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP_SENSOR, getFPGAPrimaryHeaterTemp() ); //processADCRead( TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP_SESNOR, getFPGATrimmerHeaterTemp() ); - publishTemperatureData(); - return state; } -/************************************************************************* - * @brief publishTemperatureData - * The publishTemperatureData function publishes the temperature sensors - * data into the USB debug port at the defined time interval - * @details - * Inputs : none - * Outputs : none - * @param none - * @return none - *************************************************************************/ -static void publishTemperatureData ( void ) -{ - if ( ++tempSensorsPublicationTimerCounter >= TEMP_SENSORS_INTERVAL_COUNT ) - { -#ifdef DEBUG_ENABLED - { - char debugTempStr[ 256 ]; - sprintf( debugTempStr, "TPi: %6.2f, TPo: %6.2f, TD1: %6.2f, TD2: %6.2f, TRo: %6.2f, TDi: %6.2f, Tph: %6.2f, Tth: %6.2f\r\n", - temperatureValues [ TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ], - temperatureValues [ TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR ], - temperatureValues [ TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR ], - temperatureValues [ TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR ], - temperatureValues [ TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR ], - temperatureValues [ TEMPSENSORS_INLET_DIALYSATE_TEMP_SENSOR ], - temperatureValues [ TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP_SENSOR ], - temperatureValues [ TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP_SESNOR ] ); - sendDebugData ( (U08*)debugTempStr, strlen(debugTempStr) ); - } -#endif - tempSensorsPublicationTimerCounter = 0; - } -} Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r8638b207699a3a48e3657e838e24ae838369c867 -r5206a101e662f660baaf6dc919441916c4a4c966 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 8638b207699a3a48e3657e838e24ae838369c867) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 5206a101e662f660baaf6dc919441916c4a4c966) @@ -992,9 +992,9 @@ { switch ( msgID ) { - case MSG_ID_DG_MESSAGE: - handleTestDGMessageRequest( message ); - break; + //case MSG_ID_DG_MESSAGE: + //handleTestDGMessageRequest( message ); + //break; case MSG_ID_DG_WATCHDOG_TASK_CHECKIN_OVERRIDE: handleTestWatchdogCheckInStateOverrideRequest( message );