完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
(本文基于STM32F407,部分参数说明参考标准库)
ADC功能框图 我们按框图标号来了解ADC 1.电压输入范围 ADC的输入范围:Vref- < Vin < Vref+ (由图中标注的引脚决定) 一般是把Vssa和Vref-接地,Vdda和Vref+接3.3,这样得到的ADC电压输入就是0~3.3V (这些都是设计原理图时需要考虑的,现成的板子都是设定好的) 若要增大ADC的输入范围,需要外加电压调节电路,将目的电压范围变换的0~3.3伏后再输入。 2.输入通道 STM32的ADC有19个通道,其中前16个通道(0~15)对应的是外部IO口,分为规则通道(最多16路)和注入通道(最多4路)。 规则通道是我们常用的通道,也是用的最多的,注入通道类似于中断,注入通道有输入时,会打断规则通道的转换,先转换注入通道,转换完成后再切换到规则通道的继续转换。 ADC1的通道ADC1_IN16连接的内部VSS,IN17连接的内部参考电压,IN18连接的芯片内部的温度传感器或者备用电源Vbat ADC2、3的三个通道全部连接内部VSS。 3.转换顺序 规则序列。规则序列寄存器有三个:SQR3、SQR2、SQR1。 如果通道16 想第一次转换,那么在SQ1[4:0]写16 即可。 如果通道1 想第8 个转换,则SQ8[4:0]写1即可。 如果通道6 想第10 个转换,则SQ10[4:0]写6 即可。 具体使用多少个通道,由SQR1 的位SQL[3:0]决定,最多16 个通道。 注入序列。注入序列寄存器JSAR只有一个,最多支持四个通道 具体多少个由JSQR 的JL[2:0]决定。 注意: JL<4时,第一次转换的不是JSQR1[4:0],而是JCQRx[4:0] ,x = (4-JL),跟SQR 刚好相反。(即。如果JL=00(1个转换),那么转换的顺序是从JSQR4[4:0]开始) JL=4时,和SQR顺序一样。 4.触发源 ADC转换由ADC控制寄存器2:ADC_CR2的ADON这个位来控制,置1时ADC从掉电模式中唤醒,SWSTART或JSWSTART位置1时启动AD转换。ADON置0时ADC进入掉电模式,此模式下功耗位几微安 同时ADC支持外部触发 ,包括定时器触发和IO触发。触发源由ADC_CR2的EXTSEL[2:0](用于规则通道)和JEXTSEL[2:0](用于注入通道)位来控制。 选好触发源后激活由ADC_CR2的EXTTRIG和JEXTTRIG来控制激活。如果使能了外部触发事件,我们还可以通过设置ADC 控制寄存器2:ADC_CR2 的**EXTEN[1:0]和JEXTEN[1:0]**来控制触发极性,可以有4 种状态,分别是:禁止触发检测、上升沿检测、下降沿检测 以及 上升沿和下降沿均检测。 5.转换时间 ADC时钟 ADC输入时钟由PCLK2经过分频产生,最大值是36MHz,分频因子由ADC_CCR的ADCPRE[1:0]设置,可以设置的分频系数由2、4、6、8 采样时间 ADC需要若干个ADC_CLK周期完成对输入电压的采样,采样的周期数可通过ADC采样时间寄存器ADC_SMPR1和ADC_SMPR2 中的SMP[2:0]位设置。ADC_SMPR2控制的是通道是0-9,ADC_SMPR1的控制的通道是10-17。每个通道可以用不同的时间采样。采样周期最小是3个,及最快的采样速度就是用3个采样周期(1/ADC_CLK) ADC总转换时间公式:T=采样时间+12个周期 也就是说如果我们要最快的采样周期,也就是三个采样周期,那么ADC的转换时间就是15个周期,也就是15个1/ADC_CLK 需要注意的是,采样越快,采样周期越小,精度越低。 6.数据寄存器 规则组的数据放在ADC_DR寄存器 注入组的数据放在JDRx 如果使用双重或三重模式那规则组的数据是存放在通用规则寄存器ADC_CDR的。 规则数据寄存器ADC_DR 该寄存器只有一个,32位,只有低16位有效且只是用于独立模式存放转换完成数据。ADC最大精度12位,ADC_DR是16位有效,因此可以设置数据左对齐或右对齐,对齐方式由ADC_CR2的11位ALIGN设置。(设置左对齐,则数据在DR寄存器[4:15]位,如果设置右对齐,那么数据在DR寄存器[0:11] 位) 注意:通道有16个,但是DR寄存器只有一个,所以会导致数据的相互覆盖。最好是一个通道转换完之后立刻读取出来,或者存放DMA。如果不用DMA,一般需要ADC状态寄存器ADC_SR获取当前ADC的进度状态来进行程序上的控制。 注入数据寄存器ADC_JDRx 最多4个通道,有4个寄存器,每个通道对应着自己的寄存器,不会产生数据覆盖问题。也是32位寄存器,低16位有效,数据同样可以左右对齐,由ADC_CR2的11位ALIGN设置 通用规则数据寄存器ADC_CDR 适用于双重或三重模式。双重指的是ADC1和ADC2同时使用,三重指的是ADC1、2、3同时使用。此情况一般需要配置DMA一起使用。 7.中断 转换结束中断 数据转换结束后产生的中断 模拟看门狗中断 开启该中断后,当ADC转换的模拟电压低于低阈值(由ADC_LTR设置)或者高于高阈值(由ADC_HTR设置)时,就会产生中断 溢出中断 如果发生DMA 传输数据丢失,会置位ADC 状态寄存器ADC_SR 的OVR 位,如果同时使能了溢出中断,那在转换结束后会产生一个溢出中断。 DMA请求 规则和注入通道转换结束后,除了产生中断外,还可以产生DMA 请求,把转换好的数据直接存储在内存里面。 8.电压转换 我们一般在设计原理图的时候会把ADC 的输入电压范围设定在:0~3.3v,如果设置ADC 为12 位的,那么12 位满量程对应的就是3.3V,12 位满量程对应的数字值是:2^12。数值0 对应的就是0V。如果转换后的数值为 X ,X 对应的模拟电压为Y,那么会有这么一个等式成立: 2^12 / 3.3 = X / Y,=> Y = (3.3 * X ) / 2^12。 以上即对框图的解释,下面看一些函数参量 ADC函数参量解释(标准库)
|
|
|
|
只有小组成员才能发言,加入小组>>
3269 浏览 9 评论
2947 浏览 16 评论
3446 浏览 1 评论
8967 浏览 16 评论
4041 浏览 18 评论
1084浏览 3评论
562浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
556浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2294浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1850浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 13:28 , Processed in 0.983126 second(s), Total 45, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号