STM32F407--ADC简介
ADC,即Anolog to Digital Converter,模拟信号到数字信号的转换。
模拟信号:连续的信号,就像连续函数一样的
数字信号:离散的信号,数字信号,就像点一样。
举例:若我们要将3.3V的交流电压,正弦信号转化为数字信号,若3.3V用数字信号100表示,则1.65V则用熟悉信号50表示。
一. 采集信号范围:0-3.3V
ADC 输入范围为: VREF- ≤ VIN ≤ VREF+。由 VREF-、 VREF+ 、 VDDA 、 VSSA、这四个外部引脚决定.在设计时,已经将VREF-与VSSA(模拟地)接在一起,而VREF+=3.3V,因此输入范围为0-3.3V。
问题:若想要测超出这个范围的电压怎么办?举例,测量-10V —10V
对输入信号进行外部处理。
-10V->0V 10V->3.3V
电阻的确定:先确定其中两个,再确定最后一个。
二. 3路18通道
- STM32F407有三路ADC,分别是ADC1,ADC2,ADC3,每一路有18个通道,有16个外部可以看到的通道,有两个内部通道。但是并不是说有三路,每路18个通道就总共有48个(不同)通道,三路有些通道是一样的,加起来外部总的有23个通到可以使用。(野火版的)
(野火版F407 ADC与I/O的对应)
(正点原子版F407与I/O的对应)
对于ADC1来说,只有PA6,PB0,PB1,PC2没有被复用过,可以纯净的用作ADC1,其他的I/O口已经在其他地方使用,可能采集的信号会有杂波,使用被复用过的I/O口时,可以在使用之前做一个小测试,将I/O单独接入0V或者3.3V,观察能否采集到这两个极值,如果能的话,就说明基本不会产生杂波影响。 - 通道类型:规则通道和注入通道
什么是注入通道,什么是规则通道?
注入通道:可以理解为插入,插队的意思,是一种不安分的通道。它是一种在规则通道转换的时候强行插入要转换的一种。如果在规则通道转换过程中,有注入通道插队,那么就要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程。这点跟中断程序很像。因此注入通道只有在规则通道存在时才会出现。
规则通道就是很规矩的意思,我们平时一般使用的就是这个通道,或者应该说我们用到的都是这个通道
三 .通道的优先顺序
通道的优先顺序由一下寄存器控制,详见STM32F4XX中文参考手册 - 规则序列通道的优先顺序
说明:SQR1的SQL决定需要控制的通道数,取值范围在1-16。若你想让通道0优先顺序为1,则你在SQR3的SQ1[4:0]位写入0x00就好了。 - 注入通道的优先顺序
四.触发源:告诉ADC开始采集的这个信号就叫触发
详见STM32F4XX中文参考手册:
五.转换时间 - 转换时间=采样周期(自己设置,最大为3,也是最快的)+分辨率个周期(12位分辨率就是12个周期)
ADC的周期:ADC_ CLK(挂在APB2总线下) : ADC模拟电路时钟,最大值为36M,由PCLK2提供,还可分频,2/4/6/8 , ADC_ CCR的ADCPRE[1:0]设置。PCLK2= 84M。有关ADC_ CLK时钟的具体描述参考datasheet:5.3.21
数字时钟: RCC APB2ENR ,用于访问寄存器 - 采样时间
采样时间: ADC需要若干个ADC_ CLK周期完成对输入的模拟量进行采样,采样的周期数可通过ADC采样时间寄存器ADC SMPR1和ADC_ _SMPR2中的SMP[2:0]位设置,
ADC_ SMPR2控制的是通道0~9,ADC_ SMPR1控制的是通道10~17。每个通道可以分别用不同的时间采样。其中采样周期最小是3个,即如果我们要达到最快的采样, 那么应该设置采样周期为3个周期,这里说的周期就是1/ADC_ CLK。
举例:最短的转换时间:Tconv=采样时间+12个周期(12)
PCLK2=84M,ADC_CLK=84/4=21M
Tconv =3+12 = 15周期 = 15/21us=0.71us
六.转换方式
七.数据寄存器
一切准备就绪后,ADC转换后的数据根据转换组的不同,规则组的数据放在ADC_ DR寄存器,注入组的数据放在JDRx。如果是使用双重或者三重模式那规矩组的数据:是存放在通用规则寄存器ADC_ CDR内的。
- 规则数据寄存器:ADC_ DR寄存器
1.1. 只有16位有效数据,用于存放单个ADC模式转换完成数据
1.2. 根据ADC_CR2:ALIGN位选择数据对齐方式
1.3. 只有一个规则通道数据寄存器,由于数据都是存放在这个数据寄存器中,如果不及时取走,数据就会被覆盖,因此多通道的时候最好使用中断或着DMA 模式。我们可以将每一个通道的数据放入不同数组,再通过DMA得到数据。 - 注入数据寄存器
2.1. 只有16位有效数据,用于存放单个ADC模式转换完成数据
2.2. 根据ADC_CR2:ALIGN位选择数据对齐方式
2.3. 有四个这样的寄存器 - ADC_CDR
1-32位有效,双重或者三重ADC使用,必须配合DMA
八.ADC的中断
涉及到的寄存器:
1 ADC _ SR , ADC_ CR1
2 ADC_ HTR , ADC_ LTR
看门狗中断是用来保护模拟信号范围的。举例:若采集到的信号电压范围为1V-3V,那么我们可以设置阈值上限电压为3V,阈值下限电压为1V,这样超出这个数据范围之外的错误电压信号就可以报警产生中断了。
模拟看门狗如何保护多个通道:
九.模拟量计算:
怎么根据数据量算出模拟量
1-电压输入范围为: 0~3.3V
2-分辨率为12位
3-最小精度为: 3.3/2^12
4-设数字量为X ,则有模拟量Y =(3.31 2^12)*X
本文为观看野火视频学习总结文章