From 9830c3654313b7480430514247d7aa15a4c5c636 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Noah=20Piqu=C3=A9?= Date: Wed, 23 Nov 2022 12:54:49 +0100 Subject: [PATCH] ADC Temp error handling, rename temps --- .vscode/settings.json | 2 +- Core/Application/PECO_PeltierController.c | 4 +- Core/Application/VARH_VariableHandler.c | 4 +- Core/Application/VARH_VariableHandler.h | 4 +- Core/Drivers/ADCD_AdcDriver.c | 58 ++++++----------------- Core/Drivers/ADCD_AdcDriver.h | 16 ++++--- Core/Drivers/DIPO_DigitalPorts.c | 4 +- Core/Drivers/DIPO_DigitalPorts.h | 4 +- Core/Drivers/TEMP_Temperature.c | 46 +++++++++++++----- 9 files changed, 71 insertions(+), 71 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 84f4b45..2f91c54 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,7 +7,7 @@ }, "cortex-debug.armToolchainPath": "c:\\Users\\pique_n\\AppData\\Roaming\\Code\\User\\globalStorage\\bmd.stm32-for-vscode\\@xpack-dev-tools\\arm-none-eabi-gcc\\11.3.1-1.1.2\\.content\\bin", "cortex-debug.openocdPath": "C:\\USERS\\PIQUE_N\\APPDATA\\ROAMING\\CODE\\USER\\GLOBALSTORAGE\\BMD.STM32-FOR-VSCODE\\@XPACK-DEV-TOOLS\\OPENOCD\\0.11.0-5.1\\.CONTENT\\BIN\\OPENOCD.EXE", -"cortex-debug.variableUseNaturalFormat": true, +"cortex-debug.variableUseNaturalFormat": false, "stm32-for-vscode.openOCDPath": "C:\\USERS\\PIQUE_N\\APPDATA\\ROAMING\\CODE\\USER\\GLOBALSTORAGE\\BMD.STM32-FOR-VSCODE\\@XPACK-DEV-TOOLS\\OPENOCD\\0.11.0-5.1\\.CONTENT\\BIN\\OPENOCD.EXE", "stm32-for-vscode.makePath": "C:\\USERS\\PIQUE_N\\APPDATA\\ROAMING\\CODE\\USER\\GLOBALSTORAGE\\BMD.STM32-FOR-VSCODE\\@XPACK-DEV-TOOLS\\WINDOWS-BUILD-TOOLS\\4.3.0-1.1\\.CONTENT\\BIN\\MAKE.EXE", "stm32-for-vscode.armToolchainPath": "c:\\Users\\pique_n\\AppData\\Roaming\\Code\\User\\globalStorage\\bmd.stm32-for-vscode\\@xpack-dev-tools\\arm-none-eabi-gcc\\11.3.1-1.1.2\\.content\\bin" diff --git a/Core/Application/PECO_PeltierController.c b/Core/Application/PECO_PeltierController.c index ef3dd96..35759b7 100644 --- a/Core/Application/PECO_PeltierController.c +++ b/Core/Application/PECO_PeltierController.c @@ -232,7 +232,7 @@ VOID vTask( PVOID arg ) if ( VARH_u32GetVariableData( VARH_eMode ) == PECO_eConstTemp ) { // TODO: check the measurements, everything ok? - + /** @todo check power good pin */ // PID Regelung @@ -242,7 +242,7 @@ VOID vTask( PVOID arg ) FLOAT max = VARH_flGetVariableData( VARH_ePID_Max ); FLOAT min = VARH_flGetVariableData( VARH_ePID_Min ); - FLOAT Tnow = VARH_flGetVariableData( VARH_eTemp_C ); + FLOAT Tnow = VARH_flGetVariableData( VARH_eTemp_Module ); FLOAT Tset = VARH_flGetVariableData( VARH_ePID_Temp ); // -error diff --git a/Core/Application/VARH_VariableHandler.c b/Core/Application/VARH_VariableHandler.c index 9616b57..10b6506 100644 --- a/Core/Application/VARH_VariableHandler.c +++ b/Core/Application/VARH_VariableHandler.c @@ -82,8 +82,8 @@ LOCAL CONST VARH_StVarInfo m_astVarInfo[VARH_eNumberOfVariables] = { VARH_FLAGINFO_FLASH | VARH_FLAGINFO_FLOAT, (VARH_UVariable)10.0f, (VARH_UVariable)0.0f, (VARH_UVariable)12.0f }, // VARH_ePID_Max { VARH_FLAGINFO_FLASH | VARH_FLAGINFO_FLOAT, (VARH_UVariable)-2.0f, (VARH_UVariable)-2.0f, (VARH_UVariable)0.0f }, // VARH_ePID_Min - { VARH_FLAGINFO_READONLY | VARH_FLAGINFO_FLOAT, (VARH_UVariable)0.0f, (VARH_UVariable)-60.0f, (VARH_UVariable)100.0f }, // VARH_eTemp_H - { VARH_FLAGINFO_READONLY | VARH_FLAGINFO_FLOAT, (VARH_UVariable)0.0f, (VARH_UVariable)-60.0f, (VARH_UVariable)100.0f }, // VARH_eTemp_C + { VARH_FLAGINFO_READONLY | VARH_FLAGINFO_FLOAT, (VARH_UVariable)0.0f, (VARH_UVariable)-60.0f, (VARH_UVariable)100.0f }, // VARH_eTemp_Water + { VARH_FLAGINFO_READONLY | VARH_FLAGINFO_FLOAT, (VARH_UVariable)0.0f, (VARH_UVariable)-60.0f, (VARH_UVariable)100.0f }, // VARH_eTemp_Module { VARH_FLAGINFO_READONLY | VARH_FLAGINFO_FLOAT, (VARH_UVariable)0.0f, (VARH_UVariable)-50.0f, (VARH_UVariable)70.0f }, // VARH_eTemp_Diff { VARH_FLAGINFO_READONLY | VARH_FLAGINFO_FLOAT, (VARH_UVariable)0.0f, (VARH_UVariable)-5.0f, (VARH_UVariable)14.0f }, // VARH_ePeltier_U diff --git a/Core/Application/VARH_VariableHandler.h b/Core/Application/VARH_VariableHandler.h index 147f86d..c0c7767 100644 --- a/Core/Application/VARH_VariableHandler.h +++ b/Core/Application/VARH_VariableHandler.h @@ -76,8 +76,8 @@ typedef enum VARH_ePID_Max, VARH_ePID_Min, - VARH_eTemp_H, - VARH_eTemp_C, + VARH_eTemp_Water, + VARH_eTemp_Module, VARH_eTemp_Diff, VARH_ePeltier_U, diff --git a/Core/Drivers/ADCD_AdcDriver.c b/Core/Drivers/ADCD_AdcDriver.c index 7c8bc2c..d7ce5a7 100644 --- a/Core/Drivers/ADCD_AdcDriver.c +++ b/Core/Drivers/ADCD_AdcDriver.c @@ -35,7 +35,6 @@ // Drivers #include "SPID_SpiDriver.h" #include "DIPO_DigitalPorts.h" -//#include "EXTI_ExtiHandler.h" // Application //#include "../Application/ELOG_ErrorLogger.h" @@ -80,13 +79,6 @@ #define CONFIG_FILT50HZ (1<<0) #define CONFIG_FILT60HZ (0<<0) -#define FAULT_HIGHTHRESH 0x80 -#define FAULT_LOWTHRESH 0x40 -#define FAULT_REFINLOW 0x20 -#define FAULT_REFINHIGH 0x10 -#define FAULT_RTDINLOW 0x08 -#define FAULT_OVUV 0x04 - #define CONFIG (U8)(CONFIG_VBIAS_ON | CONFIG_MODE_OFF | CONFIG_24WIRE | CONFIG_FILT60HZ) // enable Vbias; autoconvert off; 4-wire; 60Hz; #define EVENT_ENABLE ((U32)(1<<0)) @@ -204,30 +196,14 @@ BOOL ADCD_boInitializeModule( VOID ) osMutexAcquire( m_pstMutexID, osWaitForever ); // Conifg ADC Cold - DIPO_vSetOutput( DIPO_eCS_C ); + DIPO_vSetOutput( DIPO_eCS_Module ); boOK &= boWriteReg( REG_CONFIG, (U16) CONFIG | CONFIG_FAULTSTATCLEAR, FALSE ); - DIPO_vResetOutput( DIPO_eCS_C ); - - DIPO_vSetOutput( DIPO_eCS_C ); - boOK &= boWriteReg( REG_HIGH_FAULT_MSB, (U16)0x5b12 , TRUE ); - DIPO_vResetOutput( DIPO_eCS_C ); - - DIPO_vSetOutput( DIPO_eCS_C ); - boOK &= boWriteReg( REG_LOW_FAULT_MSB, (U16)0x2690 , TRUE ); - DIPO_vResetOutput( DIPO_eCS_C ); + DIPO_vResetOutput( DIPO_eCS_Module ); // Config ADC Hot - DIPO_vSetOutput( DIPO_eCS_H ); + DIPO_vSetOutput( DIPO_eCS_Water ); boOK &= boWriteReg( REG_CONFIG, (U16) CONFIG | CONFIG_FAULTSTATCLEAR, FALSE ); - DIPO_vResetOutput( DIPO_eCS_H ); - - DIPO_vSetOutput( DIPO_eCS_H ); - boOK &= boWriteReg( REG_HIGH_FAULT_MSB, (U16)0x5b12 , TRUE ); - DIPO_vResetOutput( DIPO_eCS_H ); - - DIPO_vSetOutput( DIPO_eCS_H ); - boOK &= boWriteReg( REG_LOW_FAULT_MSB, (U16)0x2690 , TRUE ); - DIPO_vResetOutput( DIPO_eCS_H ); + DIPO_vResetOutput( DIPO_eCS_Water ); osMutexRelease( m_pstMutexID ); @@ -246,10 +222,10 @@ BOOL ADCD_boReadData( ADCD_EnTemps eChannel, PU8 pu8Error, PU16 pu16Data ) *pu8Error = 0; // reset error state U16 u16Data = 0; - DIPO_EnDigitalOutput CS = DIPO_eCS_H; + DIPO_EnDigitalOutput CS = DIPO_eCS_Water; - if( eChannel == ADCD_eHot ) CS = DIPO_eCS_H; - else if ( eChannel == ADCD_eCold ) CS = DIPO_eCS_C; + if( eChannel == ADCD_eWater ) CS = DIPO_eCS_Water; + else if ( eChannel == ADCD_eModule ) CS = DIPO_eCS_Module; osMutexAcquire( m_pstMutexID, osWaitForever ); DIPO_vSetOutput( CS ); @@ -257,7 +233,7 @@ BOOL ADCD_boReadData( ADCD_EnTemps eChannel, PU8 pu8Error, PU16 pu16Data ) DIPO_vResetOutput( CS ); osMutexRelease( m_pstMutexID ); - osDelay(55); + osDelay(100); osMutexAcquire( m_pstMutexID, osWaitForever ); DIPO_vSetOutput( CS ); @@ -268,31 +244,27 @@ BOOL ADCD_boReadData( ADCD_EnTemps eChannel, PU8 pu8Error, PU16 pu16Data ) if( !boOK ) { *pu8Error |= ADCD_SPI_FAILURE; - return 0; + return FALSE; } - if( ( u16Data & 0x00 ) == 0x01 ) + if( ( u16Data & 0x0001 ) == 0x0001 ) { - *pu8Error |= ADCD_STATUS_DATA_ERROR; - + osMutexAcquire( m_pstMutexID, osWaitForever ); DIPO_vSetOutput( CS ); - boOK &= boReadReg( REG_FAULT_STATUS, &u16Data, FALSE ); + boOK &= boReadReg( REG_FAULT_STATUS, (PU16)pu8Error, FALSE ); DIPO_vResetOutput( CS ); DIPO_vSetOutput( CS ); boOK &= boWriteReg( REG_CONFIG, (U16) CONFIG | CONFIG_FAULTSTATCLEAR, FALSE ); DIPO_vResetOutput( CS ); - DIPO_vSetOutput( CS ); - boOK &= boReadReg( REG_HIGH_FAULT_MSB, &u16Data, TRUE ); - DIPO_vResetOutput( CS ); - osMutexRelease( m_pstMutexID ); - *pu8Error |= u16Data & 0xFC; - return 0; + *pu8Error |= ADCD_STATUS_DATA_ERROR; + + return FALSE; } u16Data = u16Data >> 1; diff --git a/Core/Drivers/ADCD_AdcDriver.h b/Core/Drivers/ADCD_AdcDriver.h index 455ee4a..89df96c 100644 --- a/Core/Drivers/ADCD_AdcDriver.h +++ b/Core/Drivers/ADCD_AdcDriver.h @@ -38,10 +38,15 @@ extern "C" { // Description: Definition of global constants (visible by all modules). //================================================================================================= -#define ADCD_STATUS_DATA_ERROR (1<<0) -#define ADCD_SPI_FAILURE (1<<1) +#define ADCD_STATUS_DATA_ERROR 0x01 +#define ADCD_SPI_FAILURE 0x02 -//typedef VOID (*ADCD_pfnCallback)( PVOID pvCallbackArgument ); +#define ADCD_FAULT_HIGHTHRESH 0x80 +#define ADCD_FAULT_LOWTHRESH 0x40 +#define ADCD_FAULT_REFINLOW 0x20 +#define ADCD_FAULT_REFINHIGH 0x10 +#define ADCD_FAULT_RTDINLOW 0x08 +#define ADCD_FAULT_OVUV 0x04 //================================================================================================= // Section: MACROS @@ -55,8 +60,8 @@ extern "C" { //================================================================================================= typedef enum { - ADCD_eHot = 0, - ADCD_eCold = 1, + ADCD_eWater = 0, + ADCD_eModule = 1, ADCD_eNumberOfTemps // Must be last }ADCD_EnTemps; @@ -85,7 +90,6 @@ typedef enum { //================================================================================================= BOOL ADCD_boInitializeModule( VOID ); -//BOOL ADCD_boConfig( BOOL boFast, ADCD_pfnCallback pfnDataReadyCallback, PVOID pvCallbackArg ); BOOL ADCD_boReadData( ADCD_EnTemps eChannel, PU8 pu8Error, PU16 pu16Data ); #ifdef __cplusplus diff --git a/Core/Drivers/DIPO_DigitalPorts.c b/Core/Drivers/DIPO_DigitalPorts.c index bfc4d7e..7a73cb7 100644 --- a/Core/Drivers/DIPO_DigitalPorts.c +++ b/Core/Drivers/DIPO_DigitalPorts.c @@ -109,8 +109,8 @@ LOCAL CONST StDigitalIO m_astInputs[DIPO_eInNumberOfInputs] = LOCAL CONST StDigitalIO m_astOutputs[DIPO_eOutNumberOfOutputs] = { - { GPIOB, { GPIO_PIN_6, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, TRUE, FALSE }, // 00 DIPO_eCS_C - { GPIOB, { GPIO_PIN_5, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, TRUE, FALSE }, // 01 DIPO_eCS_H + { GPIOB, { GPIO_PIN_6, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, TRUE, FALSE }, // 00 DIPO_eCS_Module + { GPIOB, { GPIO_PIN_5, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, TRUE, FALSE }, // 01 DIPO_eCS_Water { GPIOC, { GPIO_PIN_14, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, FALSE, TRUE }, // 02 DIPO_eLED { GPIOA, { GPIO_PIN_8, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, FALSE, TRUE }, // 03 DIPO_eEN diff --git a/Core/Drivers/DIPO_DigitalPorts.h b/Core/Drivers/DIPO_DigitalPorts.h index 10f8e9f..71e7164 100644 --- a/Core/Drivers/DIPO_DigitalPorts.h +++ b/Core/Drivers/DIPO_DigitalPorts.h @@ -78,8 +78,8 @@ typedef enum typedef enum { - DIPO_eCS_C = 0, // 00 Chip Select Cold - DIPO_eCS_H = 1, // 01 Chip Select Hot + DIPO_eCS_Module = 0, // 00 Chip Select Module + DIPO_eCS_Water = 1, // 01 Chip Select Water DIPO_eLED = 2, // 02 Test LED DIPO_eEN = 3, // 03 Enable diff --git a/Core/Drivers/TEMP_Temperature.c b/Core/Drivers/TEMP_Temperature.c index 18d3faf..03f845b 100644 --- a/Core/Drivers/TEMP_Temperature.c +++ b/Core/Drivers/TEMP_Temperature.c @@ -146,29 +146,53 @@ PRIVATE VOID vTask( PVOID arg ) UNUSED( arg ); BOOL boOK = TRUE; - U8 error; - U16 u16ADC_data[ADCD_eNumberOfTemps]; + U8 u8error; + U16 u16ADC_data; FLOAT flTempData[ADCD_eNumberOfTemps]; osDelay(10); while( TRUE ) { - boOK &= ADCD_boReadData( ADCD_eHot, &error, &u16ADC_data[ADCD_eHot] ); - boOK &= ADCD_boReadData( ADCD_eCold, &error, &u16ADC_data[ADCD_eCold] ); - - /** @todo call errorhandler if value == 0 */ + boOK &= ADCD_boReadData( ADCD_eWater, &u8error, &u16ADC_data ); if( boOK ) { - flTempData[ADCD_eHot] = flConvertADCData( u16ADC_data[ADCD_eHot] ); - flTempData[ADCD_eCold] = flConvertADCData( u16ADC_data[ADCD_eCold] ); - VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_H, flTempData[ADCD_eHot] ); - VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_C, flTempData[ADCD_eCold] ); - VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_Diff, flTempData[ADCD_eHot] - flTempData[ADCD_eCold] ); + flTempData[ADCD_eWater] = flConvertADCData( u16ADC_data ); + } else { + if( (u8error & ADCD_STATUS_DATA_ERROR) == ADCD_STATUS_DATA_ERROR ){ + flTempData[ADCD_eWater] = -273.16f; + /** @todo call error handler temp data */ + } else if( (u8error & ADCD_SPI_FAILURE) == ADCD_SPI_FAILURE ){ + flTempData[ADCD_eWater] = -273.16f; + + /** @todo call error handler onchip spi failure */ + } } + boOK &= ADCD_boReadData( ADCD_eModule, &u8error, &u16ADC_data ); + + if( boOK ) + { + flTempData[ADCD_eModule] = flConvertADCData( u16ADC_data ); + } else { + if( (u8error & ADCD_STATUS_DATA_ERROR) == ADCD_STATUS_DATA_ERROR ){ + flTempData[ADCD_eModule] = -273.16f; + + /** @todo call error handler temp data */ + } else if( (u8error & ADCD_SPI_FAILURE) == ADCD_SPI_FAILURE ){ + flTempData[ADCD_eModule] = -273.16f; + + /** @todo call error handler onchip spi failure */ + } + } + + VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_Water, flTempData[ADCD_eWater] ); + VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_Module, flTempData[ADCD_eModule] ); + VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_Diff, flTempData[ADCD_eWater] - flTempData[ADCD_eModule] ); + + boOK = TRUE; osDelay(REFRESH_MS); } }