Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r166450594d134da4e3e380c1c8879602a5b86407 -r31b53220d894e272a8f9a8a49d3c9110150489db --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 166450594d134da4e3e380c1c8879602a5b86407) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 31b53220d894e272a8f9a8a49d3c9110150489db) @@ -26,8 +26,8 @@ #include "TemperatureSensors.h" #include "PIControllers.h" -#define MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE 0.795 ///< Main primary heater (heater A) max duty cycle (79.5%) -#define SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE 0.25 ///< Small Primary heater (heater B) max duty cycle (25%) +#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%) @@ -37,12 +37,8 @@ #define TRIMMER_HEATER_P_COEFFICIENT 0.003 #define TRIMMER_HEATER_I_COEFFICIENT 0.001 -// TODO make these macros functions -#define INITIAL_DUTY_CYCLE_MAIN_PRIMARY_HEATER 0.50 -#define INITIAL_DUTY_CYCLE_SMALL_PRIMARY_HEATER 0.10 -#define INITIAL_DUTY_CYCLE_TRIMMER_HEATER 0.10 - #define DELTA_TEMP_TO_PWM_DUTY_CYCLE_CONVERSION 0.03 +#define CONTROLLER_CHECK_INTERVAL_COUNT 10U typedef enum heaters_self_test_states { @@ -86,6 +82,7 @@ static F32 smallPrimaryHeaterPWMDutyCycle; static F32 mainPrimaryHeaterPWMDutyCycle; static F32 trimmerHeaterPWMDutyCycle; +static U32 controllerCheckTimerCounter; // private functions prototypes @@ -97,12 +94,23 @@ static void setTrimmerHeaterPWM ( F32 pwm ); static void resetHeaterState ( NAME_OF_HEATER_T heater ); -// TODo GPIO for enabling the primary heater +// 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 ) +#define TOGGLEPRIMAYHEATER() (( mibspiREG1->PC2 & PRIMARY_HEATER_MIBSPI1_PORT_MASK ) != 0) +static void temporaryStartROPump ( void ); +static void temporaryStopROPump ( void ); +//TODO: Remove the above code. FOR TESTING ONLY // Public functions +/*********************************************************************//** + * @brief initHeaters + * The initHeaters function initializes the variables. + * @details + * Inputs : none + * Outputs : none + * @return none + *************************************************************************/ void initHeaters ( void ) { heatersSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; @@ -115,6 +123,7 @@ smallPrimaryHeaterPWMDutyCycle = 0.0; mainPrimaryHeaterPWMDutyCycle = 0.0; trimmerHeaterPWMDutyCycle = 0.0; + controllerCheckTimerCounter = 0; // initialize the PI controller for the primary heaters initializePIController( PI_CONTROLLER_ID_PRIMARY_HEATER, HEATERS_MIN_DUTY_CYCLE, @@ -123,22 +132,48 @@ MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE + SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE ); } +/*********************************************************************//** + * @brief setPrimaryHeaterTargetTemperature + * The setPrimaryHeaterTargetTemperature function sets the primary heater + * target temperature + * @details + * Inputs : F32 (targetTemp) + * Outputs : none + * @return none + *************************************************************************/ void setPrimaryHeaterTargetTemperature ( F32 targetTemp ) { primaryHeaterTargetTemperature = targetTemp; } +/*********************************************************************//** + * @brief setTrimmerHeaterTargetTemperature + * The setTrimmerHeaterTargetTemperature function sets the trimmer heater + * target temperature + * @details + * Inputs : F32 (targetTemp) + * Outputs : none + * @return none + *************************************************************************/ void setTrimmerHeaterTargetTemperature ( F32 targetTemp ) { trimmerHeaterTargetTemperature = targetTemp; } +/*********************************************************************//** + * @brief startPrimaryHeater + * The startPrimaryHeater function starts the primary heaters + * @details + * Inputs : none + * Outputs : BOOL (status) + * @return BOOL (status) + *************************************************************************/ BOOL startPrimaryHeater ( void ) { BOOL status = FALSE; // TODO: remove this code. For testing only - setMainPrimaryHeaterPWM ( 0.8 ); - setSmallPrimaryHeaterPWM ( 0.25 ); + //setMainPrimaryHeaterPWM ( 0.89 ); + //setSmallPrimaryHeaterPWM ( 0.50 ); // TODO: remove this code. for testing only if ( primaryHeaterTargetTemperature != 0.0 ) @@ -151,22 +186,70 @@ return status; } +/*********************************************************************//** + * @brief startTrimmerHeater + * The startTrimmerHeater function starts the trimmer heater + * @details + * Inputs : none + * Outputs : BOOL (status) + * @return BOOL (status) + *************************************************************************/ void startTrimmerHeater ( void ) { - setTrimmerHeaterPWM ( INITIAL_DUTY_CYCLE_MAIN_PRIMARY_HEATER ); + // ToDO: set the initial duty cycle for the + // trimmer heater + setTrimmerHeaterPWM ( 0.5 ); } +/*********************************************************************//** + * @brief stopPrimaryHeater + * The stopPrimaryHeater function stops the primary heaters + * @details + * Inputs : none + * Outputs : none + * @return none + *************************************************************************/ void stopPrimaryHeater ( void ) { setMainPrimaryHeaterPWM ( HEATERS_MIN_DUTY_CYCLE ); setSmallPrimaryHeaterPWM ( HEATERS_MIN_DUTY_CYCLE ); } +/*********************************************************************//** + * @brief stopTrimmerHeater + * The stopTrimmerHeater function stops the trimmer heater + * @details + * Inputs : none + * Outputs : none + * @return none + *************************************************************************/ void stopTrimmerHeater ( void ) { setTrimmerHeaterPWM ( HEATERS_MIN_DUTY_CYCLE ); } +/*********************************************************************//** + * @brief execHeatersMonitor + * The execHeatersMonitor function + * @details + * Inputs : none + * Outputs : none + * @return none + *************************************************************************/ +void execHeatersMonitor ( void ) +{ + // TODO Decide the parts of this function + +} + +/*********************************************************************//** + * @brief execHeatersSelfTest + * The execHeatersSelfTest function executes the heaters self test + * @details + * Inputs : none + * Outputs : SELF_TEST_STATUS_T + * @return SELF_TEST_STATUS_T + *************************************************************************/ SELF_TEST_STATUS_T execHeatersSelfTest ( void ) { switch ( heatersSelfTestState ) @@ -195,6 +278,14 @@ return heatersSelfTestResult; } +/*********************************************************************//** + * @brief execPrimaryHeaters + * The execPrimaryHeaters function executes the primary heaters + * @details + * Inputs : none + * Outputs : none + * @return none + *************************************************************************/ void execPrimaryHeaters ( void ) { switch ( primaryHeatersExecState ) @@ -218,6 +309,14 @@ } } +/*********************************************************************//** + * @brief execTrimmerHeater + * The execTrimmerHeater function executes the trimmer heater + * @details + * Inputs : none + * Outputs : none + * @return none + *************************************************************************/ void execTrimmerHeater ( void ) { switch ( trimmerHeaterExecState ) @@ -241,76 +340,152 @@ // Private functions +/*********************************************************************//** + * @brief handlePrimaryHeaterStateOff + * The handlePrimaryHeaterStateOff function handles the primary heaters at + * off state + * @details + * Inputs : none + * Outputs : PRIMARY_HEATERS_EXEC_STATES_T (state) + * @return PRIMARY_HEATERS_EXEC_STATES_T (state) + *************************************************************************/ static PRIMARY_HEATERS_EXEC_STATES_T handlePrimaryHeaterStateOff ( void ) { PRIMARY_HEATERS_EXEC_STATES_T state = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; + // TODO for testing only. remove + state = PRIMARY_HEATERS_EXEC_STATE_OFF; + if ( TOGGLEPRIMAYHEATER() ) + { + setPrimaryHeaterTargetTemperature ( 32 ); + startPrimaryHeater(); + temporaryStartROPump(); + state = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; + } + // TODO remove this code for testing + return state; } +/*********************************************************************//** + * @brief handlePrimaryHeaterStateControlToTarget + * The handlePrimaryHeaterStateControlToTarget function handles the primary + * heaters at control state when the heaters are active + * @details + * Inputs : none + * Outputs : PRIMARY_HEATERS_EXEC_STATES_T (state) + * @return PRIMARY_HEATERS_EXEC_STATES_T (state) + *************************************************************************/ static PRIMARY_HEATERS_EXEC_STATES_T handlePrimaryHeaterStateControlToTarget ( void ) { PRIMARY_HEATERS_EXEC_STATES_T state = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; - // TODO do we need to have a counter for the controller? - F32 outletTemp = getTemperatureValue ( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR ); - F32 newPWM = runPIController ( PI_CONTROLLER_ID_PRIMARY_HEATER, primaryHeaterTargetTemperature, outletTemp ); - - if ( newPWM >= MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE ) + if ( ++controllerCheckTimerCounter >= CONTROLLER_CHECK_INTERVAL_COUNT ) { - setMainPrimaryHeaterPWM ( MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE ); - newPWM = newPWM - MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE; - setSmallPrimaryHeaterPWM ( newPWM ); - } - else - { + F32 outletTemp = getTemperatureValue ( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR ); + F32 newPWM = runPIController ( PI_CONTROLLER_ID_PRIMARY_HEATER, primaryHeaterTargetTemperature, outletTemp ); + if ( newPWM >= MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE ) + { + setMainPrimaryHeaterPWM ( MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE ); + newPWM = newPWM - MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE; + setSmallPrimaryHeaterPWM ( newPWM ); + } + else + { + setMainPrimaryHeaterPWM ( newPWM ); + } + controllerCheckTimerCounter = 0; } - - // TODO remove this code for testing - if ( TOGGLEPRIMAYHEATER() ) - { - startPrimaryHeater(); - } + // TODO remove this code if ( !TOGGLEPRIMAYHEATER() ) { stopPrimaryHeater(); + temporaryStopROPump (); + state = PRIMARY_HEATERS_EXEC_STATE_OFF; } - // TODO remove this code for testing + // TODO Remove this code return state; } -static void setMainPrimaryHeaterPWM( F32 pwm ) +/*********************************************************************//** + * @brief setMainPrimaryHeaterPWM + * The setMainPrimaryHeaterPWM function sets the PWM of the main primary + * heater + * @details + * Inputs : none + * Outputs : none + * @return none + *************************************************************************/ +static void setMainPrimaryHeaterPWM ( F32 pwm ) { etpwmSetCmpA( etpwmREG1, (U32)( (S32)( ( pwm * (F32)(etpwmREG1->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); } +/*********************************************************************//** + * @brief setSmallPrimaryHeaterPWM + * The setSmallPrimaryHeaterPWM function sets the PWM of the small primary + * heater + * @details + * Inputs : none + * Outputs : none + * @return none + *************************************************************************/ static void setSmallPrimaryHeaterPWM ( F32 pwm ) { etpwmSetCmpB( etpwmREG1, (U32)( (S32)( ( pwm * (F32)(etpwmREG1->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); } -static void setTrimmerHeaterPWM( F32 pwm ) +/*********************************************************************//** + * @brief setTrimmerHeaterPWM + * The setTrimmerHeaterPWM function sets the PWM of the trimmer heater + * @details + * Inputs : none + * Outputs : none + * @return none + *************************************************************************/ +static void setTrimmerHeaterPWM ( F32 pwm ) { etpwmSetCmpA( etpwmREG3, (U32)( (S32)( ( pwm * (F32)(etpwmREG3->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); } +/*********************************************************************//** + * @brief resetHeaterState + * The resetHeaterState function resets the PI controller of the selected + * heater + * @details + * Inputs : none + * Outputs : none + * @return none + *************************************************************************/ static void resetHeaterState ( NAME_OF_HEATER_T heater ) { 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 ); + resetPIController ( PI_CONTROLLER_ID_PRIMARY_HEATER, initialPWMDutyCycle ); } else if ( heater == TRIMMER_HEATER ) { // TODO setup the trimmer heater } } +// TODO REMOVE THE CODE +static void temporaryStartROPump ( void ) +{ + F32 tempPWM = 0.4; + etpwmSetCmpB( etpwmREG2, (U32)( (S32)( ( tempPWM * (F32)(etpwmREG2->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); +} +static void temporaryStopROPump ( void ) +{ + etpwmSetCmpB( etpwmREG2, 0 ); +} +// TODO REMOVE THE CODE + Index: firmware/App/Controllers/Heaters.h =================================================================== diff -u -r166450594d134da4e3e380c1c8879602a5b86407 -r31b53220d894e272a8f9a8a49d3c9110150489db --- firmware/App/Controllers/Heaters.h (.../Heaters.h) (revision 166450594d134da4e3e380c1c8879602a5b86407) +++ firmware/App/Controllers/Heaters.h (.../Heaters.h) (revision 31b53220d894e272a8f9a8a49d3c9110150489db) @@ -30,15 +30,12 @@ void stopPrimaryHeater ( void ); void stopTrimmerHeater ( void ); -void execHeatersMonitor ( void ); // Todo decide the functionality +void execHeatersMonitor ( void ); SELF_TEST_STATUS_T execHeatersSelfTest ( void ); void execPrimaryHeaters ( void ); void execTrimmerHeater ( void ); - - - #endif Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -ref5ef16518466c92687b869cabfa16eaf3365dc0 -r31b53220d894e272a8f9a8a49d3c9110150489db --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision ef5ef16518466c92687b869cabfa16eaf3365dc0) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 31b53220d894e272a8f9a8a49d3c9110150489db) @@ -17,6 +17,7 @@ #include "TemperatureSensors.h" #include "FPGA.h" +#include "SystemCommMessages.h" // TODO: For testing only REMOVE #include "Timers.h" @@ -55,11 +56,11 @@ #define ADC_READ_REF_RESISTANCE_INDEX 1U ///< ADC array reference resistances index #define ADC_READ_0_DEG_RESISTANCE_INDEX 2U ///< ADC array zero degree resistance index -#define READ_AND_ERROR_PREV_FPGA_COUNT_INDEX 0U -#define READ_AND_ERROR_INTERNAL_READ_COUNT_INDEX 1U -#define READ_AND_ERROR_INTERNAL_ERROR_COUNT_INDEX 2U -#define READ_AND_ERROR_PREV_FPGA_ERROR_INDEX 3U -#define NUM_OF_READ_AND_ERROR_ARRAY_COLUMNS 4U +#define READ_AND_ERROR_PREV_FPGA_COUNT_INDEX 0U ///< Read and error previous FPGA count index +#define READ_AND_ERROR_INTERNAL_READ_COUNT_INDEX 1U ///< Read and error internal read count index +#define READ_AND_ERROR_INTERNAL_ERROR_COUNT_INDEX 2U ///< Read and error internal error count index +#define READ_AND_ERROR_PREV_FPGA_ERROR_INDEX 3U ///< Read and error previous FPGA error index +#define NUM_OF_READ_AND_ERROR_ARRAY_COLUMNS 4U ///< Number of read and error array columns #define MAX_ALLOWED_TEMP_DELTA_BETWEEN_SENSORS 2U ///< Maximum allowed temperature delta between sensors @@ -68,9 +69,9 @@ #define MAX_ALLOWED_UNCHANGED_ADC_READS 4U ///< Maximum number of times that the read of a sensor cannot change -#define EXTERNAL_TEMP_SENSORS_ERROR_VALUE 0x80 -#define HEATERS_INTERNAL_TEMP_SENSOR_FAULT 0x01 -#define MASK_OFF_U32_MSB 0x00FFFFFF +#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 @@ -91,19 +92,6 @@ } TEMPSENSORS_EXEC_STATES_T; /// FPGA error and read counts -typedef struct -{ - U08 RTDErrorCount; ///< RTD error count (include all 4 conductivity and temperature sensors) - U08 RTDReadCount; ///< RTD read count (include all 4 conductivity and temperature sensors) - U08 TRoErrorCount; ///< THDo (outlet redundant temperature sensor) error count - U08 TRoReadCount; ///< THDo (outlet redundant temperature sensor) read count - U08 TDiErrorCount; ///< TDi (inlet dialysate) temperature sensor error count - U08 TDiReadCount; ///< TDi (inlet dialysate) temperature sensor read count - U08 primaryHeaterFlags; ///< Primary heater internal temperature sensor error flags - U08 primaryHeaterReadCount; ///< Primary heater internal temperature sensor read count - U08 trimmerHeaterFlags; ///< Trimmer heater internal temperature sensor error flags - U08 trimmerHeaterReadCount; ///< Trimmer heater internal temperature sensor read count -} FPGA_READ_AND_ERROR_COUNTS_T; // TODO REmove static SELF_TEST_STATUS_T tempSensorsSelfTestResult; ///< Self test result of the TemperatureSensors module static TEMPSENSORS_SELF_TEST_STATES_T tempSensorsSelfTestState; ///< TemperatureSensor self test state @@ -117,7 +105,9 @@ [ NUM_OF_TEMP_SENSORS_CONSTANTS_ARRAY_COLUMNS ]; static F32 avgADCReads [ NUM_OF_TEMPERATURE_SENSORS ]; //TODO remove ///< Temperature sensors averaged ADC values static F32 temperatureValues [ NUM_OF_TEMPERATURE_SENSORS ]; -static U32 readAndErrorCounts [ NUM_OF_TEMPERATURE_SENSORS ] [ NUM_OF_READ_AND_ERROR_ARRAY_COLUMNS ]; +static U32 readAndErrorCounts [ NUM_OF_TEMPERATURE_SENSORS ] + [ NUM_OF_READ_AND_ERROR_ARRAY_COLUMNS ]; +static U32 tempSensorsPublicationTimerCounter; // Private functions prototypes @@ -130,6 +120,7 @@ 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 @@ -149,6 +140,7 @@ 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++ ) @@ -360,15 +352,16 @@ { U32 error; U32 heatersTemperature; - BOOL isADCValid = FALSE; + BOOL isADCValid = TRUE; //TODO make this false F32 temperature; // TODO For testing only. REMOVE - /*temperature = getADC2TempConversion ( adc, - tempSensorsConstants [ TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR ] [ ADC_READ_GAIN_INDEX ], - tempSensorsConstants [ TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR ] [ ADC_READ_REF_RESISTANCE_INDEX ], - tempSensorsConstants [ TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] );*/ + /*adc = adc & MASK_OFF_U32_MSB; + temperature = getADC2TempConversion ( adc, + tempSensorsConstants [ TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ] [ ADC_READ_GAIN_INDEX ], + tempSensorsConstants [ TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ] [ ADC_READ_REF_RESISTANCE_INDEX ], + tempSensorsConstants [ TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] );*/ // TODO for testing only. REMOVE /* @@ -383,7 +376,8 @@ */ if ( sensorIndex != TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP_SENSOR || sensorIndex != TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP_SESNOR ) { - error = adc & MASK_OFF_U32_MSB; + error = 0; + adc = adc & MASK_OFF_U32_MSB; /* * what if the fpga channel error is not zero? * what if the fpga channel error is zero but the individual is not? @@ -403,6 +397,7 @@ isADCValid = FALSE; } } + // It is a heaters temperature sensor else { // Fault state is the 17th bit @@ -414,9 +409,9 @@ // Fault alarm? or have a threshold? // If the fault is 1, should we check the individuals? } - + // TODO fix these heatersTemperature = adc & 0xFF05; - heatersTemperature = (heatersTemperature & 0x7FFF) >> 2; + heatersTemperature = (heatersTemperature & 0x7FFF) >> 2; //TODO use #define for 2 } U32 previousReadCount = readAndErrorCounts [ sensorIndex ] [ READ_AND_ERROR_PREV_FPGA_COUNT_INDEX ]; @@ -432,7 +427,7 @@ readAndErrorCounts [ sensorIndex ] [ READ_AND_ERROR_PREV_FPGA_COUNT_INDEX ] = fpgaCount; readAndErrorCounts [ sensorIndex ] [ READ_AND_ERROR_INTERNAL_ERROR_COUNT_INDEX ] = internalErrorCount++; } - isADCValid = FALSE; + //isADCValid = FALSE; } else if ( fpgaCount > previousReadCount ) { @@ -481,7 +476,6 @@ { temperature = avgADCReads * HEATERS_INTERNAL_ADC_TO_TEMP_CONVERSION_COEFF; } - temperatureValues [ sensorIndex ] = temperature; } } @@ -597,35 +591,48 @@ // Look at the error counter and the specific error flag to make sure the error is a temp sensor // 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() ); - //processADCRead( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR, getFPGATPoTemp() ); + 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_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() ); - // TODO REMOVE THIS CODE. FOR TESTING ONLY + publishTemperatureData(); - - /*U08 dara; - U32 test [20] = {16327313, 16330313, 16333313, 16336313, 16339313, 16342313, 16345313, 16348313, 16351313, 16354313, - 16357313, 16360313, 16363313, 16366313, 16369313, 16372313, 16375313, 16378313, 16381313, 16384313}; - - U32 test2 [20] = {16348313, 16358313, 16368313, 16378313, 16388313, 16398313, 16408313, 16418313, 16428313, 16438313, - 16448313, 16458313, 16468313, 16478313, 16488313, 16498313, 16508313, 16518313, 16528313, 16538313}; - - for ( dara = 0; dara<20; dara++) + 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 ) { - processADCRead(0, test[dara]); - } - dara = 0; - for ( dara = 0; dara<20; dara++) +#ifdef DEBUG_ENABLED { - processADCRead(0, test2[dara]); - }*/ - // TODO REMOVE THE ABOVE CODE - - return state; + 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/DGCommon.h =================================================================== diff -u -ref5ef16518466c92687b869cabfa16eaf3365dc0 -r31b53220d894e272a8f9a8a49d3c9110150489db --- firmware/App/DGCommon.h (.../DGCommon.h) (revision ef5ef16518466c92687b869cabfa16eaf3365dc0) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision 31b53220d894e272a8f9a8a49d3c9110150489db) @@ -23,12 +23,13 @@ #define DG_VERSION_MAJOR 0 #define DG_VERSION_MINOR 3 +#define DG_VERSION_MICRO #define DG_VERSION_BUILD 0 // ********** build switches ********** #ifndef _VECTORCAST_ - // #define RM46_EVAL_BOARD_TARGET 1 +// #define RM46_EVAL_BOARD_TARGET 1 // #define SIMULATE_UI 1 #ifdef DEBUG_ENABLED Index: firmware/App/Services/FPGA.c =================================================================== diff -u -re7f256098e5c23cc621af73b17160a247d40559c -r31b53220d894e272a8f9a8a49d3c9110150489db --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision e7f256098e5c23cc621af73b17160a247d40559c) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision 31b53220d894e272a8f9a8a49d3c9110150489db) @@ -142,8 +142,8 @@ U16 fpgaCPoProbeType; U16 fpgaDrainPumpSetSpeed; U16 fpgaValveStates; - U08 fpgaID; - U08 fpgaRev; + //U08 fpgaID; + //U08 fpgaRev; //U08 fpgaADC1Control; //U08 fpgaDiag; //U08 fpgaADC2Control; Index: firmware/DG.dil =================================================================== diff -u -ref5ef16518466c92687b869cabfa16eaf3365dc0 -r31b53220d894e272a8f9a8a49d3c9110150489db --- firmware/DG.dil (.../DG.dil) (revision ef5ef16518466c92687b869cabfa16eaf3365dc0) +++ firmware/DG.dil (.../DG.dil) (revision 31b53220d894e272a8f9a8a49d3c9110150489db) @@ -1,4 +1,4 @@ -# RM46L852PGE 04/23/20 15:20:51 +# RM46L852PGE 05/01/20 10:44:46 # ARCH=RM46L852PGE # @@ -9348,10 +9348,10 @@ DRIVER.PMM.VAR.PMM_PWR_DOMAIN4_ENABLE.VALUE=0 DRIVER.PMM.VAR.PMM_PWR_DOMAIN2_ENABLE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD_REG.VALUE=64583 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD_REG.VALUE=43056 DRIVER.ETPWM.VAR.ETPWM2_PWMA_COMPARE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_ACTUALPERIOD.VALUE=1250004.839 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_ACTUALPERIOD.VALUE=1666679.570 DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTY.VALUE=0 DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD.VALUE=1000 DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_OUT.VALUE=0 @@ -9387,10 +9387,10 @@ DRIVER.ETPWM.VAR.ETPWM1_OSHT4.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM1_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD_REG.VALUE=10333 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD_REG.VALUE=6888 DRIVER.ETPWM.VAR.ETPWM1_OSHT6.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD.VALUE=100000 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD.VALUE=66666.66667 DRIVER.ETPWM.VAR.ETPWM2_CBC.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM4_CLKDIV.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_PWMB_ENA.VALUE=1 @@ -9446,7 +9446,7 @@ DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM6_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CLKDIV_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM3_CLKDIV_REG.VALUE=2 DRIVER.ETPWM.VAR.ETPWM2_PWMB_DEADBAND_OUT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM6_TB_FREQUENCY.VALUE=110.000 DRIVER.ETPWM.VAR.ETPWM4_CBC.VALUE=0x0000 @@ -9503,7 +9503,7 @@ DRIVER.ETPWM.VAR.ETPWM3_PWMA_COMPARE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_OSHT5.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM3_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM3_PWMB_ACTUALPERIOD.VALUE=1250004.839 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_ACTUALPERIOD.VALUE=1666679.570 DRIVER.ETPWM.VAR.ETPWM2_OSHT6.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM6_CBC.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTYTIME.VALUE=0.000 @@ -9545,7 +9545,7 @@ DRIVER.ETPWM.VAR.ETPWM2_CBC4.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_OST.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_ACTUALPERIOD.VALUE=77.418 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_ACTUALPERIOD.VALUE=100004.839 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_ACTUALPERIOD.VALUE=66666.667 DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTYTIME.VALUE=0.000 DRIVER.ETPWM.VAR.ETPWM3_FDELAY_SOURCE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_CBC5.VALUE=0x0000 @@ -9562,7 +9562,7 @@ DRIVER.ETPWM.VAR.ETPWM6_ENABLE_SOCB.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_PWMB_ENA.VALUE=1 DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_ACTUALPERIOD.VALUE=77.418 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD.VALUE=1250000 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD.VALUE=1666666.667 DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL DRIVER.ETPWM.VAR.ETPWM4_TB_ACTUALFREQUENCY.VALUE=103.335 DRIVER.ETPWM.VAR.ETPWM2_OSHT_WIDTH_REG.VALUE=0 @@ -9701,16 +9701,16 @@ DRIVER.ETPWM.VAR.ETPWM3_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL DRIVER.ETPWM.VAR.ETPWM3_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD.VALUE=100000 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD.VALUE=66666.66667 DRIVER.ETPWM.VAR.ETPWM7_RDELAY_SOURCE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTYTIME.VALUE=0.000 DRIVER.ETPWM.VAR.ETPWM1_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM3_CLKDIV.VALUE=2 +DRIVER.ETPWM.VAR.ETPWM3_CLKDIV.VALUE=3 DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_INVERT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_PERIOD_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM6_CLKDIV_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM4_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_ACTUALPERIOD.VALUE=100004.839 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_ACTUALPERIOD.VALUE=66666.667 DRIVER.ETPWM.VAR.ETPWM5_CBC1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM5_PWMB_RISING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM5_CBC2.VALUE=0x0000 @@ -9769,7 +9769,7 @@ DRIVER.ETPWM.VAR.ETPWM1_DCBEVT1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_PERIOD.VALUE=100.000 DRIVER.ETPWM.VAR.ETPWM1_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_TB_ACTUALFREQUENCY.VALUE=51.667 +DRIVER.ETPWM.VAR.ETPWM3_TB_ACTUALFREQUENCY.VALUE=25.834 DRIVER.ETPWM.VAR.ETPWM2_ENABLE_SOCA.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM2_ENABLE_SOCB.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM2_HSPCLKDIV.VALUE=0 @@ -9799,7 +9799,7 @@ DRIVER.ETPWM.VAR.ETPWM1_CLKDIV.VALUE=0 DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTY.VALUE=50 DRIVER.ETPWM.VAR.ETPWM6_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD_REG.VALUE=64583 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD_REG.VALUE=43056 DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_OUT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM7_FDELAY_SOURCE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM4_RDELAY_SOURCE.VALUE=0 @@ -9847,7 +9847,7 @@ DRIVER.ETPWM.VAR.ETPWM5_PWMA_COMPARE.VALUE=52 DRIVER.ETPWM.VAR.ETPWM3_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD_REG.VALUE=10333 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD_REG.VALUE=6888 DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM6_BASE.VALUE=0xFCF79100 @@ -9870,7 +9870,7 @@ DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_OUT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD.VALUE=1250000 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD.VALUE=1666666.667 DRIVER.ETPWM.VAR.ETPWM2_TB_FREQUENCY.VALUE=110.000 DRIVER.ETPWM.VAR.ETPWM6_DCAEVT1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM3_PWMA_POLARITY.VALUE=0 Index: firmware/include/etpwm.h =================================================================== diff -u -ref5ef16518466c92687b869cabfa16eaf3365dc0 -r31b53220d894e272a8f9a8a49d3c9110150489db --- firmware/include/etpwm.h (.../etpwm.h) (revision ef5ef16518466c92687b869cabfa16eaf3365dc0) +++ firmware/include/etpwm.h (.../etpwm.h) (revision 31b53220d894e272a8f9a8a49d3c9110150489db) @@ -468,7 +468,7 @@ #define ETPWM1_TBCTL_CONFIGVALUE ((uint16)((uint16)0U << 7U) | (uint16)((uint16)0U << 10U)) #define ETPWM1_TBPHS_CONFIGVALUE 0x00000000U -#define ETPWM1_TBPRD_CONFIGVALUE 10333U +#define ETPWM1_TBPRD_CONFIGVALUE 6888U #define ETPWM1_CMPCTL_CONFIGVALUE 0x00000000U #define ETPWM1_CMPA_CONFIGVALUE 0U #define ETPWM1_CMPB_CONFIGVALUE 0U @@ -518,9 +518,9 @@ #define ETPWM2_DCFWINDOW_CONFIGVALUE 0x00000000U #define ETPWM2_DCFWINDOWCNT_CONFIGVALUE 0x00000000U -#define ETPWM3_TBCTL_CONFIGVALUE ((uint16)((uint16)0U << 7U) | (uint16)((uint16)1U << 10U)) +#define ETPWM3_TBCTL_CONFIGVALUE ((uint16)((uint16)0U << 7U) | (uint16)((uint16)2U << 10U)) #define ETPWM3_TBPHS_CONFIGVALUE 0x00000000U -#define ETPWM3_TBPRD_CONFIGVALUE 64583U +#define ETPWM3_TBPRD_CONFIGVALUE 43056U #define ETPWM3_CMPCTL_CONFIGVALUE 0x00000000U #define ETPWM3_CMPA_CONFIGVALUE 0U #define ETPWM3_CMPB_CONFIGVALUE 0U Index: firmware/source/etpwm.c =================================================================== diff -u -ref5ef16518466c92687b869cabfa16eaf3365dc0 -r31b53220d894e272a8f9a8a49d3c9110150489db --- firmware/source/etpwm.c (.../etpwm.c) (revision ef5ef16518466c92687b869cabfa16eaf3365dc0) +++ firmware/source/etpwm.c (.../etpwm.c) (revision 31b53220d894e272a8f9a8a49d3c9110150489db) @@ -82,7 +82,7 @@ etpwmREG1->TBCTL |= (uint16)((uint16)0U << 10U); /** - Sets time period or frequency for ETPWM block both PWMA and PWMB*/ - etpwmREG1->TBPRD = 10333U; + etpwmREG1->TBPRD = 6888U; /** - Setup the duty cycle for PWMA */ etpwmREG1->CMPA = 0U; @@ -269,10 +269,10 @@ etpwmREG3->TBCTL = (uint16)0U << 7U; /** - Sets time-base clock prescale bits */ - etpwmREG3->TBCTL |= (uint16)((uint16)1U << 10U); + etpwmREG3->TBCTL |= (uint16)((uint16)2U << 10U); /** - Sets time period or frequency for ETPWM block both PWMA and PWMB*/ - etpwmREG3->TBPRD = 64583U; + etpwmREG3->TBPRD = 43056U; /** - Setup the duty cycle for PWMA */ etpwmREG3->CMPA = 0U;