《CH03-08-STM32F40x的ADC模块原理.pptx》由会员分享,可在线阅读,更多相关《CH03-08-STM32F40x的ADC模块原理.pptx(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式系统原理与开发教程STM32F40 x的ADC模块原理主讲人:赖树明东莞理工学院01ADC模块介绍02ADC模块框架分析03ADC模块寄存器分析04ADC模块应用示例0101ADC模块介绍ADC概念ADC关键特征ADC模块介绍 ADC概述01MCU只能处理数字信号,但是生活中事物都是以模拟信号形式存在,无法直接测量,比如光照强度,需要通过ADC将这些模拟量转换成具体的数字量,供用户去查看以及CPU进行处理使用。概述逐次逼近型ADC:将输入的模拟信号和参考电压作多次比较,使转换后得到的数字量在数值上逐次逼近输入模拟量对应的值。并联比较型ADC:使用多个比较器,各量级同时比较,转化速度快,但
2、成本较高(n位ADC需要2n-1个比较器)。积分型ADC:将输入模拟信号转化成与之成正比的时间间隔,然后利用计数器对固定频率的时钟脉冲进行计数,计数器的值就是转换结果。ADC模块介绍 ADC模块专业术语01STM32F407芯片中有多个12位逐次逼近型ADC,具有多19 个复用通道。包含16 个外部源、两个内部源以及VBAT通道。注入组和规则组:STM32的ADC可以把A/D转换分成两组,一组叫规则组,另外一组叫注入组,可以把它们理解为优先级不相同的两个组,规则组转换是低优先级,注入组通道转换是高优先级,当注入组通道转换触发时,可以打断正在转换的规则组的A/D转换通道。单次不扫描:对转换的通道
3、只转换一次,并且只转换一个。单次扫描:对转换的所有通道都只转换一次。连续不扫描:对转换的通道连续转换,但是只转换同一个通道。连续扫描:对所有需要转换的通道都转换一次后再接着下一轮转换。术语解说ADC模块介绍 ADC模块特征01可配置12位、10位、8位或6位分辨率 在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断 单次和连续转换模式 用于自动将通道 0 转换为通道“n”的扫描模式 可独立设置各通道采样时间 外部触发器选项,可为规则转换和注入转换配置极性 不连续采样模式 规则通道转换期间可产生 DMA 请求双重/三重模式(具有2个或更多ADC的器件提供)双重/三重ADC模式下可配置
4、的DMA数据存储 双重/三重交替模式下可配置的转换间延迟 ADC 电源要求:全速运行时为2.4V到3.6V,慢速运行时为1.8V ADC 输入范围:VREFVINVREF+关键特征0202ADC模块框架分析ADC模块介绍 ADC框架02nSTM32F40 x每个ADC模块具有多达19个复用通道,可测量来自16个外部源:ADCx_IN0ADCx_IN15、2个内部源:VREFINT和内部的湿度传感器、VBAT通道的信号。这19路ADC通道可以划分为注入通道和规则通道,注入通道可以同时分配4个通道,而规则通道可以分配16通道。n启动注入组ADC通道转换的信号可以是定时器TIM1TIM5、TIM8的
5、内部输出信号以及EXTI_15外部中断信号中的一个信号和使能JEXTEN1:0两位控制;启动规则组ADC通道转换的信号可以是定时器TIM1TIM5、TIM8的内部输出信号及EXTI_11外部中断信号中的一个信号和软件使能EXTEN1:0两位控制。n当注入组ADC通道转换完成后会把每个通道的转换结果分别保存在各自的16位数据寄存器中,同时在会设置EOC和JEOC标志位;当规则组通道转换完成后,会把转换结果存放到同一个数据寄存器中(注意:这时会覆盖上一个通道或者上一次转换的结果),同时会设置EOC标志位,编程时可以通过判断这些位来确认ADC是否已经转换完成,如果转换完成,则可去读取转换的结果,AD
6、C模块介绍 ADC框架02nADC编程可以使用查询方式或中断方式来获利转结果,如果使能了对应的中断信号EOCIE、JEOCIE,转换完成的信号还会被传给NVIC内核中断控制器,利用这个特点可以实现编程时使用中断方式识别ADC是否已经转换完成,而不需要周期性查询状态标志位。n注意:规则通道组所有通道是共用一个数据寄存器的,当使用多通道扫描转换时,每转换一路信号,必须及时取出转换的结果,否则数据寄存器时的内容会被新的转换结果所覆盖,n规则通道转换期间可产生DMA请求,规则通道结合DMA模块的实现转换结果自动搬运,使用ADC模块可以实现更高效的A/D转换,nADC的19个通道还可以设置为模拟看门狗通
7、道,当使能模拟看门功能时,指定通道的转换结果不在模拟看门狗的上限和下限范围内时,会硬件设置模拟看门狗AWD标志,如果使能了模拟看门狗中断功能位AWVDIE,信号会被输送到NVIC内核中断控制器模块,如果NVIC对应的ADC中断使能了,则会产生中断信号,利用这个功能,可以自动检测外部模拟信号。ADC模块介绍 ADC框架02n采样时间:ADC会在数个ADCCLK周期内对输入电压进行采样,可使用ADC_SMPR1和ADC_SMPR2寄存器中的SMP2:0位修改周期数。每个通道均可以使用不同的采样时间进行采样。n数据对齐:STM32F4xx系列芯片中的ADC都是12bitADC,但是数据寄存器位16b
8、it,用户可以自定义选择右对齐或左对齐,一般采用右对齐方式。n外部触发转换和触发极性:可以通过外部事件(例如,定时器捕获、EXTI 中断线)触发转换。如果 EXTEN1:0 控制位(对于行规转换)或 JEXTEN1:0 位(对于注入转换)不等于“0b00”,则外部事件能够以所选极性触发转换。STM32F4xx系列芯片ADC具有16中触发转换方式。n nSTM32F4STM32F4系列芯片系列芯片ADCADC功能很强大,初学者先学习功能很强大,初学者先学习基本的软件触发单通道转换的方式,再学习其他基本的软件触发单通道转换的方式,再学习其他的模式。的模式。0303ADC模块寄存器ADC模块寄存器分
9、析03位5OVR:来及时取出数据,溢出时硬件置1,需软件清零。溢出检测仅在DMA=1或EOCS=1时使能。位2JEOC:组内所有注入通道转换结束时,硬件置1,需软件清零。0:转换未完成;1:转换已完成。位1EOC:规则组通道转换结束后,硬件将该位置1。通过软件或通过读取ADC_DR寄存器将该位清零。根据EOCS不同,含义不相同:EOCS=0:规则组中每个通道转换结束:0:转换未完成;1:转换已完成。EOCS=1:规则组中所有通道转换结束0:转换序列未完成;1:转换序列已完成。位0AWD:模拟看门狗标志:当转换电压超过在ADC_LTR和ADC_HTR寄存器中编程的值时,硬件将该位置1。但需要通过
10、软件清零。0:未发生模拟看门狗事件;1:发生模拟看门狗事件。n nADCADC状态寄存器状态寄存器(ADC_SR)(ADC_SR)(只对比较常用(只对比较常用域域进行说明)进行说明)ADC模块寄存器分析03位25:24RES1:0:分辨率,通过软件写入这些位可选择转换的分辨率。00:12位(15 ADCCLK周期);01:10位(13 ADCCLK周期);10:8位(11 ADCCLK周期);11:6位(9 ADCCLK周期)。位23AWDEN:规则通道上的模拟看门狗使能,此位由软件置1和清零。0:在规则通道上禁止模拟看门狗;1:在规则通道上使能模拟看门狗。位22JAWDEN:注入通道上的模拟
11、看门狗使能,此位由软件置1和清零。0:在注入通道上禁止模拟看门狗;1:在注入通道上使能模拟看门狗。位15:13DISCNUM2:0:不连续采样模式通道计数用于定义在接收到外部触发后于不连续采样模式下转换的规则通道数。000:1个通道;001:2个通道;.111:8个通道。n nADCADC控制寄存器控制寄存器1(ADC_CR1)1(ADC_CR1)(只对比较常用域进行说明)(只对比较常用域进行说明)ADC模块寄存器分析03位12JDISCEN:注入通道的不连续采样模式0:禁止注入通道的不连续采样模式;1:使能注入通道的不连续采样模式。位11DISCEN:规则通道的不连续采样模式0:禁止规则通道
12、的不连续采样模式;1:使能规则通道的不连续采样模式。位10JAUTO:注入组自动转换软件将该位置1和清零可在规则组转换后分别使能/禁止注入组自动转换。0:禁止注入组自动转换;1:使能注入组自动转换。位9AWDSGL:在扫描模式下使能单一通道上的看门狗软件将该位置1和清零可分别使能/禁止通过AWDCH4:0位确定的通道上的模拟看门狗。0:在所有通道上使能模拟看门狗;1:在单一通道上使能模拟看门狗。n nADCADC控制寄存器控制寄存器1(ADC_CR1)1(ADC_CR1)(只对比较常用域进行说明)(只对比较常用域进行说明)ADC模块寄存器分析03位8SCAN:扫描模式通过ADC_SQRx或AD
13、C_JSQRx寄存器选择的输入。0:禁止扫描模式;1:使能扫描模式。位7JEOCIE:注入通道的中断使能 0:禁止JEOC中断;1:使能JEOC中断。位6AWDIE:模拟看门狗中断使能 0:禁止模拟看门狗中断;1:使能模拟看门狗中断。位5EOCIE:EOC中断使能 0:禁止EOC中断;1:使能EOC中断。位4:0AWDCH4:0:模拟看门狗通道选择位00000:ADC模拟输入通道0;00001:ADC模拟输入通道1;.01111:ADC模拟输入通道15;10000:ADC模拟输入通道16;10001:ADC模拟输入通道17;10010:ADC模拟输入通道18。n nADCADC控制寄存器控制寄
14、存器1(ADC_CR1)1(ADC_CR1)(只对比较常用域进行说明)(只对比较常用域进行说明)ADC模块寄存器分析03位30SWSTART:通过软件将该位置1可开始转换,而硬件会在转换开始后将该位清零。0:复位状态;1:开始转换规则通道。注意:该位只能在ADON=1时置1,否则不会启动转换。位29:28EXTEN:规则通道的外部触发使能通过软件将这些位置1和清零可选择外部触发极性和使能规则组的触发。00:禁止触发检测;01:上升沿上的触发检测;10:下降沿上的触发检测;11:上升沿和下降沿上的触发检测。位27:24EXTSEL3:0:为规则组选择外部事件这些位可选择用于触发规则组转换的外部事
15、件。0000:定时器1 CC1事件;0001:定时器1 CC2事件;.其他值请阅读参考芯片手册n nADCADC控制寄存器控制寄存器2(ADC_CR2)2(ADC_CR2)(只对比较常用(只对比较常用域域进行说明)进行说明)ADC模块寄存器分析03位22JSWSTART:开始转换注入通道,转换开始后,软件将该位置1,而硬件将该位清零。0:复位状态;1:开始转换注入通道。注意:该位只能在ADON=1时置1,否则不会启动转换。位21:20JEXTEN:注入通道的外部触发使能通过软件将这些位置1和清零可选择外部触发极性和使能注入组的触发。00:禁止触发检测;01:上升沿的触发检测;10:下降沿的触发
16、检测;11:上升沿和下降沿的触发检测。位19:16JEXTSEL3:0:为注入组选择外部事件,用于触发注入组转换的外部事件。0000:定时器1 CC4事件;0001:定时器1 TRGO事件;.其他值请阅读参考芯片手册n nADCADC控制寄存器控制寄存器2(ADC_CR2)2(ADC_CR2)(只对比较常用(只对比较常用域域进行说明)进行说明)ADC模块寄存器分析03位11ALIGN:数据对齐,一般比较常用的是右对齐方式,这样读取出来的结果可以直接使用。0:右对齐;1:左对齐。12位数据右对齐如右图所示:12位数据左对齐如右图所示:说明:从数据存储的位置来看,使用右对齐方式比较符合我们使用习惯
17、。n nADCADC控制寄存器控制寄存器2(ADC_CR2)2(ADC_CR2)(只对比较常用(只对比较常用域域进行说明)进行说明)ADC模块寄存器分析03位10EOCS:结束转换选择0:在每个规则转换序列结束时将EOC位置1。溢出检测仅在DMA=1时使能。1:在每个规则转换结束时将EOC位置1,使能溢出检测。位1CONT:连续转换,该位置1时,转换将持续进行,直到该位清零。0:单次转换模式;1:连续转换模式。位0ADON:A/D转换器开启/关闭 ;0:禁止ADC转换并转至掉电模式;1:使能ADC。n nADCADC控制寄存器控制寄存器2(ADC_CR2)2(ADC_CR2)(只对比较常用(只
18、对比较常用域域进行说明)进行说明)ADC模块寄存器分析03位10EOCS:结束转换选择0:在每个规则转换序列结束时将EOC位置1。溢出检测仅在DMA=1时使能。1:在每个规则转换结束时将EOC位置1,使能溢出检测。位1CONT:连续转换,该位置1时,转换将持续进行,直到该位清零。0:单次转换模式;1:连续转换模式。位0ADON:A/D转换器开启/关闭 ;0:禁止ADC转换并转至掉电模式;1:使能ADC。n nADCADC控制寄存器控制寄存器2(ADC_CR2)2(ADC_CR2)(只对比较常用(只对比较常用域域进行说明)进行说明)ADC模块寄存器分析03ADC可以为每一个通道设置独立的转换时间
19、,ADC_SMPR1寄存器用来设置通道1018的转换时间,每3个位设置一个通道转换时间,单位是ADC转换时钟周期。位26:0SMPx2:0:通道X采样时间选择通过软件写入这些位可分别为各个通道选择采样时间。在采样周期期间,通道选择位必须保持不变。000:3个周期;001:15个周期;.111:480个周期。总转换时间的计算公式为:Tconv=采样时间+12个周期示例:ADCCLK=30MHz且采样时间等于3个周期时,Tconv的总转换时间如下:Tconv=3+12=15个周期=0.5sn nADCADC采样时间寄存器采样时间寄存器1(ADC_SMPR1)1(ADC_SMPR1)(只对比较常用(
20、只对比较常用域域进行说明)进行说明)ADC模块寄存器分析03这个寄存器和ADC_SMPR1寄存器作用相同,区别是它用来设置通道09的转换时间。位29:0SMPx2:0:通道X采样时间选择,通过软件写入这些位可分别为各个通道选择采样时间。在采样周期期间,通道选择位必须保持不变。000:3个周期;001:15个周期;010:28个周期;011:56个周期;100:84个周期;101:112个周期;110:144个周期;111:480个周期。n nADCADC采样时间寄存器采样时间寄存器2 2(ADC_SMPR(ADC_SMPR2 2)(只对比较常用(只对比较常用域域进行说明)进行说明)ADC模块寄
21、存器分析03规则组总共有16个通道,并且转换顺序可以自由设置,该寄存器用来设置规则通道中要转换的总数量,以及第1316次转换对应的ADC通道编号.位23:20L3:0:规则通道序列长度,即规则组中需要进行多少个通道转换。0000:1次转换;0001:2次转换;.1111:16次转换。位19:15SQ164:0:规则序列中的第16次转换,配置第16次转换对应的ADC通道编号。位14:10SQ154:0:规则序列中的第15次转换,配置第15次转换对应的ADC通道编号位9:5SQ144:0:规则序列中的第14次转换,配置第14次转换对应的ADC通道编号位4:0SQ134:0:规则序列中的第13次转换
22、,配置第13次转换对应的ADC通道编号n nADCADC规则序列寄存器规则序列寄存器1(ADC_SQR1)1(ADC_SQR1)(只对比较常用(只对比较常用域域进行说明)进行说明)ADC模块寄存器分析03该寄存器作用和上一个ADC_SQR1大致相同,它是用来设置第712次转换对应的ADC通道编号.位23:20L3:0:规则通道序列长度,即规则组中需要进行多少个通道转换。0000:1次转换;0001:2次转换;.1111:16次转换。位19:15SQ164:0:规则序列中的第16次转换,配置第16次转换对应的ADC通道编号。位14:10SQ154:0:规则序列中的第15次转换,配置第15次转换对
23、应的ADC通道编号位9:5SQ144:0:规则序列中的第14次转换,配置第14次转换对应的ADC通道编号位4:0SQ134:0:规则序列中的第13次转换,配置第13次转换对应的ADC通道编号n nADCADC规则序列寄存器规则序列寄存器2 2(ADC_SQR(ADC_SQR2 2)(只对比较常用(只对比较常用域域进行说明)进行说明)ADC模块寄存器分析03该寄存器作用和上一个ADC_SQR1大致相同,它是用来设置第712次转换对应的ADC通道编号。位29:26SQ124:0:规则序列中的第12次转换,配置第12次转换对应的ADC通道编号。位24:20SQ114:0:规则序列中的第11次转换,配
24、置第11次转换对应的ADC通道编号。位19:15SQ104:0:规则序列中的第10次转换,配置第10次转换对应的ADC通道编号。位14:10SQ94:0:规则序列中的第9次转换,配置第9次转换对应的ADC通道编号。位9:5SQ84:0:规则序列中的第8次转换,配置第8次转换对应的ADC通道编号。位4:0SQ74:0:规则序列中的第7次转换,配置第7次转换对应的ADC通道编号。n nADCADC规则序列寄存器规则序列寄存器2 2(ADC_SQR(ADC_SQR2 2)(只对比较常用(只对比较常用域域进行说明)进行说明)ADC模块寄存器分析03该寄存器作用和上一个ADC_SQR2大致相同,它用来设
25、置第15次转换对应的ADC通道编号.位29:25SQ64:0:规则序列中的第6次转换,配置第6次转换对应的ADC通道编号。位24:20SQ54:0:规则序列中的第5次转换,配置第5次转换对应的ADC通道编号。位19:15SQ44:0:规则序列中的第4次转换,配置第4次转换对应的ADC通道编号。位14:10SQ34:0:规则序列中的第3次转换,配置第3次转换对应的ADC通道编号。位9:5SQ24:0:规则序列中的第2次转换,配置第2次转换对应的ADC通道编号。位4:0SQ14:0:规则序列中的第1次转换,配置第1次转换对应的ADC通道编号。n nADCADC规则序列寄存器规则序列寄存器3 3(A
26、DC_SQR(ADC_SQR3 3)(只对比较常用(只对比较常用域域进行说明)进行说明)ADC模块寄存器分析03每个流入通道有一个独立的数据寄存器存放转换结果,这样就可以避免不几流入通道转换结果覆盖的情况。位15:0JDATA15:0:注入数据这些位为只读。它们包括来自注入通道X的转换结果。数据有左对齐和右对齐两种方式。n nADCADC注入数据寄存器注入数据寄存器x(ADC_JDRx)(x=1.4)x(ADC_JDRx)(x=1.4)ADC模块寄存器分析03位15:0DATA15:0:规则数据这些位为只读。它们包括来自规则通道的转换结果。和注入数据寄存器一样,数据也有有左对齐和右对齐两种方式
27、。注意:所以规则通道转换都是共用该数据寄存器,因此使用编程时要注意及时取出转换结果。n nADCADC规则数据寄存器规则数据寄存器(ADC_DR)(ADC_DR)ADC模块寄存器分析03位23TSVREFE:温度传感器和VREFINT使能0:禁止温度传感器和VREFINT通道;1:使能温度传感器和VREFINT通道。注意:对于STM32F42x和STM32F43x器件,当TSVREFE位置1时必须禁止VBATE。两个位同时置1时,仅进行VBAT转换。位22VBATE:VBAT使能,通过软件将该位置1和清零可使能/禁止VBAT通道。0:禁止VBAT通道;1:使能VBAT通道。位17:16ADCP
28、RE:配置ADC的时钟频率,该时钟为所有ADC所共用。00:PCLK2 2分频;01:PCLK2 4分频,STM32F407工程默认配置PCLK2是84M;10:PCLK2 6分频;11:PCLK2 8分频。位2 说明:其他DMA相关的域以及多重ADC使用比较复杂,涉及知识点很多,需要时再针对性学习。n nADCADC通用控制寄存器通用控制寄存器(ADC_CCR)(ADC_CCR)(只对比较常用域进行说明)(只对比较常用域进行说明)0404ADC模块示例硬件分析软件分析软件编程原理图说明利用光敏电阻,调节电压,并且利用STM32F407 的ADC 采集电压,再进行处理。如下所示:原理图分析uA
29、DC的基准电压为3.3V;u模拟信号接在PA4上,上面具有ADC1/2_IN4功能;uPA4引脚上接着一个光敏电阻,根据光照强度不同,电阻值发生变化导致输出电压不相同,将这个模拟量送入STM32F407的ADC模块进行测量转换成数字量。STM32F40X ADC模块示例 硬件分析04设计思路初始化PA4:开PA组时钟、复用功能配置为模拟功能;初始化ADC:开ADC1的时钟、配置CCR:配置ADC时钟分频比 配置CR1:设置为12位分辨率、禁止规则通道和注入通道模拟看门狗、禁止扫描模式、使能EOC中断(其实CR1初始化只需要配置这一项,其他默认即可);配置CR2:选择规则组为软件触发方式、数据右
30、对齐、禁止DMA、禁止连续转换、使能ADC模块(其实CR2初始化只需要配置这一项,其他默认即可);配置SMPR2:转换时间,根据需要自由配置,本次只使用IN4一个通道,因此需要配置SMPR2中的SMP02:0、配置ADC_SQR123:20配置1(本次使用规则组转换,只使用IN4一个通道,因此选择转换1次)、配置ADC_SQR34:0值5);ADC中断配置:本次使用中断方式实现ADC转换,因此配置使能EOC中断后,还需要在NVIC中断控制器中配置ADC中断相关信息:优先级和使能;编写ADC中断服务函数:本次使用规则组,软件触发转换方式进行ADC转换,因此中断程序中需要判断SR寄存器中的EOC位
31、是否为1来确定ADC已经转换完成,读取数值保存,并且设置一个普通变量标志,让主程序可以根据标志打印结果,并且启动新的一次转换;通过启动ADC转换:配置ADC_CR2位30 SWSTART为1,启动一次转换,启动后这个位会自动清零;STM32F40X ADC模块示例 软件分析04ADC初始化void adc1_in4_init(void)RCC-AHB1ENR|=1 MODER|=0X3 APB2ENR|=1 CCR&=(0X3 CCR|=1 CR1=1CR2|=1 SMPR2=7 SQR1 =1 SQR3 =4 CR2|=1 SR&(1 SR&=(1 SR&(1 SR&=(1 DR;/保存结果
32、 主程序软件编程04STM32F40X ADC模块示例主程序中根据adc_ok_flag来处理转换结果 int main(void)Delay_Init(168);/延时初始化 uart1_init(UART_BDR);/初始化USART1 adc1_in4_init();/adc初始化 adc1_swstart();/启动ADC转换 while(1)if(adc_ok_flag=1)/判断是否有转换完成 adc_ok_flag=0;printf(adc_value=%drn,adc_value);/输出采样的ADC值 adc1_swstart();/重启一次转换 06致谢ACKNOWLEDGEMENTS感谢聆听,如有不足之处敬请指出,欢迎提出您的宝贵建议!致谢