使用DS1863/DS1865的内部校准和右移位(可扩展动态范围)增强ADC性能

描述

这篇应用笔记讨论了使用DS1863/D1865控制器/监控器芯片的内部校准和右移位(可扩展动态范围)改善系统性能的方式。该文描述了如何实现内部校准和右移位,并通过一个实例阐述整个过程。

概述

DS1863DS1865控制器/监控器使用内部校准和右移位(可扩展动态范围)可极大地增强内部13位ADC的性能,无需增加成本和尺寸即可达到更高的精确度和准确度。此外,DS1863/DS1865的内部校准还具有可编程增益可编程偏移 ,从而可以省去大部分的外部信号调理电路。在ADC之前的模拟域中提供可编程增益,对输入信号进行放大或衰减,这样可以充分利用ADC的整个动态范围。然后在数字域,通过右移再将数字输出同比缩小(除以某数),从而使所需的(或者SFF-8472所要求的) LSB保持不变,甚至对用户透明。

模拟监测输入

DS1863/DS1865的MON输入框图如图1所示。为简明起见,只画出了其中一路输入,所有的四个MON输入(MON1、MON2、MON3和MON4)原理相同。MON输入用来监测信号,例如Tx功率和Rx功率。

adc

图1. DS1863/DS1865 MON输入框图

如图1所示,一个单端电压加于DS1863/DS1865的MON引脚。在模拟域中,该电压被送入一个可编程增益单元中。该增益单元可对MON通道进行校准,以获得需要的LSB或 满量程电压 。这个满量程电压是需要的LSB × 2 ^n^ ,其中n为位数。此外,增益单元还可将小输入信号放大,以便最大限度利用ADC动态范围。稍后将对此进行详细说明。

增益单元之后是13位ADC。13位转换结果以左对齐的2字节(16位)数字量形式输出。这个ADC能输出从0000h至FFF8h的数字值。

通过用户可编程数字偏移可以对ADC之后的数字信号进行进一步调整。数字偏移功能通过简单的数字相加,在内部增加正向或负向偏移。必须指出的是,正向偏移将钳位在FFF8h数值上;负向偏移将具有小于FFF8h的满量程数值(因为负向便移须从转换结果中扣除)。这种情况下,最小值仍为0000h。有关数字偏移的更详细信息请参见后面的偏移寄存器部分。

右移位是数字量输出前的最后一部操作。每一路MON输入都有3个控制位,用来控制需要的右移次数(右移位的好处将在后面讨论)。如果将此3位设为0,则禁止右移功能。与偏移一样,右移位也会影响满量程数字输出。例如,若将其设置成右移2位,则满量程数字输出变为3FFEh。移位完成后,数值将被写入相应的寄存器中,从这里用户可以读取转换结果(存储器的低半区,寄存器64h-6Bh)。这也是用来进行报警及警告比较的参数。

关于密码访问的说明

四个MON输入的增益和偏移值的设置都在DS1863/DS1865的表02h中。读写这些数值,需要2级密码访问(PW2)。如果2级访问密码被输入到密码登录字节(PWE位于存储器的低半区,寄存器7Bh-7Eh),访问将被批准。

工厂校准MON输入

每个DS1863/DS1865 MON输入都已经在工厂调整为2.5V满量程电压。而且,每一个数字偏移也已经在工厂设置为0,所以0V的输入即意味着0000h数字输出。右移位的工厂默认设置值也为0。工厂校准后的DS1863/DS1865的传递函数示于图2中的B图,稍后将详细介绍。

对于0至2.5V输入电压,工厂校准过的器件将输出8192个量化值中的一个,为13位转换提供305µV的分辨率(2.5V/8192)。理想情况下,将被量化的输入信号是一个0到2.5V的信号,这样就可利用整个转换范围。然而,现实情况并非总是如此。以接收功率(Rx功率)为例,0到0.5V的输入电压就很常见,这意味着80%的数字输出码永远不会用到。这对于可产生8192个数字码的13位ADC来说,只能输出1638个码之一。剩下的6554个数编码将永远不被使用。而且,对于用到的1638个码来说,分辨率仍为305µV。

为了更好的利用13位ADC,DS1863/DS1865 MON值必须被重新校准为0.5V的满量程电压。但是,仅仅重新校准MON并不能解决输入信号的问题,因为此时LSB会改变,且不再与所要求的LSB匹配。从根本上讲,为了得到ADC的最佳性能,必须使用右移位并进行增益和偏移值的调整。

内部校准和右移位

内部校准和右移位在被监视信号较小、没有利用整个ADC动态范围时最有用。模数转换之前,在模拟域中先将信号放大一定的倍数,然后在数字域中再除以相同的系数,这样所需的LSB保持不变。而精密度和准确度在每右移一位(最多3位)时提高了2倍。在3次右移位之后,精密度或准确度将不会再有改善。

用内部校准和右移位的好处可用图2所示的例子予以恰当的说明。其中图A为一被监视信号的电压—时间曲线。该信号在0到0.5V之间摆动。图B和图C为MON输入电压—数字输出曲线,分别代表经工厂校准的传递函数,以及采用2次右移和满量程电压为2.5V/4 = 0.625V时的传递函数。0.625V的满量程电压意味着被浪费掉的码更少,因为转换结果比2.5V满量程时扩大了4倍,而接下来它又被除以4而同比缩小(2次右移位)。下面将讨论确定右移位数以及与之相关联的满量程电压的根据。这里只使用2次右移位来比较有右移位与无右移位的差别。所采用的器件设置以及与每一个传递函数相关的计算列于相应的传递函数下面。

adc

图2. 无右移(B)与右移(C)的比较

图2中,三条曲线以相同的y轴坐标并排排列。这样,对于输入信号上的某个特定点(图A),通过一条通过该点及各传递函数的水平直线,可粗略地估计出数字输出。再回到本例的0到0.5V输入信号,0.5V输入由一条穿过三条曲线的水平粗线标出,比较图B与C即可看出右移位的好处。当ADC的输入范围远大于输入信号范围时,大量的量化台阶将被浪费掉(见图 B)。8192个数值中只使用了1638个;图B中剩余的80%码字被浪费掉。与之相对比,图C则显示,通过在内部校准到一个较小的满量程电压,再使用右移位之后,精密度提高了。现在可用8192个数字码中的6554个码来对输入信号进行量化。而且,在右移位之后,所需的LSB仍保持不变。右移位操作对用户透明。通过观察这两条曲线上的输出近似为同一数值即可验证这一点。

确定需要的右移位数

某一应用可以使用的右移位数取决于满量程电压(内部校准),以及给定输入信号所用到的数字编码百分比。如果已知输入信号的最大电压(以及满量程电压),则可计算出理想的数字输出码。否则,将要求在进行工程估值以确定数字输出范围时采用一种所谓的“传递”方法,并由此而得出理想的右移位数。以下对这种“传递”法加以详细说明。

  1. 将右移位数设为0。

  2. 执行内部校准以获得所需的LSB ,这将确定起始满量程电压。(这个过程将在这篇应用笔记的后面讨论。)

  3. 施加最小及最大输入信号并读取相应的数字输出以确定所使用的范围。

  4. 确定所使用的ADC动态范围百分比。如果读数超出7FFFh ,则不能使用右移位(0右移位)。如果读数小于7FFFh,则至少可使用1 次右移位。如果读数小于3FFFh,则可使用2次右移位,依此类推。表1中总结了这些数据。
    表1. 针对不同的输出范围所使用的右移位数

    Output Range Used with Zero Right-Shifts Number of Right-Shifts Needed
    0h .. FFFFh 0
    0h .. 7FFFh 1
    0h .. 3FFFh 2
    0h .. 1FFFh 3
  5. 为补偿右移位所引入的除数,必须在模拟域中增加增益以保持所需的LSB量值不变。可通过使用下述公式计算新的满量程电压来增加增益:
    新的满量程电压 = 原来的满量程电压/2^右移位数^
    所以,如果步骤2的内部校准得到2.0V的满量程电压,并且数字读数大于1FFFh但绝不超过3FFFh,此时2个右移位是比较理想的选择。对于此例,新的满量程电压为2.0V/2^2^ = 0.5V。

  6. 内部校准该通道为新的满量程电压。

  7. 将右移位数设置为新值。

一旦估算出理想右移位数及针对特定应用的满量程电压,则只需用步骤1、6及7进行校准。

内部校准和右移位寄存器

DS1863/DS1865器件内负责保存各模拟通道内部校准及右移位参数的寄存器列于 表2 。同时列出了每个MON通道以及VCC通道设置的寄存器地址。VCC通道不在本应用笔记讨论之列,但为完整性起见将其一并列于表中。量化结果的存放地址也列于表中,以表明其相对位置。请注意,增益、偏移及右移位寄存器位于存储表02h中(请不要将其与本应用笔记中的表2混淆)。存储表02h的选择是通过将02h写入位于存储器低半区,寄存器7Fh中的表选择字节来完成。

表2. DS1863/DS1865内部校准和右移位寄存器

VCC MON1 MON2 MON3 MON4
Scale* 92-93h 94-95h 96-97h 98-99h 9A-9Bh
Offset* A2-A3h A4-A5h A6-A7h A8-A9h AA-ABh
Right Shifts* N/A 8Eh (b6-b4) 8Eh (b2-b0) 8Fh (b6-b4) 8Fh (b2-b0)
Readings 62-63h 64-65h 66-67h 68-69h 6A-6Bh
*Table 02h

增益寄存器

增益寄存器为一个2字节值,它通过调整输入开关电容网络来确定某一特定被监视通道的增益/衰减量。这个增益寄存器使得用户能将满量程电压校准为介于~250mV至6.5536V之间的任何期望值。由于工艺处理的差异和终端应用中的不同需求,这个寄存器必须被校准。此校准步骤以及确定要写入增益寄存器的值的步骤列于如何实现内部校准部分。

注意 :当校准DS1863/DS1865时,了解偏移量和右移位寄存器的值是非常重要的。否则,如果这些值非0并且未补偿的话,器件将不会被校准成需要的结果。

偏移寄存器

偏移寄存器是一个2字节值,它确定对每一被监视输入信号所施加的数字偏移量。DS1863/DS1865的偏移是转换值的简单数字增加或减少。因此在增益被校准成所需值后(且在右移位以前),可通过可编程偏移抵消任何失调误差或转移动态范围。

偏移校准可通过先确定应从转换值中增加或减去多少个数来计算。典型的一种做法是先施加零输入(如关掉激光源),然后再读出转换值,而这正是您应从所有转换值中减去的值。

可通过在式1中代入所需的偏移数来计算需要写入到偏移寄存器的值:

adc

例1 :如果输入电压的参考不是地而是某一基准,那么要将这个基准从测量结果中减掉。假设将该基准加到MON输入上,得到的读数是200 (C8h)。你可以使用偏移寄存器从模数转换器中减去200 (C8h)来将其清零。利用下式来确定写入寄存器的值:

adc

请记住,在此情况下将执行减法运算,这样满量程数FFF8h也将减少C8h,新的满量程数为FF30h。

例2 :假设你想在读数中增加200个计数。这个结果在下列的等式中:

adc

为计算新的满量程数,您或许会尝试将FFF8h加上C8h。 但FFF8h已是最大可能读数,因此满量程数仍将保持为FFF8h。较低的数将不再是00h,而是C8h,因为已将这个偏移加到所有的读数上。

例3 :计算0偏移时的偏移值:adc

这也是出厂默认的偏移寄存器设置。

右移位寄存器

右移位寄存器位于表02h,寄存器8Eh-8Fh。由于MON1到MON4可执行多达7次右移位,所以对于每一MON输入均需使用3位。MON1和MON2的设置位于表02h,寄存器8Eh中,同时MON3和MON4的设置位于表02h,寄存器8Fh中。请参考数据资料(或上面的表1)中存储器分布图中的数位位置。EEPROM寄存器的出厂默认值为00h,禁止右移位。

为了进一步阐明右移位的结果,图3给出了几个右移后的MON量化值例子。adc

图3. MON寄存器右移位的例子

内部校准

这篇应用笔记讨论了二进制搜索方法。算法的输出是增益和偏移寄存器值,从而得到期望的传递函数即期望的LSB。

为使用这种算法,同时必须做两件事情:将激光设置为两种不同的强度,例如最小值和接近最大值(大约90%);而且还必须能进行多次重复。对于非光学应用,必须按要求将两种不同的电压加于MON输入。这篇应用笔记提供的算法使用90%最大值,所以“>”比较是可行的。然而,当使用满量程一定百分比时,在做数值计算时也应考虑相应的数字量百分比。

伪码示例

下面这段伪码是用来确定增益的二进制搜索法的一个实例。

/* Assume that the null input is 0.5V */
/* Assume that the desired LSB of the lowest weighted bit is 50µV */

	Max Reading = 65535 x 50e-6		/* 3.27675 */
	CNT1 = 0.5 / 50e-6 			/* 10000 */
	CNT2 = 0.90 x FS / 50e-6 		/* 58981.5 */

/* The null input is 0.5V and the 90% of FS input is 0.9*3.27675 = 2.949075V */
	Set the trim-offset-register to zero
	Set Right Shift register to zero (typically zero. See Right Shifting section above..)
	Scale_result = 0h
	Clamp = FFF8h/2Right_Shift_Register


	For n = 15 down to 0,
	Begin
		scale_result = scale_result + 2n
		Force the 90% FS input (2.949075V)

		Meas2 = read the digital result from the part
		If Meas2 >= Clamp then
			scale_result = scale_result – 2n
		Else
			Begin
				Force the null input (0.5V)
				Meas1 = read the digital result from the part
				If (Meas2 – Meas1) > (CNT2 – CNT1) then
					scale_result = scale_result – 2n
			End
End
Set the Scale register to scale_result

现在,这个增益寄存器被设置并且转换分辨率将与期望的LSB实现最佳匹配。下一步是校准DS1863/DS1865的偏移。正确的增益值被写入增益寄存器,再次将零输入加到这个引脚。读取这部分(Meas1)的数字结果。在式1中将CNT1作为输入可计算偏移。

伪码的说明

可通过将偏移及右移位寄存器设置成已知状态例如0偏移及0右移位来开始该伪码算法。 尽管本例中将两个寄存器均设置为0,但只要对它们进行相应的补偿,则亦可采用其他值。例如,如果以所编程偏移开始,则FFF8h可能不再是被钳位的满量程数字值。(参见偏移校准寄存器部分)除初始化寄存器外,该算法也可从计算几个为所需LSB函数的重要常数开始。

二进制搜索增益值时首先将增益校准寄存器设置成满量程的一半,即8000h。然后再将90%最大输入加至被校准MON通道然后,读取量化值。将此测量值称为Meas2。接着再检查Meas2看它是否被钳位在FFF8h上(此时偏移及右移位均为0)。如果读数被钳位,则无法断定转换值恰好是FFF8h还是比这大许多(此时也被钳位成FFF8h)。无论怎样,增益设置都太高。在后续的二进制搜索法中,将增益值减半并重复此操作直至找到非钳位增益值为止。

一旦找到非钳位的Meas2,即可通过施加零输入并读取其数字转换值来继续。该算法此转换值即为Meas1。最后,计算Meas2与Meas1的差值并使用在算法开始时所算出的常数来与所需差值(CNT2 - CNT1)进行比较。如果Meas2 - Meas1大于CNT2 - CNT1则将增益再减半。如果Meas2 - Meas1小于CNT2 - CNT1则在减半后再将其恢复到当前增益值。重复此过程直至总共进行16次,即获得一个代表所需增益(所需LSB)的16位值。

以下介绍另一种能使该增益校准过程更加形象的方法。先从16位增益校准寄存器的MSB (b15)开始,将该位设置为0 (同时也将其他各位初始化为0);再使MSB = 1,并加上模拟输入,然后再读取对应的数字输出,如果该读数被钳位,则表示增益太高,可将MSB写回至0,否则将其保留为1,因此现在即已知MSB。然后再转向下一位(b14)也是先将b14设为1 (此时保留b15为已确定值),此时b13至b0仍为0。 如果增益仍太高。则可重复前述操作,即将b14设为0,否则保留为1。此过程一位接一位进行,直至确定出全部16位为止,其结果仍是一个代表所需增益的16位值。

在确定所需增益以后,即可计算新的偏移或将其保留为(0)。无偏移此校准方法取决于所使用的偏移性质。数据资料中对该算法的解释是基于如下假设,即;用户想要执行负偏来清零数字读数,以使零模拟输入时产生全0输出。这可简单地通过施加零模拟输入并读取相应的转换值来实现。如果零输入(例如激光关断)产生例如(20h)的数字输出,则可对偏移进行编程以将20h从每一转换值中减去。在本例中,则是先将20h代入偏移公式中,然后再将计算结果编程至所需MON通道的偏移校准寄存器中来完成。

内部的校准和右移位实例

为演示本应用笔记所提及的概念,我们采用了以下示例。

在此例中利用MON3来监视Rx功率,当施加-40dBm最小输入时,在DS1859的MON3管脚上呈现出10mV的电压,此时该输入所需数字输出为0000h。当施加0dBm输入时,MON3管脚上的电压为300mV,此时所需数字输出为2710h,这样的选择是为了满足SFF-8472规定的LSB (Rx功率的LSB对应于0.1µW)。

确定此例中的理想右移位数相对比较简单因为已经给定所需的数字输出范围(0000h至2710h)。利用上面的表1,可得到理想右移位数为2。现在请记住右移位数为2,要使2710h在经过2次右移位仍为最终输出数字值,我们可推断,此时300mV的输入在右移位以前必须产生9C40h的转换值,因此需要用内部校准来将300mV输入的转换值“抬高”至9C40h。在完成偏移的内部校准及编程以后,即可执行2次右移位。该举例被归纳于表3中。

表3. 内部校准和右移位实例

Customer Signal Rx Power (dBm) Voltage Applied to MON3 Pin (mV) Digital Outputs During Cal. (0 Right Shifts) (hex) Final Digital Output (2 Right Shifts) (hex)
-40 10 0000 0000
50 0563
100 0C1F
150 12DB
200 1997
250 2051
0 300 9C40 2710

在确定了输入与输出之间的关系后(如表3所示),即可用数据资料中提供的内部校准。程序先从执行几步如下所示的预先计算开始。请注意,这里并未采用数据资料校准程序中所给出的90%,因为第二校准点(300mV = 9C40h)已经小于满量程值的90%。

根据表3进行以下计算:

LSB = (0.300V – 0.010V)/(9C40h – 0000h) = 0.290V/40,000 = 7.25µV

最大读数 = LSB x 65535 = 7.25µV x 65535 = 0.475128V

CNT1 = 0.010/LSB = 1379.3 => 1379 (dec)

CNT2 = 0.300/LSB = 41379.31 => 41379 (dec)

当采用两个校准点时,CNT1及CNT2为所期望(所需)的数字输出内部校准程序将反复搜索与这两个值所确定的斜率最接近的斜率。

校准程序反复进行16次以下过程,即先用二进制来对该斜率进行编程然后再检查其是否与所需的斜率相等。在此例中是采用内部校准程序以及表4中所列全部16次重复输入与输出来对DS1863/DS1865进行校准。

表4中的第一栏“重复”等于程序中的n。“增益结果”栏为每次重复时被编程进“增益校准”寄存器(即器件表02h中的字节98至99h)中的值。Meas1及Meas2栏则分别为施加300mV及10mV输入时器件上的读数;最后,对于Meas2不被钳位的重复,将Meas2 - Meas1与CNT2 - CNT1进行比较,如果Meas2 - Meas1大于CNT2 - CNT1,则表示“增益结果”太大,对应于此次重复的增益校准位为0。而这随后又确定后续重复中的“增益结果”。当完成全部16 次重复后,即得到增益校准值,如表3所示,此例中所使用器件的增益校准值为 5038h

表4. 实际的内部校准值 adc

从表3我们可看到最小的差值在第三重复出现(Meas2 - Meas1和CNT2 - CNT1同时为40000)。用户可以在算法中加一个变量来检查最小差值出现的位置,然后用这个重复产生的“增益结果”作为增益校准寄存器的值,替代最终的值。

对于已被编程成新增益校准值的器件,可通过施加10mV (即我们希望其输出读数为0000h的电压)并读取其数字输出结果来确定其偏移校准。此例中所使用的器件在输入为10mV时输出为0558h。利用偏移公式,可将偏移校准计算如下:

MON3失调 = -(-0558h/4) = 0156h

最后,再按下式来计算新钳位值:

新钳位值(预右移) = FFF8h - 0558h = FAA0h

完成内部校准后,即可通过将20h写入表01h中的8Fh来执行2次右移位。

结论

DS1863/DS1865的内部校准及右移位特性,可为用户提供最大的灵活性并使其适用于各种应用。本应用笔记提供了DS1863/DS1865数据资料中未给出的附加信息,例如为什么内部校准及右移位具有优势以及如何来实现等。同时还给出了一个与理论相联系的运用传递方法的实例,并提供了DS1863/DS1865内部校准过程中实际得到的读数。

审核编辑:郭婷

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

全部0条评论

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

×
20
完善资料,
赚取积分