AT32F435/437 ADC使用指南

模拟技术

2308人已加入

描述

 

ADC简介

  ADC控制器的功能极其强大。其包含但不限于以下内容

时钟及状态,由数字和模拟时钟两个部分组成

分辨率及采样转换,可配置分辨率为12/10/8/6位的转换,采样周期支持广范围的配置

自校准,自带校准功能以纠正数据偏移

基本模式,支持多种模式,不同模式可组合使用满足多种应用

不同优先权的通道,普通通道与抢占通道具备不同的优先权

多种独立的触发源,包括TMR、EXINT、软触发等多种触发选择

数据后级处理,包括数据的对齐,抢占通道偏移量等多种处理

转换中止,可软件控制在ADC不掉电状态下实现转换中止

过采样器,普通及抢占通道均支持过采样

电压监测,通过对转换结果的判定来实现电压监测

中断及状态事件,具备多种标志指示ADC状态,且某些标志还具备中断功能

多种转换数据的获取方式,包括DMA获取、CPU获取两种方式实现转换数据的读取

联动多ADC的主从模式,可设定同时、交错、位移等多种组合模式,且支持单及双从机选择

图1. ADC1框图

adc

ADC功能解析

时钟及状态

  功能介绍

ADC的时钟分为数字时钟与模拟时钟。其统一通过CRM_APB2EN的ADCxEN位使能。

数字时钟:即PCLK2,经HCLK分频而来,提供给数字部分使用。

模拟时钟:即ADCCLK,经ADC预分频器分频而来,提供给模拟部分使用。

  软件接口

ADC时钟使能,软件由单独的函数接口实现,其软件实例如下:

adc  

当ADC时钟使能后,软件即可开始进行ADC的一些相关配置。

ADC预分频设定,软件由ADC公共部分结构体配置完成,其软件实例如下:

adc


此项实际用于设定ADC模拟部分的时钟,其由HCLK分频而来,故ADCCLK=HCLK/div 注意:

1)模拟部分的ADCCLK由HCLK分频而来,其不可大于80MHz;

2)ADC数字部分挂在PCLK2上,为避免同步问题,ADCCLK频率不可高于PCLK2;

3)ADC1、ADC2、ADC3都有自己独立的时钟使能位。ADC公共部分无独立的时钟使能位,其会跟随任意ADCx时钟使能而自动打开;

4)ADC模拟部分电源由ADC_CTRL2的ADCEN,其不受ADC的时钟状态影响。典型的,如果系统需要进入深度睡眠模式,如果不关闭ADCEN,此时ADC模拟器件将还会消耗电流;

5)ADC上电有一段等待时间,应用应该在判定到ADC的RDY flag置位后再执行后续触发等操作。  

分辨率及采样转换

  功能介绍

ADC可随意设定12、10、8、6位分辨率使用。 ADC可设定2.5、6.5、12.5、24.5、47.5、92.5、247.5、640.5个采样周期。 ADC对通道数据的获取由采样和转换两个部分组成。 采样先于转换执行,采样期间内选通需要转换的通道,外部电压对ADC内部采样电容充电,将持续执行设定的采样周期长度时间的充电。 采样结束后就会自动开始转换,ADC采用逐次逼近的转换方式,可有效保障转换数据的准确性。此转换方式需要分辨率位数个ADCCLK的转换时间来完成单通道的转换,再结合数据处理,因此单个通道的整体转换时间即

adc  

示例: CSPTx选择6.5周期,CRSEL选择10位,一次转换需要6.5+10+0.5=17个ADCCLK周期。  

软件接口

ADC分辨率设定,软件由单独的函数接口实现,其软件实例如下:

adc  

注意:ADC的自校准只能在12位分辨率下进行,切分辨需安排在校准完成后执行。

ADC采样周期设定,软件由单独的函数接口实现,其软件实例如下:

adc

注意: 不同通道可设定不同的采样周期; 当采用中断或轮询方式获取普通通道数据,为避免溢出,建议合理增大采样周期; 为避免充电不充分导致转换数据不准确,应用允许的条件下,建议合理增大采样周期。  

自校准

  功能介绍

ADC具备自校准能力,软件可以执行自校准命令,透过自校准可以计算出一个校准值。不需要软件干预,ADC会自动将该校准值反馈回ADC内部补偿ADC基础偏差,以保障转换数据的准确性。 校准值有两种获取方式:

软件下自校准命令,由硬件自动计算,产生的校准值保存在ADC->CALVAL寄存器内

软件直接根据经验值,手动设定校准值,该值同样被保存在ADC->CALVAL寄存器内

自校准的软件流程如下

在12位分辨率状态下使能ADC

等待ADC的RDY标志置位

执行初始化校准命令并等待初始化校准完成

执行校准命令并等待校准完成

根据应用需求切换到期望配置的分辨率

等待ADC的RDY标志置位

执行完上述流程后,即可开始进行ADC的触发转换。

  软件接口

完整的校准及设定分辨率需由组合命令实现,依据校准值设定方式可区分如下两种自校准方式,其软件实例如下: adc  

写经验值校准方式,其软件实例如下:

adc  

注意: 校准值的存放不会置位OCCE标志,不会产生中断或DMA请求; ADC的自校准只能在12位分辨率下进行,切分辨需安排在校准完成后执行。  

基本模式

  1、功能介绍

序列模式

ADC支持序列模式设定,开启序列模式后,每次触发将序列中的通道依序转换一次。 用户于ADC_OSQx配置普通通道序列,普通通道从OSN1开始转换;于ADC_PSQ配置抢占通道序列,抢占通道是从PSNx开始转换(x=4-PCLEN)。 抢占通道转换示例: ADC_PSQ[21:0]=10 00110 00101 00100 00011,此时扫描转换顺序为CH4、CH5、CH6,而不是CH3、CH4、CH5。

图2. 序列模式

adc

反复模式

ADC支持反复模式设定,开启反复模式后,当检测到触发后就即会反复不断地转换普通通道组。

图3. 反复模式+抢占自动转换模式

adc

分割模式

ADC支持分割模式设定。 对于普通通道组,分割模式可依据设定将通道组分割成长度较小的子组别。一次触发将转换子组别中的所有通道。每次触发会依序选择不同的子组别进行转换。 对于抢占通道组,分割模式直接以通道为单位进行分割,一次触发将转换单个通道。每次触发会依序选择不同的通道进行转换。

图4. 分割模式

adc

抢占自动转换模式

ADC支持抢占自动转换模式设定,开启抢占自动转换模式后,当普通通道转换完成后,抢占通道将自动接续着转换,而不需要进行抢占通道的触发。

图5. 抢占自动转换模式

adc    

2、软件接口

ADC序列模式和反复模式设定,由ADC基础部分结构体配置完成,其软件实例如下:

adc  

注意: 序列模式对普通及抢占通道组均有效; 反复模式仅对普通通道组有效,抢占通道组不具备反复模式功能; 反复模式与分割模式不可共用; 反复模式可与抢占自动转换模式共用,将实现依次反复的转换普通通道序列及抢占通道序列。 ADC分割模式设定,软件由单独的函数接口实现,其软件实例如下:


adc  

注意: 分割模式对普通及抢占通道组均有效; 抢占通道组分割模式子组别长度不可设定,其固定为单个通道; 分割模式与反复模式、抢占自动转换模式不可共用,普通通道与抢占通道的分割模式不可共用。 抢占自动转换模式设定,软件由单独的函数接口实现,其软件实例如下:

adc  


注意: 抢占自动转换模式仅对抢占通道组有效; 抢占自动转换模式与分割模式不可共用。  

不同优先权的通道

  1、功能介绍


ADC设计有具备不同优先权的两种通道组:普通通道组与抢占通道组。

普通通道组

通常用于执行常规的数据转换。支持最多配置16个通道,转换将按照设定的通道顺序依次进行。其不具备抢占能力。

抢占通道组

通常用于执行相对紧急的数据转换。支持最多配置4个通道,转换将按照设定的通道顺序依次进行。其具备抢占能力,即抢占通道组的转换可以打断正在执行的普通通道转换,待抢占通道组转换完毕后再恢复执行被打断的普通通道组转换。

  2、软件接口


普通通道组设定,软件包括通道数量、通道数值、转换顺序、采样周期的设定,其软件实例如下:


adc  


抢占通道组设定,软件包括通道数量、通道数值、转换顺序、采样周期的设定,其软件实例如下:

adc  

注意: 不同通道可以设定不同的采样周期; 同一通道可以被反复编排进转换序列进行转换; 序列模式下,普通通道组从OSN1开始转换,抢占通道组是从PSNx开始转换(x=4-PCLEN)。  

多种独立的触发源

  功能介绍

ADC支持多种触发源,包含软件写寄存器触发(ADC_CTRL2的OCSWTRG与PCSWTRG)以及外部触发。外部触发包含定时器触发与引脚触发,外部触发可设定触发极性(触发极性可选择禁止边沿触发、上升沿触发、下降沿触发或任意边沿触发)。 表1. 普通通道触发源

adc  

表2. 抢占通道触发源

adc    


软件接口

软件写寄存器触发设定,软件由单独的函数接口实现,其软件实例如下:


adc  


在ADC Ready后,软件即可执行adc_ordinary_software_trigger_enable(ADC1,TRUE);/adc_preempt_software_trigger_enable(ADC1,TRUE);来进行普通/抢占通道的触发。 外部触发设定,软件由单独的函数接口实现,其软件实例如下:
adc  



在ADC Ready后,TMR1CH1的上升沿事件就会触发普通通道组转换,TMR3CH4的上升沿事件就会触发抢占通道组转换。 注意: 触发间隔需要大于通道组转换的时间,转换期间发生的相同通道组的触发会被忽略; 使用软件写寄存器触发时,对应触发极性必须选择禁止边沿触发; 抢占通道转换优先权最高,不管当前是否有普通通道转换,其触发后就会立即开始响应转换; 普通触发具备记忆功能,在抢占转换时执行普通触发,该触发会被记录并在抢占转换完毕后响应; 多ADC的主从模式下,需要将从ADC的触发极性选择为禁止边沿触发。  

数据后级处理

  1、功能介绍


ADC具备专有的数据寄存器,普通通道转换完成后数据存储于普通数据寄存器(ADC_ODT),抢占通道转换完成后数据存储于抢占数据寄存器x(ADC_PDTx)。数据寄存器内存储的是经过处理后的数据。该处理包括数据对齐、抢占数据偏移。 数据对齐 分左对齐和右对齐。分辨率CRSEL为6位时,数据存储方式以字节为基准摆放,其余皆以半字为基准摆放。

抢占数据偏移


抢占通道的数据会减去抢占数据偏移寄存器x(ADC_PCDTOx)内的偏移量,因此抢占通道数据有可能为负值,以SIGN作为符号。 图6. 数据内容处理

adc    

2、软件接口

数据对齐设定,软件由ADC基础部分结构体配置完成,其软件实例如下:

adc  
抢占数据偏移设定,软件由单独的函数接口实现,其软件实例如下:

adc    

转换中止

  功能介绍

ADC具备转换中止功能。在ADC转换过程中,用户可利用ADC_CTRL2的ADABRT使ADC停止转换。停止转换后,转换顺序回归第一个通道,用户即可重新编排通道顺序,再次触发ADC将从头开始执行新序列的转换。 图7. 转换中止时序 adc  

软件接口

转换中止设定,软件由单独的函数接口实现,其软件实例如下:

adc  

注意: 转换中止命令对普通及抢占通道转换都有效; 转换中止功能类似ADC重上电,但是转换中止不会使ADC掉电,不存在ADC上电唤醒时间; 转换中止的执行需要时间,在执行转换中止命令后一定要等待ADABRT位被硬件清除后才可进行后续的触发转换。  

过采样器

  1、功能介绍

ADC具备过采样功能。一次过采样是透过转换多次相同通道,累加转换数据后作平均实现的。

由ADC_OVSP的OSRSEL选择过采样率,此位用来定义过采样倍数;

由ADC_OVSP的OSSSEL选择过采样移位,此位用来定义平均系数。

若平均后数据大于16位,只取靠右16位数据,放入16位数据寄存器。 使用过采样时,忽视数据对齐及抢占数据偏移的设定,数据一律靠右摆放。

表3. 最大累加数据与过采样倍数及位移系数关系
adc

普通通道过采样被打断后的恢复方式

普通通道过采样中途被抢占通道转换打断后的恢复方式由OOSRSEL设定

OOSRSEL=0:接续模式。保留已累加的数据,再次开始转换时将从打断处转换;

OOSRSEL=1:重转模式。累加的数据被清空,再次开始转换时重新开始该通道的过采样转换。

图8. 普通过采样被打断后的恢复方式
adc

普通通道过采样触发模式

普通通道过采样的触发模式由OOSTREN设定

OOSTREN=0:关闭触发模式。通道的所有过采样转换仅需一次触发;

OOSTREN=1:开启触发模式。通道的每个过采样转换均需进行触发。

此模式下,中途被抢占通道触发打断后,须重新触发普通通道才会恢复转换普通通道过采样。

图9. 普通过采样触发模式
adc

抢占通道过采样

抢占过采样可与普通过采样同时使用,也可分别使用。抢占过采样不影响到普通过采样的各种模式。

图10. 抢占自动转换下的过采样模式

adc    

2、软件接口

过采样率、过采样移位及过采样使能设定,软件由单独的函数接口实现,其软件实例如下:

adc  

普通通道过采样被打断后的恢复方式设定,软件由单独的函数接口实现,其软件实例如下:

adc  

普通通道过采样触发模式设定,软件由单独的函数接口实现,其软件实例如下:

adc    

电压监测

  功能介绍

ADC具备电压监测功能。用以监控输入电压与设定阈值的关系。 当转换结果大于高边界ADC_VMHB[11:0]寄存器或是小于低边界ADC_VMLB[11:0]寄存器时,电压监测超出标志VMOR会置起。 透过VMSGEN选择对单一通道或是所有通道监测。对单一通道监测的话,由VMCSEL配置通道。  

软件接口

监测单一通道,软件由单独的函数接口实现,其软件实例如下:

adc  
监测所有通道,软件由单独的函数接口实现,其软件实例如下:
adc  
注意: 电压监测一律以转换的原始数据与12位边界寄存器做比较,无视分辨率、抢占偏移量与数据对齐的设定; 若使用过采样器,则是以ADC_VMHB[15:0]与ADC_VMLB[15:0]完整的16位寄存器与过采样数据作比较。  

中断及状态事件

  功能介绍 ADC含有多种中断及状态标志。应用需要结合这些标志进行程序设计。

ADC准备就绪标志(RDY)

指示ADC状态,只读位,软件不可清除,无产生中断能力。 ADC上电完毕后会置位,只有RDY标志置位后,才可进行校准及触发转换。

普通通道转换溢出标志(OCCO)

指示ADC转换数据溢出,标志由软件对其自身写零清除,有产生中断能力。 无独立的溢出检测使能位,在使能DMA传输或者EOCSFEN=1时有效,当上一笔转换数据未被读走,下一笔转换数据已产生时就会置位此标志。标志清除后的转换恢复分如下两种情况: 1)非组合模式下,此标志置位后,当前转换停止,转换序列不被清零,因此可不用复位ADC, 直接清除标志再次触发转换即可; 2)组合模式下,此标志置位后,当前转换停止,转换序列同样保持,但由于此时可能已丢失同步规则,因此需要复位各ADC,然后重新进行触发转换。

普通通道转换开始标志(OCCS)

指示普通通道转换开始,由软件对其自身写零清除,无产生中断能力。

抢占通道转换开始标志(PCCS)

指示抢占通道转换开始,由软件对其自身写零清除,无产生中断能力。

抢占通道组转换结束标志(PCCE)

指示抢占通道组转换完成,由软件对其自身写零清除,有产生中断能力。 在抢占通道组转换完成后置位,通常应用使用此标志来读取抢占通道组的转换数据。

普通通道转换结束标志(OCCE)

指示普通通道转换完成,由软件对其自身写零或读ODT寄存器清除,有产生中断能力。 在普通通道转换完成后置位,应用可使用此标志来读取普通通道的转换数据(EOCSFEN=1)。 注意:DMA读取转换数据会同步清除OCCE标志,因此在使用DMA时禁止再使用OCCE标志。

电压监测超出范围标志(VMOR)

指示通道电压超出设定阈值,由软件对其自身写零清除,有产生中断能力。 在ADC的通道转换数据超过设定阈值后置位,通常应用使用此标志来监控通道电压。  

软件接口

中断使能设定,软件由单独的函数接口实现,其软件实例如下:

adc  

标志状态获取,软件由单独的函数接口实现,其软件实例如下:

adc  
标志状态清除,软件由单独的函数接口实现,其软件实例如下:
adc  
注意: 435的三个ADC共用一个中断向量; 通用状态寄存器内有每个ADC的状态标志的映像,此映像为只读,不可通过映像来清除标志。  

多种转换数据的获取方式

  1、功能介绍

ADC具备多种转换数据的获取方式。不同通道类型、不同组合模式可支持的数据获取方式不同。

CPU读取抢占通道数据

抢占通道不具备DMA能力,因此不管什么组合模式,抢占通道数据均由CPU读取抢占数据寄存器x(ADC_PDTx)获得。

CPU读取普通通道数据(非组合模式)

只适用于非组合模式,软件设置ADC_CTRL2的EOCSFEN位让每次普通数据寄存器更新时置位OCCE标志,软件通过OCCE标志读取转换数据。

DMA读取普通通道数据(非组合模式)

非组合模式下,普通通道数据存储于 ADC 自己独立的数据寄存器中。软件设置OCDMAEN及OCDRCEN位让每次普通数据寄存器更新时产生DMA请求,DMA在每次收到DMA请求时读取转换数据。

DMA读取普通通道数据(组合模式)

组合模式下,普通通道数据会共同存储于通用普通数据寄存器中。存储方式透过ADC_CCTRL的MSDMASEL位配置,提供5种模式。只要MSDMASEL不为0,就会在每次数据备齐时使用ADC1的DMA通道请求DMA搬运数据。

表4. 主从组合模式的DMA模式

adc  

图11. DMA模式与ADC模式对应关系

adc    

2、软件接口

CPU读取抢占通道数据,软件由单独的函数接口实现,其软件实例如下:

adc  

CPU读取普通通道数据(非组合模式),软件由单独的函数接口实现,其软件实例如下:


adc  

DMA读取普通通道数据(非组合模式),软件由单独的函数接口实现,其软件实例如下:

adc  

DMA读取普通通道数据(组合模式),软件由单独的函数接口实现,其软件实例如下:

adc  

注意: 使用CPU读取普通转换数据时,为避免溢出,通道采样周期需要足够大; 三个ADC共用一个中断向量,故中断服务函数一定要简洁,以避免因中断无法及时响应而导致数据溢出; 组合模式下,不可使用CPU读取普通通道转换数据; 组合模式下,一定要按照可支持的对应关系选用DMA模式。  

联动多ADC的主从模式

  功能介绍 ADC主从模式即通过触发主机来联动从机进行通道转换,并且将通用普通数据寄存器作为获取主从ADC普通通道数据的单一接口。 单从机主从模式以ADC1作为主机,ADC2作为从机,ADC3独立动作。双从机主从模式以ADC1作为主机,ADC2与ADC3作为从机。

图12. 主从模式的ADC框图
adc

同时模式

同时模式可用于普通/抢占/普通抢占组合。配置同时模式后,可触发主机,使主机与从机同时转换各自的通道。在此模式下,必须使用相同的采样时间以及相同的序列长度,以避免主从之间失去同步,遗失数据。

图13. 普通同时模式

adc  

图14. 抢占同时模式

adc  

注意: 同时模式下,需要禁止来自从机的触发; 同时模式下,触发间隔需要大于任意通道组的转换周期; 同样的通道不可同时被多个ADC采样,因此禁止将相同通道安排在不同ADC的同样序列位置。

交错触发模式

交错触发模式适用于抢占通道组,可单独使用也可与普通同时模式组合使用。配置抢占交错触发模式后,可多次触发主机的抢占通道,促使主从ADC轮流转换抢占通道组。

图15. 抢占交错触发模式

adc

位移模式

位移模式适用于普通通道组,此模式只可单独使用,不能与抢占通道组合使用。配置普通位移模式后,可触发主机普通通道,使各ADC之间自动在普通通道的转换上时序位移。 位移长度可由软件经ADC_CCTRL寄存器中的ASISEL位进行设定。 此模式下,硬件会保证不同ADC间的采样间隔至少2.5个ADCCLK。当软件设定的位移长度无法满足这个条件时,软件设定将会变得无效。因此利用这个特性,可以将相同通道安排在不同ADC的同样序列位置。

图16. 普通位移模式

adc  
图17. 使用DMA模式2时的位移转换
adc  
注意: 位移模式下禁止抢占通道触发、禁止从机的普通通道触发   软件接口 联动多ADC的主从模式设定,软件由公共部分结构体配置完成,其软件实例如下:
adc  
注意: 为避免主从间失去同步,主从机必须配置相同分辨率; 组合模式下,一定要按照可支持的对应关系选用DMA模式; 若有同时使用多个ADC低解析度转换的需求,建议使用主从模式搭配DMA1或DMA2。  

ADC配置解析

  以下对ADC的配置流程及数据获取方法进行说明。  

ADC配置流程

  ADC的配置一般包括如下内容

外部触发源配置

ADC外部触发源有TMR或EXINT,其配置无特殊性,参考普通的TMR或EXINT配置即可。 注意:此处仅是触发源的配置,触发源的使能需在ADC全部配置完毕后才可进行。

DMA配置使能

ADC普通通道转换数据可通过DMA传输,若应用需要DMA传输时,需提前进行DMA的初始化配置,其配置无特殊性,参考普通的DMA配置即可。

开启ADC数字时钟

开启ADC数字时钟,允许进行相关功能配置。

ADC公共部分结构体配置

包括主从模式、ADC分频、主从模式的DMA模式、DMA请求接续使能、位移模式位移长度、内部温度传感器及Vintrv、Vbat相关配置。

主从模式

依据从机数量、通道类型、组合类型进行选择,支持多达13种模式。

ADC分频

设定ADC模拟部分的时钟,其由HCLK分频而来,可设定2~17中的任意一种分频。

主从模式的DMA模式

需要结合主从模式进行选择,支持多达5种模式,抢占组合模式下需禁止DMA模式

DMA请求接续使能

设定在传输完DMA设定个数数据后,普通通道转换完毕是否再产生DMA请求。

位移模式位移长度

设定位移模式下相邻ADC间的采样间隔时间,可设定5~20个ADCCLK中的任意一种。

内部温度传感器及Vintrv

使能内部温度传感器及内部参考电压,其分别连接到ADC1的CH16和CH17。

Vbat

使能电池电压,电池电压经除4电路后连接到了ADC1的CH18。

注意:用ADC采集VBAT电压,当使能VBATEN后,VBAT会一直耗电,如果应用对功耗敏感,建议只在VBAT采样时才打开,采样结束后关闭。

ADC基础部分结构体配置

包括序列模式、反复模式、数据对齐、普通转换序列长度。

序列模式

不论普通还是抢占组,只要配置有多个通道,就需要开启序列模式。

反复模式

若应用需要周期性的触发转换时,就需要关闭反复模式,不然周期性的触发将变得无效。 当应用不想周期性的触发,而期望单次触发后就不停的转换设定通道组时需开启反复模式。

数据对齐

设定转换数据靠右或是靠左对齐放置于数据寄存器。

普通转换序列长度

可设定1~16中的任何一个长度,指示单个普通序列包含的通道个数,需与实际普通通道序列个数一致。

普通通道配置

包含通道配置、触发配置、数据传输方式。

通道配置

由转换顺序、通道值、采样周期的设定组成。其中不同顺序可配置相同通道值。

触发配置

由触发源和触发边沿检测的设定组成。若使用软件触发时,需要禁止触发边沿检测。

数据传输方式

可设定CPU或DMA传输转换数据。在主从组合模式下,需禁止此项配置。

抢占通道配置

包含通道个数、通道配置、触发配置。

通道个数

可设定1~4中的任何一个长度,指示单个抢占序列包含的通道个数,需与实际抢占通道序列个数一致。

通道配置

由转换顺序、通道值、采样周期的设定组成。其中不同顺序可配置相同通道值。

触发配置

由触发源和触发边沿检测的设定组成。若使用软件触发时,需要禁止触发边沿检测。

特殊模式配置(非必需)

分割模式

包括每次触发转换的普通通道个数、普通通道分割模式使能、抢占通道分割模式使能。

抢占自动转换模式

用于设定普通组转换结束后的抢占通道组自动转换使能。

过采样

包括过采样率、过采样移位、普通过采样触发模式使能、普通过采样重转模式选择、普通及抢占过采样使能的设定。

中断配置

使能对应中断,包括溢出中断、普通通道转换结束中断、抢占通道组转换结束中断、电压检测超过范围中断中的一个或多个。

ADC上电

使能ADC让ADC上电,由于上电需要稳定时间,因此ADC上电后需等待ADC的RDY标志处于置位后才可进行后续动作。

ADC校准

为保障ADC转换数据准确,在ADC上电后需进行校准。其包含: A/D初始化校准、等待初始化校准完成、A/D校准、等待校准完成。

ADC分辨率调整

在ADC校准完毕后,即可进行分辨率切换。切换分辨率后,软件需要等待ADC的RDY标志处于置位后才可进行后续动作。 至此,ADC的初始化配置就算全部完成。随后,可通过软件或使能硬件触发源进行触发转换。  

ADC数据获取方法

  ADC支持多种数据获取方法,通常可概括为如下几种

CPU获取抢占通道数据

抢占通道数据不具备DMA能力,只能透过CPU获取。推荐使用中断获取,方法如下 1) 抢占通道组转换结束中断使能; 2) 抢占通道组转换结束中断函数内将转换数据缓存进数组内; 3) 其他应用逻辑内透过数组内的数据进行数据的后续算法处理。

CPU读取普通通道数据

435额外支持通过CPU读取普通通道数据。为保障数据读取的实时性,同样推荐使用中断获取,方法如下 1) 软件设置ADC_CTRL2的EOCSFEN位让每次数据寄存器更新时置位OCCE标志; 2) 普通通道组转换结束中断使能; 3) 普通通道组转换结束中断函数内将转换数据缓存进数组内; 4) 其他应用逻辑内透过数组内的数据进行数据的后续算法处理。

DMA读取普通通道数据(单buffer模式)

普通通道数据具备DMA能力。为避免软件耗时,可直接采用DMA读取转换数据,方法如下 1) 初始化并使能DMA; 2) 使能ADC的DMA模式; 3) 在DMA传输完成中断函数内获取DMA的buffer数据; 4) 其他应用逻辑内透过buffer数据进行数据的后续算法处理。

DMA读取普通通道数据(双buffer模式)

435的EDMA支持双buffer模式。为避免数据处理不及时,可尝试使用双buffer缓存数据,方法如下 1) 初始化EDMA成双buffer模式并使能EDMA; 2) 使能ADC的DMA模式,使能普通通道数据的DMA请求接续; 3) 在EDMA传输完成中断函数内交叉获取EDMA的buffer数据; 4) 其他应用逻辑内透过获取到的buffer数据进行数据的后续算法处理。  

案例 ADC过采样

功能简介

  ADC支持过采样功能,在一些要求转换数据准确性的场合,可以使用过采样来实现。 本例将同时使用普通及抢占通道组的过采样。设定8倍过采样,保持12位分辨率。  

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD PA4 and PA7——3.3V PA5 and PB0——GND PA6 and PB1——1.5V左右 2) 软件环境 projectat_start_f4xxexamplesadcordinary_preempt_oversampling  

软件设计

  1) 配置流程

配置ADC使用的GPIO

配置用于普通通道数据传输的DMA

ADC相关配置设定

软件触发转换

获取转换数据

2) 代码介绍

GPIO配置函数代码

adc

DMA配置函数代码

adc

ADC配置函数代码

adc

中断服务函数代码

adc

main函数代码

adc

实验效果

  可通过串口打印查看实现效果,最终串口打印的转换数据如下。 图18. ADC过采样实验结果

adc    

案例 ADC电压监测

功能简介

  ADC支持电压监测功能,在需要监测通道电压时,可参考本例进行设计。 本例将固定监控普通通道组的Channel5,监控阈值为0~Vref+/3。  

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD PA4——3.3V PA5——0V PA6——1.5V左右 2) 软件环境 projectat_start_f4xxexamplesadcvoltage_monitoring  

软件设计

  1) 配置流程

配置ADC使用的GPIO

配置用于普通通道数据传输的DMA

ADC相关配置及电压监测设定

普通通道软触发

获取转换数据

2) 代码介绍

GPIO配置函数代码

adc

DMA配置函数代码

adc

ADC配置函数代码

adc

中断服务函数代码

adc

main函数代码

adc

实验效果

  可通过串口打印查看实现效果,测试过程中随机将Channel5外接1.5V,最终串口打印信息如下。 通过打印信息可以看到:有实际监测到Channel5超过监控阈值,且记录到的实际监控值为1.5V。 图19. ADC电压监测实验结果 adc    

案例 ADC双Buffer

功能简介

  EDMA具备双缓冲模式功能,ADC配合这个功能使用,可有效提高数据转换效率。 本案例将以该EDMA的双缓冲功能为基础,示范如何配置使用ADC的快速转换。  

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD PA4——3.3V PA5——0V PA6——1.5V左右 2) 软件环境 projectat_start_f4xxexamplesadcedma_double_buffer  

软件设计

  1) 配置流程

配置ADC使用的GPIO

配置用于普通通道数据传输的DMA

ADC相关配置及设定

普通通道软触发

获取转换数据

2) 代码介绍

GPIO配置函数代码

adc

DMA配置函数代码

adc

ADC配置函数代码

adc

中断服务函数代码

adc

main函数代码

adc

实验效果

  可通过串口打印查看实现效果,如下图所示,ADC转换数据被硬件循环的存储到EDMA设定的两个buffer内了。 图20. ADC电压监测实验结果

adc

案例 ADC DMA模式1

功能简介

  ADC主从组合模式下的普通通道转换数据需经DMA传输。DMA支持多种模式,不同模式数据的传输规则存在明显差异。 当选择不适用的DMA模式传输转换数据时,会因传输不及时导致数据溢出等问题。因此应用中ADC主从组合模式与DMA模式需要按照RM要求搭配使用。 DMA模式1适用ADC组合模式如下: 普通同时模式(单从机)、普通位移模式(单从机)、普通同时模式(双从机)、普通位移模式(双从机)本案例将以“DMA模式1+普通同时模式(双从机)”为基础进行使用示范。  

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD PA4 and PA7 and PC0——3.3V PA5 and PB0 and PC2——GND PA6 and PB1 and PC3——1.5V左右 2) 软件环境 projectat_start_f4xxexamplesadccombine_mode_ordinary_smlt_twoslave_dma1  

软件设计

  1) 配置流程

配置ADC使用的GPIO

配置用于触发的TMR(TMR1_TRGOUT2 event)

配置用于普通通道数据传输的DMA

ADC相关配置及设定

等待触发完毕后关闭触发TMR

获取转换数据

2) 代码介绍

GPIO配置函数代码

adc

TMR配置函数代码

adc

DMA配置函数代码

adc

ADC配置函数代码

adc

中断服务函数代码

adc

main函数代码

adc

实验效果

  可通过串口打印查看实现效果,最终串口打印的转换数据如下。 ADC转换数据以半字为单位进行传输,传输顺序为: ADC1第一个转换通道; ADC2第一个转换通道; ADC3第一个转换通道; ADC1第二个转换通道; ADC2第二个转换通道; ADC3第二个转换通道; ADC1第三个转换通道; ADC2第三个转换通道; ADC3第三个转换通道; ADC1第一个转换通道……

图21. ADC DMA模式1实验结果

adc

案例 ADC DMA模式2

功能简介

  ADC主从组合模式下的普通通道转换数据需经DMA传输。DMA支持多种模式,不同模式数据的传输规则存在明显差异。 当选择不适用的DMA模式传输转换数据时,会因传输不及时导致数据溢出等问题。因此应用中ADC主从组合模式与DMA模式需要按照RM要求搭配使用。 DMA模式2适用ADC组合模式如下: 普通同时模式(单从机)、普通位移模式(单从机)、普通位移模式(双从机) 本案例将以“DMA模式2+普通同时模式(单从机)”为基础进行使用示范。  

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD PA4 and PA7——3.3V PA5 and PB0——GND PA6 and PB1——1.5V左右 2) 软件环境 projectat_start_f4xxexamplesadccombine_mode_ordinary_smlt_oneslave_dma2  

软件设计

  1) 配置流程

开ADC使用的GPIO配置

配置用于普通通道数据传输的DMA

ADC相关配及设定

普通通道软触发

获取转换数据

2) 代码介绍

GPIO配置函数代码

adc

DMA配置函数代码

adc

ADC配置函数代码

adc

中断服务函数代码

adc

main函数代码

adc

实验效果

  可通过串口打印查看实现效果,最终串口打印的转换数据如下。 ADC转换数据以字为单位进行传输,传输顺序为: (ADC2第一个转换通道<<16)|ADC1第一个转换通道; (ADC2第二个转换通道<<16)|ADC1第二个转换通道; (ADC2第三个转换通道<<16)|ADC1第三个转换通道; (ADC2第一个转换通道<<16)|ADC1第一个转换通道……

图22. ADC DMA模式2实验结果

adc    

案例 ADC DMA模式3

功能简介

  ADC主从组合模式下的普通通道转换数据需经DMA传输。DMA支持多种模式,不同模式数据的传输规则存在明显差异。 当选择不适用的DMA模式传输转换数据时,会因传输不及时导致数据溢出等问题。因此应用中ADC主从组合模式与DMA模式需要按照RM要求搭配使用。 DMA模式3适用ADC组合模式如下: 6/8位分辨率的普通同时模式(单从机)、6/8位分辨率的普通位移模式(单从机)、6/8位分辨率的普通位移模式(双从机) 本案例将以“DMA模式3+8位分辨率的普通位移模式(双从机)”为基础进行使用示范。  

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD PA4——3.3V PA7——GND PC0——1.5V左右 2) 软件环境 projectat_start_f4xxexamplesadccombine_mode_ordinary_shift_twoslave_dma3  

软件设计

  3) 配置流程

配置ADC使用的GPIO

配置用于触发的TMR(TMR1_TRGOUT event)

配置用于普通通道数据传输的DMA

ADC相关配置及设定

等待触发完毕后关闭触发TMR

获取转换数据

4) 代码介绍

GPIO配置函数代码

adc

TMR配置函数代码

adc

DMA配置函数代码

adc

ADC配置函数代码

adc

中断服务函数代码

adc

main函数代码

adc

实验效果

  可通过串口打印查看实现效果,最终串口打印的转换数据如下。 ADC转换数据以半字为单位进行传输,传输顺序为: (ADC2的转换通道<<8)|ADC1的转换通道; (ADC1的转换通道<<8)|ADC3的转换通道; (ADC3的转换通道<<8)|ADC2的转换通道; (ADC2的转换通道<<8)|ADC1的转换通道……

图23. ADC DMA模式3实验结果

adc    

案例 ADC DMA模式4

功能简介

  ADC主从组合模式下的普通通道转换数据需经DMA传输。DMA支持多种模式,不同模式数据的传输规则存在明显差异。 当选择不适用的DMA模式传输转换数据时,会因传输不及时导致数据溢出等问题。因此应用中ADC主从组合模式与DMA模式需要按照RM要求搭配使用。 DMA模式4适用ADC组合模式如下: 6/8位分辨率的普通同时模式(双从机)、6/8位分辨率的普通位移模式(双从机) 本案例将以“DMA模式4+8位分辨率的普通位移模式(双从机)”为基础进行使用示范。  

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD PA4——3.3V PA7——GND PC0——1.5V左右 2) 软件环境 projectat_start_f4xxexamplesadccombine_mode_ordinary_shift_twoslave_dma4  

软件设计

  1) 配置流程

配置ADC使用的GPIO

配置用于触发的TMR(TMR1_TRGOUT event)

配置用于普通通道数据传输的DMA

ADC相关配置及设定

等待触发完毕后关闭触发TMR

获取转换数据

2) 代码介绍

GPIO配置函数代码

adc

TMR配置函数代码

adc

DMA配置函数代码

adc

ADC配置函数代码

adc

中断服务函数代码

adc

main函数代码

adc

实验效果

  可通过串口打印查看实现效果,最终串口打印的转换数据如下。 ADC转换数据以字为单位进行传输,传输顺序为: (ADC3的转换通道<<16)|(ADC2的转换通道<<8)|ADC1的转换通道; (ADC3的转换通道<<16)|(ADC2的转换通道<<8)|ADC1的转换通道…… 图24. ADC DMA模式4实验结果 adc    

案例 ADC DMA模式5

功能简介

  ADC主从组合模式下的普通通道转换数据需经DMA传输。DMA支持多种模式,不同模式数据的传输规则存在明显差异。 当选择不适用的DMA模式传输转换数据时,会因传输不及时导致数据溢出等问题。因此应用中ADC主从组合模式与DMA模式需要按照RM要求搭配使用。 DMA模式5适用ADC组合模式如下: 普通同时模式(双从机)、普通位移模式(双从机) 本案例将以“DMA模式5+普通同时模式(双从机)”为基础进行使用示范。  

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD PA4 and PA7 and PC0——3.3V PA5 and PB0 and PC2——GND PA6 and PB1 and PC3——1.5V左右 2) 软件环境 projectat_start_f4xxexamplesadccombine_mode_ordinary_smlt_twoslave_dma5  

软件设计

  1) 配置流程

配置ADC使用的GPIO

配置用于触发的TMR(TMR1_CH1 event)

配置用于普通通道数据传输的DMA

ADC相关配置及设定

等待触发完毕后关闭触发TMR

获取转换数据

2) 代码介绍

GPIO配置函数代码

adc

TMR配置函数代码

adc

DMA配置函数代码

adc

ADC配置函数代码

adc

中断服务函数代码

adc

main函数代码

adc

实验效果

  可通过串口打印查看实现效果,最终串口打印的转换数据如下。 ADC转换数据以字为单位进行传输,传输顺序为: (ADC2第一个转换通道<<16)|ADC1第一个转换通道; ADC3第一个转换通道; (ADC2第二个转换通道<<16)|ADC1第二个转换通道; ADC3第二个转换通道; (ADC2第三个转换通道<<16)|ADC1第三个转换通道; ADC3第三个转换通道 (ADC2第一个转换通道<<16)|ADC1第一个转换通道…… 图25. ADC DMA模式5实验结果

adc

案例 ADC侦测Vref电压

功能简介

  实际应用场景中,受外部电路等因素影响,ADC的模拟参考电压可能出现波动,导致ADC转换结果出现失真。当无法优化硬件时,可尝试如下解决办法。 ADC通道ADC1_IN17连接到了MCU的内部参考电压,该内部参考电压是经LDO输出的稳定的1.2V电压值。故可通过ADC1_IN17的转换数据来反推当前的实际模拟参考电压值。再以获取的模拟参考电压进行ADC转换通道数据的计算。 本例将示例如何以ADC1_IN17的转换结果来反推当前的模拟参考电压值。  

资源准备

  1) 硬件环境: 对应产品型号的AT-START BOARD 2) 软件环境 projectat_start_f4xxexamplesadccurrent_vref_value_check  

软件设计

  1) 配置流程

配置ADC使用的GPIO

配置用于普通通道数据传输的DMA

ADC相关配置及设定

普通通道软触发

获取转换数据反推当前Vref值

2) 代码介绍

DMA配置函数代码

adc

ADC配置函数代码

adc

中断服务函数代码

adc

main函数代码

adc

实验效果

  可通过串口打印查看实现效果,测试未独立外接Vref,并使用AT-Link供电,可以看到实际Vref电压固定保持3.32V左右。 图26. ADC侦测Vref电压实验结果 adc       

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分