C2000 F2803X的ADC模块学习笔记

一、概述

ADC模数转换器模块功能包括:

•内置双采样保持(S/H)的12位ADC核心

•同步采样或顺序采样模式

•全量程模拟输入:0V至3.3 V固定电压,或采用VREFHI/VREFLO比例基准

•最多16通道多路复用输入

•16个可配置触发器、采样窗口和通道的片上系统(SOC)

•16个独立寻址结果寄存器用于存储转换值

•多种触发源支持:软件即时启动(S/W)、ePWM 1-7、GPIO XINT2、CPU定时器0/1/2、ADCINT1/2

•9个灵活可配置的PIE中断,支持在任意转换后触发中断请求

其模型框图如下,咱们主要是学习如何用EPWM与ADC模块进行联动

二、ADC的小模块学习

2.1 SOC模块

      SOC是指定义单通道单次转换的配置集合,其中包含三个核心参数:触发源(启动转换的信号)、待转换通道以及采样窗口尺寸。每个SOC均可独立配置,支持任意组合的触发源、通道和采样窗口尺寸。根据需求,可为同一触发源、通道或采样窗口配置多个SOC。这种设计提供了高度灵活的配置方案:既能实现不同通道通过不同触发源进行单次采样,也能使用单一触发源对同一通道进行过采样,甚至能基于单个触发源创建包含多个通道的自定义转换序列。

        例如,若要在ADCINA1通道配置单次转换以触发ePWM3定时器周期匹配,首先需要将ePWM3设置为在周期匹配时输出SOCA或SOCB信号,配置方法在学习笔记中有记录。随后通过ADCSOCxCTL寄存器配置其中一个SOC。C2000的模数转换器允许的最快采样窗口为7个周期。如果设置采样窗口时长、将ADCINA1通道设为待转换通道、ePWM3作为SOC0触发源,并分别将ACQPS字段置为6、CHSEL字段置为1、TRIGSEL字段置为9。

        那么相应的寄存器配置如下

EPwm3Regs.SOCAEN = 1; //使能EPWM3作为SOCA触发源
EPwm3Regs.SOCASEL = 0x010; //当EPWM3等于TBPRD时触发SOCA

AdcRegs.ADCSOC0CTL.bit.CHSEL = 1;//当ADC接收SOCx时,启动ADCINA1的转换
AdcRegs.ADCSOC0CTL.bit.ACQPS = 6; //采样窗口长度为6+1个时钟周期
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 9; //设置SOC0的触发源为EPWM3的SOCA


        如果需要将ADCINA1的采样率提高3倍,则SOC1、SOC2和SOC3都可以采用与SOC0相同的配置。这将在ePWM3 SOCA事件上以串行方式启动四个ADCINA1转换,将结果值存储在ADCRESULT0-ADCRESULT3寄存器中。

2.2 ADC采样模块(ADCSAMPLEMODE)

        ADCSAMPLEMODE寄存器可以配置SOCx和SOCx+1是否同时启动采样。

        例如,ADCSAPPLEMODE.SIMULEN0置位,且SOC0的CHESEL=2(ADCINA2/ADCINB2),触发源选择EPWM1.ADCSOCA。当触发SOC时,ADCINA2和ADCINB2同时采样保持,接着ADCINA2通道转换,EOC0产生于转换后或转换开始时,接着结果放入将结果寄存器0。同理,ADCINB2转换后,EOC1产生,结果放入结果寄存器1。

注:EOC的产生由ADCCTL1.INTPULSEPOS配置。另外,一般配置偶数SOC来实现同时采样,但是也可以配置奇数SOC或者两个都配置(两个触发,其中一个产生时都会进行转换)。

2.3 CONVERTER与Reference voltage generator模块

        经过采样,保持,最后送入CONVERTER量化环节,此前已经通过SOC模块设置好了ADC的采样与保持,然后Reference voltage generator模块通过寄存器ADCCTL1[ADCREFSEL ]寄存器选择使用外部参考电压还是内部参考电压。

        下图展示同步模式/转换后EOC的时序图,当不设置特定优先级,那么SOC0将先开始采样保持,当7+13个采样、保持、量化时钟后,SOC1开始量化,在13个时钟周期后,才开始SOC2的采样。

        具体在哪个EOC信号边沿触发ADCINT中断,可在ADCCTL1.INTPULSEPOS和INTSELxNy.bit.INTxSEL配合进行设置。

2.4 ADCCTL2控制寄存器

        该寄存器主要控制ADC的时钟分频与是否覆盖原数据,如果设置多个SOCx触发同一个ADC采样,由于两个SOCx会将结果存储到相同的ADCRESULTx寄存器中,可能会导致数据相互覆盖。ADCCTL2[ADCNOVERLAP]就是控制这种情况的。

2.5 INTSEL1N2寄存器

        该寄存器主要控制当EOCx信号来了之后,通过INTSELxNy[INTxSEL]选择通过哪个INT模块的哪个EOC信号作为触发源,比如设置INTSEL1N2.INT1SEL =0x01,就是设置ECO1作为ADCINT1中断的触发源,INTSEL1N2.INT1E选择是否使能ADC中断,INTSEL1N2.INT1CONT选择是否只要EOC脉冲生成,就会产生ADCINTy脉冲。总体中断产生的逻辑如图2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值