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. iOS常用第三方开源框架和优秀开发者博客等
  2. iOS:app直播---采集篇
  3. 计算机窗口设置不合并,电脑下边的任务栏不合并怎么办
  4. Lis(bzoj 3532)
  5. docker 网络模型
  6. 《Python Cookbook 3rd》笔记(1.17):从字典中提取子集
  7. 手机界面常见的的九宫格
  8. 2018 Machine Learning
  9. 【Python实例第34讲】高斯过程分类:XOR数据集
  10. maven package,clean,install,compile命令
  11. Oracle 11g安装步骤(超详细)
  12. MAC如何烧录img文件或ios文件
  13. 电机开环控制与闭环控制
  14. html 对p中一段话指定样式,HTML5学习笔记(二)
  15. Python 常用写法
  16. win10专业版2020下载链接
  17. The server time zone value ‘ й ׼ʱ ‘ is unrecognized or represents more than one time zone. You mu
  18. 火猴之ppt动画效果实现(firemonkey)
  19. 活动星投票国潮大秀东方网络评选投票怎么做的免费微信投票活动
  20. 仿淘宝菜单栏左右滑动(VUE 移动端)

热门文章

  1. 电脑双网卡配置,同时连接内外网
  2. 高速信号与高频信号区分与解释
  3. python的有符号数和无符号数之间的转换
  4. Tp5400单节锂离子电池充电器和恒定5V升压控制器芯片TP拓微
  5. Beyond compare 生成word版本的对比报告
  6. Lenovo x230i 突然没有声音了
  7. Matlab fig文件另存为的eps图片 Helvetica Times-Roman字体不能嵌入
  8. 小学计算机社团会议记录,关于社团会议记录 .doc
  9. 实验并解读github上三个DeepDream的Pytorch代码
  10. Win11如何查看自己的内网主机ip