STM32F103学习(ADC)

这篇具有很好参考价值的文章主要介绍了STM32F103学习(ADC)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 被保留,否则被清除。重复此过程,直至逼近寄存器最低位。转换结束后,将逐次逼近寄存器中的数字量送入缓冲寄存器,得到数字量的输出。
 

STM32F103学习(ADC)

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功能框图

STM32F103学习(ADC)

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

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

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

(2)输入通道:

STM32F103学习(ADC)

外部的 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。文章来源地址https://www.toymoban.com/news/detail-495871.html

到了这里,关于STM32F103学习(ADC)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32F103——ADC与DMA(按键与光敏电阻)

    ADC的基本定义 Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将 连续变量的模拟信号转换为离散的数字信号的器件。 典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。 我们先来看ADC的工作原理:           通道选择 :

    2024年02月01日
    浏览(90)
  • STM32F103C8T6 ADC输入电流电压特性

    ADC 输入电压范围:0-VDDA(0-3.3V) 输入电流范围:0-220µA 输入电阻:50kΩ 采样频率:0.6-14MHz   官方STM32C103C8系列数据手册: https://www.st.com/en/microcontrollers-microprocessors/stm32f103c8.html

    2024年02月13日
    浏览(38)
  • 基于STM32F103C8T6ADC检测交流电压

    上篇文章写了硬件部分的实现思路,通过采样电阻的到小电压后经过二级放大电路得到单片机可处理的交流电压,此文介绍了如何采用单片机采集交流电压以及stm32ADC外设的使用。首先是硬件电路部分。  电路没有采用核心板,而是直接将芯片焊接到主板上,采用type-c接口供

    2024年02月12日
    浏览(54)
  • Proteus使用STM32F103系列芯片仿真ADC电压总是为0问题解答

    STM32F103芯片有一组ADC参考电压端口  对应到Proteus中,发现原理图上并没有但是在“配置供电网”中存在 可以看出,VSSA与VDDA同为3.3V,这就导致采集到的电压没有0电位参考,所以需要将 VSSA 转移到 GND 组   此时再允许正确的ADC程序就可以采集到正确的电压了      

    2024年02月13日
    浏览(49)
  • [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集

    上一篇:[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 学C语言时,使用的printf()函数,就是通过串口打印出来的。 跟外部器件通信,比如GPS模块、蓝牙模块、wifi模块; 两个开发板之间通信,制定私有协议。 PC电脑通信,使用上位机显示数据或控制下位机。 操作:打

    2024年01月22日
    浏览(65)
  • 【正点原子STM32连载】 第三十章 ADC实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

    1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html 本章,我们将介绍STM32F103的ADC(Analog-to-digital converters,模数转换器)功能。我们通过四个实验来学习

    2024年02月03日
    浏览(62)
  • 基于STM32F103C8T6的高速DMA传输多通道ADC数据

    ADC在STM32系列单片机的使用中占用着很大的比例,常见的案例是通过ADC单次转换电压值,这种方式的缺陷在于转换效率不高。一般的单片机带有ADC1和ADC2两个ADC转换,单次转换需要执行一定的程序,想得到结果需要耗费一些时间在赋值,调用中断上面。在此基础上,为了提高转

    2024年02月11日
    浏览(55)
  • STM32F103学习笔记 | 4.STM32F103芯片介绍

    STM32F1入门学习将使用STM32F103C8T6开发板最小系统板。小R为什么选择它来入门呢?咳咳~首先,ST官方提供强大且易用的标准库函数,使得开发过程方便快捷;其次,网上的教程资料多也十分详细。所以呢,它对高校学生和广大初学者入门都是一个非常好的选择。 开发板的实物图

    2024年04月25日
    浏览(42)
  • STM32F103定时器引脚重定义功能问题处理

    1、概要 在一个项目中,使用STM32F103RCT6单片机,定时器引脚使用的PC6,PC6默认复用定时器为TIM8_CH1,但是由于其他原因,不能使用TIM8_CH1,因此需要使用其重定义功能TIM3_CH1,本文分享了本人在该项目中定时器TIM3引脚复用功能重定义的一些问题及解决过程,希望对大家能有帮助

    2024年02月10日
    浏览(40)
  • 学习记录之openmv和STM32F103的通信

    分上下位机,下位机向上位机发送数据。(上位机控制,下位机收集数据) 可能用到的函数: UART :通用异步 收/发器 USART :通用同步/异步 收/发器 USART_ init() 串口初始化:波特率、数据字长,奇偶校验,硬件流控及收发使能 USART_ Cmd 使能串口                             

    2024年02月14日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包