ADC Temp error handling, rename temps

This commit is contained in:
2022-11-23 12:54:49 +01:00
parent 8a95e24982
commit 9830c36543
9 changed files with 71 additions and 71 deletions

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);
}
}