历史上的今天

今天是:2024年09月06日(星期五)

正在发生

2019年09月06日 | STM32L4系列 ADC基本原理

发布者:王大雷 来源: eefocus关键字:STM32L4系列  ADC  基本原理 手机看文章 扫描二维码
随时随地手机看文章

一、ADC简介

Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。


STM32ADC简介

STM32 拥有 1~3 个 ADC,ADC1和ADC2紧密耦合,可在双模式下工作(ADC1为主模式)。每个ADC由一个12位逐次逼近的模数转换器组成。每个ADC有多达19个多路复用通道。各种通道的A/D转换可以在单一、连续、扫描或不连续模式下执行。ADC的结果是存储在左对齐或右对齐的16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。


ADC工作框图(根据STM32F1的ADC框图介绍STM32L4系列的ADC,大部分相同,有些寄存器有所变动)


下面根据上图一一介绍

STM32L4ADC寄存器表

1.电压输入范围:

ADC输入范围为: VREF- <= VIN <= VREF+。由 VREF-、VREF+ 、VDDA 、VSSA、这四个外部引脚决定。一般把 VSSA 和 VREF-接地,把 VREF+和 VDDA 接 3V3,得到ADC 的输入电压范围为:0~3.3V。如果我们想让输入的电压范围变宽,去到可以测试负电压或者更高的正电压,我们可以在外部加一个电压调理电路,把需要转换的电压抬升或者降压到 0~3.3V,这样 ADC 就可以测量了。不要直接将高于 3.3V 的电压接到 ADC 管脚上,那样将可能烧坏芯片。


2.通道转换顺序


信道选择(SQRx、JSQRx)


每个ADC最多有19个多路复用通道:5个来自GPIO板的快速模拟输入(ADCx_INP/INN[1..5]),来自GPIO PADS的多达11个慢模拟输入(ADCx_INP/INN[6..16])


ADC连接到以下内部模拟输入:内部参考电压(VREFINT)连接到ADC1_INP0/INN0。内部温度传感器(VTS)连接到ADC1_INP17/INN17。vbat监控通道(vbat/3)连接到ADC1_INP18/INN18。DAC1内部通道连接到ADC1_INP/INN17。


规则通道组序列寄存器有 3 个,分别是 SQR3、 SQR2、 SQR1。 SQR3 控制着规则序列中的第一个到第六个转换,对应的位为:SQ1[4:0]~SQ6[4:0],第一次转换的是位 4:0 SQ1[4:0],如果通道 3 想第一次转换,那么在 SQ1[4:0]写 3即可。SQR2 控制着规则序列中的第 7 到第 12 个转换,对应的位为:SQ7[4:0]~SQ12[4:0],如果通道 1 想第 8 个转换,则 SQ8[4:0]写 1 即可。SQR1 控 制 着 规 则 序 列 中 的 第 13 到 第 16 个 转 换 , 对 应 位 为 :SQ13[4:0]~SQ16[4:0],如果通道 6 想第 10 个转换,则 SQ10[4:0]写 6 即可。具体使用多少个通道,由 SQR1 的位 L[3:0]决定,最多 16 个通道。


注入通道组序列寄存器只有一个,是 JSQR。它最多支持 4 个通道,具体多少个由 JSQR 的 JL[2:0]决定。注意:


当 JL[1:0] = 3(有 4 次注入转换)时, ADC 将按以下顺序转换通道:JSQ1[4:0]、JSQ2[4:0]、 JSQ3[4:0] 和 JSQ4[4:0]。


当 JL = 2 (有 3 次注入转换)时,ADC 将按以下顺序转换通道:JSQ2[4:0]、JSQ3[4:0] 和 JSQ4[4:0]。


当 JL = 1 (有 2 次注入转换)时,ADC 转换通道的顺序为:先是 JSQ3[4:0],而后是 JSQ4[4:0]。


当 JL = 0(有 1 次注入转换)时, ADC 将仅转换 JSQ4[4:0] 通道。


如果在转换期间修改 ADC_SQRx 或 ADC_JSQR 寄存器,将复位当前转换并向ADC 发送一个新的启动脉冲,以转换新选择的通道组。


3.通道转换标志


规则通道组由多达16个转换组成。规则通道及其在转换序列中的顺序在ADC寄存器中选择。规则通道组中的转换总数必须写入ADC SQR1寄存器的L[3:0]位中。


注入通道组由最多4个转换组成。注入通道及其在转换序列中的顺序必须在ADC JSQR寄存器中选择。注入组中的转换总数必须写入ADC JSQR寄存器的L[1:0]位中。


规则通道组:从名字来理解,规则通道就是一种规规矩矩的通道,类似于正常执行的程序。通常我们使用的都是这个通道。注入通道组:从名字来理解,注入即为插入,是一种不安分的通道,类似于中断。当程序正常往下执行时,中断可以打断程序的执行。同样如果在规则通道转换过程中,有注入通道插队,那么就要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程。


4.触发源


选择好输入通道,设置好转换顺序,接下来就可以开始转换。要开启 ADC转换,可以直接设置 ADC 控制寄存器 ADC_CR的 ADEN 位为 1,即使能 ADC。设置ADC_CFGR的EXTSEL[3:0]选择触发规则组转换开始的外部事件,设置ADC_JSQR的JXTSEL[3:0]选择触发注入组转换开始的外部事件。如果使能了外部触发事件,可以设置 ADC 控制寄存器ADC_CFGR的EXTEN[1:0]:规则通道的外部触发启用和极性选择,ADC_JSQR的JEXTEN[1:0]注入通道的外部触发启用和极性选择,,可以有 4 种状态,分别是:禁止触发检测、上升沿检测、下降沿检测以及上升沿和下降沿均检测。


5.时钟


三个ADC的输入时钟相同,可以在两个不同的时钟源之间选择。ADC时钟来自系统时钟或PLLSAI1输出(A)。它可以达到80兆赫,并且可以通过以下预分频器值进行划分:1、2、4、6、8、10、12、16、32、64128或256,通过配置ADC1_CCR寄存器。它与AHB时钟不同步。或者,ADC时钟可由ADC总线接口的AHB时钟除以可编程系数(1、2或4)。此可编程系数是使用ADC1_CCR中的CKMODE位字段配置的。如果编程因子为“1”,则AHB预分频器必须设置为“1”。


ADC时钟可以是特定的时钟源。


时钟源:


–系统时钟


–PLLSAI1(单ADC实现)要选择此方案,必须重置ADCX_CCR寄存器的位CKMODE[1:0]。


PRESC[3:0]: ADC预分频


时钟对于所有的ADC来说都是通用的。0000:输入ADC时钟不分频,0001:输入ADC时钟除以2,0010:输入ADC时钟除以4,0011:输入ADC时钟除以6,0100:输入ADC时钟除以8,0101:输入ADC时钟除以10,0110:输入ADC时钟除以12,0111:输入ADC时钟除以16,1000:输入ADC时钟除以32,1001:输入ADC时钟除以64,1010:输入ADC时钟除以128,1011:输入ADC时钟除以256,其他:保留


ADC预分频器仅当CKMODE[1:0]=0b00时才应用该值


CKMODE[1:0]:ADC时钟模式


这些位由软件设置和清除,以定义ADC时钟方案(主ADC和从ADC共用):


00:ck_adcx(x=123)(异步时钟模式)。


01:HCLK/1(同步时钟模式)。只有当AHB时钟预分频器设置为1(RCC寄存器中的hpre[3:0]=0xxx)并且系统时钟有50%的占空比时,才能启用此配置。


10:HCLK/2(同步时钟模式)


11:HCLK/4(同步时钟模式)


PLLSAI1 configuration register (RCC_PLLSAI1CFGR)


PPLADC1CLK。此输出可以选择为ADC时钟。这些位只能在PLLSAI1被禁用时写入。PLLADC1CLK输出时钟频率=VCOSAI1频率/PLLSAI1R与PLLSAI1R=2, 4, 6,或8。


00:PLLSAI1R=2,01:PLLSAI1R=4,10:PLLSAI1R=6,11:PLLSAI1R=8


位24 PLLSAI1REN:PLLSAI1 PLLADC1CLK输出启用


通过软件设置和重置以启用PLLSAI1的PLLADC1CLK输出(用作ADC时钟)。当不使用PLLSAI1的PLLADC1CLK输出时,PLLSAI1REN的值应为0。


0:PLLADC1CLK输出禁用,1:PLLADC1CLK输出启用


ADC时钟还可由ADC总线接口的AHB时钟可编程系数(1、2或4)得出。在此模式下,可根据位CKMODE[1:0])选择可编程系数(/1、2或4)。要选择此方案,ADCX UCR寄存器的位CKMODE[1:0]必须与“00”不同。注:对于选项2,只有当AHB预分频器设置为1(RCC_CFGR寄存器中的hpre[3:0]=0xxx)时,才能使用1的预定标系数(ckmode[1:0]=01)。选项1)具有达到最大ADC时钟频率的优势,无论已选择AHB时钟方案。ADC时钟最终可除以以下比率:1、2、4、6、8、12、16、32、64、128、256;使用配置有位预分频器ADCx_CCR寄存器。不要让ADC时钟超过14MHz,否则可能不准。


6.数据寄存器


ADC 转换后的数据根据转换组的不同,规则组的数据放在 ADC_DR 寄存器内,注入组的数据放在 JDRx 内。


位31:16保留,必须保持在复位值。


位15:0 RData[15:0]:规则数据转换


这些位是只读的。它们包含上次转换的规则通道的转换结果。数据左对齐或右对齐。STM32的ADC 是 12 位转换精度,而数据寄存器是 16 位,所以 ADC在存放数据的时候就有左对齐和右对齐区分。如果是左对齐,AD 转换完成数据存放在 ADC_DR 寄存器的[4:15]位内;如果是右对齐,则存放在 ADC_DR 寄存器的[0:11]位内。具体选择何种存放方式,需通过 ADC_CR2 的 11 位 ALIGN 设置。


在规则组中,含有 16 路通道,对应着存放规则数据的寄存器只有 1 个,如果使用多通道转换,那么转换后的数据就全部挤在 ADC_DR 寄存器内,前一个时间点转换的通道数据,就会被下一个时间点的另外一个通道转换的数据覆盖掉,所以当通道转换完成后就应该把数据取走,或者开启 DMA 模式,把数据传输到内存里面,不然就会造成数据的覆盖。 最常用的做法就是开启 DMA 传输。如果没有使用 DMA 传输,我们一般通过 ADC 状态寄存器 ADC_SR 获取当前 ADC 转换的进度状态,进而进行程序控制。


而在注入组中,最多含有 4 路通道,对应着存放注入数据的寄存器正好有 4个,不会跟规则寄存器那样产生数据覆盖的问题。


7.ADC中断


ADC可生成中断:在ADC通电后,当ADC准备就绪时(标记ADRDY),规则组转换结束时(标志EOC),在规则组转换序列结束时(标志EOS),注入组转换结束时(Flag Jeoc),注入组转换序列结束时(Flag Jeos),发生模拟看门狗检测时(标记AWD1、AWD2和AWD3),当采样阶段结束时(标志EOSMP),发生数据溢出时(标志OVR),当注入的序列上下文队列溢出时(标记JQOVF)

通道采样时间


每个通道可以用不同的采样时间进行采样,采样时间可使用ADC_SMPR1和ADC寄存器中的SMP[2:0]位进行编程。因此可以选择


在以下采样时间值中:


•SMP=000:2.5 ADC时钟周期


•SMP=001:6.5 ADC时钟周期


•SMP=010:12.5 ADC时钟周期


•SMP=011:24.5 ADC时钟周期


•SMP=100:47.5 ADC时钟周期


•SMP=101:92.5 ADC时钟周期


•SMP=110:247.5 ADC时钟周期


•SMP=111:640.5 ADC时钟周期


ADC 要完成对输入电压的采样需要若干个 ADC_CLK 周期,计算公式:


TCONV = 采样时间 + 12.5   (ADC 周期)


例子:


当fadc_clk=80 MHz且采样时间为2.5 ADC时钟周期时:tconv=(2.5+12.5)ADC时钟周期=15 ADC时钟周期,T=1/f,15*(1/80M)=187.5 ns(对于快速通道)


ADC采样数值与实际电压值转换

STM32的ADC是12位逐次逼近型的模拟数字转换器,也就是说ADC模块读到的数据是12位的数据。。二进制的12位可表示0-4095个数,也就是说转换器通过采集转换所得到的最大值是4095,111111111111 = 4095,0v-3.3v平均分成4096份。给出任意X坐标值,求Y值

DMA(Direct Memory Access,直接内存存取) ,用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。DMA是直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU任何干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。

关键字:STM32L4系列  ADC  基本原理 引用地址:STM32L4系列 ADC基本原理

上一篇:STM32L4 PWM蜂鸣器
下一篇:STM32 环境光传感器ADC采样

推荐阅读

电视和手机产业,就像“围城”,双方企业对属地互相觊觎。 8月初,有消息称华为、OPPO、vivo等手机厂商将会“跨界”进入电视领域,华为也重新设置了电视小组的项目,分别对电视的硬件和UI层进行研究,和上游面板商进行接触,未来侧重于5G和8K显示的融合,定位于高端人工智能电视产品。 半年之内,第二次传出HOV入局电视领域。而2013年至今,华为等手机厂...
自AirPods发布以来,它不仅让用户感受到了无线耳机带来的便捷性,而且还带动了真正无线立体声耳机(True Wireless Stereo,TWS)的发展,并在今年迎来爆发式增长,2020年TWS耳机预估货量达到1.5亿台,年增长高达52%。随着Apple、Samsung和Sony等公司相继推出TWS耳机,TWS耳机已经成为当前无线耳机市场最流行的产品形态。现有技术中,为了保证TWS耳机的独...
据外媒AndroidHeadlines消息,日前一家名为“Rollme” 的公司宣布将推出全球首款无边框智能手表。  该智能手表的名称将为Rollme Hero,将于不久后面世。有消息人士分享了该手表的两张图片,从图片上来看,它将提供“完整的无边框操作体验”。 Rollme Hero由金属制成,外壳将与显示屏呈90度夹角。该手表的右侧有单个物理按钮,该...
  智能蓄电池充放电测试仪可在蓄电池离线状态下,作为放电负载,通过连续调控放电电流,实现设定值的恒流放电。在放电时,当蓄电组端电压或单体电压,跌至设定下限值、或设定的放电时间到、或设定的放电容量到,仪器自动停止放电,并记录下所有有价值的、连续的过程实时数据。  那蓄电池充放电测试仪在测试之前,需要做好充足的蓄电池充放电测试仪接线准备...

史海拾趣

问答坊 | AI 解惑

程序控制电压源及其电磁兼容性设计

摘要:介绍了几种典型的程序控制电压源及其电磁兼容性设计。在一些电子仪器设备中,经常需要性能优良的可调整的电压源或电流源,以往大多采用运算放大器来完成。现在,随着集成A/D,D/A转换器精度的提高,已广泛地采用A/D,D/A转换器构成精密的程序 ...…

查看全部问答∨

抢答器电路图

问的人满多的 特收集一些到这里…

查看全部问答∨

USB控制器芯片按功能分类的特性比较

引   言         通用串行总线USB是以主机为中心的分层星型总线拓扑结构实现与外设的连接,软件比较复杂,对功率要求也比较高,所以在推出后的一段时期内,USB在基于PC的系统中得到了广泛应用,而在嵌入 ...…

查看全部问答∨

经过本人近一个月的辛苦努力终于攻克了西门子200四级密码的破解难题,相信这

经过本人近一个月的辛苦努力终于攻克了西门子200四级密码的破解难题,相信这 也是让很多人头痛的问题!经过近百次的实验成功率100%,且不会伤害PLC .对于一 至三级就更容易了!同时还可破解现在世面上的大部分PLC,包括西门子300的解密. 如果有这方面 ...…

查看全部问答∨

诚心请教open at 开发问题,请各位大侠进来看看。

     小女子刚接触无线通信,用Q24PL模块,做一些应用程序,手里有一本书,<Q2406无线CPU嵌入式开发技术>。在open at 的开发环境下编程,以前只会纯粹的C,现在想用VC编,生成目标文件下载到模块里实现,打电话、发短信、G ...…

查看全部问答∨

列表框listbox一旦出现滚动条就会重新绘制窗口?

我做WIN32下的GUI开发, 用SendMessage(hwndList,LB_ADDSTRING,0,(LPARAM)"1") 我循环添加列表框字符串了几次.发现只要让列表框listbox出现滚动条,就会重新绘制整个窗口(激发WM_PAINT消息)? 怎么解决这个问题,又可以有滚动条,又不用绘制整个 ...…

查看全部问答∨

eboot~~~

在eboot里修改了BootloaderMain ();这个函数,然后重新编译Public的内容以及工程后,在串口输出的信息始终不变。 请问要怎么修改才会变?…

查看全部问答∨

C语言学习建议

初学者最重要的是学习解决问题的方法,思路在此是最重要的,求得简单的答案对自己的成长其实很不利,初学者应求渔而非鱼。初学者写的代码最大的问题是思维混乱或理解存在偏差,虽然往往伴有很多初级错误,但初级错误不是制约自己成长的主要因素,思 ...…

查看全部问答∨

卷和带封装的区别

有哪位能告诉我卷和带两种封装有什么区别,感激不尽。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved