GD32的ADC模块简介

2023-11-03

ADC模块简介

> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v4Q6PJ1V-1650267479073)(./image/芯片封装.png)]

  • 驱动板所使用的主控芯片为GD32C103CB,该芯片总共有2个ADC单元,即ADC0、ADC1,因为驱动板上使用的是LQFP48封装,所以该芯片的每个ADC单元只有10个外部模拟输入通道,并且共用相同的GPIO口,这10个外部模拟输入通道依次的对应关系为:
    • PA0(ADC01_IN0):ADC0或ADC1的外部模拟输入通道0
    • PA1(ADC01_IN1):ADC0或ADC1的外部模拟输入通道1
    • PA2(ADC01_IN2):ADC0或ADC1的外部模拟输入通道2
    • PA3(ADC01_IN3):ADC0或ADC1的外部模拟输入通道3
    • PA4(ADC01_IN4):ADC0或ADC1的外部模拟输入通道4
    • PA5(ADC01_IN5):ADC0或ADC1的外部模拟输入通道5
    • PA6(ADC01_IN6):ADC0或ADC1的外部模拟输入通道6
    • PA7(ADC01_IN7):ADC0或ADC1的外部模拟输入通道7
    • PB0(ADC01_IN8):ADC0或ADC1的外部模拟输入通道8
    • PB1(ADC01_IN9):ADC0或ADC1的外部模拟输入通道9
  • 由上述我们可以得到关于ADC的大致信息,在芯片中总共有2个ADC采样单元,有10共用的外部外部输入通道,即每个ADC采样单元都可以对10个通道中的任意一个进行采样转换,显然若要充分利用好者10个外部通道,那ADC采样模块必定需要按照一定规则在通道之间进行切换,由此引出以下内容

单个ADC模块

> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8bEHqidd-1650267479075)(./image/ADC模块框架.png)]

  • 根据上图我们可以大致了解单个ADC模块内部的原理,ADC模块的外部通道可设置为规则通道组或则注入通道组,在接收到触发信号后ADC模块便会对相应的外部输入通道进行采样转换,其转换后得到的数值分别放入规则数据寄存器(1个)以及注入规则寄存器(4个)中
  1. 规则组和注入组
  • 若要使用外部通道来进行采样转换,则需要先对其进行分组设置,因为不同分组的优先级以及转换结果存放的位置等是不同的;规则通道组和注入通道组都可以设置1个或者多个外部通道,并且分组内的通道也需进行排序编号
    • 规则组:最多可以设置16个通道(该芯片只有10个外部通道,所以最多10个),使用时需要先设置规则组的长度(ADC_RSQ0寄存器的RL[3:0]位)以及规则组内各个通道的排序编号(ADC_RSQ0~ADC_RSQ2寄存器)
    • 注入组:最多可以设置4个通道,使用时需要先设置注入组的长度(ADC_ISQ寄存器的IL[1:0]位)以及注入组内各通道的排序编号(ADC_ISQ寄存器)
  1. 转换模式
  • 现在我们已经将要使用的外部通道进行了分组设置,此时我们便建立了外部输入通道与ADC模块的联系,目前我们是假设只有1个ADC模块,若我们只是使用了1个外部通道,那毫无疑问ADC模块可以专心致志的对该通道进行采样转换;但是若使用的通道大于1个,那这些外部通道就需要共用1个ADC模块,因此ADC模块需要在不同的外部通道之间进行切换,这个时候就需要制定一些规则,即转换模式

  • 当只需要对1个外部通道进行采样时,只需要设置以下两种模式中的一种:

    • 单次转换模式:该模式既能运行在规则组内,也能运行在注入组内;在该模式下,每次接收到触发信号便会对分组内排序编号为0(即第1个转换通道,由ADC_RSQ2寄存器的RSQ0[4:0]位或
      ADC_ISQ寄存器的ISQ3[4:0]位规定)进行1次采样转换
      > [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-57oKIqs3-1650267479076)(./image/单次转换模式.png)]

    • 连续转换模式:该模式运行在规则组内;在该模式下,只需要接收1次触发信号,便会对分组内排序编号为0(即第1个转换通道,由ADC_RSQ2寄存器的RSQ0[4:0]位规定)进行连续的采样转换
      > [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sz5VGpn5-1650267479077)(./image/连续转换模式.png)]

  • 当需要对多个外部通道进行采样时,除了需要设置以上两种模式外,还需进一步设置以下两种模式:

    • 扫描转换模式:该模式可以运行在规则组或者注入组内;顾名思义,在该模式下ADC会根据之前设置好的组内各通道的排序编号依次进行采样;值得注意的是,该模式需要与连续转换模式搭配使用,当连续扫描模式被禁用时,每次接收到触发信号后,ADC模块只会将组内所有通道依次采样依次,当连续扫描模式使能时,只需要接收1次触发信号,ADC模块便会按照顺序对组内通道进行循环采样
      > [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pBOw35Wj-1650267479078)(./image/扫描转换模式1.png)]

    > [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tt5iT9c2-1650267479081)(./image/扫描转换模式2.png)]

    • 间断模式:该模式运行在规则组与注入组下的效果是不同的;在规则组中设置该模式时,则会将规则组内的通道再一次进行细分,分为长度为n(由ADC_CTL0寄存器的DISCNUM[2:0]位设置且n<=8)短序列,每次收到触发信号便会对1个细分序列内的通道进行采样,依次采样所有细分序列,直到分组内所有通道都转换完成;在注入组中设置该模式时,则每次收到触发信号便对组内的1个通道进行采样,依次进行,直到组内所有通道转换完成;注意规则组和注入组不能同时工作在间断模式
      > [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aEDjeRRi-1650267479082)(./image/间断转换模式.png)]
  1. 注入通道管理
  • 自动注入:在规则组通道之后,注入组通道被自动转换
  • 触发注入:在规则通道转换时,若注入通道被触发,则取消当前转换,转而进行注入转换,待注入转换完成便返回上次被取消的转换处重新开始

多个ADC模块

> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d4lRlZgP-1650267479083)(./image/ADC同步框图.png)]

  1. 同步模式
  • 上面我们了解了单个ADC模块的工作模式,但是在芯片有2个ADC模块,那在同时使用这2个ADC模块时,我们也不可避免的遇到它们之间的协调问题,此时我们也需要制定一些规则,即同步模式

  • 在处于同步模式时,ADC0为主机,ADC1为从机;注意,当主ADC配置为由外部时间触发时,从ADC必须配置为软件触发,从而避免错误的触发引起不必要的转换,此外主ADC和从ADC的外部触发必须被使能;还有,即使DMA不使用也需要将DMA置位;

  • 同步模式具体分为:

    • 独立模式:该模式下ADC同步被忽略,每个ADC都独立工作、

    • 规则并行模式:在该模式下,每次主ADC接收到触发信号,主ADC模块和从ADC模块便并行地对各自规则组内的通道进行依次采样,直到分组内的通道都采样完成;注意两路ADC不能同时对同一通道进行采样,且在并行模式下ADC0和ADC1并行采样的两个通道需要设置为准确的相同的采样时间
      > [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5t7aAiBF-1650267479084)(./image/规则并行模式.png)]

    • 注入并行模式:并行对各自注入组内的通道进行依次采样,细节同上
      > [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s0sjfz03-1650267479085)(./image/注入并行模式.png)]

    • 快速交叉模式:此模式应用于规则组(通常只有一个通道);在该模式下,每次主ADC收到触发信号后,ADC1立即启动,ADC0在7个ADC时钟周期后启动,此时如果ADC0和ADC1的连续转换模式都使能,那两个ADC都会连续地对各自的规则通道组进行采样转换
      > [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lBcaZYYf-1650267479086)(./image/快速交叉模式.png)]

    • 慢速交叉模式:此模式应用于规则组(通常只有一个通道);在该模式下,每次主ADC收到触发信号后,ADC1立即启动,ADC0在14个ADC时钟周期后启动;此时虽然两个ADC也都是连续的对各自的规则通道组进行采样,但不能将ADC设置为连续转换模式,否则无法满足间隔14个ADC时钟周期的要求
      > [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cUNBBWAE-1650267479087)(./image/快速交叉模式.png)]

    • 交替触发模式:此模式运用于注入组;若两个ADC的间断转换模式被禁止,当主ADC第1次接收到触发信号,ADC0注入组的所有通道被转换,当主ADC第2次接收到触发信号,ADC1注入组的所有通道被转换,以此类推;若两个ADC的间断转换模式使能,当主ADC第1次接收到触发信号时转换ADC0第1个注入通道,当主ADC第2次接收到触发信号时转换ADC1的第1个注入通道,当主ADC第3次接收到触发信号时转换ADC0的第2个通道,当主ADC第4次接收到触发信号时转换ADC1的第2个通道,以此类推
      > [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EmnLl7zV-1650267479087)(./image/交替触发模式1.png)]

    > [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IHVppeuX-1650267479088)(./image/交替触发模式2.png)]

    • 此外还有以上模式的组合体:规则并行和注入并行组合模式、规则并行与交替触发组合模式、注入并行和交叉组合模式

其他设置

  • 由上所述我们已经了解了ADC使用的大致方法,此外还有一些具体的配置操作
  1. 因为在使用ADC时其外部条件并不是一成不变的,所以在上电初始化ADC时应该先对其进行校准,在ADC模块中带有一个前置校准功能,通过设置ADC_CTL1寄存器中的CLB位启动校准,注意,在校准期间不能使用ADC,必须等到校准完成后
  2. ADC时钟有RCU时钟控制器提供
  3. 通过设置ADC_CTL1寄存器中的ADCON位可以使能或者禁止ADC
  4. 模拟看门狗:当所监视的通道超过或低于所设置的阈值的范围时,便会触发相应的中断
  5. 数据对齐:可设置为高字节对齐或者低字节对齐
  6. 可编程的采样时间:可以通过 ADC_SAMPT0和ADC_SAMPT1寄存器对每个通道的采样时间进行设置,从而可以间接调整采样频率
  7. 外部触发
  • 既然要对外部输入通道进行采样,那我们必须告诉芯片什么时候开始采样,这个信号便是触发信号,我们可以通过ADC_CTL1寄存器的ETSRC[2:0]位来设置规则组的外部触发源,通过ADC_CTL1寄存器的ETSIC[2:0]位来设置注入组的外部触发源
    > [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vns4r2LC-1650267479089)(./image/外部触发1.png)]

> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RT4GU6Yl-1650267479090)(./image/外部触发2.png)]

  1. DMA请求:ADC在规则组一个通道转换结束后产生一个DMA请求,DMA接收到请求后可以将转换的数据从ADC_RDATA寄存器传输到用户指定的目的地址
  2. 温度传感器和内部参考电压VREFINT
  3. 可编程分辨率(DRES)-快速转换模式
  4. 片上硬件过采样
  5. 计算采样值对应的模拟数值
  • 当外部信号直接连接到ADC的外部输入端口时(外部电路增益Gain = 1),此时根据之前设置的分辨率(n位),以12位为例:
    • 外部输入电压 = (VREF+) * (采样转换数值 / (2^n - 1)) * Gain
    • 外部输入电流 = 外部输入电压 / 电阻
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GD32的ADC模块简介 的相关文章

  • 【MM32F5270开发板试用】五、rt-thread 利用SPI接口驱动SD卡

    篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动 更多开发板试用活动请关注极术社区网站 作者 Magicoe是攻城狮 之前SPI接的是个2 4寸的小屏幕 鉴于MM32F5270片上没有SDIO接口用的是SPI拓展的SD卡 反正
  • 计算机组成原理--基于Logisim的8位可控加减法器实验的应用(超详细/设计/实验/作业/练习)

    目录 课程名 计算机组成原理 内容 作用 设计 实验 作业 练习 学习 基于Logisim的8位可控加减法器实验 一 前言 二 环境与设备 三 内容 四 结果与分析 课程名 计算机组成原理 内容 作用 设计 实验 作业 练习 学习 基于Lo
  • LVGL-obj对象

    对象创建 1 lv中所有的对象都以obj为基础进行扩展的 创建对象时父对象是空 则在显示器屏链表增加一个节点 父对象非空则在其子链表增加一个节点 创建完成会通过parent gt signal cb parent LV SIGNAL CHI
  • 合宙Air105

    基于Air105开发板 Air105 LuatOS 文档 上手 开发上手 LuatOS 文档 前文 合宙Air105 摄像头 capture SPI Serial 串口 TFTLCD Micro SD卡 GC032A USB转TTL 官方d
  • VL6180X传感器驱动

    vl6180x i2c c I2C通信 获取VL6180x地址 可以知道7位地址为0x29 写 0x52 读 0x53 写入数据 通过I2C总线向某一寄存器写入一个字节数据 成功 0 失败 1 uint8 VL6180X WriteByte
  • keil5安装到中文路径,导致软件、文件打不开,或打开文件为灰色,无法编译运行

    keil5安装到中文路径 导致软件 文件打不开 1 查看keil软件安装位置 1 1 win键 搜索keil 点击打开文件位置 1 2 鼠标右键 I 打开文件所在的位置 2 修改安装文件夹为英文名称 2 1找到中文名称文件夹 修改为英文名称
  • eclipse + armgcc + pyocd(CMSIS-DAP) 进行嵌入式MCU Debug

    eclipse armgcc pyocd CMSIS DAP 进行嵌入式MCU Debug 由于中美贸易战的影响 备用方案将采用国产MCU 经过乱开发委员会的评估 认为华大 HDSC 的MCU性价比不错 但是keil官网找不到所选芯片的pd
  • WIN10下搭建gcc编译环境

    安装make 1 下载make 3 81 链接 https pan baidu com s 1kj2CzmLvl tDTuHJRXKnBg 提取码 v7fh 2 直接安装 全选next 安装路径最好不要改动 3 进入系统属性 选择环境变量
  • STM32 USB DP/DM内置的上下拉电阻阻值

    根据USB协议 工作在主机模式 USB DP DM下拉到GND 工作在设备模式 上拉到VCC DP上拉表示高全速设备 DM上拉表示低速设备 STM32在Device模式只支持高速或全速 图片来源于 STM32F407数据手册 红色为示意 实
  • 零基础开发NBIOT

    前言 shineblink core 开发板 简称Core 的库函数支持NBIOT通信功能 所以只用几行代码即可实现基于M5311 NB模块的联网通信 TCP UDP MQTT 功能 这里我们主要介绍通过TCP实现联网通信的功能 更多关于T
  • STM32串口环形队列

    一 环线队列 在设计串口驱动的过程中 要遵循的两条准则是 1 尽量的减少程序运行的时间 2 尽量的减少程序所占用的内存 单片机相对于电脑来说 单片机的储存空间和电脑的存储空间根本不是一个量级 电脑并不用过多考虑内存的多少 而单片机就需要考虑
  • 嵌入式开发(7)系统定时器(SysTick)之延时函数运用

    目录 一 系统定时器 1 简介 2 工作原理 3 频率的概念 二 库函数SysTick定时器操作 系统定时器配置 三 寄存器SysTick定时器操作 1 系统定时器的用途 2 寄存器 3 官方示例 4 毫秒级延时函数 5 微秒和毫秒延时的优
  • 使用VS Code开发Arduino

    文章目录 目的 软件安装 快速使用 更多说明 编译输出时中文乱码 Arduino扩展配置说明 使用 arduino cli 总结 目的 Arduino官方的IDE作为编辑器的功能挺简陋的 用起来并不是很舒服 相比较之下用VS Code Vi
  • MS-RTOS 内核模块动态装载

    1 MS RTOS 内核模块动态装载简介 MS RTOS 支持内核模块动态装载功能 用户可以根据需要 在不需要对内核重新编译的情况下 使用 insmod rmmod 等命令动态地将模块加入或移出内核 这样可以提高 MS RTOS 的灵活性
  • 数据类型:C++中的基本数据类型

    数据类型 C 中的基本数据类型 在C 中 数据类型是用于存储不同种类数据的变量类型 C 提供了多种基本数据类型 包括字符型和数值类型 本篇博客将详细介绍C 中的基本数据类型 并提供相应的示例代码 目录 引言 字符型数据类型 2 1 char
  • Keil MDK误将Project窗口关了的解决办法,窗口视图重置

    在使用MDK时 误将Project窗口或者其他窗口关了 点击view 选择对应的窗口即可 或者点击Window窗口 选择Reset View to Defaults 再点击Reset即可实现窗口的重置
  • 使用Arduino开发ESP32(17):固件更新演示

    文章目录 目的 基础说明 使用演示 通过SD卡更新固件 通过网页更新固件 总结 目的 很多时候我们会有因为bug修复 功能增加等情况需要对已投产使用的设备更新固件 这种情况下再使用工具通过串口烧录固件就不是那么方便了 比较常用的是通过网络或
  • Air780E

    目录 基础资料 探讨重点 实现功能 硬件准备 软件版本 在雁飞格物平台上创建产品 1 创建产品 2 查看雁飞格物平台接入协议 组成ClientId 组成userName 3 设备鉴权信息 鉴权参数计算 python版 4 MQTT直连雁飞格
  • 关注MCU 开发中的无限循环

    在 MCU 的开发过程中 我们经常会遇到需要使用无限循环的情况 例如 在前后台系统中 我们需要在一个无限循环中处理各种任务 在实时性操作系统中 我们也可能需要在一个无限循环中调度各个任务 那么 处理无限循环的语句有哪些写法呢 目前常见的有两
  • 如何为 Arm Cortex M4 交叉编译 GSL?

    我正在使用带有arm cortex m4的STM32 MCU 并且想要使用gsl 2 7 1 但是 我已经尝试过例如命令 configure prefix home user name gsl arm target arm none eab

随机推荐

  • Python爬取租房信息并保存至Excel文件

    Python爬取租房信息并保存至Excel文件 爬取网页 解析数据 保存数据 本案例为Python编写Spider程序 获取租房相关信息 并保存至Excel文件 大致分为爬取网页 解析数据 保存数据三个步骤 程序具有通用性 只需获取目标网站
  • 大一下第一场

    大一下第一场比赛 太菜了 总结 小错误太多 应该提高严密性 long long scanf lld 有 gt lt 不要忘记了等于的情况 成绩那题 我默认把它看成了小数 其实还有整数的情况 一题有一些小细节没注意导致花了很多时间 诶 长寿的
  • 02-kafka集群搭建

    文章目录 0 服务器准备 1 zookeeper集群 1 1 下载 1 2 拷贝 1 3 配置变量 1 4 配置 1 5 启动 2 kafka 2 1 下载 2 2 拷贝到服务器 2 2 配置文件 2 3 启动 3 使用密码 3 1 配置文
  • win7 计算机属性 灰,打不开win7计算机属性解决方法

    1 点击 开端 单击翻开 记事本 程序 2 复制下面的代码 黏贴到新建的记事本里面 3 Windows Registry Editor Version 5 00 HKEY LOCAL MACHINE SOFTWARE Microsoft W
  • vue-router之 tag 和 v-solt 对比

    1 在vue router4 0之前 我们都是使用 tag 来自定义 router link 渲染成什么标签
  • 获取系统中各应用的运行时间

    通过增加动态库获取应用的运行时间 同事提出一个问题 如何获取嵌入式设备系统中各个应用已运行的时间 这个问题的解决方案有多种 其中一种是使用功能较强的软件作为系统的init进程和服务管理 例如systemd 以它启动各应用软件服务后 可通过s
  • K近邻算法,Matlab实现

    邻近算法 K近邻 通过计算测试样本与训练样本之间的距离 然后找出距离测试样本最近的K个样本 统计他们的结果 哪种类型的的结果出现的次数多则预测测试样本的结果为此结果 代码如下 function label1 KNN training tes
  • Python开发工具PyCharm的web开发教程:创建并运行 Python 项目

    在你开始前 要确定以下两点 PyCharm下载 已完成 安装了 Python PyCharm官方正版下载 要开始使用PyCharm 让我们编写一个 Python 脚本 创建一个 Python 项目 1 如果您在欢迎屏幕上 请单击新建项目 如
  • 关于 “定义_sys_exit()以避免使用半主机模式”的问题

    今天编译一个STM32程序的时候 遇到了一个问题 编译通不过 定义 sys exit 以避免使用半主机模式 void sys exit int x x x 输出的错误信息是 SYSTEM usart usart c 41 error 260
  • MySQL第二讲 MySQL主从架构搭建

    主从架构意义 通过搭建MySQL主从集群 可以缓解MySQL的数据存储以及访问的压力 1 数据安全 给主服务增加一个数据备份 基于这个目的 可以搭建主从架构 或者也可以基 于主从架构搭建互主的架构 2 读写分离 对于大部分的JAVA业务系统
  • python创意小作品-全国青少年创意编程与智能设计大赛Python创意编程比赛

    全国青少年创意编程与智能设计大赛Python创意编程比赛 一 作品类型 1 数字艺术 通过程序生成和展示视觉艺术 具备创意 美感和互动性 2 互动游戏 各种竞技类 探险类 角色扮演类 球类 棋牌类游戏等等 3 实用工具 有实用价值 能解决学
  • vscode js文件没有代码提示

    原因是 产生问题的原因可能是关闭了单纯的js文件中的javascript的提示 1 右下角设置 2 在上边输入 javascript suggest enabled 效果图
  • VBA:对Excel单元格进行合并操作

    Sub hb Dim n n 3 For i 3 To 18 If Range b i lt gt Range b i 1 Then Range b n b i Merge n i 1 End If Next End Sub
  • 自动化测试和性能测试的异同

    对于那些刚刚接触软件测试行业的小白来说 都会有这样一种错觉 觉得性能测试和自动化测试是差不多的 但是如果深入了解 会发现这两者的区分还是很大的 接下来我们就来详细了解一下自动化测试和性能测试的异同之处 首先两者都有一个共同点 那就是在处理脚
  • mysql 投影,MySQL —— select

    select语句使用详解 select语句是基础操作中比较复杂的部分 我们单拿出来详细解析一下 还是以上一篇文章里的student表为例 select from student 查询student表中所有记录 create table st
  • Clion 使用自己编写的 Makefile编译

    Clion 目前支持使用 cmake 来编译代码 如果习惯了自己写 makefile 那么还需要通过 cmake 的 add custom target 来调用make 命令来实现编译了 参考了http stackoverflow com
  • LoadRunner参数化详解

    LoadRunner参数化详解 距离上次使用loadrunner 已经有一年多的时间了 初做测试时在项目中用过 后面项目中用不到 自己把重点放在了工具之外的东西上 认为性能测试不仅仅是会用工具 最近又想有一把好的利器毕竟可以帮助自己更好的完
  • 明天全国哀悼日,小程序只需三行代码秒变黑白

    明天全国哀悼日 小程序只需三行代码秒变黑白 打开你的 app wxss 文件 在第一行加上 page filter grayscale 100
  • postgresql Insert插入的几个报错

    postgresql Insert插入的几个报错 1 org postgresql util PSQLException 未设定参数值 2 的内容 2 postgresql column reference is ambigious 参考
  • GD32的ADC模块简介

    ADC模块简介 驱动板所使用的主控芯片为GD32C103CB 该芯片总共有2个ADC单元 即ADC0 ADC1 因为驱动板上使用的是LQFP48封装 所以该芯片的每个ADC单元只有10个外部模拟输入通道 并且共用相同的GPIO口 这10个外