reading internal temperature sensor of arch max and storing data
TempBase.cpp
- Committer:
- tifo
- Date:
- 2017-09-14
- Revision:
- 3:e98dbcd4f4e3
- Parent:
- 0:62f36500cd41
File content as of revision 3:e98dbcd4f4e3:
#include "mbed.h"
#include "TempBase.h"
TempBase::TempBase()
{
ambientTemp = 25.0f;
v25 = 760.0f;
avgSlope = 2.5f;
vRef = 3000.0f;
}
TempBase::TempBase(float correction)
{
ambientTemp = 25.0f + correction;
v25 = 760.0f;
avgSlope = 2.5f;
vRef = 3000.0f;
}
// ADC init function, call it 1 time during setup
void TempBase::Init()
{
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV4;
hadc1.Init.Resolution = ADC_RESOLUTION12b;
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.EOCSelection = EOC_SINGLE_CONV;
HAL_ADC_Init(&hadc1);
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
// returns raw adc value from sensor
int TempBase::GetRawTemp()
{
HAL_ADC_Start(&hadc1); // Start conversion
// Wait end of conversion and get value
if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK)
return HAL_ADC_GetValue(&hadc1);
else return -1;
}
// takes raw value and convert it to temp
float TempBase::ConvertTemp(int value)
{
return (((value * vRef / 0xFFF) - v25) / avgSlope) + ambientTemp; // formula is from manual
}