From 4441a5ca930f4a1774530913de888544d57de0ff Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Wed, 22 Jul 2020 22:54:55 +1000 Subject: [PATCH] Handle NTC in TS80P --- workspace/TS100/Core/BSP/Miniware/BSP.cpp | 131 +++++++++++++++++++--- workspace/TS100/Core/Inc/FreeRTOSConfig.h | 2 +- 2 files changed, 117 insertions(+), 16 deletions(-) diff --git a/workspace/TS100/Core/BSP/Miniware/BSP.cpp b/workspace/TS100/Core/BSP/Miniware/BSP.cpp index df32c8e2..3b3eb2c2 100644 --- a/workspace/TS100/Core/BSP/Miniware/BSP.cpp +++ b/workspace/TS100/Core/BSP/Miniware/BSP.cpp @@ -16,8 +16,108 @@ history rawTempFilter = { { 0 }, 0, 0 }; void resetWatchdog() { HAL_IWDG_Refresh(&hiwdg); } - +#ifdef MODEL_TS80P +//Lookup table for the NTC +//Stored as ADCReading,Temp in degC +static const uint16_t NTCHandleLookup[] = { +//ADC Reading , Temp in C + 29189, 0, // + 29014, 1, // + 28832, 2, // + 28644, 3, // + 28450, 4, // + 28249, 5, // + 28042, 6, // + 27828, 7, // + 27607, 8, // + 27380, 9, // + 27146, 10, // + 26906, 11, // + 26660, 12, // + 26407, 13, // + 26147, 14, // + 25882, 15, // + 25610, 16, // + 25332, 17, // + 25049, 18, // + 24759, 19, // + 24465, 20, // + 24164, 21, // + 23859, 22, // + 23549, 23, // + 23234, 24, // + 22915, 25, // + 22591, 26, // + 22264, 27, // + 21933, 28, // + 21599, 29, // + 21261, 30, // + 20921, 31, // + 20579, 32, // + 20234, 33, // + 19888, 34, // + 19541, 35, // + 19192, 36, // + 18843, 37, // + 18493, 38, // + 18143, 39, // + 17793, 40, // + 17444, 41, // + 17096, 42, // + 16750, 43, // + 16404, 44, // + 16061, 45, // + 15719, 46, // + 15380, 47, // + 15044, 48, // + 14710, 49, // + 14380, 50, // + 14053, 51, // + 13729, 52, // + 13410, 53, // + 13094, 54, // + 12782, 55, // + 12475, 56, // + 12172, 57, // + 11874, 58, // + 11580, 59, // + 11292, 60, // + 11008, 61, // + 10729, 62, // + 10455, 63, // + 10187, 64, // + 9923, 65, // + 9665, 66, // + 9412, 67, // + 9164, 68, // + 8921, 69, // + 8684, 70, // + 8451, 71, // + 8225, 72, // + 8003, 73, // + 7786, 74, // + 7575, 75, // + 7368, 76, // + 7167, 77, // + 6970, 78, // + 6779, 79, // + 6592, 80, // + }; +#endif uint16_t getHandleTemperature() { +#ifdef MODEL_TS80P + //TS80P uses 100k NTC resistors instead + //NTCG104EF104FT1X from TDK + //For now not doing interpolation + int32_t result = getADC(0); + for (int i = 0; i < (sizeof(NTCHandleLookup) / (2 * sizeof(uint16_t))); + i++) { + if (result > NTCHandleLookup[(i * 2) + 0]) { + return NTCHandleLookup[(i * 2) + 1] * 10; + } + } + return 0; +#else // We return the current handle temperature in X10 C // TMP36 in handle, 0.5V offset and then 10mV per deg C (0.75V @ 25C for // example) STM32 = 4096 count @ 3.3V input -> But We oversample by 32/(2^2) = @@ -32,14 +132,15 @@ uint16_t getHandleTemperature() { result *= 100; result /= 993; return result; +#endif } uint16_t getTipInstantTemperature() { uint16_t sum = 0; // 12 bit readings * 8 -> 15 bits uint16_t readings[8]; - //Looking to reject the highest outlier readings. - //As on some hardware these samples can run into the op-amp recovery time - //Once this time is up the signal stabilises quickly, so no need to reject minimums +//Looking to reject the highest outlier readings. +//As on some hardware these samples can run into the op-amp recovery time +//Once this time is up the signal stabilises quickly, so no need to reject minimums readings[0] = hadc1.Instance->JDR1; readings[1] = hadc1.Instance->JDR2; readings[2] = hadc1.Instance->JDR3; @@ -66,10 +167,10 @@ uint16_t getTipRawTemp(uint8_t refresh) { } uint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample) { - // ADC maximum is 32767 == 3.3V at input == 28.05V at VIN - // Therefore we can divide down from there - // Multiplying ADC max by 4 for additional calibration options, - // ideal term is 467 +// ADC maximum is 32767 == 3.3V at input == 28.05V at VIN +// Therefore we can divide down from there +// Multiplying ADC max by 4 for additional calibration options, +// ideal term is 467 #ifdef MODEL_TS100 #define BATTFILTERDEPTH 32 #else @@ -143,13 +244,13 @@ void unstick_I2C() { int timeout = 100; int timeout_cnt = 0; - // 1. Clear PE bit. +// 1. Clear PE bit. hi2c1.Instance->CR1 &= ~(0x0001); /**I2C1 GPIO Configuration PB6 ------> I2C1_SCL PB7 ------> I2C1_SDA */ - // 2. Configure the SCL and SDA I/Os as General Purpose Output Open-Drain, High level (Write 1 to GPIOx_ODR). +// 2. Configure the SCL and SDA I/Os as General Purpose Output Open-Drain, High level (Write 1 to GPIOx_ODR). GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; @@ -176,7 +277,7 @@ void unstick_I2C() { return; } - // 12. Configure the SCL and SDA I/Os as Alternate function Open-Drain. +// 12. Configure the SCL and SDA I/Os as Alternate function Open-Drain. GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; @@ -190,20 +291,20 @@ void unstick_I2C() { HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(SDA_GPIO_Port, SDA_Pin, GPIO_PIN_SET); - // 13. Set SWRST bit in I2Cx_CR1 register. +// 13. Set SWRST bit in I2Cx_CR1 register. hi2c1.Instance->CR1 |= 0x8000; asm("nop"); - // 14. Clear SWRST bit in I2Cx_CR1 register. +// 14. Clear SWRST bit in I2Cx_CR1 register. hi2c1.Instance->CR1 &= ~0x8000; asm("nop"); - // 15. Enable the I2C peripheral by setting the PE bit in I2Cx_CR1 register +// 15. Enable the I2C peripheral by setting the PE bit in I2Cx_CR1 register hi2c1.Instance->CR1 |= 0x0001; - // Call initialization function. +// Call initialization function. HAL_I2C_Init(&hi2c1); } diff --git a/workspace/TS100/Core/Inc/FreeRTOSConfig.h b/workspace/TS100/Core/Inc/FreeRTOSConfig.h index 820ca8b7..51a1f472 100644 --- a/workspace/TS100/Core/Inc/FreeRTOSConfig.h +++ b/workspace/TS100/Core/Inc/FreeRTOSConfig.h @@ -98,7 +98,7 @@ extern uint32_t SystemCoreClock; #define configUSE_IDLE_HOOK 1 #define configUSE_TICK_HOOK 0 #define configCPU_CLOCK_HZ ( SystemCoreClock ) -#define configTICK_RATE_HZ ((TickType_t)1000) +#define configTICK_RATE_HZ ((TickType_t)100) #define configMAX_PRIORITIES ( 6 ) #define configMINIMAL_STACK_SIZE ((uint16_t)256) #define configTOTAL_HEAP_SIZE ((size_t)1024*14) /*Currently use about 9000*/