1028|7

84

帖子

0

资源

一粒金砂(中级)

【GD32L233C-START评测】+ADC采集PT1000获得温度 [复制链接]

  1. 前言

前面已经把显示和串口打印数据调试完成,这样对接下来的工作就很有利,可以很直观的看见ADC采样的值。我们选用的PA1,是ADC1通道。准备用内部的VREFINT参考电压来校准采样值。默认这个电压是1.2V

image-20220213151521-1.png  

 

  1. 初始化ADC功能

 

void adc_config(void)

{

adc_special_function_config(ADC_SCAN_MODE, ENABLE);

    /* ADC data alignment config */

    adc_data_alignment_config(ADC_DATAALIGN_RIGHT);   //ADC值靠右对其

    /* ADC channel length config */

//    adc_channel_length_config(ADC_REGULAR_CHANNEL, 1U);  //通道长度设置?

    /* ADC channel length config */

    adc_channel_length_config(ADC_INSERTED_CHANNEL, 2);

 

    /* ADC temperature sensor channel config */

    adc_inserted_channel_config(0U, ADC_CHANNEL_1, ADC_SAMPLETIME_239POINT5);

    /* ADC internal reference voltage channel config */

    adc_inserted_channel_config(1U, ADC_CHANNEL_17, ADC_SAMPLETIME_239POINT5);

 

    /* ADC trigger config */

adc_external_trigger_source_config(ADC_INSERTED_CHANNEL, ADC_EXTTRIG_INSERTED_NONE);

    //adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE);  //软件触发方式

    /* ADC external trigger config */

    //adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE);

adc_external_trigger_config(ADC_INSERTED_CHANNEL, ENABLE);

adc_channel_16_to_19(ADC_INTERNAL_CHANNEL_SWITCH, ENABLE);  //使能内部参考电平通道

 

    /* enable ADC interface */

    adc_enable();

    delay_1ms(1U);

    /* ADC calibration and reset calibration */

    adc_calibration_enable();

}

  1. 获取PT1000采集温度值

初始化函数在例程的基础上修改了一下,采集两路ADC值。

  1. PA1 ADC1的值
  2. 2. 内部参考电平值

/**********************************************************

 *

 * 函数名: static uint32_t adc_get_PT1000_value( void )

 * 功  能: 获取PT1000电压

 * 说  明:

 * 设计人:

 * 设计时间:

 * 入口参数:无

 * 出口参数:无

***********************************************************/

static uint32_t adc_get_PT1000_value( void )

{

uint32_t voltage = 0;

uint32_t temp0,temp1;

 

adc_software_trigger_enable(ADC_INSERTED_CHANNEL);

 

while (!adc_flag_get(ADC_FLAG_EOC));   //ADC_FLAG_EOIC

adc_flag_clear(ADC_FLAG_EOC);

 

temp0 = ADC_IDATA0; //PA1端口

temp1 = ADC_IDATA1; //内部参考电压通道 1.2V

 

printf("PA1端口为:%4d \r\n",temp0);

printf("内部参考电压为:%4d \r\n",temp1);

 

voltage = temp0*120/temp1; //--对应实际电压*100

printf("电压为:%4d \r\n",voltage);

return voltage;

}

通过软件触发,然后去读寄存器的值,就能获得当前ADC的值。

然后对采集值进行平均计算,减少数据误差

image-20220213151521-2.png  

通过串口打印数据获取采集信息。

LCD屏上进行显示。

image-20220213151521-3.png  

4.下一步计划

准备试一下FMC功能,通过内部FLASH保存一些传感器是参数值,例如传感器编组,报警上下限等。。。

此帖出自GD32 MCU论坛

回复

1万

帖子

21

资源

版主

ADC前端加Buffer了吗?

点评

没  详情 回复 发表于 2022-2-14 08:09

回复

84

帖子

0

资源

一粒金砂(中级)

littleshrimp 发表于 2022-2-13 19:44 ADC前端加Buffer了吗?


回复

1万

帖子

21

资源

版主

SAR 直接测量PT100对精度影响大吗?

点评

感觉还行,主要看参考电平的电压稳不稳  详情 回复 发表于 2022-2-15 08:36
PT1000  详情 回复 发表于 2022-2-14 08:49

回复

1万

帖子

21

资源

版主

littleshrimp 发表于 2022-2-14 08:47 SAR 直接测量PT100对精度影响大吗?

PT1000


回复

84

帖子

0

资源

一粒金砂(中级)

littleshrimp 发表于 2022-2-14 08:47 SAR 直接测量PT100对精度影响大吗?

感觉还行,主要看参考电平的电压稳不稳

点评

电路是怎么实现的,直接电阻分压吗?  详情 回复 发表于 2022-2-22 16:27

回复

1万

帖子

21

资源

版主

laocuo1142 发表于 2022-2-15 08:36 感觉还行,主要看参考电平的电压稳不稳

电路是怎么实现的,直接电阻分压吗?

点评

是的,PT1000阻值和线性度都不错  详情 回复 发表于 2022-2-23 07:53
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复

84

帖子

0

资源

一粒金砂(中级)

littleshrimp 发表于 2022-2-22 16:27 电路是怎么实现的,直接电阻分压吗?

是的,PT1000阻值和线性度都不错


回复
您需要登录后才可以回帖 登录 | 注册

相关帖子
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
    关闭
    站长推荐上一条 1/8 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表