ADC控制器的功能极其强大。其包含但不限于以下内容
图1. ADC1框图
ADC功能解析
时钟及状态
一、功能介绍ADC的时钟分为数字时钟与模拟时钟。其统一通过CRM_APB2EN的ADCxEN位使能。
二、软件接口
ADC时钟使能,软件由单独的函数接口实现,其软件实例如下:当ADC时钟使能后,软件即可开始进行ADC的一些相关配置。ADC预分频设定,软件由单独的函数接口实现,其软件实例如下:此项实际用于设定ADC模拟部分的时钟,其由PCLK2分频而来,故ADCCLK=PCLK2/div注意:1)模拟部分的ADCCLK由PCLK2分频而来,其不可大于28MHz;2)ADC模拟部分电源由ADC_CTRL2的ADCEN,其不受ADC的时钟状态影响。典型的,如果系统需要进入深度睡眠模式,如果不关闭ADCEN,此时ADC模拟器件将还会消耗电流;3)ADC上电有一段等待时间tSTAB。4)为避免充电不充分导致转换数据不准确,应用允许的条件下,建议合理增大采样周期。
采样转换
一、功能介绍ADC可设定1.5、7.5、13.5、28.5、41.5、55.5、71.5、239.5个采样周期。ADC对通道数据的获取由采样和转换两个部分组成。采样先于转换执行,采样期间内选通需要转换的通道,外部电压对ADC内部采样电容充电,将持续执行设定的采样周期长度时间的充电。采样结束后就会自动开始转换,ADC采用逐次逼近的转换方式,可有效保障转换数据的准确性。此转换方式需要分辨率位数个ADCCLK的转换时间来完成单通道的转换,再结合数据处理,因此单个通道的整体转换时间即示例:CSPTx选择7.5周期,一次转换需要7.5+12.5=20个ADCCLK周期。
二、软件接口
ADC采样周期设定,软件由单独的函数接口实现,其软件实例如下:注意:不同通道可设定不同的采样周期;当采用中断或轮询方式获取普通通道数据,为避免数据读取不及时,建议合理增大采样周期;为避免充电不充分导致转换数据不准确,应用允许的条件下,建议合理增大采样周期。
自校准
一、功能介绍ADC具备自校准能力,软件可以执行自校准命令,透过自校准可以计算出一个校准值。不需要软件干预,ADC会自动将该校准值反馈回ADC内部补偿ADC基础偏差,以保障转换数据的准确性。自校准的软件流程如下:
二、软件接口
自校准方式,其软件实例如下:注意:校准值的存放不会置位CCE标志,不会产生中断或DMA请求。
基本模式
一、功能介绍序列模式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支持反复模式设定,开启反复模式后,当检测到触发后就即会反复不断地转换普通通道组。图3. 反复模式+抢占自动转换模式分割模式ADC支持分割模式设定。对于普通通道组,分割模式可依据设定将通道组分割成长度较小的子组别。一次触发将转换子组别中的所有通道。每次触发会依序选择不同的子组别进行转换。对于抢占通道组,分割模式直接以通道为单位进行分割,一次触发将转换单个通道。每次触发会依序选择不同的通道进行转换。图4. 分割模式抢占自动转换模式ADC支持抢占自动转换模式设定,开启抢占自动转换模式后,当普通通道转换完成后,抢占通道将自动接续着转换,而不需要进行抢占通道的触发。图5. 抢占自动转换模式
二、软件接口
ADC序列模式和反复模式设定,由ADC基础部分结构体配置完成,其软件实例如下:
注意:序列模式对普通及抢占通道组均有效;反复模式仅对普通通道组有效,抢占通道组不具备反复模式功能;反复模式与分割模式不可共用;反复模式可与抢占自动转换模式共用,将实现依次反复的转换普通通道序列及抢占通道序列。ADC分割模式设定,软件由单独的函数接口实现,其软件实例如下:注意:分割模式对普通及抢占通道组均有效;抢占通道组分割模式子组别长度不可设定,其固定为单个通道;分割模式与反复模式、抢占自动转换模式不可共用。抢占自动转换模式设定,软件由单独的函数接口实现,其软件实例如下:注意:抢占自动转换模式仅对抢占通道组有效;抢占自动转换模式与分割模式不可共用。
不同优先权的通道
一、功能介绍ADC设计有具备不同优先权的两种通道组:普通通道组与抢占通道组。普通通道组通常用于执行常规的数据转换。支持最多配置16个通道,转换将按照设定的通道顺序依次进行。其不具备抢占能力。抢占通道组通常用于执行相对紧急的数据转换。支持最多配置4个通道,转换将按照设定的通道顺序依次进行。其具备抢占能力,即抢占通道组的转换可以打断正在执行的普通通道转换,待抢占通道组转换完毕后再恢复执行被打断的普通通道组转换。
二、软件接口
普通通道组设定,软件包括通道数量、通道数值、转换顺序、采样周期的设定,其软件实例如下:抢占通道组设定,软件包括通道数量、通道数值、转换顺序、采样周期的设定,其软件实例如下:注意:不同通道可以设定不同的采样周期;同一通道可以被反复编排进转换序列进行转换;序列模式下,普通通道组从 OSN1 开始转换,抢占通道组是从 PSNx 开始转换(x=4-PCLEN)。
多种独立的触发源
一、功能介绍ADC支持多种触发源,包含软件写寄存器触发(ADC_CTRL2的OCSWTRG与PCSWTRG)以及外部触发。外部触发包含定时器触发与引脚触发。普通通道还有一种特殊的触发来源,即重复使能ADCEN触发转换。此种情况下不需要使能ADC控制寄存器2(ADC_CTRL2)的OCTEN也可导致普通通道响应转换。注意:定时器触发、引脚触发、软件触发均需要使能触发模式(ADC_CTRL2的OCTEN与PCTEN)表1. 触发源
二、软件接口
软件写寄存器触发设定,软件由单独的函数接口实现,其软件实例如下:在ADC使能tSTAB后,软件即可执行adc_ordinary_software_trigger_enable(ADC1,TRUE);/adc_preempt_software_trigger_enable(ADC1,TRUE);来进行普通/抢占通道的触发。外部触发设定,软件由单独的函数接口实现,其软件实例如下:在ADC使能tSTAB后,TMR1CH1的上升沿事件就会触发普通通道组转换,TMR3CH4的上升沿事件就会触发抢占通道组转换。注意:触发间隔需要大于通道组转换的时间,转换期间发生的相同通道组的触发会被忽略;抢占通道转换优先权最高,不管当前是否有普通通道转换,其触发后就会立即开始响应转换;普通触发具备记忆功能,在抢占转换时执行普通触发,该触发会被记录并在抢占转换完毕后响应。
数据后级处理
一、功能介绍ADC具备专有的数据寄存器,普通通道转换完成后数据存储于普通数据寄存器(ADC_ODT),抢占通道转换完成后数据存储于抢占数据寄存器x(ADC_PDTx)。数据寄存器内存储的是经过处理后的数据。该处理包括数据对齐、抢占数据偏移。数据对齐分左对齐和右对齐,以半字为基准摆放。抢占数据偏移抢占通道的数据会减去抢占数据偏移寄存器x(ADC_PCDTOx)内的偏移量,因此抢占通道数据有可能为负值,以SIGN作为符号。图6. 数据内容处理
二、软件接口
数据对齐设定,软件由ADC基础部分结构体配置完成,其软件实例如下:抢占数据偏移设定,软件由单独的函数接口实现,其软件实例如下:
过采样器
一、功能介绍ADC具备过采样功能。一次过采样是透过转换多次相同通道,累加转换数据后作平均实现的。
若平均后数据大于16位,只取靠右16位数据,放入16位数据寄存器。使用过采样时,忽视数据对齐及抢占数据偏移的设定,数据一律靠右摆放表2. 最大累加数据与过采样倍数及位移系数关系普通通道过采样被打断后的恢复方式普通通道过采样中途被抢占通道转换打断后的恢复方式由OOSRSEL设定
图7. 普通过采样被打断后的恢复方式普通通道过采样触发模式普通通道过采样的触发模式由OOSTREN设定
此模式下,中途被抢占通道触发打断后,须重新触发普通通道才会恢复转换普通通道过采样。图8. 普通过采样触发模式抢占通道过采样抢占过采样可与普通过采样同时使用,也可分别使用。抢占过采样不影响到普通过采样的各种模式。图9. 抢占自动转换下的过采样模式
二、软件接口
过采样率、过采样移位及过采样使能设定,软件由单独的函数接口实现,其软件实例如下:普通通道过采样被打断后的恢复方式设定,软件由单独的函数接口实现,其软件实例如下:普通通道过采样触发模式设定,软件由单独的函数接口实现,其软件实例如下:
电压监测
一、功能介绍ADC具备电压监测功能。用以监控输入电压与设定阈值的关系。当转换结果大于高边界ADC_VMHB[11:0]寄存器或是小于低边界ADC_VMLB[11:0]寄存器时,电压监测超出标志VMOR会置起。透过VMSGEN选择对单一通道或是所有通道监测。对单一通道监测的话,由VMCSEL配置通道。
二、软件接口
监测单一通道,软件由单独的函数接口实现,其软件实例如下:监测所有通道,软件由单独的函数接口实现,其软件实例如下:注意:若使用过采样器,则是以ADC_VMHB[15:0]与ADC_VMLB[15:0]完整的16位寄存器与过采样数据作比较。
中断及状态事件
一、功能介绍ADC含有多种中断及状态标志。应用需要结合这些标志进行程序设计。
指示普通通道转换开始,由软件对其自身写零清除,无产生中断能力。
指示抢占通道转换开始,由软件对其自身写零清除,无产生中断能力。
指示抢占通道组转换完成,由软件对其自身写零清除,有产生中断能力。
在抢占通道组转换完成后置位,通常应用使用此标志来读取抢占通道组的转换数据。
指示通道序列转换完成,由软件对其自身写零或读ODT寄存器清除,有产生中断能力。在普通/抢占通道序列转换完成后置位,应用可使用此标志来读取普通/抢占通道的转换数据。注意:普通通道数据寄存器只有一个,CCE标志只会在序列转换完毕时置位,在多通道应用中,若通过查询CCE状态获取数据的话,每次只能获取序列的最后一个通道数据而造成数据丢失。因此普通通道多通道数据必须使用DMA方式获取。DMA读取转换数据会同步清除CCE标志。
指示通道电压超出设定阈值,由软件对其自身写零清除,有产生中断能力。在ADC的通道转换数据超过设定阈值后置位,通常应用使用此标志来监控通道电压。
二、软件接口
中断使能设定,软件由单独的函数接口实现,其软件实例如下:
标志状态获取,软件由单独的函数接口实现,其软件实例如下:标志状态清除,软件由单独的函数接口实现,其软件实例如下:
多种转换数据的获取方式
一、功能介绍
ADC具备多种转换数据的获取方式。不同通道类型可支持的数据获取方式不同。
抢占通道不具备DMA能力,因此不管什么组合模式,抢占通道数据均由CPU读取抢占数据寄存器x(ADC_PDTx)获得。
这种方式只适用于普通通道数量为1的情况。软件设置ADC_CTRL1的CCEIEN位使能通道转换结束中断,普通通道数据由CPU读取普通通道数据寄存器(ADC_ODT)获得。
普通通道数据存储于ADC自己独立的数据寄存器中。软件设置OCDMAEN位让每次普通数据寄存器更新时产生DMA请求,DMA在每次收到DMA请求时读取转换数据。
二、软件接口
CPU读取抢占通道数据,软件由单独的函数接口实现,其软件实例如下:CPU读取普通通道数据,软件由单独的函数接口实现,其软件实例如下:DMA读取普通通道数据,软件由单独的函数接口实现,其软件实例如下:注意:使用CPU读取普通转换数据时,为避免数据读取不及时,通道采样周期需要足够大。
ADC配置解析
以下对ADC的配置流程及数据获取方法进行说明。
配置流程
ADC的配置一般包括如下内容
ADC外部触发源有TMR、EXINT或软件触发,其配置无特殊性,参考普通的TMR或EXINT配置即可。注意:此处仅是触发源的配置,触发源的使能需在ADC全部配置完毕后才可进行。
ADC普通通道转换数据可通过DMA传输,若应用需要DMA传输时,需提前进行DMA的初始化配置,其配置无特殊性,参考普通的DMA配置即可。
开启ADC数字时钟,允许进行相关功能配置。
设定ADC模拟部分的时钟,其由PCLK2分频而来,可设定2/4/6/8/12/16中的任意一种分频。
使能内部参考电压,其连接到ADC1的CH17。
包括序列模式、反复模式、数据对齐、普通转换序列长度。序列模式不论普通还是抢占组,只要配置有多个通道,就需要开启序列模式。反复模式若应用需要周期性的触发转换时,就需要关闭反复模式,不然周期性的触发将变得无效。当应用不想周期性的触发,而期望单次触发后就不停的转换设定通道组时需开启反复模式。数据对齐设定转换数据靠右或是靠左对齐放置于数据寄存器。普通转换序列长度可设定1~16中的任何一个长度,指示单个普通序列包含的通道个数,需与实际普通通道序列个数一致。
包含通道配置、触发配置、数据传输方式。通道配置由转换顺序、通道值、采样周期的设定组成。其中不同顺序可配置相同通道值。触发配置选择普通通道的触发源。数据传输方式可设定CPU或DMA传输转换数据。
包含通道个数、通道配置、触发配置。通道个数可设定1~4中的任何一个长度,指示单个抢占序列包含的通道个数,需与实际抢占通道序列个数一致。通道配置由转换顺序、通道值、采样周期的设定组成。其中不同顺序可配置相同通道值。触发配置设置抢占通道的触发源。
分割模式包括每次触发转换的普通通道个数、普通通道分割模式使能、抢占通道分割模式使能。抢占自动转换模式用于设定普通组转换结束后的抢占通道组自动转换使能。
使能对应中断,包括通道转换结束中断、抢占通道组转换结束中断、电压检测超过范围中断中的一个或多个。
使能ADC让ADC上电,由于上电需要稳定时间,因此ADC上电后需等待tSTAB后才可进行后续动作。
为保障ADC转换数据准确,在ADC上电后需进行校准。其包含:A/D初始化校准、等待初始化校准完成、A/D校准、等待校准完成。至此,ADC的初始化配置就算全部完成。随后,可通过软件或使能硬件触发源进行触发转换。
ADC数据获取方式
ADC支持多种数据获取方法,通常可概括为如下几种
抢占通道数据不具备DMA能力,只能透过CPU获取。推荐使用中断获取,方法如下1) 抢占通道组转换结束中断使能;2) 抢占通道组转换结束中断函数内将转换数据缓存进数组内;3) 其他应用逻辑内透过数组内的数据进行数据的后续算法处理。
425CPU方式读取普通通道数据仅支持普通通道数为1的情形。为保障数据读取的实时性,同样推荐使用中断获取,方法如下:1) 通道转换结束中断使能;2) 通道组转换结束中断函数内将转换数据缓存进数组内;3) 其他应用逻辑内透过数组内的数据进行数据的后续算法处理。
普通通道数据具备DMA能力。为避免软件耗时,可直接采用DMA读取转换数据,方法如下1) 初始化并使能DMA;2) 使能ADC的DMA模式;3) 在DMA传输完成中断函数内获取DMA的buffer数据;4) 其他应用逻辑内透过buffer数据进行数据的后续算法处理。
全部0条评论
快来发表一下你的评论吧 !