资讯详情

TMS320F283xD中文技术参考手册之ADC

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该模块设计用于同一芯片,允许同步采样或分时采样。
  • 每个ADC16种模块可配置启动转换类型(SOCs)
  • 每个ADC寄存器有16个独立的转换结果
  • 每个ADC模块有多种触发源:S/W 立即触发所有软件ePWMs模块(ADCSOC A 或 B)、XINT2、Timer0/1/2、ADCINT1/2
  • 每个ADC模块有四个后处理块:通过中断和校准满度偏移校准、设定值误差校准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采样窗口。ADCCTL有一个分频域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配置寄存器,设备复位后至少调用一次。不要直接写ADCCTL配置分辨率的寄存器值。在ADC处于空闲状态(未操作或悬挂)SOCs)可随时更改分辨率。在开始转换之前,不需要等待时间来改变分辨率。如果SOCs分辨率在运行或悬挂时发生变化,SOCs转换结果可能不正确。

  • 电压基准:每一个ADC模块是独立的VREFHI和VREFLO在外部基准模式下,这些引脚被用作基准比来确定ADC转换的输入范围。关于如何提供基准电压,请参阅第.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 <= VREFLO ADCRESULTx = 0
    当VREFLO < ADCINy < VREFHI ADCRESULTx = 4096 × ( A D C I N y − V R E F L O V R E F H I − V R E F L O ) 4096\times (\frac{ADCINy-VREFLO}{VREFHI-VREFLO}) 4096×(VREFHI−VREFLOADCINy−VREFLO​)
    当ADCINy >= VREFHI ADCRESULTx=4095
    差分 Invalid Mode Invalid Mode

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

    模拟输入 数字结果
    单端 Invalid Mode Invalid Mode
    差分 当ADCINyP - ADCINyN <= VREFHI ADCRESULTx = 0
    当-VREFHI < ADCINyP - ADCINyN <= VREFHI ADCRESULTx = 65536 × ( A D C I N y P − A D C I N y N + V R E F H I ) 2 × V R E F H I 65536 \times \frac{(ADCINyP - ADCINyN + VREFHI)} {2 \times VREFHI} 65536×2×VREFHI(ADCINyP−ADCINyN+VREFHI)​
    当ADCINyP - ADCINyN > VREFHI ADCRESULTx = 65535

11.5 启动转换(SOC)操作原则

​ ADC触发和转换序列是通过可配置的启动转换(SOCs)来完成的。每个SOC是一个定义为单个通道的单个转换的配置集。在这个集合有三个配置:启动转换触发源、转换通道和获取(采样)窗口时间。在接收一个启动转换(SOC)配置之后,ADC外围包装器会保证指定的通道使用指定采样窗口时间被捕获。

​ 可以根据需要为相同的触发器、通道、和/或采样窗口配置为多个启动转换(SOCs)。配置多个启动转换SOCs使用相同的触发器将允许触发器产生一系列转换。配置多个启动转换SOCs使用相同的触发器和通道将允许过采样。

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中断结构的框图

  • 中断溢出

    ​ 如果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的结构。后面的子节解释了每个子模块的使用。

  • PPB偏移修正

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


    注意:

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

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

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


  • PPB误差校准

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

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


    注意:

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

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

    3. 向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中断。


    注意:

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

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

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

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


  • PPB采样延时捕获

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

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

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


    注意:

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

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


11.11 开路/短路检测电路

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


注意:

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

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

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


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

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

​ 表11-9 DETECTCFG设置

ADCOSDETECT.DETECTCFG 源电压 S4 S3 S2 S1 驱动电阻
0 Off Open Open Open Open Open
1 Zero Scale Closed Open Open Closed 5K || 7K
2 Full Scale Open Closed Closed Open 5K || 7K
3 5/12 VDDA Open Closed Open Closed 5K || 7K
4 7/12 VDDA Closed Open Closed Open 5K || 7K
5 Zero Scale Open Open Open Closed 5K
6 Full Scale Open Open Closed Open 5K
7 Zero Scale Closed Open Open Open 7K

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使能时等效输入电路

​ 输入阻抗Rs和Cp

11.12 上电顺序

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

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

​ 如果多个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时转换结果与满度值的二分之

标签: 1218s2ac接近传感器1226s2ac接近传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台