[活动] 【APM32F107VCT6 MINI开发板测评】ADC数据采集与温度检测

[复制链接]
1619|24
 楼主| jinglixixi 发表于 2023-2-15 23:24 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2023-2-16 12:07 编辑

APM32F107片内配有多通道的ADC模数转换器,通过它采集外部的模拟信号,其输出效果如图1至图3所示。

1.jpg
1  悬空状态下采集结果

2.jpg
2  检测3.3V信号

3.jpg
3  检测GND信号

为此,可在其基础上提供添加热敏电阻来实现温度检测,其电路构成如图4所示。
该温度检测信号所连接的引脚为PA0,即通道0
4.jpg
4  温度检测电路

5.jpg
5  温度检测效果

6.jpg
6  体温检测效果

ADC的初始化函数为:
  1. void ADC_Init(void)
  2. {
  3.     GPIO_Config_T           gpioConfig;
  4.     ADC_Config_T            adcConfig;
  5.     RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA);
  6.     GPIO_ConfigStructInit(&gpioConfig);
  7.     gpioConfig.mode    = GPIO_MODE_ANALOG;
  8.     gpioConfig.pin     = GPIO_PIN_0;
  9.     GPIO_Config(GPIOA, &gpioConfig);
  10.     RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_ADC1);
  11.     ADC_Reset(ADC1);
  12.     ADC_ConfigStructInit(&adcConfig);
  13.     adcConfig.mode                  = ADC_MODE_INDEPENDENT;
  14.     adcConfig.scanConvMode          = ENABLE;
  15.     adcConfig.continuosConvMode     = ENABLE;
  16.     adcConfig.externalTrigConv      = ADC_EXT_TRIG_CONV_None;
  17.     adcConfig.dataAlign             = ADC_DATA_ALIGN_RIGHT;
  18.     adcConfig.nbrOfChannel          =1;
  19.     ADC_Config(ADC1, &adcConfig);
  20.     RCM_ConfigADCCLK(RCM_PCLK2_DIV_4);
  21.     ADC_ConfigRegularChannel(ADC1, ADC_CHANNEL_0, 1, ADC_SAMPLETIME_13CYCLES5);
  22.     DMA_Init();
  23.     ADC_EnableDMA(ADC1);
  24.     ADC_Enable(ADC1);
  25.     ADC_ResetCalibration(ADC1);
  26.     while(ADC_ReadResetCalibrationStatus(ADC1));
  27.     ADC_StartCalibration(ADC1);
  28.     while(ADC_ReadCalibrationStartFlag(ADC1));
  29.     ADC_EnableSoftwareStartConv(ADC1);
  30. }

进行温度检测的函数为:
  1. void ADC_Channel_0 (void)
  2. {
  3.     float voltage,u;
  4.     uint8_t index;
  5.     uint16_t V;
  6.     voltage = (adcData[0] * 3300.0 ) / 4095.0;
  7.     u=voltage;
  8.     if((u<=1644)&&(u>1268)) V=10+(1644-u)/37;
  9.     if((u<=1268)&&(u>947)) V=20+(1268-u)/32;
  10.     if((u<=947)&&(u>692)) V=30+(947-u)/25;
  11.     OLED_ShowNum(60,4,V,3,16);
  12. }


实现显示效果的主程序为:
  1. int main(void)
  2. {
  3.     ADC_Init();
  4.     APM_MINI_OLEDInit();
  5.     OLED_Init();
  6.     OLED_Clear();
  7.     OLED_ShowString(20,0,"APM32F107",16);
  8.     OLED_ShowString(20,2,"NTC test",16);
  9.     OLED_ShowString(20,4,"temp=    C",16);
  10.     while(1)
  11.     {
  12.         ADC_Channel_0 ();
  13.         Delay(1000);
  14.     }
  15. }


这样利用ADC的数据采集功能同热敏电阻NTCOLED屏相结合,就可实现一个温度检测装置。

mmbs 发表于 2023-3-4 20:36 | 显示全部楼层
这个使用测量热电偶的吗              
youtome 发表于 2023-3-4 21:52 | 显示全部楼层
是不是数字传感器的性能更好              
louliana 发表于 2023-3-5 10:38 | 显示全部楼层
现在红外测温的模块挺多的。              
 楼主| jinglixixi 发表于 2023-3-5 10:39 | 显示全部楼层
youtome 发表于 2023-3-4 21:52
是不是数字传感器的性能更好

数字传感器相对来讲更省事一些,无需数值标定处理。
 楼主| jinglixixi 发表于 2023-3-5 10:40 | 显示全部楼层
mmbs 发表于 2023-3-4 20:36
这个使用测量热电偶的吗

是带防水保护的NTC热敏电阻
febgxu 发表于 2023-3-7 13:55 | 显示全部楼层
ADC可以使用最大的采样速度是多少?
 楼主| jinglixixi 发表于 2023-3-7 15:37 | 显示全部楼层
febgxu 发表于 2023-3-7 13:55
ADC可以使用最大的采样速度是多少?

没见到该指标
sdCAD 发表于 2023-3-7 20:05 | 显示全部楼层
这个测的精度高吗?              
maudlu 发表于 2023-3-7 20:33 | 显示全部楼层
单片机的性能怎么样              
tifmill 发表于 2023-3-7 22:20 | 显示全部楼层
采集的温度是内部的温梯吗?              
 楼主| jinglixixi 发表于 2023-3-8 09:59 | 显示全部楼层
tifmill 发表于 2023-3-7 22:20
采集的温度是内部的温梯吗?

不,是环境温度。
 楼主| jinglixixi 发表于 2023-3-8 09:59 | 显示全部楼层
sdCAD 发表于 2023-3-7 20:05
这个测的精度高吗?

还可以
 楼主| jinglixixi 发表于 2023-3-8 10:00 | 显示全部楼层
maudlu 发表于 2023-3-7 20:33
单片机的性能怎么样

比较不错,例程较全。
sdCAD 发表于 2023-3-9 12:28 | 显示全部楼层
APM32F107VCT6 有几路的ADC功能
updownq 发表于 2023-3-9 12:57 | 显示全部楼层
如果多路adc同时采样,会出现串扰的吗?
 楼主| jinglixixi 发表于 2023-3-10 00:17 | 显示全部楼层
sdCAD 发表于 2023-3-9 12:28
APM32F107VCT6 有几路的ADC功能

https://geehy.com/support/apm32?id=191
 楼主| jinglixixi 发表于 2023-3-10 00:18 | 显示全部楼层
updownq 发表于 2023-3-9 12:57
如果多路adc同时采样,会出现串扰的吗?

一般不会
minzisc 发表于 2023-3-10 13:08 | 显示全部楼层
是不是数字传感器的性能更好              
wwppd 发表于 2023-3-10 14:17 | 显示全部楼层
这个ADC采样最大的速度是多少
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部