GD32 ADC检测电压

2023-11-09

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GD32 ADC检测电压 的相关文章

  • android Launcher学习总结

    一 Launcher功能介绍 Launcher简称HomeScreen 是android手机加载完毕后第一个启动的应用程序 它负责除应用本身操作外的所有操作 包括有几个桌面 点击应用程序图标启动应用程序 长时间按桌面出现上下文菜单 长按桌面
  • 骑士周游问题

    骑士周游问题 1 马踏棋盘问题 骑士周游问题 实际上是图的深度优先搜索 DFS 的应用 2 如果使用回溯 就是深度优先搜索 来解决 假如马儿踏了53个点 如图 走到了第53个 坐标 1 0 发现已经走到尽头 没办法 那就只能回退了 查看其他
  • python实现按键精灵找色点击功能,使用pywin32和Pillow库

    Python图片处理模块PIL pillow pywin32的主要作用 1 捕获窗口 2 模拟鼠标键盘动作 3 自动获取某路径下文件列表 4 PIL截屏功能 找色点击功能思路 抓取当前屏幕快照 指定一个坐标和颜色 如果坐标的颜色符合 则点击
  • 在Vue2中使用Swiper

    由于兼容性问题 使用的是Swiper4 首先是安装 npm i swiper 4 在组件中引入 import swiper dist js swiper import swiper dist css swiper css import Sw

随机推荐

  • css01

    1 css基础认知 CSS 叫 层叠样式表 用来 给html页面修改样式 可以让页面更美观 css的书写位置 内嵌式
  • C++:替换文本文件中的某些字符

    include
  • linux开机dracut界面_dracut 基本介绍

    dracut 维基 https dracut wiki kernel org index php Main Page http www 360doc com content 13 0428 09 12139495 281449877 sht
  • JVM——垃圾回收器

    JVM 垃圾回收器 按照工作模式分 可以分为并发式垃圾回收器和独占式垃圾回收器 并发式垃圾回收器与应用程序线程交替工作 以尽可能减少应用程序的停顿时间 独占式垃圾回收器 stop the world 一旦运行 就停止应用程序中的所有用 户线
  • Qt 在循环中超时跳出

    常见的一个需求 在一段循环中 给定一个最大运行时间 当循环时间超出时 终止 常用于一些工控场合 对节拍有要求的项目 在此简单的做一个总结记录 主要使用Qt的 QElapsedTimer 类 调用QElapsedTimer中的成员函数elap
  • MySQL技术内幕 InnoDB存储引擎 学习笔记 第八章 备份与恢复

    备份方法 1 热备 在数据库运行中直接备份 对正在运行的数据库没有任何影响 这种方式在MySQL官方手册中称为Online Backup 2 冷备 在数据库停止的情况下备份 这种备份最简单 一般只需拷贝相关的数据库物理文件即可 这种方式在M
  • Vnc配置

    2017 04 15 1 在terminal中输入vncconfig 弹出小窗 勾选对应选项 注意 不要关闭这个小窗 不要关闭这个小窗 不要关闭这个小窗 2 vncconfig nowin 在linux选中文字后 无需其他按键 直接在win
  • 智慧农业物联网系统解决方案

    一 方案背景 随着城市的发展 人们对于生活水准的要求也越来越高 对于食物的品质需求也越来越高 我作为世界农业大国 农业的发展优势慢慢降低 智慧化农业将带来一次新的农业结构改革 农业的根本问题是效率不高 效益不强 效能不够 原因在于各生产要素
  • Python自动操作 GUI 神器——PyAutoGUI

    我们以前讲过怎样使用 Python 在浏览器中实现页面自动化操作 不管用哪种方式实现 都是通过定位页面中的元素来进行相应的操作 今天我们来聊一聊如何在桌面实现自动化操作 与浏览器页面自动化操作类似 桌面自动化操作也是需要定位鼠标在桌面的位置
  • map的常用用法详解

    头文件 include
  • 基于S函数的BP神经网络PID控制器及simulink仿真

    基于S函数的BP神经网络PID控制器及simulink仿真 文章目录 文章来源和摘要 S函数的编写格式和运行步骤 simulink模型结构 S函数模型初始化部分代码理解 S函数模型更新部分 S函数模型输出部分 S函数完整代码附录 文章来源和
  • 第三方网站/系统使用微信扫码登录

    微信扫码登录网站 微信开放平台 在我们做某个平台或者系统时 都需要有一个登录功能 传统的用户名 密码登录模式看起来似乎并没有手机扫码直接登录来的方便 那么在前端实现上 如何实现微信扫码登录呢 授权流程 第三方发起微信授权登录请求 微信用户允
  • 病例对照研究中,如何对年龄、性别、教育程度进行频数匹配?

    病例对照研究中 如何对年龄性别进行频数匹配 案例一 两组被试匹配 案例二 三组被试匹配 背景 使用默认匹配方法 衡量匹配效果 调整参数 其他匹配方法 参考 案例一 两组被试匹配 案例二 三组被试匹配 背景 我经常遇到的数据情形是 有两组被试
  • 实现【企业微信自建应用使用uni-app H5 开发】,并解决【uni-app集成微信JSSDK(wx、jWeixin)变量冲突问题】

    目录 企业微信的开发与调试 企业微信应用主体逻辑 登录 构造网页授权链接 企业微信SDK配置 demo案例 重要bug修复方法 总结 企业微信的开发与调试 在本地开发基础代码和UI 发布到测试环境进行测试 无法本地调试接口 因为web浏览器
  • AltiumDesigner15.1导出3D PDF 图文教程

    ALtiumDesigner更新的速度就一个字 快 不过从15 4 15出来 貌似很久都没有更新了 等了很久 今天终于出来了 O O哈哈 因为早就耳闻AD15 1会带有3D输出功能 能够直接输出到PDF 这个好玩的功能 怎么能错过 本文就是
  • 时序基本介绍——Jitter与Skew区别

    在时序分析当中 有些基础概念还是要认真了解的 时钟抖动 Clock Jitter 和时钟偏移 Clock Skew 经常容易混淆 时序设计中 对于时钟的要求是非常严格的 因此FPGA中也有专用的时钟管脚 对应着专用的时钟区域BUFG BUF
  • 技术工具类:IDEA集成SonarQube并使用

    1 安装插件 从 File gt Settings gt Plugins 搜索 sonar 如下图 直接点击安装即可 安装成功后重启IDEA 在Settings gt Tools 中找到 SonarLint 如下图 在Coniguratio
  • uni-app提供开箱即用的SSR支持

    SSR 服务端渲染 可以给SPA站点带来两大核心优势 更好的SEO 更快的首屏渲染 很多uni app开发者都在积极尝试SSR 但大多没入门就放弃了 原因在于SSR颇高的技术门槛 vue js 官网在介绍 SSR 章节时的描述如下 本指南将
  • Python pycharm(windows版本)部署spark环境

    一 部署本地spark环境 1 1 安装好JDK 下载并安装好jdk1 7 配置完环境变量 1 2 Spark环境变量配置 去http spark apache org downloads html网站下载相应hadoop对应的版本 我下载
  • GD32 ADC检测电压

    GD32 ADC检测电压 https blog csdn net yangkunhenry article details 112757855 GD32的参考电压在规格书上没有查到 但是由于GD32 和STM32的 某种关系 STM32 的