STM32F103学习(ADC)

2023-05-16

1、定义

ADC(Analog-to-Digital Converter  模数转换器 )。是指将连续变化的模拟信号转换为离散的数字信号的器件。

2、原理

stm32上的ADC外设采用逐次比较的方式。

逐次比较型ADC工作原理可以类比天平称物体。比如我们假定要称一个21g的物体,我们有16g、8g、4g、2g、1g的砝码。一开始我们并不知道物体的重量x,于是用16g的砝码与之比较,发现16g<x,于是16g的砝码便保留下来。再将8g的砝码放上去,发现16g+8g=24g>x,于是便不保留8g的砝码。依此类推,便可以得出待测物体的质量。

逐次逼近法转换过程是:初始化时将逐次逼近寄存器各位清零;转换开始时,先将逐次逼近寄存器最高位置 1,送入 DIA 转换器,经 DIA 转换后生成的模拟星送入比较器,称为 Vo,与送入比较器的待转换的模拟量 V 进行比较,若 Vo<Vi,该位 1 被保留,否则被清除。然后再置逐次逼近寄存器次高位为 1,将寄存器中新的数字量送 DIA 转换器,输出的 Vo 再与 V 比较,若 Vo<Vi,该位 1 被保留,否则被清除。重复此过程,直至逼近寄存器最低位。转换结束后,将逐次逼近寄存器中的数字量送入缓冲寄存器,得到数字量的输出。
 

3、ADC参数 

(1)分辨率:ADC能够分辨量化的最小信号的能力。最大输入电压/(2^ADC位数-1)

(2)采样时间:采样我理解为将输入电压固定下来的时间,在stm32中可以自己设置,最小为1.5个周期。(采样时间是你通过寄存器告诉STM32采样模拟量的时间,设置越长越精确)

(3)总转换时间:

AD转换的步骤分别是:采样、保持、量化、编码。其中采样和保持可以看作一个过程,量化和编码可以看作一个过程。量化和编码实际上就是ADC逐次比较的过程,一般ADC的位数越多,所花费的时间就越长。采样和保持是为了保证在量化和编码的过程中输入电压的变化不会过大。在量化和编码之前,需要添加采样-保持电路,即需要设置一个采样开关,打开开关一段时间来收集电压(可以用一个小容量的电容来存储这个电压),存储完成之后断开开关,再进行之后的AD转换。这样就可以保证在量化和编码器件始终保持电压基本不变。这个采样时间是比较长的。所以AD转换所花费的时间可以分为:采样-保持电路的采样时间 + 量化和编码花费的时间。
 

  • STM32 ADC总转换时间 = 采样时间 + 12.5个ADC周期

4、ADC功能框图

将ADC的功能框图分为7个部分

(1) 确定电压输入范围:ADC 输入范围为:VREF-≤ VIN ≤ VREF+。

如果我们想让输入的电压范围变宽,去到可以测试负电压或者更高的正电压,我们可 以在外部加一个电压调理电路,把需要转换的电压抬升或者降压到 0~3.3V,这样 ADC 就 可以测量。

(2)输入通道:

外部的 16 个通道在转换的时候又分为规则通道和注入通道,其中规则通道最多有 16 路,注入通道最多有 4 路。

(3)转换顺序

·设置规则序列,要设置通道的转换顺序以及转换通道的个数

·注入通道是一种在规则通道转换的时候强行插入要转换的一种。如果在规则通道转换过程中,有注入通道插队,那么就 要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程。 (最多支持四通道)

设值注入序列,要设置顺序以及个数。

(4)触发源

·通道选好了,转换的顺序也设置好了,那接下来就该开始转换了。ADC 转换可以由 ADC 控制寄存器 2: ADC_CR2 的 ADON 这个位来控制,写 1 的时候开始转换,写 0 的时候停止转换。

·ADC 还支持触发转换,这个触发包括内部定时器触发和外部IO触发。

触发源需要选择。触发源有很多,具体选择哪一种触发源,由 ADC 控制寄存器 2:ADC_CR2 的 EXTSEL[2:0]和 JEXTSEL[2:0]位 来控制 。EXTSEL[2:0]用于选择规则通道的触发源,JEXTSEL[2:0]用于选择注入通道的触发源。

选定好触发源之后,触发源是否要激活,则由 ADC 控制寄存器 2:ADC_CR2 的 EXTTRIG 和 JEXTTRIG 这两位来激活。

总结该部分主要包括触发源的选择与激活

(5)转换时间

ADC 输入时钟 ADC_CLK 由 PCLK2 经过分频产生,最大是 14M。

采样时间,需设置。

ADC 的转换时间跟 ADC 的输入时钟和采样时间有关,公式为:Tconv = 采样时间 + 12.5 个周期。当 ADCLK = 14MHZ (最高),采样时间设置为 1.5 周期(最快),那么总 的转换时间(最短)Tconv = 1.5 周期 + 12.5 周期 = 14 周期 = 1us。

一般我们设置 PCLK2=72M,经过 ADC 预分频器能分频到最大的时钟只能是 12M,采 样周期设置为 1.5 个周期,算出最短的转换时间为 1.17us,这个才是最常用的。

(6)数据寄存器

一切准备就绪后,ADC转换后的数据根据转换组的不同,规则组的数据放在 ADC_DR 寄存器,注入组的数据放在 JDRx。

ADC 规则组数据寄存器 ADC_DR 只有一个,是一个 32 位的寄存器,低 16 位在单 ADC 时使用,高 16 位是在 ADC1 中双模式下保存 ADC2 转换的规则数据,双模式就是 ADC1 和 ADC2 同时使用。在单模式下,ADC1/2/3 都不使用高 16 位。因为 ADC 的精度是 12 位, 无论 ADC_DR 的高 16 或者低 16 位都放不满,只能左对齐或者右对齐。(需设置数据对齐方式

规则通道可以有 16 个这么多,可规则数据寄存器只有一个,如果使用多通道转换,那 转换的数据就全部都挤在了 DR 里面,前一个时间点转换的通道数据,就会被下一个时间 点的另外一个通道转换的数据覆盖掉,所以当通道转换完成后就应该把数据取走,或者开 启 DMA 模式,把数据传输到内存里面,不然就会造成数据的覆盖。最常用的做法就是开启 DMA 传输。

ADC 注入组最多有 4 个通道,刚好注入数据寄存器也有 4 个,每个通道对应着自己的 寄存器,不会跟规则寄存器那样产生数据覆盖的问题。ADC_JDRx 是 32 位的,低 16 位有 效,高 16 位保留,数据同样分为左对齐和右对齐。

(7)中断

数据转换结束后,可以产生中断,中断分为三种:规则通道转换结束中断,注入转换 通道转换结束中断,模拟看门狗中断。其中转换结束中断很好理解,跟我们平时接触的中断一样,有相应的中断标志位和中断使能位,我们还可以根据中断类型写相应配套的中断服务程序。

规则和注入通道转换结束后,除了产生中断外,还可以产生 DMA 请求,把转换好的 数据直接存储在内存里面。要注意的是只有 ADC1 和 ADC3 可以产生 DMA 请求。

电压转换:2^12 / 3.3 = X / Y,=> Y = (3.3 * X ) / 2^12。

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

STM32F103学习(ADC) 的相关文章

  • STM32f103时钟系统简介

    主要是讲解怎么看懂这个图 一 内置RC振荡器 xff08 HSI RC xff09 频率是约为8MHz xff0c 因为其频率不是很稳定 其可作为系统时钟的一个选项 二 晶振振荡器 xff08 HSE OSC xff09 从图中可以看到其是
  • STM32F407-ADC(模数转换)

    一 硬件 STM32F407开发板 xff0c 杜邦线 通过通道获取板载电压的模拟输入信号转变为数字信号 xff0c 并通过转换变成电压 STM32F407有3个ADC xff0c 每个ADC有16个通道 xff0c 下表为ADC通道对应的
  • STM32F103 USART1串口重映射功能的实现

    STM32F103 USART1串口重映射实现方法代码 转载请注明出处 xff1a https blog csdn net qq 43400642 article details 84838405 我们知道 xff0c F103的usart
  • STM32F103笔记(二)——GPIO原理

    GPIO的工作原理与两个实验实例 一 STM32F103 GPIO说明1 stm32 GPIO引脚的主要功能2 GPIO相关配置寄存器的简介3 STM32F103 GPIO的8种工作方式4种输入模式4种输出模式 二 点亮LED实例 xff0
  • STM32F103移植FreeRTOS警告记录

    1 xff1a 新建MDK工程 xff0c 选择文件存放路径 xff0c 选择芯片型号 xff0c 创建一个USER文件 xff0c 复制自动创建的文件到USER文件中 xff0c 关闭程序 创建一个OBJ目标文件夹 xff0c 打开软件选
  • STM32F103 移植FreeRTOS (附FreeRTOS源码和移植工程)

    文章目录 前言1 移植FreeRTOS2 测试FreeRTOS3 移植工程 前言 该篇环境为 xff1a STM32F103ZET6 Keil 库函数版本 F4 F7 H7移植同理 FreeRTOS源码 xff1a 链接 xff1a htt
  • MPU9250的MPL移植_HAL库(以STM32F103为主控)

    准备材料 xff1a 驱动库 xff1a motion driver 6 12 硬件 xff1a 正点原子MINI STM32f103RCT6硬件IIC PB8 PB9 GY 91模块 看图可知AD0接地 xff0c 地址是0X68 硬件连
  • STM32F103C8T6 ADC功能

    12位逐次逼近型ADC 1us转换时间 输入电压0 3 3v和转化范围0 2 12 1 xff08 0 4095 xff09 成线性关系 2个ADC资源 xff0c ADC1和ADC2 xff0c 10个外部通道 有两种转换单元组 xff1
  • 16位精度 ADC 选型

    ADS8320 售价 xff1a 人民币25 40元 ADS8320 16 Bit High Speed 2 7 V to 5 V microPower Sampling Analog to Digital Converter 1Featu
  • 关于ADC的笔记1

    ADC xff0c 全称Anlog to Digital Converter xff0c 模拟 数字转换器 是指将连续变量的模拟信号转换为离散的数字信号的器件 xff0c 我们能通过ADC将外界的电压值读入我们的单片机中 常见的ADC有两种
  • 模数转换ADC模块

    通用基础知识 ADC模块是嵌入式应用中重要的组成部分 xff0c 是嵌入式系统与外界连接的纽带 xff0c 是在测控系统中的重要内容 ADC模块 xff1a 即模数转换模块 AD转换模块 xff0c 功能是将电压信号转换为相应的数字信号 实
  • STM32F103驱动LD3320语音识别模块

    STM32F103驱动LD3320语音识别模块 LD3320语音识别模块简介模块引脚定义STM32F103ZET6开发板与模块接线测试代码实验结果 LD3320语音识别模块简介 基于 LD3320 xff0c 可以在任何的电子产品中 xff
  • stm32f103c8t6+dht11测量温湿度(单总线协议)

    核心问题 如何根据电路和时序来写程序 接口协议 单总线 意味着一根数据线实现接收和发送 所以相应的GPIO口要设置为2种模式 输入 输出 电路 如果没有在电路中作5k上拉 可以把GPIO模式设置成GPIO Mode IPU实现软件上拉的效果
  • STM32F103移植FreeRTOS必须搞明白的系列知识---3(堆栈)

    STM32F103移植FreeRTOS必须搞明白的系列知识 1 Cortex CM3中断优先级 STM32F103移植FreeRTOS必须搞明白的系列知识 2 FreeRTOS任务优先级 STM32F103移植FreeRTOS必须搞明白的系
  • 关于OELD屏显示电池电量的简易方法

    如何采集电源电压大家可能都熟悉 stm32的ADC DMA能很方便迅速的帮我们采集到自己想要的电压数据 使用DMA进行数据搬运也能很好的减轻CPU的一部分压力 但是这样只是第一步 数据 用户想看到的有时候并不是数据 他们想要更直观方便的看到
  • STM32进入Standby模式并唤醒

    项目背景 设备具备电池 电源适配器两种供电方式 实现出厂 和电池一并密封装盒 时最低功耗 即进入待机模式 到用户开始使用时需要手动磁棒唤醒 开始复位运行 在检测到设备是交流供电时 设备全速运行 检测到是电池供电时 定时采集数据 采集完毕进入
  • 负载均衡入门

    提纲 ADC 行业现状 ADC 原理 ADC 的实现方式 为什么是 ADC 而不是负载均衡 功能的扩展 解决了什么问题 可用性 Availability 伸缩性 Scalability 性能 End user performance 数据中
  • STM32F103移植FreeRTOS必须搞明白的系列知识---2(FreeRTOS任务优先级)

    STM32F103移植FreeRTOS必须搞明白的系列知识 1 Cortex CM3中断优先级 STM32F103移植FreeRTOS必须搞明白的系列知识 2 FreeRTOS任务优先级 STM32F103移植FreeRTOS必须搞明白的系
  • 深入浅出《Delta-Sigma Data Converters》(可下载)

    在数字信号处理领域 数据转换器是实现模拟与数字世界之间无缝转换的关键组件 而在这个子领域中 Delta Sigma Data Converter s 一书以其全面和深入的内容 为工程师 学者甚至爱好者们提供了一个极其宝贵的资源 今天将为大家
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C

随机推荐