【ACM32G103RCT6开发板测评】+ADC与NTC实现温度检测
[复制链接]
进行温度检测就离不开温度传感器,就温度传感器类型来讲,主要分为两大类,一是数字式,如DHT22、DS1802等;另一种则是模拟式,以热敏电阻等为检测器件并在ADC的配合完成温度检测。
对于DHT22这类的传感器它主要是对环境温度进行检测,其测量温度的范围比较窄,也不适于进行液体类介质的检测。对于热敏电阻类的器件,在加装外部铠甲的情况下,则可进行液体介质类的检测,并具有较宽的温度测量范围。
就ACM32G103来讲,它提供了很实用的ADC例程,以它为基础可以轻松地实现NTC温度检测。
以例程ADC_Regular_DMA为例,它是以DMA方式对通道Channel0进行单采样,所用引脚为PA0。
经程序的编译与下载,其测试效果如图1至图3所示。
图1 悬空态检测
图2 接地检测
图3 接VDD检测
为了使用NTC热敏电阻进行检测,其电路如图4所示。
图4测温电路
实现温度检测与显示功能的函数为:
voidADC_Test_DMA_Nchannels(void)
{
uint32_ti, VrefP, Voltage,u,V;
VrefP =ADC_GetVrefP();
ADC_Init_DMA_Nchannels();
HAL_ADC_Start_DMA(&ADC_Handle,gadcBuffer,ADC_Handle.ChannelNum);
while(1)
{
HAL_ADC_Start(&ADC_Handle);
while(!gadc1ItcConunt);
gadc1ItcConunt =0;
for (i = 0; i<ADC_Handle.ChannelNum; i++)
{
Voltage = (gadcBuffer[i]&0xFFF)*VrefP/4095;
u=Voltage;
if((u<=1644)&&(u>1268)) V=10+(1644-u)/37;
if((u<=1268)&&(u>947)) V=20+(1268-u)/32;
if((u<=947)&&(u>692)) V=30+(947-u)/25;
OLED_ShowNum(36,5,V,4,16);
}
HAL_Delay(500);
}
}
实现NTC温度检测的主程序为:
int main(void)
{
HAL_Init();
SystemClock_Config();
BSP_OLED_Init();
Init_OLED();
OLED_Clear();
OLED_ShowString(20,0,"ACM32G103",16);
OLED_ShowString(20,2,"NTC Test",16);
OLED_ShowString(20,5,"T= C",16);
ADC_Regular_Channel_Test(ADC_Regular_DMA);
while(1)
{
}
}
经程序的编译与下载,其测试效果如图5和图6所示。
图5 室温测试
图6 体温测试
|