当前位置: 首页 > news >正文

ADC--模拟量转换成数字量

目录

一、ADC硬件组成七大部分:

二、单次转换,连续转换,不连续采样模式,扫描模式区别

1、举例(5种组合情况)

2、模拟看门狗中断的作用:

三、MCU使用ADC步骤


一、ADC硬件组成七大部分:

①输入电压:

(1) ADC 输入范围 VREF–≤VIN≤VREF+

② 输入通道

(1) ADC 的输入通道, ADC1 有 16 个外部通道和 3 个内部通道,而 ADC2和 ADC3 只有有 16 个外部通道。 ADC1 的外部通道是通道 17、通道 18 和通道 19,分别连接到内部温度传感器、内部 Vrefint和 Vbat,具体的外部通道对应的GPIO引脚,要看对应的芯片手册,比如STM32F407的ADC通道:

③ 转换顺序

(1)规则组:每个外部通道,都可以放入规则组的任何序列,由SQR1、 SQR2 和 SQR3 寄存器决定,转换顺序由序列组决定,从小到大,序列组的长度由SQL 寄存器决定。

(2)注入组

转换顺序由序列组决定,从小到大;但注入组可以中断到规则组先转换。

④ 触发源

(1)软件触发(常用):通过写 ADC_CR2 寄存器的 ADON 这个位来控制,写 1 就开始转换,写 0 就停止转换,

(2)硬件触发:定时器事件,外部中断。

⑤ 转换时间

(1) STM32F407 的 ADC 总转换时间的计算公式如下: 

TCONV = 采样时间(至少三个时钟周期) + 12 个周期(逐次逼近型转换决定)

ADC的时钟频率:不高于36M Hz

(2)由于ADC在STM32中是挂载在APB2总线上的,所以ADC得时钟是由PCLK2(72MHz)经过分频得到的。

⑥ 数据寄存器

ADC 转换完成后的数据输出寄存器。根据转换组的不同,规则组的完成转换的数据输出到ADC_DR 寄存器,注入组的完成转换的数据输出到 ADC_JDRx 寄存器:

(1)规则组:16个规则通道共用一个ADC_DR 寄存器保存转换结果,所以多通道转换要用扫描模式,并且要开DMA保存转换结果。

(2)注入组:4个注入通道分别对应四个ADC_JDRx 寄存器保存转换结果。

⑦ 中断

(1)规则和注入组转换结束时能产生中断;

(2)当模拟看门狗状态位被设置时也能产生中断 ;

(3)规则和注入组转换结束时还可以产生 DMA 请求,把转换好的数据存储在内存里面,防止读取不及时数据被覆盖。

二、单次转换,连续转换,不连续采样模式,扫描模式区别

1、举例(5种组合情况)

用ADC1 规则通道的顺序为CH0,CH1,CH2,CH3,

(1) 在单次转换模式下,不启动SCAN模式

启动ADC1,则

a、开始转换CH0(ADC_SQR的第一通道)

b、转换完成后停止,等待ADC的下一次启动,继续从第一步开始转换

(2) 在单次转换模式下,启动SCAN模式

启动ADC1,则

a、 开始转换CH0

b、转换完成后自动开始转换CH1

c、转换完成后自动开始转换CH2

d、 转换完成后自动开始转换CH3

e、转换完成后停止,等待ADC的下一次启动下一次ADC启动后从第一步开始转换

(3) 在连续转换模式下,不启动SCAN模式

启动ADC1,则

a、开始转换CH0(ADC_SQR的第一通道)

b、转换完成后回到第一步,继续转换

(4) 在连续转换模式下,启动SCAN模式下:

启动ADC1,则

a、开始转换CH0

b、转换完成后自动开始转换CH1

c、转换完成后自动开始转换CH2

d、转换完成后自动开始转换CH3

e、转换完成后返回第一步,继续转换

(5)不连续采样模式举例:

规则组:

ADC多通道必须开启扫描模式此模式必须搭配DMA功能才能实现ADC的数据处理,注意;另外DMA只能用于ADC的规则序列,不能用于注入序列

2、模拟看门狗中断的作用:

(1)掉电检测

(2)程序可以基于各通道的转换结果进行合法性或安全性监测,此时使用ADC模拟看门狗功能就很方便。我们可以先让模拟看门狗做第一步把关,只有出现异常数据时才去进一步检查确认。

(3)模拟看门狗可以设置为多通道和单通道模式,即可以通过设置相应的寄存器位来选择某一通道或多通道打开模拟看门狗检测:

4、多通道扫描模式开启DMA?

三、MCU使用ADC步骤

相关文章:

  • Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制)
  • Mongodb 文本检索
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • html从零开始8:css3新特性、动画、媒体查询、雪碧图、字体图标【搬代码】
  • 【C语言】指针练习篇(下),深入理解指针---指针练习题【图文讲解,详细解答】
  • Python循环语句——for循环的嵌套使用
  • Java学习第十六节之创建对象内存分析和小结类与对象
  • Java实现停车场收费系统 JAVA+Vue+SpringBoot+MySQL
  • Godot 游戏引擎个人评价和2024年规划(无代码)
  • QtApplets-线程池
  • MinGW/MSYS/GCC/GNU/MSVC/Clang/LLVM都是什么
  • 防火墙HA详解
  • 问题:内存时序参数 CASLatency 是() #学习方法#微信#微信
  • 防御保护--内容安全过滤
  • C++ 音视频原理
  • axios 和 cookie 的那些事
  • gitlab-ci配置详解(一)
  • Git初体验
  • IOS评论框不贴底(ios12新bug)
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • js如何打印object对象
  • Linux快速复制或删除大量小文件
  • MySQL几个简单SQL的优化
  • 后端_ThinkPHP5
  • 浅谈web中前端模板引擎的使用
  • 使用parted解决大于2T的磁盘分区
  • 我的zsh配置, 2019最新方案
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 移动端唤起键盘时取消position:fixed定位
  • 用简单代码看卷积组块发展
  • 怎么把视频里的音乐提取出来
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​一些不规范的GTID使用场景
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • $L^p$ 调和函数恒为零
  • (1)STL算法之遍历容器
  • (31)对象的克隆
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (十八)三元表达式和列表解析
  • (一)基于IDEA的JAVA基础10
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .Net 垃圾回收机制原理(二)
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 生成二级域名
  • .Net6使用WebSocket与前端进行通信
  • @Validated和@Valid校验参数区别