TMS320F283xD中文技术参考手册之ADC 您所在的位置:网站首页 brainstorm中文手册 TMS320F283xD中文技术参考手册之ADC

TMS320F283xD中文技术参考手册之ADC

2023-11-27 23:26| 来源: 网络整理| 查看: 265

TMS320F283xD中文技术参考手册之ADC 11. TMS320F28377D的ADC特征 11.1 ADC介绍

​ 这里介绍的ADC模块是逐次逼近型(SAR)ADC,具有可选的16位和12位分辨率。ADC由一个ADC核心和一个外围包装器组成。ADC核心由模拟电路组成,包含通道选择模拟开关MUX、采样保持电路、逐次逼近电路、电压基准电路和其它辅助模拟电路组成。ADC外围包装器由数字电路组成,用于配置和控制ADC。这些电路包含可编程的转换逻辑、结果寄存器、模拟电路接口、并行总线接口、后处理电路和其它片上模块接口。

​ 每个ADC模块包含一个采样保持电路。在同一片芯片上,各ADC模块都是相同的(被设计为多次复制),允许多个ADC模块同步采样或独立运行。ADC外围包装器是启动转换(SOC)的基础(见11.5节)。

11.2 ADC特性 ADC模块包含ADC核心和ADC外围包装器两部分,其中ADC核由多路模拟开关、采样保持S/H电路、逐次逼近电路、电压基准电路和其它模拟辅助电路组成;ADC外围包装器电路由ADC的控制和配置数字电路组成。TMS320F28377D有4个ADC模块,每个ADC模块有一个采样保持S/H电路,每个ADC模块被设计为在同一芯片上多种用途,允许同步采样或分时单独采样。每个ADC模块有16种可配置启动转换类型(SOCs)每个ADC模块有16个种独立可寻址的转换结果寄存器每个ADC模块有多种触发源:S/W 软件立即触发、所有ePWMs模块(ADCSOC A 或 B)、XINT2、Timer0/1/2、ADCINT1/2每个ADC模块有4个后处理块:满度偏移校准、设定值误差校准、通过中断和ePWM实现的高/低/过零比较能力、触发采样延时捕获 11.3 ADC模块框图

image-20201205095929357

11.4 ADC配置

ADC的一部分配置通过SOCs单独控制,另一部分配置通过ADC模块全局控制

项目配置性时钟ADC模块全局配置(1)分辨率ADC模块全局配置(1)基准电压源不能配置(只可用外部基准)信号模式ADC模块全局配置触发源SOC核单独配置(1)转换通道SOC核单独配置采集窗口时间SOC核单独配置(1)EOC定位ADC模块全局配置(提前或推迟)突发模式ADC模块全局配置(1)

(1) 将这些值不同地写入不同的ADC模块可能会导致ADC异步运行。有关ADC何时同步或异步运行的指导,请参阅第11.15.1节。

时钟配置:ADC的基础时钟由系统时钟(SYSCLK)提供,ADC基础时钟用于产生ADC采样窗口。ADCCTL2有一个分频域PRESCALE,用于确定ADC的实际时钟,供转换器使用。在16位模式,ADC核心需要大约29.5个ADCCLK周期来将瞬时电压值转换为一个数字量的处理,而在12位模式需要大约10.5个ADCCLK周期。分辨率的选择还将决定必要的采样窗口时间,见11.15.2节。

分辨率配置:ADC的分辨率决定了模拟信号范围被量化成数字值的精细程度,该ADC支持16位或12位的可配置分辨率。分辨率应通过调用AdcSetMode()或ADC_setMode()函数来配置,具体取决于使用的头文件,这是在C2000ware中的f2837xd_ac.c文件提供的。这些函数保证正确的配置加载到ADC配置寄存器,而且必须在设备复位后至少被调用一次。不要通过直接写ADCCTL2寄存器的值来配置分辨率。在ADC处于空闲状态(没有运行或挂起的SOCs)时,分辨率可以随时更改。在开始转换之前,更改分辨率之后不需要等待时间。如果SOCs在运行或挂起时分辨率被更改,SOCs可能产生不正确的转换结果。

电压基准:每一个ADC模块都有独立的VREFHI和VREFLO输入引脚,在外部基准模式下,这些引脚被用作基准比值,以确定ADC转换的输入范围。关于如何提供基准电压,请参阅第1.15.4节。注意:1)没有提供外部VREFLO引脚的芯片,VREFLO在芯片内部已经被连接到模拟地VSSA上了。2)请参考您芯片的数据手册以确定VREFHI和VREFLO允许的电压范围。3)外部基准模式需要在VREFHI引脚上接外部电容,请参考您芯片的数据手册来确定接多大的电容值。

信号模式:ADC支持两种信号模式,单端和差分模式。在单端模式下,转换器的输入电压通过一个单引脚(ADCINx)采样,参考VREFLO。在差分信号模式下,转换器的输入电压通过一对输入引脚,一个正极输入(ADCINxP)和另一个负极输入(ADCINxN)。实际的输入电压是两者之间的差值(ADCINxP - ADCINxN)。

注意:1)在16位差分信号模式下,VREFLO必须接到VSSA。

2)在差分信号模式下,其共模电压信号 V c m = ( A D C I N x P + A D C I N x N ) 2 Vcm = \frac{(ADCINxP + ADCINxN)}{2} Vcm=2(ADCINxP+ADCINxN)​,具体芯片的数据手册将对该电压需要多接近 ( V F E F H I + V R E F L O ) 2 \frac{(VFEFHI + VREFLO)}{2} 2(VFEFHI+VREFLO)​提出一些要求。注:将负输入连接到VSSA或VREFLO不满足上述条件。

3)差分信号模式的好处在于两输入引脚都遇到噪声时可以极大地被抵消。要实现最优效果,要通过同一差分信号输入的正极和负极布线,两者要尽可能地接近而且保持它们相对于信号基准的对称。信号模式应通过所提供的C2000ware组件中的F2837xD_Adc.c文件中的AdcSetMode()或ADC_setMode()函数配置,这些函数确保正确的配置加载到ADC的配置寄存中,这些函数必须在芯片复位后至少被调用一次。信号模式不能通过直接写ADCCTL2寄存器来配置。

期望的转换结果:基于给定的模拟输入电压,理想的期望数字转换由下表给定,小数部分被截断。

模拟信号转换为12位数字信号公式

模拟输入数字结果单端当ADCINy = VREFHIADCRESULTx=4095差分Invalid ModeInvalid Mode

模拟信号转换为16位数字信号公式

模拟输入数字结果单端Invalid ModeInvalid Mode差分当ADCINyP - ADCINyN 120ns120ns/5ns = 2424 – 1 = 23Signal 2>444ns444ns/5ns = 89 (round up)89 – 1 = 88Signal 3>110ns110ns/5ns = 2222 – 1 = 21Signal 4>291ns291ns/5ns = 59 (round up)59 – 1 = 58

​ 第2步,确定对应的ADC引脚连接到每个信号。这将高度依赖板子的布线。一旦引脚选定,决定CHSEL的值就比较简单了(详见下表)。

​ 多信号采样接线示例

信号名称ADC引脚CHSEL寄存器值Signal 1ADCINA55Signal 2ADCINA00Signal 3ADCINA33Signal 4ADCINA22

​ 有了上述表格的信息,就很容易生成SOC配置了:

AdcaRegs.ADCSOC0CTL.bit.CHSEL = 5; //SOC0将转换ADCINA5 AdcaRegs.ADCSOC0CTL.bit.ACQPS = 23; //SOC0使用采样窗口时间为24个SYSCLK时钟周期 AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 3;//SOC0开始转换触发信号为CPU1 Timer 2 AdcaRegs.ADCSOC1CTL.bit.CHSEL = 0; //SOC1 will convert ADCINA0 AdcaRegs.ADCSOC1CTL.bit.ACQPS = 88; //SOC1 will use sample duration of 89 SYSCLK cycles AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 3; //SOC1 will begin conversion on CPU1 Timer 2 AdcaRegs.ADCSOC2CTL.bit.CHSEL = 3; //SOC2 will convert ADCINA3 AdcaRegs.ADCSOC2CTL.bit.ACQPS = 21; //SOC2 will use sample duration of 22 SYSCLK cycles AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 3; //SOC2 will begin conversion on CPU1 Timer 2 AdcaRegs.ADCSOC3CTL.bit.CHSEL = 2; //SOC3 will convert ADCINA2 AdcaRegs.ADCSOC3CTL.bit.ACQPS = 58; //SOC3 will use sample duration of 59 SYSCLK cycles AdcaRegs.ADCSOC3CTL.bit.TRIGSEL = 3; //SOC3 will begin conversion on CPU1 Timer 2

​ 按照配置,当CPU1 Timer2产生一个事件(触发),SOC0、SOC1、SOC2和SOC3将最终按顺序采样和转换。ADCIN5(Signal 1)的转换结果放入ADCRESULT0,同样地,ADCIN0(Signal 2)、ADCIN3(Signal 3)、ADCIN2(Signal 4)的转换结果分别放入ADCRESULT1、ADCRESULT2、ADCRESULT3。

注意:根据Robin单向环形指针的位置,当收到CPU 定时器触发ADC可以在SOC0以前但不太可能开始转换SOC1、SOC2、SOC3。请参见 ADC转换优先级 以理解下一个转换的SOC如何选择。

SOCs软件触发

​ 在任意时刻,不论是否SOC已经被配置为接受一个指定的触发器,软件触发器可以设置使得SOC转换。软件触发通过写ADCSOCFRC1寄存器中的位域(字段)来完成。

​ 软件触发上面例子,无需等待CPU1 Timer2产生触发,通过一条语句就可以实现:

AdcaRegs.ADCSOCFRC1.all = 0x000F; //set SOC flags for SOC0 to SOC3 11.7 ADC转换优先级

​ 当多个SOC标志同时置位,优先级的两种形式之一决定了转换的秩序。默认的优先级方法是单向ROBIN循环,在这种方案中,没有SOC比其它SOC有固定的高的优先级。优先级依赖单向ROBIN循环指针(RRPOINTER)。RRPOINTER在ADCSOCPRIORITYCTL寄存器反映了最后一个SOC转换的指向位置。最高优先级的SOC被给予了比RRPOINTER值大的下一个值,在SOC15之后返回到SOC0。复位后的值是16,因为0指示着一个转换已经发生。当RRPOINTER等于16时,最高优先级为SOC0。当ADCCTL1.RESET位置位或者当SOCPRICTL寄存器被写时时,RRPOINTER会随着ADC模块的复位而复位。下表给出了单向循环优先级方法的示例:

A 复位之后,SOC0是优先级最高的SOC;SOC7收到触发器;SOC7配置通道被立即转换B RRPOINTER更改指针指向SOC7;SOC8是当前优先级最高的SOCC SOC2 & SOC12同时收到触发器;SOC12在单向循环的第一圈;因此接下来SOC12通道会转换而SOC2通道要保持挂起D RRPOINTER的值变为指向SOC12;SOC12配置通道转换E RRPOINTER的值变为指向SOC2;SOC3是当前优先级最高的SOCimage-20201208101125763image-20201208101405438image-20201208101429151image-20201208101501616image-20201208101521729

寄存器ADCSOCPRIORITY的SOCPRIORITY域也可用于为单个SOC分配最高优先级。当配置为最高优先级时,一个SOC将在当前转换完成后中断单向ROBIN循环,并将自己插入到下一个转换中。转换完成后,单向循环将在中断的地方继续运行。同时触发两个高优先级SOC时,尾号小的SOC将优先取得执行权。

最高优先级模式首先分配给SOC0,然后增加数字序号。这个值写入到SOCPRIORITY域当中,这个域定义了第1个SOC而不是优先级最高的(即当前正在转换的SOC序号)。换句话讲,如果一个值4被写入到SOCPRIORITY,而SOC0、SOC1、SOC2和SOC3同时被定义为最高优先级,SOC0的优先级最高。

​ 下表给出了使用最高优先级的例子

当SOCPRIORITY = 4的时例子:A 复位后,SOC4首先进入单向循环轮;SOC7收到触发器;SOC7配置通道立即开始转换;B RRPOINTER变为指向SOC7;SOC8在当前单向循环轮排在首位;C SOC2和SOC12同时收到触发器,SOC2中断单向循环轮而且SOC 2配置通道接下来转换时SOC 12保持挂起;D RRPOINTER继续指向7;SOC12配置通道当前开始转换;E RRPOINTER变为指向SOC12;SOC13在当前 单向循环轮排在首位;image-20201208104730749image-20201208104804470image-20201208104830652image-20201208113329926 11.8 突发模式 11.9 EOC和中断操作

​ 每个SOC都有一个对应的结束转换(EOC)信号。这个EOC信号可用于触发一个ADC中断。ADC可以被配置在采样窗口结束时或在在电压转换结束时产生EOC脉冲,这使用ADCCTL1寄存器的INTPULSEPOS位来配置。准确的EOC脉冲定位,见11.14节。

​ 每个ADC模块有4个可配置的ADC中断,这些中断可被16个EOC信号当中的任意一个触发。每个ADCINT标志位可被直接读取,进而确定相关的SOC是否完成,或者中断是否可以传递到PIE。

​ 注意:ADCCTL1.ADCBSY位清零并不能指示一组SOCs全部转换完成,仅表示ADC准备下一次转换。为了确定是否一组SOCs转换完成,可以链接一个ADCINT标志到一组SOC中的最后一个并且监测ADCINT标志位。

​ 下图显示ADC中断结构的框图

image-20201208163658566

中断溢出

​ 如果EOC信号要设置ADCINTFLG寄存器的标志位,而标志位已经置位,中断溢出将发生。默认地,溢出中断不会传递到PIE模块。当ADCINTFLG寄存器中一个给定的标志置位而溢出发生时,.ADCINOVF寄存器中相应的标志位置位。此溢出标志位仅用于探测溢出是否发生,而不能阻止进一步的中断传递到PIE模块。

​ 当一个ADC中断溢出可能发生时,应用程序在中断服务程序(ISR)应该检查或后台循环中适当的ADCINTOVF标志,并在检测到溢出时采取适当的行动。下面的代码片段显示了在中断服务程序(ISR)如何检查ADCINOVR标志并试图清除ADCINT标志。

AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //clear INT1 flag for ADC-A if(1 == AdcaRegs.ADCINTOVF.bit.ADCINT1) //ADCINT overflow occurred { AdcaRegs.ADCINTOVFCLR.bit.ADCINT1 = 1 //Clear overflow flag AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1 //Re-clear ADCINT flag }

连续中断模式

​ ADCINTSEL1N2和ADCINTSEL3N4寄存器中的INTxCONT位配置当一个ADCINTFLAG还没有从一个先前的中断中清除时,如何处理中断。默认情况下禁用此模式,并且不会向PIE模块传递额外的重叠中断。通过激活此模式,ADC中断会始终向PIE发送中断信号。不管配置如何,如果中断发生,ADCINTOUF寄存器将被设置,ADCINTFLAG一直置位。

11.10 后处理块

​ 每个ADC模块包含4个后处理块(PPB)。使用ADCPPBxCONFIG.CONFIG位域配置,这些后处理块PPB可以关联到任意16个RESULT结果寄存器。每个PPB能同时去除与一个ADCIN通道相关的偏移量,减去一个基准电压值,标志一个过零点,标志一个极大值或极小值。更多地,这些过零点和比较标志可以触发一个PWM和/或产生一个中断。一个PPB也能记录与PPB相关的ADC模块被SOC触发时和它实际被采样之间的延时。下图展示出每个PPB的结构。后面的子节解释了每个子模块的使用。

image-20201208192720090

PPB偏移修正

​ 在大多数应用中,外部传感器和信号源都会产生偏移。一个ADC偏移的全局修正值并不足以补偿他们的偏移,原因在于通道与通道之间的差异。后处理块(PPB)可以零开销去除这些偏移,在严格的控制环路中节省了大量的时间。要完成偏移修正,首先通过写ADCPPBxCONFIG.CONFIG指向期望的SOC,然后写一个偏移修正值到ADCPPBxOFFCAL.OFFCAL寄存器。后处理块(PPB)会自动地从原始的转换结果加上或减去OFFCAL寄存器的值,并将运算后的结果保存到ADCRESULT寄存器当中。对于12位或16位模式,这个加/减法将分别在低端达到0,在高端达到4095或65535。

注意:

写‘0’到OFFCAL寄存器可有效地禁止偏移修正功能,原始的转换结果会原原本本地传到ADCRFESULT寄存器当中。

多个PPBs能够指向同一个SOC,在这种情况下,PPB编号最高的OFFCAL的值将会被实际地应用。

特殊情况下,在SOC0上使用PPB需要多加小心,因为默认地所有PPB都会指向这个SOC0。这可能会导致无意识地用高编号的PPB的偏移修正值覆盖掉低编号的PPB的偏移修正值。

PPB误差校准

​ 在大多数应用中,来自ADC转换的数据输出与设定点或期望值的误差必须计算出来。换句话说,对于控制计算而言,双极信号是必要的或方便的。PPB可以自动地完成这些功能,进而减少采样到输出的延迟且减少软件开销。

​ 要完成误差校准,首先,通过写ADCPPBxCONFIG.CONFIG指向期望的SOC,然后向ADCPPBxOFFCAL.OFFREF寄存器写入一个值。后处理块(PPB)会自动从ADCRESULT寄存器中的值减去OFFREF寄存器的值,并保存到ADCPPBxRESULT寄存器当中。这个减运算会产生一个32位有符号数结果。当然,通过设置ADCPPBxCONFIG寄存器中的TWOSCOMPEN位,也能够在保存到ADCPPBxRESULT寄存器之前选择翻转计算值。

注意:

在12位模式,写入OFFREF寄存器的值不要大于12位;

对每个PPB而言,因为PPBxRESULT寄存器是独立的,能够将多个PPBs指向同一个SOC并得到各自不同的结果;

向OFFREF寄存器写0会导致误差校准功能失效,ADCRESULT寄存器的值会原原本本地传递到ADCPPBxCONFIG寄存器

PPB限值检测和过零点检测

​ 许多应用会针对ADC转换结果执行限值检查。PPB可自动针对上限和下限值或者ADCPPBxRESULT改变符号时执行检查。基于这些比较,它可以自动产生一个PWM触发和/或中断,降低采样到ePWM之间的延时的同时也减少了软件开销。此功能还使安全意识强的应用程序能够基于ADC转换范围外触发ePWM,而无需任何CPU介入。

​ 要开启这项功能,首先,通过写ADCPPBxCONFIG.CONFIG指向期望的SOC,然后向ADCPPBxTRIPHI.LIMITHI寄存器和ADCPPBxTRIPLO.LIMITLO寄存器写入一个或都写入值(过零检测无需做进一步配置)。无论何时,只要超过这些限值,ADCEVTSTAT寄存器中的PPBxTRIPHI位或PPBxTRIPLO位将置位。注意,ADCEVTSTAT寄存器当中的PPBxZERO位由结束采样信号(EOC)门控,而不是由ADCPPBxRESULT寄存器中符号变化门控。ADCEVTCLR寄存器有相应的位域可用来清除这些事件标志。ADCEVTSEL寄存器有相应的位域允许这些事件传递给PWM。ADCINTSEL寄存器有相应的位域允许这些事件传递给PIE。

​ 对于一个给定的ADC模块(如下图)而言,其所有的后处理块(PPB)之间共享同一个PIE中断。

image-20201209142411527

注意:

过零检测和限值比较参考ADCPPBxRESULT寄存器。这包括由OFFCAL和OFFREF寄存器应用的修正。TRIPHI和TRIPLO不能实现有符号比较。当使用限值比较功能时,推荐把OFFREF清为0。

如果需要对来自同一个ADC模块的不同PPB事件采取不同的操作,那么ADCEVTINT中断服务程序(ISR)必须读取ADCEVTSTAT寄存器中的PPB事件标志,以确定是哪个事件导致了中断。

如果需要对上限比较、下限比较和/或过零检测分别产生不同的ePWM触发,可以通过将多个PPB指向同一个SOC来实现。

过零检测电路认为的过零是从零到正。

PPB采样延时捕获

​ 当多个控制环异步地在同一个ADC运行,那么一个ADC从两个或更多控制环请求这个机会会发生冲突,从而导致其中一个采样延迟。这在系统中显示为测量误差。通过知道延时发生的时间和已经发生的延迟量,软件可以采用外推法技术来减少误差。

​ 为此,每个后处理块(PPB)在ADCPPBxSTAMP寄存器中都有DLYSTAMP位域(字段),此位域将记录在相关SOC被触发和开始转换之间的SYSCLK周期的数量。

​ 这是通过占用一个基于SYSCLK的全局12位自由运行计数器来实现的,该计数器位于ADCCOUNTER寄存器的FREECOUNT字段中。当SOC相关的触发器到达时,这个计数器的值被加载到位字段ADCPPBxTRIPLO.REQSTAMP中。当SOC的实际采样窗口开始时,REQSTAMP中的值将从当前FREECOUNT值中减去,并存储在DLYSTAMP中。

注意:

如果超过4096个SYSCLK周期在SOC触发器和SOC实际开始采样之间消耗,FREECOUNT寄存器则会产生超过一次的溢出,导致DLYSTAMP的值不正确。所以在使用非常慢的转换来要小心,要防止这件事的发生。

如果通过软件触发相关的SOC,则采样延迟捕获功能将不起作用。然而,如果软件触发不同的SOC导致与PPB相关的SOC被延迟,将会正确地记录延迟时间。

11.11 开路/短路检测电路

​ 开路/短路检测电路(OSDETECT)可用于检测系统中(ADC模块)引脚的错误。这个电路连接到ADC输入通道多路选择器之后以及采样保持S+H电路之前,如图11-11展示。

注意:

分压电阻允许偏差非常宽,因为这个特性不能用于核查转换准确度

对于实现和模拟输入通道的有效性,请查阅芯片数据手册

由于高驱动阻抗,需要采样保持S+H时间远大于ADC最小限值时间

​ 图11-11 开路/短路检测电路

image-20201211235943021

通过向ADCOSDETECT寄存器的DETECTCFG位域(字段)写入一个值,此电路可运行。在任何转换的采样保持S+H相位期间,这将导致此电路在输入信号源上叠加一个电压。这个电压和OSDETECT电路的驱动强度对不同的DETECTCFG设置由表11-9给出

​ 表11-9 DETECTCFG设置

ADCOSDETECT.DETECTCFG源电压S4S3S2S1驱动电阻0OffOpenOpenOpenOpenOpen1Zero ScaleClosedOpenOpenClosed5K || 7K2Full ScaleOpenClosedClosedOpen5K || 7K35/12 VDDAOpenClosedOpenClosed5K || 7K47/12 VDDAClosedOpenClosedOpen5K || 7K5Zero ScaleOpenOpenOpenClosed5K6Full ScaleOpenOpenClosedOpen5K7Zero ScaleClosedOpenOpenOpen7K 11.11.1 实现

​ OSDETECT典型的电路实现包括信号源、串联电阻Rs、分流电容Cp、OSDETECT电阻等效为ROSDETECT、OSDETECT电压等效为VOSDETECT,详见图11-12,而且可以作为基础计算进入采样电容的信号电平。ROSDETECT和VOSDETECT分别等效输入电阻和由OSDETECT电路出力的电压源,这些OSDETECT电路在表11-9中显示了不同配置设置的值。如果信号源VS驱动,OSDETECT特性启用时,将输入信号导出到S/H,参考图11-12。

​ 图11-12 OSDETECT使能时等效输入电路

image-20201216235819010

​ 输入阻抗Rs和Cp

11.12 上电顺序

​ 在芯片上电或系统级复位,ADC将被掉电或禁止。当ADC上电(启动)时,使用以下顺序:

设置PCLKCR13寄存器中的位,使能期望的ADC的时钟。ADCCTL2寄存器中PRESCALE位域中设置期望的ADC时钟分频器。通过设置ADCCTL1寄存的ADCPWDNZ位使ADC上电。采样之前允许一个延时,这个必要的时间见数据手册。

​ 如果多个ADC同时上电,步骤1和步骤3可以在一条写指令中完成所有ADC的操作。此外,只有一个延迟是必要的,只要它发生后,所有的ADC已经开始上电。

11.13 ADC校准

​ 在芯片制造和测试期间,德州仪器与缓冲DAC一起校准了ADC的增益、偏移和线性。这些修正设置嵌入到TI保留的OTP存储器当中,作为C语言可调用的函数。

Device_cal()函数用于把ADC和DAC偏移修正值从OTP存储器中拷贝到它们各自的修正寄存器中。CalAdcXINL()函数用于把线性修正值从OTP存储器中拷贝到它们各自的修正寄存器中。每个可能的分辨率和信号模式组合都需要不同的偏移修正值,GetAdcOffsetTrimOTP(Uint16)函数携带一个与ADC对应的分辨率、信号模式的输入值,此函数从OTP存储器返回相应的偏移修正值,然后用户把这个值移动到ADC偏移修正寄存器中。修正函数Device_cal()中可调用C2000ware组件中的ADC_setOFFSETTRIM()、ADC_setINLTRIM()和DAC_setDACTRIM()函数。这些函数从TI保留在OTP存储器中相应的存储位置取得修正值,这些修正值在测试期间和模拟模块寄存器地址一起被拷贝到相应保存。

​ 直到加载相应的工厂修正值之前,ADC(和其它模块)不能保证在数据手册的技术参数内运行。同样地,如果出厂设置之外的修正值写入到修正寄存器,ADC(和其它模块)也不能保证在数据手册的技术参数内运行。

​ 启动ROM会调用校准函数,因此修正值在初始化已经加载好了,而无需用户介入。然而,如果修正值由于模块复位或一些其它原因修改而清零,用户可以调用修正函数(在头文件当中声明)。

​ 在ADC校准期间,ADC寄存器和表格描述的相关函数调用请参阅第11.13.2节。

11.13.1 ADC零偏移校准

​ 零偏移误差的定义是:在单端模式操作时,当电压为VREFLO时转换结果与0的差值;在差分模式操作时,当电压为ADCINxP = ADCINxN时转换结果与满度值的二分之一( 2 12 o r 2 16 2 \frac{2^{12} or 2^{16}}{2} 2212or216​)的差值。零偏移误差可能为正也可能为负。要纠正这个误差,将等幅度和相反极性调整后的值写入ADCOFFTRIM寄存器中。在此误差值定入该寄存器将要应用之前,ADC结果寄存器中的结果是有效的。此操作完全包含在ADC核心中,因此结果的时序不会受到影响,对于任何修正值,ADC的全动态范围都将保持不变。

​ 使用GetAdcOffsetTrimOTP(Uint16)函数,可以把工厂校准的偏移误差加载到ADCOFFTRIM寄存器中。用户可以修改ADCOFFTRIM寄存器以补偿额外的包括期望的应用环境在内的偏移误差,但这通常不是实现数据手册指定的性能所必需的。

​ 在ADC偏移校准期间,相关函数调用和ADC寄存器的表格描述请参阅第11.13.2节。

注意:不论转换器的分辨率,每个ADCOFFTRIM的步长大小是 ( V R E F H I − V R E F L O ) 65535 \frac{{(VREFHI}-{VREFLO)}}{65535} 65535(VREFHI−VREFLO)​。

​ 在12位分辨率单端采样模式,使用下面的步骤反复校准ADC偏移误差:

设置ADCOFFTRIM寄存器的值为0x70(+112步)。对于保留在内核的负偏移,就这样加上一个伪造的偏移。在VREFLO(内部连接)上执行16个转换的倍数,累积结果(例,32 * 16个转换 = 512个转换)。将累加结果除以16的倍数(例,对于512次转换,除以32)。设置112 - 第3步的结果到ADCOFFTRIM寄存器。

​ 在16位分辨率差分采样模式,使用下面的步骤反复校准ADC偏移误差:

设置ADCOFFTRIM寄存器的值为0。将ADCINxP和ADCINxN外部的连接线短接在一起,并接到接近Vrefcm的电压上,累积16个转换的倍数(例,32 * 16个转换 = 512个转换)。将累加结果除以转换的数值(例,对于512次转换,除以512)。设置0 - 第3步的结果到ADCOFFTRIM寄存器。 11.13.2 在OTP中ADC校准程序

​ 在工厂测试期间,每一颗芯片的ADC偏移(ADCOFFTRIM寄存器)和ADC线性校准(ADCINLTRIM1-6寄存器)的校准值都经过测量。相应的ADC偏移和线性校准值,以及保存这些校准值到相关ADC寄存器的函数,都已经保存在OTP存储器当中。下面的表格描述了函数调用、函数地址指针位置,以及在芯片启动时由Device_cal()顺序调用到ADC寄存器中的值或任意时刻由C2000Ware组件函数调用的ADC_setMode()函数。

​ 表11-10 OTP存储器中的ADC校准函数

函数名称指针地址(OTP)描述填入的寄存器ADC_calADCAINL0x0703B4ADCA线性校准函数ADCA INLTRIM1-6ADC_calADCBINL0x0703B2ADCB 线性校准函数ADCB INLTRIM1-6ADC_calADCCINL0x0703B0ADCC 线性校准函数ADCC INLTRIM1-6ADC_calADCDINL0x0703AEADCD 线性校准函数ADCD INLTRIM1-6ADC_getOffsetTrim0x0703ACADCA-D 偏移校准函数ADCA-D ADCOFFTRIM 11.14 ADC时序

​ 一个模拟电压到数字值的转换进程被分解为S+H阶段和转换阶段。ADC采样和保持电路(S+H)由SYSCLK计时,当进入ADC转换进程时由ADCCLK计时。ADCCLK由SYSCLK基于ADCCTL2寄存器PRESCALE域(字段)分频产生。

​ 采样保持时间(S+H),是SOC开始转换的(ACQPS字段的值+1) × \times ×SYSCLK周期时间。用户必须确保这个时间超过1个ADCCLK周期和数据手册当中指定的最小采样保持(S+H)的时间。在12位模式,转换时间大约10.5个ADCCLK周期,16位模式大约29.5个ADCCLK周期。精确的转换时间总是SYSCLK周期的整数倍。详细的时序见11.14.1时序图表.

11.14.1 ADC时序表

​ 下表显示了下面两种SOC假设的ADC转换时间

SOC0和SOC1被配置为使用相同的触发器当触发器发生时,没有其它SOCs转换或挂起Robin环形指针处于导致SOC0先进行转换的状态ADCINTSEL被配置为在SOC0转换结束时ADCINT标志置位,是否此标志传递给CPU而导致中断由PIE模块中的配置来决定

​ 下面表格列出了时序图中标识的参数

表11-11 ADC时序参数

参数描述tSHtSH为S+H的窗口时间在此窗口的结尾,采样保持S+H电容上的值为要转换到数字值的电压。这个时间由(ACQPS + 1)个SYSCLK周期给出,ACQPS可以为每个SOC单独配置,因此对于不同的SOCs tSH不必相同。注意:采样保持S+H电容上的值在S+H窗口结束前大约5ns被捕获,不论芯片时钟如何设置。tLATtLAT时间为从S+H窗口结束直到ADC结果锁存到ADCRESULTx寄存器这段时间。如果在此时间以前读取ADCRESULTx寄存器,会返回上一次的转换结果。tEOCtEOC时间为从采样保持S+H窗口结束直到下一次ADC转换开始之前的这段时间。后面的采样在转换结果锁存至寄存器之前启动。在16位分辨率模式,与转换结果锁存一致;而在12位分辨率模式,后面的采样可在转换结果锁存至寄存器之前启动。tINTtINT时间为从采样保持S+H窗口结束直到ADCINT标志置位(如果配置)这段时间。如果ADCCTL1寄存器中INTPULSEPOS位置位,tINT将与转换结果开始锁存到结果寄存器一致。如果INTPULSEPOS位清零,tINT将与采样保持S+H窗口结束一致。如果tINT触发读取ADC结果寄存器(直接通过DMA或间接通过触发中断服务程序ISR读取结果),需要关心的是必须确保读取在结果锁存之后(否则,读到的是上次的结果)。如果INTPULSEPOS位清零,而且ADCINTCYCLE寄存器位域(字段)不为零,在ADCINT标志置位之前将有OFFSET个SYSCLK周期延时。此延时可用于进入中断服务程序ISR或在准确的采样就续时间触发DMA。

图11-13 12位采样模式早期中断模式的ADC时序image-20201225235745056

图11-14 12位采样模式晚期中断模式的ADC时序image-20201226000157202

图11-15 16位采样模式早期中断模式的ADC时序

image-20201226000327099

图11-16 16位采样模式晚期中断模式的ADC时序(SYSCLK周期数)image-20201226000430545

表11-12 12位采样模式中ADC时序(SYSCLK周期数)

ADCCTL2.PRESCALE预分频比tEOCtLATtINT (早)tINT (晚)01111301122212302132.5262802643313403153.5363903664414404174.5464904685515505195.556600561066165061116.566700661277176071137.576810761488186081158.58691086

表11-13 16位采样模式中ADC时序

ADCCTL2.PRESCALE预分频比tEOCtLATtINT (早)tINT (晚)01313203122606106032.5757507543909109053.5104106010464119120011974.5134134013485149150014995.516316501631061781790178116.519319301931272082090208137.522222402221482372380237158.52522520252 11.15 附加信息

​ 下面的小节包含附加的实用信息。

11.15.1 确保同步操作

​ 为了获得最佳的性能,芯片上所有的ADCs模块应当同步操作。芯片数据手册对不同操作模式之间的参数差异均列出了同步和异步模式下的性能。

​ 为确保同步操作,芯片上所有的ADCs模块应当同步运行。这可以通过写配置信息到所有的ADCs模块来实现,这些配置信息导致所有的ADCs模块的采样和转换阶段精确地对齐。最容易的实现这个的方式是为每一个ADC模块的SOC配置写入完全一样的值,用于触发器选择和ACQPS(采样保持S+H时间)。

11.15.1.1 基本同步操作

​ 下面的例子在ADCA和ADCB模块上分别用相同的触发器选择和ACQPS值配置了两个SOCs,这将导致ADCA和ADCB模块之间同步运行。对于超过两个ADCs模块的芯片,可以使用相同的原则去同步所有的ADCs模块。

例子:基本同步操作

AdcaRegs.ADCSOC0CTL.bit.CHSEL = 4; //SOC0 将转换ADCINA4 AdcaRegs.ADCSOC0CTL.bit.ACQPS = 19; //SOC0 将使用20个SYSCLK周期采样时间 AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 10; //SOC0 将在ePWM3 SOCB上开始转换 AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0; //SOC0 将转换ADCINB0 AdcbRegs.ADCSOC0CTL.bit.ACQPS = 19; //SOC0 使用20个SYSCLK周期采样时间 AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 10; //SOC0 将在ePWM3 SOCB上开始转换 AdcaRegs.ADCSOC1CTL.bit.CHSEL = 4; //SOC1 将转换ADCINA4 AdcaRegs.ADCSOC1CTL.bit.ACQPS = 30; //SOC1 将使用31个SYSCLK周期采样时间 AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 10; //SOC1 将在ePWM3 SOCB上开始转换 AdcbRegs.ADCSOC1CTL.bit.CHSEL = 1; //SOC1 将转换ADCINB1 AdcbRegs.ADCSOC1CTL.bit.ACQPS = 30; //SOC1 将使用31个SYSCLK周期采样时间 AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 10; //SOC1 将在ePWM3 SOCB上开始转换

图11-17 例子:基本同步操作

image-20201227235404005

图11-17有几个注意事项,首先,当尾缀数字相同的SOCs ACQPS值必须相同,尾缀数字不同的SOCs可以使用不同的ACQPS值。这是因为,同步运行不需要一个单独的全局采样保持S+H时间,而是仅仅同时采样的通道需要相同的采样保持S+H时间。从例子来看,另一个重要的点是任何通道选择的值可用于任何SOC。最后,此示例假设圆形Robin循环操作。如果高优先级SOCs被使用,那么必须在所有的ADCs模块上配置为一样的优先级。

11.15.1.2 多触发源的同步操作

​ 只要每组SOCs有相同的触发选择和ACQPS设置,仍然实现同步操作时可以使用多触发源。

​ 下面的例子演示了ADCA和ADCB模块之间的同步操作,使用三个SOCs和两个触发源。图11-18演示了相对触发器的任何时序组合仍然导致同步操作。

例:多触发源的同步操作

AdcaRegs.ADCSOC0CTL.bit.CHSEL = 4; //SOC0 will convert ADCINA4 AdcaRegs.ADCSOC0CTL.bit.ACQPS = 19; //SOC0 will use sample duration of 20 SYSCLK cycles AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 10; //SOC0 will begin conversion on ePWM3 SOCB AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0; //SOC0 will convert ADCINB0 AdcbRegs.ADCSOC0CTL.bit.ACQPS = 19; //SOC0 will use sample duration of 20 SYSCLK cycles AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 10; //SOC0 will begin conversion on ePWM3 SOCB AdcaRegs.ADCSOC1CTL.bit.CHSEL = 4; //SOC1 will convert ADCINA4 AdcaRegs.ADCSOC1CTL.bit.ACQPS = 30; //SOC1 will use sample duration of 31 SYSCLK cycles AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 10; //SOC1 will begin conversion on ePWM3 SOCB AdcbRegs.ADCSOC1CTL.bit.CHSEL = 1; //SOC1 will convert ADCINB1 AdcbRegs.ADCSOC1CTL.bit.ACQPS = 30; //SOC1 will use sample duration of 31 SYSCLK cycles AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 10; //SOC1 will begin conversion on ePWM3 SOCB AdcaRegs.ADCSOC2CTL.bit.CHSEL = 0; //SOC2 will convert ADCINA0 AdcaRegs.ADCSOC2CTL.bit.ACQPS = 19; //SOC2 will use sample duration of 31 SYSCLK cycles AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 2; //SOC2 will begin conversion on CPU Timer1 AdcbRegs.ADCSOC2CTL.bit.CHSEL = 2; //SOC2 will convert ADCINB2 AdcbRegs.ADCSOC2CTL.bit.ACQPS = 19; //SOC2 will use sample duration of 31 SYSCLK cycles AdcbRegs.ADCSOC2CTL.bit.TRIGSEL = 2; //SOC2 will begin conversion on CPU Timer1

图11-18 例子:多触发源的同步操作

image-20201229000142383

注意:除了软件触发以外任何触发源都可以在TRIGSEL域(字段)中选择使用。没有办法同时为所有ADCs模块发出软件触发,因此很可能导致异步操作。只要ADCINTSOCSEL1和ADCINTSOCSEL2寄存器对所有的ADCs模块配置相同,并且软件触发不用于启动转换链,ADCINT1或ADCINT2也可用作一个触发器。

11.15.1.3 非均匀SOC编号的同步操作

​ 如果仅使用一个触发器,一个ADC模块可以使用比其它ADCs模块更多的SOCs时仍然同步操作。

例子:非均匀SOC编号的同步操作

AdcaRegs.ADCSOC0CTL.bit.CHSEL = 4; //SOC0 will convert ADCINA4 AdcaRegs.ADCSOC0CTL.bit.ACQPS = 19; //SOC0 will use sample duration of 20 SYSCLK cycles AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 10; //SOC0 will begin conversion on ePWM3 SOCB AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0; //SOC0 will convert ADCINB0 AdcbRegs.ADCSOC0CTL.bit.ACQPS = 19; //SOC0 will use sample duration of 20 SYSCLK cycles AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 10; //SOC0 will begin conversion on ePWM3 SOCB AdcaRegs.ADCSOC1CTL.bit.CHSEL = 4; //SOC1 will convert ADCINA4 AdcaRegs.ADCSOC1CTL.bit.ACQPS = 30; //SOC1 will use sample duration of 31 SYSCLK cycles AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 10; //SOC1 will begin conversion on ePWM3 SOCB AdcbRegs.ADCSOC1CTL.bit.CHSEL = 1; //SOC1 will convert ADCINB1 AdcbRegs.ADCSOC1CTL.bit.ACQPS = 30; //SOC1 will use sample duration of 31 SYSCLK cycles AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 10; //SOC1 will begin conversion on ePWM3 SOCB AdcaRegs.ADCSOC2CTL.bit.CHSEL = 0; //SOC2 will convert ADCINA0 AdcaRegs.ADCSOC2CTL.bit.ACQPS = 19; //SOC2 will use sample duration of 31 SYSCLK cycles AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 10; //SOC2 will begin conversion on ePWM3 SOC

图11-19 例:非均匀SOC编号的同步操作image-20201230000454516

​ 注意:如果触发器在所有SOCs之前再次到来完成他们的转换,ADCB模块将在SOC0上立即开始转换,而ADCA直到SOC2转换完成之前将不会再次开始转换SOC0。这将导致异步操作,因此必须关心不要使触发器溢出。

图11-20 例:非均匀SOC编号的同步操作——触发溢出

image-20201230203820600

11.15.1.4 不同分辨率的同步操作

​ 配置不同ADCs模块使用不同分辨率将导致异步运行。产生这种情况的原因是对于12位模式和16位模式来说转换时间是不一样的。同步操作需要转换阶段的开始和结束均要对齐,因此即使使用相同的采样保持S+H窗口时间,也不会产生同步操作。

​ 例子:不同分辨率的异步操作

//ADCA = 12-bit mode AdcaRegs.ADCSOC0CTL.bit.CHSEL = 4; //SOC0 will convert ADCINA4 AdcaRegs.ADCSOC0CTL.bit.ACQPS = 50; //SOC0 will use sample duration of 51 SYSCLK cycles AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 10; //SOC0 will begin conversion on ePWM3 SOCB //ADCB = 16-bit mode AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0; //SOC0 will convert ADCINB0/B1 AdcbRegs.ADCSOC0CTL.bit.ACQPS = 50; //SOC0 will use sample duration of 51 SYSCLK cycles AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 10; //SOC0 will begin conversion on ePWM3 SOCB

图11-21 例:不同分辨率的异步操作

image-20201230205120940

​ 为了实现同时使用12位和16位分辨率的同步操作,转换必须在同一种分辨率下并行完成。一次转换在一种分辨率下完成,CPU必须在所有ADCs模块上切换分辨率并且产生另一次触发(这个触发器不能是软件SOC强制触发,因为通过这种方法所有的ADCs模块都不能同时开始)。

图11-22 例:不同分辨率的同步操作

image-20201230210544197

11.15.1.5 非重叠转换

​ 如果转换时序可由用户设置保证不重叠,那么就没有必要在所有的ADCs模块上把SOCs配置相同以实现与同步操作等效的执行效果。举个例子,如果在一个系统中,两个ADC触发器来自两个相位一直差180度的ePWM源,那么SOC0可用于带有不同的触发源和不同的ACQPS值的ADCA和ADCB模块。

​ 例:非重叠转换操作

//ePWM3 SOCA and SOCB are 180 degrees out of phase AdcaRegs.ADCSOC0CTL.bit.CHSEL = 4; //SOC0 will convert ADCINA4 AdcaRegs.ADCSOC0CTL.bit.ACQPS = 19; //SOC0 will use sample duration of 20 SYSCLK cycles AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 10; //SOC0 will begin conversion on ePWM3 SOCB AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0; //SOC0 will convert ADCINB0 AdcbRegs.ADCSOC0CTL.bit.ACQPS = 19; //SOC0 will use sample duration of 20 SYSCLK cycles AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 9; //SOC0 will begin conversion on ePWM3 SOCA

图11-23 例:具有非重叠转换的同步等效操作

image-20201230225911215

11.15.2 选择一个采集窗口时间

​ 正确的操作,必须允许ADC输入信号为采样保持电容Ch有充分的时间充电。典型地,选择的采样保持S+H时间时可把采样电容充电至最终值的 1 2 L S B \frac{1}{2} LSB 21​LSB或 1 4 L S B \frac{1}{4} LSB 41​LSB,这依赖于可容忍的固定误差。

​ 所需的固定时间的近似值由使用的RC固定模型来决定。这个模型的时间常数由等式给出:

​ τ = ( R s + R o n ) × C h + R s × ( C s + C p ) \tau = (Rs + Ron) \times Ch + Rs \times (Cs + Cp) τ=(Rs+Ron)×Ch+Rs×(Cs+Cp)

​ 而且时间常数的数量需要用下面的等式求得:

​ k = l n ( 2 n s e t t l i n g   e r r o r ) − l n ( C s + C p C h ) k = ln( \frac{2^n}{settling \ error}) - ln(\frac{Cs + Cp}{Ch}) k=ln(settling error2n​)−ln(ChCs+Cp​)

​ 因此总的采样保持S+H时间至少设置如下:

​ t = k × τ t = k \times \tau t=k×τ

​ 在芯片的数据手册中的ADC输入模型提供下面的参数:

n = ADC 分辨率(单位 bits)RON = ADC 采样切换电阻(单位 Ω \Omega Ω)CH = ADC 采样电容 (单位 pF)CP = ADC 通道寄生电容(单位 pF)

​ 并且下面的参数依赖于应用设计:

固定误差 = 可容忍的误差(LSBs)RS = ADC驱动电路源阻抗(单位 Ω \Omega Ω)CS = ADC输入引脚上的电容(单位 pF)

​ 举个例子,假设以下参数:

n = 12-bitsRON = 500 Ω \Omega ΩCH = 12.5pFCp = 12.7pF固定误差 = 1 4 \frac {1}{4} 41​LSBRS = 180 Ω \Omega ΩCS = 150pF

​ 时间常数可计算为:

​ τ = ( 180 Ω + 500 Ω ) × 12.5 p F + 180 Ω × ( 150 p F + 12.7 p F ) = 8.5 n S + 29.3 n S = 37.8 n S \tau = (180 \Omega + 500 \Omega) \times 12.5pF + 180 \Omega \times (150pF + 12.7pF) = 8.5nS + 29.3nS = 37.8nS τ=(180Ω+500Ω)×12.5pF+180Ω×(150pF+12.7pF)=8.5nS+29.3nS=37.8nS

​ 且需要时间常数的个数为:

​ k = l n ( 2 12 0.25 ) − l n ( 150 p F + 12.7 p F 12.5 p F ) = 9.70 − 2.57 = 7.13 k = ln( \frac{2^{12}}{0.25}) - ln(\frac{150pF+12.7pF}{12.5pF}) = 9.70 - 2.57 = 7.13 k=ln(0.25212​)−ln(12.5pF150pF+12.7pF​)=9.70−2.57=7.13

​ 因此采样保持时间S+H应至少设置为:

​ 37.8 n s × 7.13 = 270 n S 37.8ns \times 7.13 = 270nS 37.8ns×7.13=270nS

​ 如果SYSCLK = 100MHz,即每个SYSCLK周期是10nS。采样保持S+H时间应为270nS / 10nS = 27.0 SYSCLKs,因此对于这个输入ACQPS应设置至少CEILING(27.0) - 1 = 26。

​ 这里给出的是所需采样窗口的粗略估算,更好的方法是使用ADC输入模型搭建电路,源阻抗/电容模型,以及SPICE(或类似软件)中的任何电路板寄生效应和模拟以确认采样电容是否达到所需的准确度。

注意:芯片数据手册会指定一个最小的ADC S+H窗口时间。不要使用ACQPS值给出的时间小于这个规定时间。

11.15.3 实现同步采样

​ 虽然每个ADC模块都没有双采样保持S+H电路,实现同步采样却很容易。这可以通过在两个或更多ADC模块上使用相同的触发源而设置SOC触发器来实现。下面的例子演示了基于一个ePWM3事件的4个同步采样——ADCINA3,ADCINB5,ADCINC5和ADCIND2被采样。采样窗口使用了20个SYSCLK周期,却可能是不同的持续时间。

AdcaRegs.ADCSOC0CTL.bit.CHSEL = 3; //SOC0 will convert ADCINA3 AdcaRegs.ADCSOC0CTL.bit.ACQPS = 19; //SOC0 will use sample duration of 20 SYSCLK cycles AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 10; //SOC0 will begin conversion on ePWM3 SOCB AdcbRegs.ADCSOC0CTL.bit.CHSEL = 5; //SOC0 will convert ADCINB5 AdcbRegs.ADCSOC0CTL.bit.ACQPS = 19; //SOC0 will use sample duration of 20 SYSCLK cycles AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 10; //SOC0 will begin conversion on ePWM3 SOCB AdccRegs.ADCSOC0CTL.bit.CHSEL = 5; //SOC0 will convert ADCINC5 AdccRegs.ADCSOC0CTL.bit.ACQPS = 19; //SOC0 will use sample duration of 20 SYSCLK cycles AdccRegs.ADCSOC0CTL.bit.TRIGSEL = 10; //SOC0 will begin conversion on ePWM3 SOCB AdcdRegs.ADCSOC0CTL.bit.CHSEL = 2; //SOC0 will convert ADCIND2 AdcdRegs.ADCSOC0CTL.bit.ACQPS = 19; //SOC0 will use sample duration of 20 SYSCLK cycles AdcdRegs.ADCSOC0CTL.bit.TRIGSEL = 10; //SOC0 will begin conversion on ePWM3 SOCB

​ 当收到ePWM3触发器,4个ADC模块全部立即开始并行转换。全部结果将保存在ADC模块各自的ADCRESULST0寄存器当中。注意,这里假设所有的ADCs模块在收到触发器信号时处于空闲状态。如果一个或者多个ADCs模块处于忙状态,那么采样将不会精确地在同一时间发生。

11.15.4 设计外部基准电路

​ 图11-24显示了外部电压基准发生电路的基本结构。所有的ADC模块应该共享一个基准电压发生源。这将最小化ADC模块之间基准电压的失配。然后,在驱动到基准电压引脚之前,基准电压应通过带有良好带宽和低输出阻抗的精密运放缓冲。在PCB上,高和低基准电压之间的电容应尽可能放置在靠近引脚,以帮助吸收高频电流。串联到这个电容的串联电阻(通常 < 1 Ω < 1\Omega



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有