STM32F407内部温度偏差太大
各位有没有使用过F407内部的温度传感器,今天测试了下,室温在15度左右,采集内码值为1220,换算为温度为:T = (Vsense – V25)/AVG_Slope +25 = 114.16, V25 = 0.76V;AVG_Slope = 2.5mv/℃这太离谱了吧,不知道是哪里出了问题;按照官方给的公式,要是温度在15~30摄氏度之间,转换内码值就需要在910~960之间才可以求高手指点…代码如下:
static void AdcPinComInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_CommonInitTypeDef ADC_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_InitStructure.ADC_Mode = ADC_DualMode_RegSimult;
ADC_InitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
ADC_InitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1;
ADC_InitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_10Cycles;
ADC_CommonInit(&ADC_InitStructure);
}
static void AdcDmaInit(void)
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
DMA_InitStructure.DMA_Channel = DMA_Channel_0;
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)AdcSampDmaBuf;
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC_CCR_ADDRESS;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
DMA_InitStructure.DMA_BufferSize = ADC_DMA_BUF_LEN;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; ////
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; ////
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
DMA_Init(DMA2_Stream0, &DMA_InitStructure);
DMA_Cmd(DMA2_Stream0, ENABLE);
}
static void Adc1ChxConfig(void)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 3;
ADC_Init(ADC1, &ADC_InitStructure);
//// ADC1 regular channels configuration
ADC_RegularChannelConfig(ADC1, ADC_Channel_TempSensor, 1, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_15Cycles);
}
static void Adc2ChxConfig(void)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 3;
ADC_Init(ADC2, &ADC_InitStructure);
//// ADC2 regular channels configuration
ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 1, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC2, ADC_Channel_4, 2, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 3, ADC_SampleTime_15Cycles);
}
自己先顶起来,
参考了网上测教程,转换结果一样,另:硬件Vdda = 3.3V , Vref = 2V... 问题解决了,应该使用Vref = 2.5V,但是抖动幅度还是很大,采集内码值相差100左右,只能滤波了... power568 发表于 2016-3-24 16:59
自己先顶起来,
参考了网上测教程,转换结果一样,另:硬件Vdda = 3.3V , Vref = 2V... ...
STM32F407内部温度传感器测量范围 –40 to 125 °C精度: ±1.5 °C
你的参考电压如果选择2V,那你只能使用ADC的慢速模式,
如果全速模式,VREF要2.4V以上。
芯片温度会不会影响 xmshao 发表于 2016-3-25 14:48
STM32F407内部温度传感器测量范围 –40 to 125 °C精度: ±1.5 °C
你的参考电压如果选择2V,那你只能 ...
你说的慢速模式和快速模式在那个手册中有? 紫藤Teng 发表于 2016-3-26 16:47
芯片温度会不会影响
芯片温度很低的,不会有影响... power568 发表于 2016-3-25 13:09
问题解决了,应该使用Vref = 2.5V,但是抖动幅度还是很大,采集内码值相差100左右,只能滤波了... ...
内部温度传感器用的人比较少应该,应该会用外部的。 内部温度是一个电压折算值,主要还是要看你的供电基础电压.....
在额定电压下的一个温度参考值,如果电压不额定,内部温度是不准的。 huaiqiao 发表于 2016-3-28 01:20
内部温度传感器用的人比较少应该,应该会用外部的。
要求不高,只要个大致范围即可...
页:
[1]
2