打印
[活动]

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

[复制链接]
947|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2023-2-16 12:07 编辑

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


1  悬空状态下采集结果


2  检测3.3V信号


3  检测GND信号

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

5  温度检测效果

6  体温检测效果

ADC的初始化函数为:
void ADC_Init(void)
{
    GPIO_Config_T           gpioConfig;
    ADC_Config_T            adcConfig;
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA);
    GPIO_ConfigStructInit(&gpioConfig);
    gpioConfig.mode    = GPIO_MODE_ANALOG;
    gpioConfig.pin     = GPIO_PIN_0;
    GPIO_Config(GPIOA, &gpioConfig);
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_ADC1);
    ADC_Reset(ADC1);
    ADC_ConfigStructInit(&adcConfig);
    adcConfig.mode                  = ADC_MODE_INDEPENDENT;
    adcConfig.scanConvMode          = ENABLE;
    adcConfig.continuosConvMode     = ENABLE;
    adcConfig.externalTrigConv      = ADC_EXT_TRIG_CONV_None;
    adcConfig.dataAlign             = ADC_DATA_ALIGN_RIGHT;
    adcConfig.nbrOfChannel          =1;
    ADC_Config(ADC1, &adcConfig);
    RCM_ConfigADCCLK(RCM_PCLK2_DIV_4);
    ADC_ConfigRegularChannel(ADC1, ADC_CHANNEL_0, 1, ADC_SAMPLETIME_13CYCLES5);
    DMA_Init();
    ADC_EnableDMA(ADC1);
    ADC_Enable(ADC1);
    ADC_ResetCalibration(ADC1);
    while(ADC_ReadResetCalibrationStatus(ADC1));
    ADC_StartCalibration(ADC1);
    while(ADC_ReadCalibrationStartFlag(ADC1));
    ADC_EnableSoftwareStartConv(ADC1);
}

进行温度检测的函数为:
void ADC_Channel_0 (void)
{
    float voltage,u;
    uint8_t index;
    uint16_t V;
    voltage = (adcData[0] * 3300.0 ) / 4095.0;
    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(60,4,V,3,16);
}


实现显示效果的主程序为:
int main(void)
{
    ADC_Init();
    APM_MINI_OLEDInit();
    OLED_Init();
    OLED_Clear();
    OLED_ShowString(20,0,"APM32F107",16);
    OLED_ShowString(20,2,"NTC test",16);
    OLED_ShowString(20,4,"temp=    C",16);
    while(1)
    {
        ADC_Channel_0 ();
        Delay(1000);
    }
}


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

使用特权

评论回复
沙发
mmbs| | 2023-3-4 20:36 | 只看该作者
这个使用测量热电偶的吗              

使用特权

评论回复
板凳
youtome| | 2023-3-4 21:52 | 只看该作者
是不是数字传感器的性能更好              

使用特权

评论回复
地板
louliana| | 2023-3-5 10:38 | 只看该作者
现在红外测温的模块挺多的。              

使用特权

评论回复
5
jinglixixi|  楼主 | 2023-3-5 10:39 | 只看该作者
youtome 发表于 2023-3-4 21:52
是不是数字传感器的性能更好

数字传感器相对来讲更省事一些,无需数值标定处理。

使用特权

评论回复
6
jinglixixi|  楼主 | 2023-3-5 10:40 | 只看该作者
mmbs 发表于 2023-3-4 20:36
这个使用测量热电偶的吗

是带防水保护的NTC热敏电阻

使用特权

评论回复
7
febgxu| | 2023-3-7 13:55 | 只看该作者
ADC可以使用最大的采样速度是多少?

使用特权

评论回复
8
jinglixixi|  楼主 | 2023-3-7 15:37 | 只看该作者
febgxu 发表于 2023-3-7 13:55
ADC可以使用最大的采样速度是多少?

没见到该指标

使用特权

评论回复
9
sdCAD| | 2023-3-7 20:05 | 只看该作者
这个测的精度高吗?              

使用特权

评论回复
10
maudlu| | 2023-3-7 20:33 | 只看该作者
单片机的性能怎么样              

使用特权

评论回复
11
tifmill| | 2023-3-7 22:20 | 只看该作者
采集的温度是内部的温梯吗?              

使用特权

评论回复
12
jinglixixi|  楼主 | 2023-3-8 09:59 | 只看该作者
tifmill 发表于 2023-3-7 22:20
采集的温度是内部的温梯吗?

不,是环境温度。

使用特权

评论回复
13
jinglixixi|  楼主 | 2023-3-8 09:59 | 只看该作者
sdCAD 发表于 2023-3-7 20:05
这个测的精度高吗?

还可以

使用特权

评论回复
14
jinglixixi|  楼主 | 2023-3-8 10:00 | 只看该作者
maudlu 发表于 2023-3-7 20:33
单片机的性能怎么样

比较不错,例程较全。

使用特权

评论回复
15
sdCAD| | 2023-3-9 12:28 | 只看该作者
APM32F107VCT6 有几路的ADC功能

使用特权

评论回复
16
updownq| | 2023-3-9 12:57 | 只看该作者
如果多路adc同时采样,会出现串扰的吗?

使用特权

评论回复
17
jinglixixi|  楼主 | 2023-3-10 00:17 | 只看该作者
sdCAD 发表于 2023-3-9 12:28
APM32F107VCT6 有几路的ADC功能

https://geehy.com/support/apm32?id=191

使用特权

评论回复
18
jinglixixi|  楼主 | 2023-3-10 00:18 | 只看该作者
updownq 发表于 2023-3-9 12:57
如果多路adc同时采样,会出现串扰的吗?

一般不会

使用特权

评论回复
19
minzisc| | 2023-3-10 13:08 | 只看该作者
是不是数字传感器的性能更好              

使用特权

评论回复
20
wwppd| | 2023-3-10 14:17 | 只看该作者
这个ADC采样最大的速度是多少

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

464

主题

2783

帖子

38

粉丝