历史上的今天
返回首页

历史上的今天

今天是:2025年03月06日(星期四)

正在发生

2019年03月06日 | STM32学习笔记:ADC理解

2019-03-06 来源:eefocus

ADC 简介

12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道,可测量来自 16 个外部 源、两个内部源和 VBAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续 采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位数据寄存器中。


ADC 主要特性


可配置 12 位、10 位、8 位或 6 位分辨率 

● 在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断 

● 单次和连续转换模式 

● 用于自动将通道 0 转换为通道“n”的扫描模式 

● 数据对齐以保持内置数据一致性 

● 可独立设置各通道采样时间 

● 外部触发器选项,可为规则转换和注入转换配置极性 

● 不连续采样模式 

● 双重/三重模式(具有 2 个或更多 ADC 的器件提供) 

● 双重/三重 ADC 模式下可配置的 DMA 数据存储 

● 双重/三重交替模式下可配置的转换间延迟 

● ADC 转换类型(参见数据手册) 

● ADC 电源要求:全速运行时为 2.4 V 到 3.6 V,慢速运行时为 1.8 V 

● ADC 输入范围:VREF—  VIN  VREF+ 

● 规则通道转换期间可产生 DMA 请求


单次转换模式

在单次转换模式下,ADC 执行一次转换。CONT 位为 0 时(单次转换模式),可通过以下方式启动此模式: 

● 将 ADC_CR2 寄存器中的 SWSTART 位置 1(仅适用于规则通道) 

● 将 JSWSTART 位置 1(适用于注入通道) 

● 外部触发(适用于规则通道或注入通道) 


完成所选通道的转换之后: 

● 如果转换了规则通道: 

— 转换数据存储在 16 位 ADC_DR 寄存器中 

— EOC(转换结束)标志置 1 

— EOCIE 位置 1 时将产生中断 

● 如果转换了注入通道: 

— 转换数据存储在 16 位 ADC_JDR1 寄存器中 

— JEOC(注入转换结束)标志置 1 

— JEOCIE 位置 1 时将产生中断 

然后,ADC 停止


连续转换模式

在连续转换模式下,ADC 结束一个转换后立即启动一个新的转换。CONT 位为 1 时(连续转换模式),可通过外部触发或将 ADC_CR2 寄存器中的 SWSTRT 位(开始转换规则通道)置 1 来启动此模式(仅适用于规则通道)。 


每次转换之后: 

● 如果转换了规则通道组: 

— 上次转换的数据存储在 16 位 ADC_DR 寄存器中 

— EOC(转换结束)标志置 1 

— EOCIE 位置 1 时将产生中断 

注意:无法连续转换注入通道。连续模式下唯一的例外情况是,注入通道配置为在规则通道之后自动转换(使用 JAUTO 位),请参见自动注入一节。


扫描模式


此模式用于扫描一组模拟通道。 

通过将 ADC_CR1 寄存器中的 SCAN 位置 1 来选择扫描模式。将此位置 1 后,ADC 会扫描 在 ADC_SQRx 寄存器(对于规则通道)或 ADC_JSQR 寄存器(对于注入通道)中选择的 所有通道。为组中的每个通道都执行一次转换。每次转换结束后,会自动转换该组中的下一个通道。如果将 CONT 位置 1(连续转换模式),规则通道转换不会在组中最后一个所选通道处停止,而是再 次从第一个所选通道继续转换。 


如果将 DMA 位置 1,则在每次规则通道转换之后,均使用直接存储器访问 (DMA) 控制器将 转换自规则通道组的数据(存储在 ADC_DR 寄存器中)传输到 SRAM。 


在以下情况下,ADC_SR 寄存器中的 EOC 位置 1: 

● 如果 EOCS 位清零,在每个规则组序列转换结束时 

● 如果 EOCS 位置 1,在每个规则通道转换结束时 

从注入通道转换的数据始终存储在 ADC_JDRx 寄存器中。


不连续采样模式

规则组

可将 ADC_CR1 寄存器中的 DISCEN 位置 1 来使能此模式。该模式可用于转换含有 n (n ≤ 8) 个转换的短序列,该短序列是在 ADC_SQRx 寄存器中选择的转换序列的一部分。可通过写 入 ADC_CR1 寄存器中的 DISCNUM[2:0] 位来指定 n 的值。 

出现外部触发时,将启动在 ADC_SQRx 寄存器中选择的接下来 n 个转换,直到序列中的所 有转换均完成为止。通过 ADC_SQR1 寄存器中的 L[3:0] 位定义总序列长度。 

示例: 

n = 3,要转换的通道 = 0、1、2、3、6、7、9、10 

第 1 次触发:转换序列 0、1、2 

第 2 次触发:转换序列 3、6、7 

第 3 次触发:转换序列 9、10 并生成 EOC 事件 

第 4 次触发:转换序列 0、1、2 

注意:在不连续采样模式下转换规则组时,不会出现翻转。 

转换完所有子组后,下一个触发信号将启动第一个子组的转换。在上述示例中,第 4 次触发 重新转换了第 1 个子组中的通道 0、1 和 2。


可独立设置各通道采样时间

ADC 会在数个 ADCCLK 周期内对输入电压进行采样,可使用 ADC_SMPR1 和 ADC_SMPR2 寄存器中的 SMP[2:0] 位修改周期数。每个通道均可以使用不同的采样时间进行采样。 

总转换时间的计算公式如下: 

Tconv = 采样时间 + 12 个周期 

示例: 

ADCCLK = 30 MHz 且采样时间 = 3 个周期时: 

Tconv = 3 + 12 = 15 个周期 = 0.5 μs(APB2 为 60 MHz 时)


外部触发转换和触发极性

可以通过外部事件(例如,定时器捕获、EXTI 中断线)触发转换。如果 EXTEN[1:0] 控制位 (对于行规转换)或 JEXTEN[1:0] 位(对于注入转换)不等于“0b00”,则外部事件能够 以所选极性触发转换。表 50 提供了 EXTEN[1:0] 和 JEXTEN[1:0] 值与触发极性之间的对应 关系。 


 这里写图片描述 
这里写图片描述 


可通过将 ADC_CR2 寄存器中的 SWSTART(对于规则转换)或 JSWSTART(对于注入转 换)位置 1 来产生软件源触发事件。 

可通过注入触发中断规则组转换。 


注意:可以实时更改触发选择。不过,当更改触发选择时,会在 1 个 APB 时钟周期的时间范围内禁 止触发检测。这是为了避免在转换期间出现意外检测。


数据管理

使用 DMA

由于规则通道组只有一个数据寄存器,因此,对于多个规则通道的转换,使用 DMA 非常有 帮助。这样可以避免丢失在下一次写入之前还未被读出的 ADC_DR 寄存器中的数据。


在使能 DMA 模式的情况下(ADC_CR2 寄存器中的 DMA 位置 1),每完成规则通道组中的 一个通道转换后,都会生成一个 DMA 请求。这样便可将转换的数据从 ADC_DR 寄存器传输 到用软件选择的目标位置。


尽管如此,如果数据丢失(溢出),则会将 ADC_SR 寄存器中的 OVR 位置 1 并生成一个中 断(如果 OVRIE 使能位已置 1)。随后会禁止 DMA 传输并且不再接受 DMA 请求。在这种 情况下,如果生成 DMA 请求,则会中止正在进行的规则转换并忽略之后的规则触发。随后 需要将所使用的 DMA 流中的 OVR 标志和 DMAEN 位清零,并重新初始化 DMA 和 ADC, 以将需要的转换通道数据传输到正确的存储器单元。只有这样,才能恢复转换并再次使能数据传输。注入通道转换不会受到溢出错误的影响。


在 DMA 模式下,当 OVR = 1 时,传送完最后一个有效数据后会阻止 DMA 请求,这意味着 传输到 RAM 的所有数据均被视为有效。


在最后一次 DMA 传输(DMA 控制器的 DMA_SxRTR 寄存器中配置的传输次数)结束时: 

● 如果将 ADC_CR2 寄存器中的 DDS 位清零,则不会向 DMA 控制器发出新的 DMA 请求 

(这可避免产生溢出错误)。不过,硬件不会将 DMA 位清零。必须将该位写入 0 然后 

写入 1 才能启动新的传输。 

● 如果将 DDS 位置 1,则可继续生成请求。从而允许在双缓冲区循环模式下配置 DMA。


要在使用 DMA 时将 ADC 从 OVR 状态中恢复,请按以下步骤操作: 

1.重新初始化 DMA(调整目标地址和 NDTR 计数器) 

2. 将 ADC_SR 寄存器中的 ADC OVR 位清零 

3. 触发 ADC 以开始转换。 

/********************************************************************************************/ 

了解了以上的ADC的理解,对于编程来说是非常有用的。


推荐阅读

史海拾趣

Applied Micro Circuits (MACOM)公司的发展小趣事

MACOM公司上市后,成功募得了充足的资金,使其财务能力得到了显著增强。这使得公司能够有更多的资源进行研发、生产和市场推广,进一步巩固其在电子行业的地位。同时,上市也为MACOM带来了更广泛的投资者关注和市场认可,为其未来的发展提供了有力支持。

Hartmann Codier GmbH公司的发展小趣事

在某一时期,MACOM宣布收购Applied Micro Circuits Corp.,这一举动标志着公司在业务领域上的又一次重要扩张。收购完成后,MACOM迅速进行了业务分拆,将不感兴趣的服务器芯片业务与自身的主营业务进行剥离。这一战略调整使得MACOM能够更专注于自身擅长的领域,同时也为被剥离的业务提供了更好的发展机会。

FerriShield公司的发展小趣事

在国内市场取得一定成绩后,FerriShield开始将目光投向国际市场。公司积极参加国际电子展,展示其先进的技术和产品。同时,FerriShield还与国际知名电子品牌建立了合作关系,为其提供定制化的电磁屏蔽解决方案。通过这些努力,FerriShield的产品逐渐打入国际市场,并赢得了良好的口碑。

Hamlin ( Littelfuse )公司的发展小趣事

FerriShield公司起源于一家小型电子材料研究实验室。创始人Dr. Smith是一位材料科学家,他发现了一种新型的铁磁屏蔽材料,能够有效减少电子设备中的电磁干扰。这一发现引起了业界的广泛关注。Dr. Smith决定将其商业化,并创立了FerriShield公司。凭借这种创新材料,FerriShield在成立初期就获得了多项专利,并成功吸引了第一轮风险投资。

Digital Core Design公司的发展小趣事

1996年,Core Design推出了其标志性作品《古墓丽影》。这款游戏以其独特的女主角Lara Croft和精心设计的游戏世界吸引了全球玩家的关注。Lara Croft成为游戏界最具代表性的女性角色之一,而《古墓丽影》系列也成为Core Design最成功的游戏系列之一。这款游戏的成功不仅为Core Design带来了巨大的经济收益,也使其在全球游戏市场上赢得了极高的声誉。

芯茂微电子公司的发展小趣事

芯茂微电子始终坚持以创新驱动发展,不断投入研发资源,推动技术创新和产品升级。同时,公司积极寻求与国内外知名企业和研究机构的合作,共同开展技术研发和市场拓展。通过与合作伙伴的紧密合作,芯茂微电子在集成电路设计、制造工艺、封装测试等方面取得了重要进展,进一步提升了公司的核心竞争力和市场地位。

问答坊 | AI 解惑

我想问下为什么要在单片机的i/o0上加上啦电阻

为啥要在i/op.0上的管脚加上拉电阻??…

查看全部问答>

急问:MP3电路原理图!请教高手,帮我分析下这个MP3原理图中各个组成部分的原理、处理器的功能。

http://blog.ednchina.com/Upload/Blog/2007/3/30/826adf84-7829-4de7-8065-2149d80d0c85.jpg 请高手帮我分析下这个MP3原理图中各个组成部分的原理、处理器的功能。 谢谢!…

查看全部问答>

求助Could not find file 'C:\WINCE500\PBWorkspaces\e\RelDir\Geode_x86_Release\MyDri

Could not find file \'C:\\WINCE500\\PBWorkspaces\\e\\RelDir\\Geode_x86_Release\\MyDriver.exe\' on disk 在生成操作系统镜像的时候出现的问题 怎么解决啊 是编译的过程中出现的问题 …

查看全部问答>

弱弱的问一个问题,Windows中的WinInet API在Window Mobile中能用吗?

例如HttpSendRequest、InternetReadFile之类的函数。 如果不可以,是否手机就不能通过http协议请求某个服务器的数据?…

查看全部问答>

2812的flash怎么写不进去了

我的2812芯片flash写入了一次之后,就没办法写了怎么回事的?CCS连接之后点on-chip flash programmer,对话框全是灰色的,只有一个onlock按钮可以点,但是点了之后弹出unlock failed,CCS提示解锁失败,设备锁定。 但是上次烧写的时候我并没有改动 ...…

查看全部问答>

mtd-utils的nandwrite问题

在移植mtd-utils时遇到个问题,就是使用nandwrite写入文件系统的映像(jffs2格式)时,出现:Unknown flash (not normal NAND)错误,通过查看源码,这个错误是在程序中检测flash的页面大小处打印的,  /* Make sure device page sizes are val ...…

查看全部问答>

大家有谁知道430F1612 驱动在哪里有啊?

大家有谁知道430F1612 驱动在哪里有啊? USB的 发到我邮箱里吧,或者QQ上也行。谢谢。我的QQ78468469…

查看全部问答>

求教 DSP 外扩 FLASH 的问题

我正在学DSP,有几个问题: 关于C5416 外扩的FLASH型号该怎么选择,做音频处理的话,一般用什么型号的FLASH? C5416如何跟FLASH连接? 如何读取数据及存储数据? 希望和各位DSP的大牛们能帮帮我,非常感谢!…

查看全部问答>

新手求助!关于uCOS移植到S3C44B0X问题 不甚感激

本人刚开始学uCOS系统,现在有一块S3C44B0X的板子,想把uCOS移植进去,于是在网上找了一些基于S3C44B0X的uCOS源码,但是不知道如何运用编译器把源码处理,自然也就不知道怎么把内核系统烧进板子,现在不知道如何下手,而且在网上找的资料都没有运用 ...…

查看全部问答>

Pca脉冲次数采集求助????

Pca采集的问题: 单片机C8051F120 我用Pca采集脉冲传感器个数,为什么进入单片机只有一个脉冲,而采集出来的是很多个呢?? Pca初始化: PCA0L    = 0x00;        PCA0H    = 0x00;    &nb ...…

查看全部问答>