本文主要读取CW32内部的温度传感器数据,并将其转换成摄氏温度数据。
一、数据读取
(一)内部温度计ADC
根据芯片手册,CW32F030内置12位模数转换器具有多达13个外部通道和3个内部通道(温度传感器、电压基准、VDDA/3),支持:
单通道或序列模式转换。
在序列通道模式下,对选定的一组模拟输入自动转换。
可以外接高精度电压基准。
ADC 可为 DMA 提供数据。
模拟看门狗功能可以精确地监控一个选定通道的转换电压。当转换电压位于所设定的阈值范围时会产生中断。
其中的内置温度传感器,产生一个随温度线性变化的电压,在内部被连接到ADC_TsInput的输入通道上,用于将传感器的输出转换到数字数值。
(二)读取电压
读取ADC电压,配置ADC_TsInput通道ADC。
void ADC_Configuration(void)
{
ADC_SingleChTypeDef ADC_SingleInitStruct;
__RCC_ADC_CLK_ENABLE();
__RCC_GPIOB_CLK_ENABLE();
PB00_ANALOG_ENABLE();
ADC_SingleInitStruct.ADC_Chmux = ADC_TsInput;
ADC_SingleInitStruct.ADC_DiscardEn = ADC_DiscardNull;
ADC_SingleInitStruct.ADC_InitStruct.ADC_AccEn = ADC_AccDisable;
ADC_SingleInitStruct.ADC_InitStruct.ADC_Align = ADC_AlignRight;
ADC_SingleInitStruct.ADC_InitStruct.ADC_ClkDiv = ADC_Clk_Div16;
ADC_SingleInitStruct.ADC_InitStruct.ADC_DMAEn = ADC_DmaDisable;
ADC_SingleInitStruct.ADC_InitStruct.ADC_InBufEn = ADC_BufEnable;
ADC_SingleInitStruct.ADC_InitStruct.ADC_OpMode = ADC_SingleChOneMode;
ADC_SingleInitStruct.ADC_InitStruct.ADC_SampleTime = ADC_SampTime5Clk;
ADC_SingleInitStruct.ADC_InitStruct.ADC_TsEn = ADC_TsDisable;
ADC_SingleInitStruct.ADC_InitStruct.ADC_VrefSel = ADC_Vref_VDDA;
ADC_SingleInitStruct.ADC_WdtStruct.ADC_WdtAll = ADC_WdtDisable;
ADC_SingleChOneModeCfg(&ADC_SingleInitStruct);
ADC_Enable();
ADC_SoftwareStartConvCmd(ENABLE);
}
电压数据读出来后要转换成V,按照如下公式计算(单位V):
voltage = (float)adcvalue*(3.3/4096)
二、数据计算
根据CW32内部温度传感器特征表。
遵守以下公式,即可求得内部温度传感器量测出的温度: 温度(°C) = {(V25 - VSENSE) / Avg_Slope} + 25
此处:V25 = VSENSE在25 °C时的数值,Avg_Slope = 温度与VSENSE曲线的平均斜率(单位为mV/°C),VSENSE为温度传感器经由ADC转换出的电压换算成mV,再依照上述公式,只要将V25带入典型值790mV,Avg_Slope带入2.69mV/°C即可求得。
三、代码运行
编译后下载代码,直接运行。
|