STM32学习笔记10:ADC基本介绍

芯片型号:STM32F103RC

软件开发包:标准外设库

一、ADC简介

  • ADC(Analog-Digital Converter)模拟-数字转换器
  • ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
  • 12位逐次逼近型ADC,1us转换时间
  • 输入电压范围:0~3.3V,转换结果范围:0~4095
  • 18个输入通道,可测量 16 个外部和 2 个内部信号源
  • 规则组和注入组两个转换单元
  • 模拟看门狗自动监测输入电压范围

二、逐次逼近型ADC

逐次逼近型ADC

STM32 的 ADC 的原理和逐次逼近型 ADC 是一样的。

如图,ADC0809 是一种带有 8 通道模拟开关的 8 位逐次逼近型 A-D 转换器,由 8 通道模拟开关、通道选择逻辑(地址锁存与译码)、8 位 A-D 转换器及三态输出锁存缓冲器组成。

首先是8 通道模拟开关及通道选择逻辑,该部分功能是实现 8 选 1操作。地址锁存允许信号(ALE)用于选择信号 ADDC、 ADDB、 ADDA 的锁存,加至 ADDC、 ADDB、 ADDA 的通道选择信号在 ALE 的作用下送入通道选择逻辑后,对应的通道开关打开。

接着,经过通道开关的未知电压和一个 DAC 输出的已知电压同时输入到电压比较器,进行大小判断。如果 DAC 输出的电压比较大,就调小 DAC 的数据;如果 DAC 输出的电压比较小,就调大 DAC 的数据,直到 DAC 输出的电压和外部通道输入的电压近似相等。这样,DAC 输入的数据就是外部电压的编码数据。

这个电压调节的过程就是由逐次逼近寄存器 SAR 完成的,为了最快找到未知电压的编码,通常使用二分法。比如,这里是 8 位的 ADC,编码就是 0~255,第一次比较,给到一半,即 128,然后看谁大谁小,如果 DAC 电压大了,第二次比较的时候,就给 128 的一半,即 64。如果还大,就给 32 ,如果这次小了,那就给 32 到 64 中间的值,然后继续。。。。。。最后得到的数据用 8 位二进制表示,也就相当于对这 8 位二进制数据从高位到低位依次判断是 1 还是 0 的过程,这就是逐次逼近型名字的来源。

对于 8 位的 ADC,从高位到低位依次判断 8 次就可以得到未知电压的编码,对于 12 位的 ADC,就需要依次判断 12 次。AD 转换结束后,DAC 的输入数据就是未知电压的编码,通过三态输出锁存缓冲器输出,8 位就有 8 根线,12 位就有 12 根线。

图中,EOC(End of Convert)是转换结束信号;START 是开始转换;CLOCK 是 ADC 的时钟;VREF+ 和VREF- 是 DAC 的参考电压,也决定的了 ADC 的输入范围,所以也是 ADC 的参考电压。

三、ADC框图

ADC框图

大致流程:左边是 ADC 的输入通道,包括 16 个 GOIO 口(IN0~IN15)和两个内部通道(温度传感器和 VREFINT)。然后是一个模拟多路开关,用于选择通道。再就是多路开关的输出,进入到模数转换器,进行逐次比较的过程,转换结果放进数据寄存器,通过读取数据寄存器就能得到 ADC 转换的结果。

3.1 电压输入范围

左上角是 VREF-、VREF+、VDDA 、VSSA,其中 VREF-,VREF+ 是 ADC 的参考电压,决定了 ADC 输入电压的范围;VDDA ,VSSA 是 ADC 的供电引脚。

在设计原理图的时候一般把 VSSA 和 VREF- 接地,把 VREF+ 和 VDDA 接 3V3,得到 ADC 的输入电压范围为:0~3.3V。在 64 脚以下的 CPU 中,没有 VREF- 和 VREF+ 这两个引脚, ADC 电压输入范围直接由 VDDA 和 VSSA 决定。

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

3.2 时钟

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

3.3 触发源

触发控制

对于 STM32 的 ADC,触发 ADC 开始转换的信号有两种。一种是软件触发,在程序中通过调用代码启动转换;另一种是硬件触发,注入组和规则组分别有各自的触发源,包括定时器的各个通道、定时器主模式的输出(TRGO)和外部中断。

3.4 输入通道

对于普通的 ADC ,多路开关一般都是只选中一个,即选中某个通道、开始转换、等待转换完成、取出结果。但在 STM32 中,可以同时选中多个通道,而且在转换的时候,还分成了两种组(规则通道组和注入通道组),其中注入通道组一次最多可以选中 4 个通道,规则通道组最多可以选中 16 个通道。

规则通道:按照预设顺序进行转换,适用于常规信号采集。

注入通道:具有更高优先级,可以在规则通道转换过程中插队,适用于需要即时处理的特殊信号。

3.5 数据寄存器

  1. 规则数据寄存器(ADC_DR)

    • ADC_DR 是 32 位寄存器,低16位存储单个 ADC 转换的数据,高16位在 ADC1 双模式下保存 ADC2 转换的数据。

    • 由于1 2 位精度,无论高低 16 位,都无法存储完整的数据,可使用左对齐或右对齐方式存储,由 ADC_CR2 的 ALIGN 位设置。

    • 规则通道最多 16个,但只有一个数据寄存器。多通道转换可能导致数据覆盖,需及时取走数据或使用 DMA 传输至内存。

  2. 注入数据寄存器(ADC_JDRx)

    • 每个通道有对应的寄存器 ADC_JDRx,每个寄存器 32 位,低 16 位存储单个通道的数据,高 16位 保留。

    • 与规则寄存器不同,注入寄存器的每个通道有独立的寄存器,不会出现数据覆盖的问题。

    • 数据存储方式(左对齐或右对齐)可由 ADC_CR2 的 ALIGN 位设置。

3.6 后续操作

数据转换结束后,可以产生中断,中断分为三种:规则通道转换结束中断,注入转换通道转换结束中断,模拟看门狗中断。有相应的中断标志位和中断使能位,可以根据中断类型写相应配套的中断服务程序。

如果开启了模拟看门狗中断,当被 ADC 转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断。

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

四、转换时间

  • AD 转换的步骤:采样,保持,量化,编码
  • STM32 ADC的总转换时间为:TCONV = (采样时间 + 12.5)个ADC周期

例如:当ADCCLK=14MHz,采样时间为1.5个ADC周期,TCONV = 1.5 + 12.5 = 14个ADC周期 = 1μs

五、电压转换

STM32 的 ADC 是 12 位的,所以

量化单位: q = V R E F + − V R E F − 2 12 − 1 q=\frac{V_{REF+}-V_{REF-}}{2^{12}-1} q=2121VREF+VREF

设 D 为 ADC 的转换结果,VIN 为输入电压,则 V I N = D ∗ q V_{IN}=D*q VIN=Dq

六、数据对齐

ADC 的转换结果是 12 位,但是数据寄存器的低 16 位来存储,所以就存在数据对齐的问题。一般,选用右对齐即可。

左对齐的使用场景:如果不想要高分辨率,比如只读取数据的前 8 位,舍弃后 4 位,12 位的 ADC 就退化成了 8 位的 ADC 了。

数据对齐

七、校准

  • ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差
  • 建议在每次上电后执行一次校准
  • 启动校准前, ADC必须处于关电状态超过至少两个ADC时钟周期

八、输入通道(具体)

输入通道

九、转换模式(常用)

9.1 单次转换,非扫描模式

单次转换,非扫描模式

在非扫描的模式下,这个序列表只有第一个序列 1 有效,在序列 1 的位置指定想要转换的通道。比如通道2 ,然后就可以触发转换,ADC 就会对通道 2 的数据进行模数转换。转换完成后,结果放进数据寄存器,同时给 EOC 标志位置 1。通过判断这个 EOC 标志位,就可以知道是否转换完成,如果转换完成,读取数据寄存器的值就得到了转换结果。

9.2 连续转换,非扫描模式

连续转换,非扫描模式

首先,还是非扫描模式,这个序列表只有第一个序列 1 有效。与上一种单次转换不同的是,连续转换在一次转换结束后不会停止,而是立刻开始下一轮的转换,然后一直持续下去。这样只需最开始触发一次,之后就可以一直转换了。

这个模式的好处是,开始转换之后不需要等待一段时间,因为它一直在转换,所以就不需要手动开始转换了,也不用判断是否结束,想要读 AD 值时,直接读取数据寄存器的值就行了。

9.3 单次转换,扫描模式

单次转换,扫描模式

因为是单次转换,所以,每触发一次,转换结束后,就会停止,下次转换就要再次触发。然后它是扫描模式,如图所示,就可以使用这个序列表里的多个序列了。每个位置可以任意指定通道,并且可以重复。在初始化结构体里可以指定通道数目,比如这里指定通道数目为 7,每次触发之后,就会一次对前 7 个位置进行 AD 转换,转换结果都放在数据寄存器里,为了防止数据被覆盖,就需要 DMA 及时将数据转移。7 个通道转换完成之后,产生 EOC 信号,转换结束。

9.4 连续转换,扫描模式

连续转换,扫描模式
这个模式就是在上个模式的基础上,在一次转换后,立刻开始下一次的转换。

参考视频源于B站up主: 野火科技、江协科技
参考文档:《STM32库开发实战指南——基于野火MINI开发板》

  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值