DS1859的与众不同之处在于其内部校准及右移位(可扩展动态范围)特性。当结合使用时,这些特性可极大地提高DS1859器件中12位模数转换器(ADC)的性能,无需增加成本及尺寸即可达到16位ADC的精密度与准确度。此外,DS1859的内部校准还具有可编程增益及可编程偏移,从而可以省去大部分的外部信号调理电路。在ADC之前的模拟域中提供可编程增益,对输入信号进行放大/衰减,这样可以充分利用ADC的整个动态范围。然后,在数字域,通过右移再将数字输出同比缩小(除以某数),从而使所需的(或者SFF-8472所要求的) LSB保持不变,甚至对用户透明。
本应用笔记旨在展示DS1859的内部校准及右移位功能给实际应用所带来的好处。并且还提供了一些对于实施内部校准及右移位操作非常有用的信息。最后,提供了一个实例,用以支持本文论点。
DS1859模拟监视输入
在深入讨论之前,最好先看一下DS1859的MON输入框图(见图1)。为简明起见,只画出了其中一路输入,三路MON输入原理上是一致的。
图1. DS1859 MON输入框图
如图所示,一个单端电压加于DS1859 MON管脚上。在模拟域中,该电压被送入一个具有衰减及放大功能的可编程增益单元中。该增益单元可对MON通道进行校准,以获得需要的LSB或满量程电压。满量程电压是指数字输出达到最大(FFF8h)时的输入电压。此外,增益单元还可将小输入信号放大,以便最大限度利用ADC动态范围。稍后将对此进行详细说明。
增益单元之后是12位ADC。12位转换结果以左对齐的2字节(16位)数字量形式输出。ADC可输出0000h至FFF8h的数字值。
一旦进入数字域,DS1859的内部校准又向前迈进了引人注目的一步,用户可编程数字偏移可以为转换结果引入一定量的正向或负向偏移。数字偏移功能通过简单的数字相加,在内部为转换结果增加正向或负向偏移。必须指出的是,正偏仍将钳位在FFF8h数值上,但最小数值则可能大于零。同样,负偏将具有小于FFF8h的满量程数值(因为负偏须从转换结果中扣除)。最小值仍为0000h。有关数字偏移的更详细信息请参见后面的偏移校准寄存器部分。
数字量输出前的最后一步操作是右移位。每一路MON输入均有3个控制位,用来控制右移次数。右移位的优势将在后面详细讨论。如果将此3位设为0,则禁止右移功能。与偏移一样,右移位也会影响满量程数字输出。例如,若将其设置成右移2位,则满量程数字输出变为3FFEh。移位完成后,数值随后被写入相应的寄存器中,从这里用户可以读取转换结果。这也是用来进行告警及警告比较的参数。
工厂校准的DS1859
MON输入都已经在工厂调整为2.5V满量程电压。这意味着2.5V满量程输入电压将输出FFF8h数字值。而且,每一数字偏移也已经在工厂设置为0,因此0V输入即意味着0000h数字输出。最后,右移位的工厂默认设置值为0。工厂校准后的DS1859的传输函数示于图2B,并将在稍后进行解释。
对于0至2.5V输入电压,工厂校准过的器件将输出4096个量化值中的一个,提供610µV (2.5V/4096)或12位的分辨率。理想情况下,将被量化的信号是一个0至2.5V的信号,这样就可利用整个转换范围。然而,现实情况并非总是如此。以接收功率为例,0至0.5V输入电压就很常见。很遗憾,在这种情况下,将有80%的数字输出码永远不会用到。这对于可产生4096个数字码的12位转换器来说,仅输出820个码(4096的20%)实在是一种浪费。其余的3276个码将永远不会被使用。而且,对于用到的820个码来说,其分辨率仍为610µV。
在利用更多数字码的多种努力中,至少将接收功率MON输入通道重新校准为小于2.5V的满量程电压颇具有吸引力。单这么做还不足以解决问题,因为此时LSB会改变且不再与所要求的LSB匹配。解决这一问题的有效途径是采用以下所述的内部校准加右移位方法。
使用DS1859内部校准及右移位的好处
内部校准及右移位在被监视信号较小、没有利用整个ADC范围时最有用。模数转换之前,在模拟域中先将信号放大一定的倍数,然后在数字域中再除以相同的系数,这样,LSB量值保持不变,而精密度和准确度在每右移一位(最多4位)时提高了2倍。4次移位之后,精密度有所损失,但准确度会继续提高。值得称道的是,这种操作仅仅利用了原来被浪费掉的动态范围。
运用内部校准及右移位的优势可用图2中的示例予以恰当地说明。图2A为一被监视信号的电压与时间的关系曲线。该信号在0V至0.5V之间摆动。图2B及图2C为MON输入电压与数字输出的关系曲线,分别代表经工厂校准的传输函数,以及采用2次右移和满量程电压为2.5V/4 = 0.625V时的传输函数。0.625V的满量程意味着被浪费掉的码更少,因为转换结果比2.5V满量程时扩大了4倍,而接下来它又被除以4而同比缩小(2次右移位)。确定右移位数以及与之相关联的满量程电压的根据将在后续部分中详细讨论。这里只使用2次右移位来比较有右移位与无右移位的差别。所采用的器件设置以及与每一传输函数相关的计算列于相应的传输函数下面。
图2. 无右移与右移位对比
图2中,3条曲线以相同的y轴坐标并排排列,这样,对于输入信号上的某个特定点(图2A),通过一条通过该点及各传输函数的水平直线,可粗略地估计出数字输出。再回到本例的0V至0.5V输入信号,0.5V输入由一条穿过三条曲线的水平粗线标出,比较图B与C即可看出右移位的好处。该图非常直观地说明,当ADC输入范围远大于输入信号范围时,大量的量化台阶将被浪费掉(见图B)。4096个台阶中仅有819个被用到。图B中剩下的80%码字被浪费掉。与之相对比,曲线C则显示,通过在内部校准到一个较小的满量程电压,再运用右移位,精密度提高了。现在可用4096个码中的3276个码来对输入信号进行量化。更值得一提的是,经过右移后,所需的LSB量值没有改变。右移位操作对用户透明。通过观察这两条曲线上的输出近似为同一数字值即可证明这一点。
如何确定右移位数
某一应用可以使用的右移位数取决于满量程电压(内部校准),以及给定输入信号所用到的数字编码百分比。如果已知输入信号的最大电压(以及满量程电压),则可计算出理想的数字输出码。否则,将要求在进行工程估值以确定数字输出范围时采用一种所谓的“传递”方法,并由此而得出理想的右移位数。以下对这种“传递”法加以详细说明。
1. | 将右移位数设为0。 |
2. | 执行内部校准以获得所需的LSB (这将确定起始满量程电压)。 |
3. | 施加最小及最大输入信号并读取相应的数字输出以确定所使用的范围。 |
4. | 确定所使用的ADC动态范围百分比。如果读数超出7FFFh,则不能使用右移位(0右移位)。如果读数小于7FFFh,则至少可使用1次右移位。如果读数小于3FFFh,则可使用2次右移位,依此类推。对于其余范围请参见DS1859数据资料中的表9。 |
5. | 为补偿右移位所引入的除数,必须在模拟域中增加增益以保持所需的LSB量值不变。新的满量程电压可用下式来计算:新的满量程电压 = 原来的满量程电压/2右移位数。因此,如果第2步的内部校准得到2.0V的满量程电压(满足所需的LSB量值),并且读数大于1FFFh但永不会超过3FFFh,此时可使用2次右移位。对于此例,新的满量程电压为2.0V/2² = 0.5V; |
6. | 内部校准该通道(右移位数仍设置为0)为新的满量程电压。 |
7. | 将右移位数设置为新值。 |
一旦估算出理想右移位数及针对特定应用的满量程电压,则只需用步骤1、6及7进行校准。
DS1859内部校准及右移位寄存器
DS1859器件内负责保存各模拟通道内部校准及右移位参数的寄存器列于表1。其中列出了各个MON通道以及VCC通道的寄存器地址。VCC通道不在本应用笔记讨论之列,但为完整性起见,将其一并列于表中。量化结果的存放地址也列于表中,以表明其相对位置。请注意,增益、偏移及右移位寄存器是位于存储表01h中(请不要将其与本应用笔记中的表1混淆)。存储表01h的选择是通过将01h写入“表选择”字节7Fh中来完成。由于转换结果位于存储器的低半区(0-7Fh),因此它们与“表选择”字节无关。
表1. DS1859内部校准及右移位寄存器
VCC | MON1 | MON2 | MON3 | |
Gain Cal | 92-93h | 94-95h | 96-97h | 98-99h |
Offset Cal | A2-A3h | A4-A5h | A6-A7h | A8-A9h |
Right Shifts | N/A | 8Eh (b6-b4) | 8Eh (b2-b0) | 8Fh (b6-b4) |
Readings | 62-63h | 64-65h | 66-67h | 68-69h |
Table 01h |
增益校准寄存器
增益校准寄存器为一个双字节值,它通过调整输入开关电容网络来确定某一特定被监视通道的增益/衰减量。这使得用户能将满量程电压校准成介于-500mV及6.5535V之间的任何期望值。
但遗憾的是,对增益校准寄存器进行编程并非像“我喜欢增益4....因此我只需要将4写入增益校准寄存器中”那么简单。而且,由于不同器件之间(以及不同批次之间)开关电容网络中的电容值有所差异,因此确实有必要对设定值进行校准。此校准步骤以及确定需写入增益校准寄存器中值的步骤列于DS1859数据资料中的“内部校准”部分中。其他信息则请参见本应用笔记中的“怎样进行内部校准”部分。
校准DS1859时最后须注意的是,一定要搞清楚偏移及右移位寄存器的值,否则,如果它们为非0或者未进行补偿,则器件将不会被校准成需要的结果。
偏移校准寄存器
偏移校准寄存器同样也是一个双字节值,它确定对每一被监视输入信号所施加的数字偏移量。前面曾提到,DS1859的偏移其实是转换值的简单数字增加或减少,因此在增益被校准成所需值后(且在右移位以前),可通过可编程偏移抵消任何失调误差或转移动态范围。但与增益校准寄存 器相类似,确定要编程的偏移值并非像“我喜欢100mV偏移...因此我只需将100写入寄存器中即可”那么容易。
DS1859数据资料中,“内部校准”部分中的伪码显示了应如何确定“抵消”失调所需的偏移校准值,下面提供更多的一些信息和一个实例来说明如何确定正向和负向偏移。
偏移校准可通过先确定应从转换值中增加或减去多少个数来计算。一种常用方法是先施加“零”输入(如关掉激光源),然后再读出转换值,而这正是您应从所有转换值中减去的值。
需写入偏移校准寄存器中的值,可通过将所需偏移数代入到DS1859数据资料中提供的等式中,并重复以下步骤来计算:
偏移校准寄存器 = [4000h - (Count/2)] XOR 4000h
例1:如果您将0V加到MON输入上并读到一个200 (C8h)的数,则您可以利用偏移寄存器从A/D转换结果中减去(比如说) 200 (C8h)来将其清零。利用下式可计算出应该写入寄存器中的参数:
偏移校准寄存器 = [4000h - (C8h/2)] XOR 4000h = 7F9Ch
请记住,在此情况下将执行减法运算,这样满量程数(FFF8h)也将减少C8h,新的满量程数为FF30h。
例2:现在让我们来看另一种情况,这种情况下你可能想在读数中增加200个计数。在此情形下,两次求负(公式中的减号和-C8h相消)将使第二项成为正值,得到:
偏移校准寄存器 = [4000h + (C8h/2)] XOR 4000h = 0064h
为计算新的满量程数,您或许会尝试将FFF8h加上C8h,但FFF8h已是最大可能读数,因此满量程数仍将保持为FFF8h。
例3:计算零偏移时的偏移校准值:
偏移校准寄存器 = [4000h - (0/2)] XOR 4000h = 0000h
这也是出厂默认的偏移校准寄存器设置。
右移位寄存器
右移位寄存器(表01h中的字节8Eh至8Fh)比偏移寄存器更易于理解。由于MON1至MON3可执行多达7次右移位,故对于每一MON输入均需使用3位。对于表01h中字节8Eh所代表的MON1与MON2设置,以及表01h中字节8Fh所代表的MON3设置,请参见器件数据资料中存储器配置图中的数位位置。这些EEPROM寄存器的工厂默认值为00h,禁止右移位。
为进一步说明右移位的结果,图3给出了几个右移后的MON量化值例子。
图3. MON寄存器右移位举例
怎样进行内部校准
虽然有好几种内部校准方法,但本应用笔记只讨论DS1859数据资料中所给出的采用伪码的二进制搜索法。伪码算法的输出即为增益及偏移寄存器值,它产生所需的传输函数,亦即所需的LSB。
为使用伪码算法,必须能将激光设置成两种不同的强度,例如为最小及最大值的90%等,而且还必须能进行多次重复。对于非光学应用,必须按要求将两种不同的电压加于MON输入上。器件数据资料中所提供的算法采用90%最大值以使上限低于钳位值。然而,当采用满量程一定百分比的电压进行测量时,在做数值计算时也应考虑相应的数字量百分比。
可通过将偏移及右移位寄存器设置成已知状态(例如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)开始,将该位设置为1 (同时将其他各位初始化为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来监视Rpower,当施加-40dBm最小输入时,在DS1859的MON3管脚上呈现出10mV的电压,此时该输入所需数字输出为0000h。当施加0dBm输入时,MON3管脚上的电压为300mV,此时所需数字输出为2710h,这样的选择是为了满足SFF-8472规定的LSB (Rpower的LSB对应于0.1µW)。
确定此例中的理想右移位数相对比较简单,因为已经给定所需的数字输出范围(0000h至2710h)。利用DS1859数据资料中的表9,可得到理想右移位数为2。现在请记住右移位数为2,要使2710h在经过2次右移位后仍为最终输出数字值,我们可推断,此时300mV的输入在右移位以前必须产生9C40h的转换值,因此需要用内部校准来将300mV输入的转换值“抬高”至9C40h。在完成偏移的内部校准及编程以后,即可执行2次右移位。该举例被归纳于表2中。
表2. 内部校准及右移位举例
Customer Signal Rpower (dBm) | Voltage applies 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 |
在确定了输入与输出之间的关系后(如表2所示),即可用数据资料中提供的内部校准程序来对器件进行内部校准。该校准程序先从执行几步如下所示的预先计算开始。请注意,这里并未采用数据资料校准程序中所给出的90%,因为第二校准点(300mV = 9C40h)已经小于满量程值的90%,故本例中所采用的内部校准程序未采用90%参考点:
根据表2进行以下计算:
LSB = (0.300V - 0.010V)/(9C40h - 0000h) = 0.290V/40,000 = 7.25µV
满量程电压 = FS = LSB × 65535 = 7.25µV × 65535 = 0.475128V
CNT1 = 0.010/LSB = 1379.3 => 1379 (dec)
CNT2 = 0.300/LSB = 41379.31 => 41379 (dec)
当采用两个校准点时,CNT1及CNT2为所期望(所需)的数字输出,内部校准程序将反复搜索与这两个值所确定的斜率最接近的斜率。
校准程序反复进行16次以下过程,即先用二进制来对该斜率进行编程然后再检查其是否与所需的斜率相等,在此例中,是采用内部校准程序以及表3中所列全部16次重复输入与输出来对DS1859进行校准。
表3中的第一栏“Iteration (重复)”等于程序中的“n”; gain_result (增益结果)栏为每次重复时被编程进增益校准寄存器(即器件表01h中的字节98至99h)中的值;“Meas1”及“Meas2”栏则分别为施加300mV及10mV输入时器件上的读数;最后,对于Meas2不被钳位的重复,将Meas2-Meas1与CNT2-CNT1进行比较,如果Meas2-Meas1大于CNT2-CNT1,则表示增益结果太大,对应于此次重复的Gain Cal (增益校准)位为0,而这随后又确定后续重复中的增益结果。当完成全部16次重复后,即得到增益校准值,如表3所示,此例中所使用器件的增益校准值为5038h。
表3. 实际的内部校准值
Iteration | gain_result | Meas2 | Meas1 | Meas2 | Meas1 | Meas2-Meas1 | CNT2-CNT1 | bit result | Gain Cal |
(dec) | (hex) | (hex) | (dec) | (dec) | (dec) | (bin) | (hex) | ||
15 | 8000 | fd58 | 870 | 64856 | 2160 | 62696 | 40000 | 0 | 5 |
14 | 4000 | 82a0 | 450 | 33440 | 1104 | 32336 | 40000 | 1 | |
13 | 6000 | c010 | 658 | 49168 | 1624 | 47544 | 40000 | 0 | |
12 | 5000 | a138 | 558 | 41272 | 1368 | 39904 | 40000 | 1 | |
11 | 5800 | b0b8 | 500 | 45240 | 1280 | 43960 | 40000 | 0 | 0 |
10 | 5400 | a938 | 5a0 | 43320 | 1440 | 41880 | 40000 | 0 | |
9 | 5200 | a530 | 578 | 42288 | 1400 | 40888 | 40000 | 0 | |
8 | 5100 | a328 | 568 | 41768 | 1384 | 40384 | 40000 | 0 | |
7 | 5080 | a238 | 568 | 41528 | 1384 | 40144 | 40000 | 0 | 3 |
6 | 5040 | a1a8 | 560 | 41384 | 1376 | 40008 | 40000 | 0 | |
5 | 5020 | a170 | 558 | 41328 | 1368 | 39960 | 40000 | 1 | |
4 | 5030 | a190 | 558 | 41360 | 1368 | 39992 | 40000 | 1 | |
3 | 5038 | a198 | 558 | 41368 | 1368 | 40000 | 40000 | 1 | 8 |
2 | 503C | a1a0 | 558 | 41376 | 1368 | 40008 | 40000 | 0 | |
1 | 503a | a1a0 | 558 | 41376 | 1368 | 40008 | 40000 | 0 | |
0 | 5039 | a1a0 | 558 | 41376 | 1368 | 40008 | 40000 | 0 |
对于已被编程成新增益校准值的器件,可通过施加10mV (即我们希望其输出读数为0000h的电压)并读取其数字输出结果来确定其偏移校准。此例中所使用的器件在输入为10mV时输出为0558h。利用偏移公式,可将偏移校准计算如下:
MON3偏移校准 = [4000h - 0558h/2] XOR 4000h = 7D54h
最后,再按下式来计算新钳位值:
新钳位值(右移前) = FFF8h - 0558h = FAA0h
完成内部校准后,即可通过将20h写入表01h中的8Fh来执行2次右移位。
结论
DS1859的内部校准及右移位特性,可为用户提供最大的灵活性并使其适用。于各种应用本应用笔记提供了DS1859数据资料中未给出的附加信息,例如为什么内部校准及右移位具有优势以及如何来实现等。同时还给出了一个与理论相联系的运用“传递”方法的实例,并提供了DS1859内部校准过程中实际得到的读数。
审核编辑:郭婷
-
寄存器
+关注
关注
31文章
5292浏览量
119802 -
存储器
+关注
关注
38文章
7428浏览量
163506 -
adc
+关注
关注
98文章
6391浏览量
543732
发布评论请先 登录
相关推荐
评论