GD32 ADC检测电压

https://blog.csdn.net/yangkunhenry/article/details/112757855

GD32的参考电压在规格书上没有查到,但是由于GD32 和STM32的“某种关系“。。。STM32 的内部参考电压是1.2V,所以GD32的可以想象也是1.2V。(最终通过计算发现确实应该是1.2V)

ADC输出的值是一个数字量, 没有单位的.

12位的ADC 最大的数字量是4096, 那么ADC输出值只能在0~4096之间

ADC分辨率12位=4096,采样参考电源是3.3V,所以从0-3.3V按分辨率计算,每位采样值是(3.3/4096)

今天给大家简单介绍一下ADC器件的常识。

ADC,模数转换器,功能是把模拟电压转换成数字量。

概念听的模糊,说点实际的吧:把你要测的电压那条线,连接到ADC的用来测试电压的引脚上,ADC模块就会检测到这个电压,并且自动转换成一个数字,我们读出这个数字,然后知道这个数字和电压的对应关系,就可以知道现在的电压是多大了。

有些单片机内部有ADC模块,在单片机外部引出测试用的ADC引脚。

有些单片机内部没有ADC模块,可以用单独的ADC芯片,单独的ADC芯片一般留有与单片机通信的接口,常见的是8位并口、I2C口、SPI口。单片机通过通信接口与外部ADC模块连接读取ADC芯片的转化值。

分辨率

不管是单片机内部的ADC,还是独立的ADC芯片,都有一个分辨率指标。

一般的分辨率有8位、10位、12位、16位、24位。

先要知道,位就是bit,就是计算机界是最小的单位,8个位是1个字节。

8位数字,最大值就是255,范围从0~255。

10位数字,最大值就是1023,范围从0~1023。

12位数字,最大值就是4095,范围从0~4095。

14位数字,最大值就是16383,范围从0~16383。

16位数字,最大值就是65535,范围从0~65535。

24位数字,最大值就是16777215,范围从0~16777215。

为什么“位”可以表示分辨率?

假设一个我们要测一个0~5V的电压信号。

用8位分辨率的ADC测,输入电压是0V时,得到的数字是0,输入电压是5V时,得到的数字是255。

用12位分辨率的ADC测,输入电压是0V时,得到的数字是0,输入电压是5V时,得到的数字是4095。

8位的ADC,得到的数字每增加1,实际上电压增加5/256=0.0195V。

16位的ADC,得到的数字每增加1,实际上电压增加5/4096=0.0012V。

可以看出来8位和16位在电压的分辨率上是由差异的,比如说我测电压,分别用8位和16位的去测试,得到的数字都是1,对于8位来说小于0.0195V的可能都是1,但是16位的ADC测的的数字是1的话,那么我们就能知道电压大概是0.0012V,是不是很精确。所以用多大的分辨率是看你的硬件条件和你的采样精准度需求

再比如,我们知道当前待测的电压的精确值是0.015V,那我们用8位的ADC得到的数字,就是1,当你得到1的时候,只能认为是1*5/256=0.0195V的电压。

那如果用12位的ADC测0.015V的电压的话,得到的数字就是12或者13,如果是12的话,我们转化一下,就会认为是12*5/4096=0.0147V,如果得到的数字是13的话,我们转一下,就会认为是13*5/4095=0.0159V。

对比一下数字,就可以看出来,位数越高的分辨率,就可以测得更精确的电压。

========================================================================================================================================

下面是我找的网友的博客中对STM32的总结,看起来GD32 和STM32的ADC 很“雷同”

没有STM32的SPEC,这里我贴出来GD32的SPEC中关于内部参考电压部分:

我们的项目需要去简单测试电源电压Vbat,电路是这样的。(这里只关注PA7 和 PA6)

PA7的复用功能是ADC0

看下PA7的 PIN脚功能有哪些:

Default 是PA7 也就是GPIO引脚

Alternat功能有 ADC01_17 也就是可以作为ADC0或者ADC1的 第7个Channel通道

所以针对这个PA7 PIN的功能使能需要做以下工作:

/* enable GPIOA clock */
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_AF);/* 这里AF就是指我需要用Alternate Function的意思,复用的功能的Clock要打开 */
    /* enable ADC1 clock */
    rcu_periph_clock_enable(RCU_ADC1);
    /* config ADC clock */
    rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV4);
    /* config the GPIO as analog mode */
    gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_MAX, GPIO_PIN_7); /* GPIO_MODE_AIN 配置为Analog In mode */

对于PA6的配置就比较简单了

/* enable GPIOA clock */
    rcu_periph_clock_enable(RCU_GPIOA);
    /* configure PA6 GPIO port */ 
    gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_6);
    /* set PA6 output */
    gpio_bit_set(GPIOA,GPIO_PIN_6);

中间的配置就不说了,还是比较多:

直说一下最后的计算方式:

/* 
* 这个Vref_adc 表示的是1.2V的参考电压,用当前的分辨率测试到的ADC值是这么多 ,
*/
Vref_adc =adc_regular_channel_data_read(ADC0, ADC_CHANNEL_17);        
 
/*
* 这个Pin7_adc 表示的是Vbat/2的参考电压,用当前的分辨率测试到的ADC值是这么多,
* 所以采用比例的方式  1.2V : Vref_adc = Vbat/2 : Pin7_adc
* Vbat /2 = (1.2 * Pin7_adc) / Vref_adc
* Vbat = 1.2 * Pin7_adc * 2 / Vref_adc
*/
Pin7_adc =adc_regular_channel_data_read(ADC1, ADC_CHANNEL_7);
 
Vbat = 1.2 * Pin7_adc * 2 / Vref_adc
关于这个对应关系,网友有解释:利用ST MCU内部基准参考电压监测电源电压及其它 - STM32/8 (51hei.com)

下面是网友对SMT32由内部参考电压获取 ADCpin 电压的计算方式,可以看出来都是一样的。

STM32 中的ADC 参考电压

每个STM32芯片都有一个内部的参照电压,相当于一个标准电压测量点,在芯片内部连接到ADC1的通道17。

根据数据手册中的数据,这个参照电压的典型值是1.20V,最小值是1.16V,最大值是1.24V。这个电压基本不随外部供电电压的变化而变化。

不少人把这个参照电压与ADC的参考电压混淆。ADC的参考电压都是通过Vref+提供的。100脚以上的型号,Vref+引到了片外,引脚名称为Vref+;64脚和小于64脚的型号,Vref+在芯片内部与VCC信号线相连,没有引到片外,这样AD的参考电压就是VCC上的电压。

在ADC的外部参考电压波动,或因为Vref+在芯片内部与VCC相连而VCC变化的情况下,如果对于ADC测量的准确性要求不高时,可以使用这个内部参照电压得到ADC测量的电压值。

具体方法是在测量某个通道的电压值之前,先读出参照电压的ADC测量数值,记为ADrefint;再读出要测量通道的ADC转换数值,记为ADchx;则要测量的电压为:

Vchx = Vrefint * (ADchx/ADrefint)

其中Vrefint为参照电压=1.20V(STM32F107)。

如何用VDDA作为ADC参考电压,当测量信号电压超过这个范围可以用精密电阻分压或者放大器分压,或者选择合适的外部电压基准芯片。
————————————————
版权声明:本文为CSDN博主「yangkunhenry」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yangkunhenry/article/details/112757855

GD32 ADC检测电压相关推荐

  1. ADC检测电压 端口二极管钳位保护电路之总结

    先放搜集的信息结论: 第四用形态最好. 1.电压跟随器可以不用,有空再研究. 2.RC滤波要用, 3.BAT54S肖特基电压钳位电路要用, 4.限流电阻要用. 1. 1.干扰小的地方可以只使用内部的防 ...

  2. GD32 ADC采集电压

    文章目录 ADC TIM DMA 其他一些初始化 main 总结 使用芯片为GD32F307 ADC 连续转换模式,可以运行在规则组通道上,一旦相应软件触发或者外部触发产生,ADC就会采样和转换规定的 ...

  3. NTC负温度系数的热敏电阻——通过ADC检测计算出相应温度值

    NTC作为一种负温度系数热敏电阻,其阻值随温度升高而降低.利用热敏电阻的特性可以做温度传感器检测温度应用在单片机中.下面简单介绍下,在单片机中AD检测热敏电阻电压值,然后转换成电阻值,求出当前的实际温 ...

  4. 昂瑞微 HS6621 芯片 ADC检测调试

    文章目录 HS6621 芯片 ADC检测调试 一.函数接口 二.电压引脚初始化通道选择 三. 测量电压范围设置 四.调用函数接口时的 ADC 通道选择 五.源码示例 HS6621 芯片 ADC检测调试 ...

  5. 单片机ADC检测4-20mA电路,以及计算方法

    单片机ADC检测4-20mA电路,以及计算方法 转载:https://www.hongchangzidonghua.com/?id=24 1,手里有一个4-20mA输出的压力传感器,假设测量范围是0M ...

  6. STM32----重温ADC测量电压值

    ADC测量电压值 实现目标使用两个按键控制串口的输出和ADC的转换.使用DMA将ADC数据存放在内存中,然后计算对应的电压值.然后由串口1发送至上位机. 主要讲一下对于按键和串口的配置与之前都一样只是 ...

  7. esp8266原理图_ESP8266_22基于自身ADC的电压采样

    这一节内容比较简单,就是电压采样,在传统设计中应用还是比较多的.首先看下支持ADC采样的管脚,找到你手里模块的原理图,我的如下所示: 如上所示,U1的2脚为ADC管脚,而且整个模块有且仅有这一个电压采 ...

  8. STC15内部ADC测电压

    STC15内部ADC测电压 当VCC(基准电压)等于5V的时候,我们输入的是4v,那么ADC将4V转换的结果就是4/5*1024=819.2.这是一种比例关系.一般开发板的的基准电压采用的是3.3V.

  9. 基于STM32F407使用ADC采集电压实验

    核心板:STM32F407 实验目的:使用ADC采集电压值将其打印在串口助手上 目录 ADC简介 STM32F407 ADC通道对应的引脚 STM32F407中的数据寄存器 ADC 规则数据寄存器 ( ...

最新文章

  1. 2021年大数据常用语言Scala(三十四):scala高级用法 异常处理
  2. 妙用Windows安全模式执行杀毒
  3. 一步一步学Ruby(七):数学表达式
  4. 单招计算机专业综合测试,单招计算机专业模习题.doc
  5. Tensorflow常用函数说明(一)
  6. c语言序列化后只有四位小数,《C编程.高级C》4.序列化
  7. DELMIA软件:机器人抓手工具制作
  8. 计算机网络太难了?了解这一篇就够了
  9. 2022-2028年中国罐头行业市场专项调研及发展策略分析报告
  10. 云平台运维的一些心得
  11. 【vscode 报错】Couldn‘t start client ESLint
  12. 《计算机应用基础》第04章在线测试,《计算机应用基础》在线测试.doc
  13. 华为发布海思麒麟950:神兽决斗跑分琅琊榜,麒麟压得过骁龙?---ESM
  14. MSP430G2553-引脚简单使用
  15. 计算机应用基础0039答案,2016秋5205004计算机应用基础-0039【参考答案】
  16. 第一天:python的安装及print函数简单使用
  17. Solidity语言编辑器REMIX指导大全
  18. python dns管理平台_python dns服务器
  19. 云服务器 重做系统软件,云服务器 重做系统软件
  20. 深度学习——Noisier2Noise

热门文章

  1. 微信小程序ERR_CERT_DATE_INVALID
  2. SEO独家揭秘:政府高权重锚文本虚拟外链技术!
  3. 《编程机制探析》第七章 设计模式
  4. 易软社区诊所门诊病历系统
  5. Grid网格布局详细讲解
  6. Cisco报告揭示现在及未来最急需的20个IT岗位
  7. TypeError: _vm.__HOLDER__ is not a function
  8. 被逼着参加QQ“酷感夏日”活动
  9. ESPCMS最新cookie注入漏洞分析
  10. 软件工程作业——《人月神话》读书笔记