38度发烧友论坛--38Hot Volt-Nuts 仪表 基准 工具 电子爱好者专业论坛

搜索
查看: 63730|回复: 173

[制作] Voltgen(自校准的六位半电压源) TR_V1.0 DIY 与调试

  [复制链接]
发表于 2013-3-21 21:00:58 | 显示全部楼层 |阅读模式
首先鸣谢 TR 历次帮我画的 PCB,如今终于出了一个还算靠谱的版本。关于历次进程不再赘述,可参考我过往的帖子:
cr2131s.jpg

LTC2400+MAX515,程控电压发生器试制中
http://bbs.38hot.net/read-htm-tid-23835.html

Voltage Generator 打样 0.1 版阶段性成功
http://bbs.38hot.net/read-htm-tid-29282.html

数字闭环自校准程控六位半电压发生器的试制和测试(基于 LTC2400/AD5541)
http://bbs.38hot.net/read-htm-tid-29599.html


现在初步定型方案 TR_V1.0,ADC 依然采用 LTC2400,DAC 用 AD5541(16bit) + MAX515(10bit),其余大体没有变化。由于 TR 本人的坚持,此 PCB 采用了 4 运放的封装,这一点我是不赞同的。可以采用的 4 运放有 OPA4277 或相当的运放,成本较高。下面会逐一分析器件的采用。

本文大致目录

1、自校准的六位半电压源的原理(大致完成)
2、器件采用和分析(大致完成)
3、此版本 PCB 简要说明(尚未编写)
4、制作与调试 <--- 重点(大致完成)
5、后续的开发(尚未编写)

电路总图*  原理图中不包含涉及电磁兼容的部分,因为这部分因需要而异,且很大程度取决于 PCB 设计与机壳屏蔽措施

模拟部分
cr6010.png

数字部分(含隔离、上位机通讯)
cr6011.png

评分

参与人数 8威望 +33 收起 理由
kdtcf + 3 优秀文章,支持!n神马都是浮云
keye + 3 优秀文章,支持!n神马都是浮云
enquireyhw + 8 优秀文章
电源哥 + 5 优秀文章,支持!n神马都是浮云
jj3055 + 5 恭喜瓦树出成品,浙江人民发来贺电
tudou204 + 3 优秀文章,支持!n神马都是浮云,学习了。
htbst + 3
minideerx + 3 优秀文章,支持!n神马都是浮云

查看全部评分

 楼主| 发表于 2013-3-21 21:01:16 | 显示全部楼层
一、自校准的六位半电压源的原理

DAC 部分
本设计的目标是

1、基本量程为 0-12V(扩展见第五部分的“后续”)
2、编程和回读的分辨率为 6 位半,意即最大计数为 11.999,99,电压设定(编程)步进最小为 10uV,回读的最小分辨力 10uV
3、具备 5ppm 温度系数、5ppm 非线性误差和 25ppm 年稳定度,这个目标定得比较高,和典型的 6 位半商品万用表看齐,算是一个愿景,能不能实现最后靠数据说话。

为了达成上述目标,首先 6 位半分辨率,意味着其等效 DAC 具有 log2(1199999) = 20.2bit 分辨率,然而仅仅 20.2bit 分辨率,难以保证增益校准和非线性校准需要的精度,所以至少需要有 10 倍理论分辨率,即 23.52bit 分辨率才能比较可靠实现校准的目标。商品的精密 DAC 是没有这样的分辨率的,而音响用 DAC 虽然分辨率更高,但温度系数、单调性、差分非线性都不是很好,线性指标通常更是一塌糊涂,所以这里经过考虑,决定使用商品 16bit 精密 R-2R DAC 和 12bit DAC 合成的方式实现这个 DAC。

DAC 部分原理图。其中主 DAC 为 AD5541,副 DAC 为 MAX515,两个 DAC 产生的电压经由 Rmaster = 249 欧姆和 Rslave = 1 兆欧姆合成,送入 G=2.5 的输出缓冲中缓冲后再输出。
cr6012.png

*MAX515 标称为 10bit DAC,但实际上是 12bit DAC。在这里这个问题不是很重要,因为主 DAC 16bit + 副 DAC 即使是 10bit 也有 26bit。

理论上 16bit DAC 如果完美和 12bit DAC 合成,那么结果就是一个 28bit DAC,但实际上电压合成的公式为
Vout = (Vmaster * Rslave + Vslave * Rmsater) / (Rm+Rs)

因此,除非 Rs : Rm = 1 : 2^16,否则理想的合成不成立。在这里,Rs 取 1M OHM,而 Rm 是 249 欧姆,实际上的比例大约是 1:4016,也可以简单认为 Delta(VSlave) 对 Vout 的影响大约是 1/4000 左右,而副 DAC 的 1LSB 为 5V/2^12 = 1220uV,因此合成 DAC 的最小步进是 303nV@5V,log2(5V/303nV) = 24bit,所以实际上合成的 DAC 分辨率是 24bit,和 ADC 正好一样 由于输出缓冲增益 G=2.5,所以最终输出电压在 0-12V(0.5V 调整余量)的情况下,最小电压编程步进是 758nV,对于设计目标为 10uV 的情况来说,有 13 倍以上的分辨率余量,非常充足。


ADC 部分
在设计了一个满足目标的 DAC 之后,一个问题就是,虽然我们认为一个理想的 DAC 应该满足 f(Input Code) = Vout,Input Code 和 Vout 是完美的线性关系且不变。但实际上,由于器件的精度和温度系数等因素*,实际上的 DAC 输入和输出不会呈完美的线性关系不说,其具体的输入 Code 和输出电压之间,也会因为温度变化或器件老化而产生偏差。尤其是,本设计中 DAC 的输出缓冲增益电阻的温度系数并不好,因此需要设法将这些误差予以纠正。

*一个额外的因素是,Vout = (Vmaster * Rslave + Vslave * Rmsater) / (Rm+Rs) 这个式子是建立在 Vout 负载电流为 0 的前提下的,而实际上这里 Vout 的负载是缓冲运放的输入端,它大约有几个 nA,对于 Vmaster 来说由于合成电阻 R=249 欧姆,其影响并不大;而对于 Vslave 来说,由于 Rslave = 1M 欧,影响就比较大(大约不到千分之一),这个影响会表现为末几位 LSB 的线性不良。

一般来说,现在的齐纳基准电压的稳定性已经非常高,影响整个电路的稳定性的因素大多数是其他器件,尤其是涉及到决定增益的电阻。因此如果有一个方法,定期检查输出电压和基准电压的比值,那么就能容易将输出电压的误差消除掉。为此,在这里引入了一个回读系统,简而言之就是一个为本设计专门打造的电压表,它定期在输出电压和基准电压之间来回检测,由于基准电压十分稳定,因此在预设电压决定的情况下,其与基准电压的比值也是决定的,只要检查输出电压和基准电压并求比值,如果这个比值不等于预期,说明输出电压发生了变化,那么根据变化的比率,将其调整回来,就能保证输出电压相对基准电压的比值稳定,实际上也就保持了输出电压的稳定。在这里,其它误差在求比中都被消去了,只有基准电压和输出电压会被带到结果中。



cr6013.png
回读部分电路图,整个回读部分由被单片机控制的输入复用器,输入缓冲器,以及 24bit 的 ADC 构成。在单片机内程序的控制下,输入复用器来回在输出电压和基准电压之前切换,ADC 将两个电压数字化并送入单片机中,单片机内的程序检测两者的比值,并调整 DAC 使得输出电压符合预设的比值,从而维持了输出电压的稳定。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-21 21:01:28 | 显示全部楼层
二、器件采用和分析

本版本关键器件
1、电压基准 LM399
分析:LM399 是久经考验,广泛用于 6 位半万用表和程控电压源等设备中的恒温基准,具有使用简单、自恒温等优点,且大量用于商品 6 位半万用表的事实说明,其长期稳定性能满足 25ppm/年 这个设计愿景。但是,LM399 也有缺点,主要是噪声较大,这个噪声对于 ADC 的基准来说问题不是很大,因为长时间的积分能很好平均掉噪声,而且程序中也设计了平滑滤波器。但是,它作为 DAC 的基准源问题还是比较大的,直接导致输出电压的噪声较大,且这个电压作为 ADC 的输入信号(不是基准),会在结果中真实反映出来,期结果是导致自动校准的不确定性增大。

改进:有几个方法可以进一步对基准进行改进,一个是采用昂贵但稳定性更高、噪声更低的 LTZ1000;一个是另外设立一个低噪声但长期稳定度要求不高的独立基准作为 ADC 和 DAC 的基准源,PCB 上预留了相应的位置可以自行制作一块第三方基准板安装上。

*手册中 LM399 的长稳数据,一个是列表中的 8ppm per S1000h,一个是 note4 中的 20ppm per S1000h,一个是长稳参考图表中的曲线
3_1306_ea4e931ab9af52d.png
3 倍标准差统计中,44 个 399 的长稳为 10ppm,这意味着如果批量生产,大体上产品中的大多数都落在这个范围,所以用于本设计是能满足设计愿景的。

2、ADC 的 LTC2400
分析:作为能满足 6 位半分辨率的商品 sigma-Delta ADC,2400 比较便宜,也比较好焊接,但选择它不是很理想,它的非线性误差比较大,输入噪声也比较大(大约 6-7uVpp),这对自校准来说是不利的,会导致自校准的结果不确定性增大。

改进:使用噪声更低的 ADC,比如 LTC2440、2442,或者 ADS1255、1259。
*若干 24bit ADC 性能对比
cr6002.png

3、DAC 的 AD5541、MAX515 以及电压合成电阻器 RMaster、RSlave
分析:主 AD5541 是一片 8 引脚的 16bit 精密 DAC,而且它可以接受的基准电压源上限是 +5V,那么作为最终输出结果为 0-12V 的本设计,它需要一个 2.5 倍增益的输出缓冲,这样的结果相对来说比较均衡,毕竟很大程度上输出电压的性能取决于主 DAC。作为微调的副 DAC,采用了廉价的 MAX515 以降低成本,根据电压合成公式
Vout = (Vmaster * Rs + Vslave * Rm) / (Rm+Rs)
在这里 Rmaster 为 249 欧姆,Rslave 为 1M 欧姆,副 DAC 对电压输出的影响比率是很小的,因此没有必要选择过于昂贵的高性能器件。同样,RMaster、RSlave 这两颗电阻对输出电压的影响也被弱化了数千倍,所以这两颗电阻也没有必要使用昂贵的高稳定器件。
cr6003.png

4、电压基准电路的外围原件,包含自举运放 OP07、缓冲运放 OP177、自居电阻对 RHi、RLo,LM399 的限流电阻 Rz
cr6001.jpg

分析:基准电压是整个系统的唯一参考,所以即使具备自校准,但基准自身的变化是无法被校准的,因此本电路必须严格考虑在预设的指标愿景下,所采用的每一个器件的影响,这些影响决定了整个系统的性能。

在电压基准电路中,自举运放 OP07 以电压基准 LM399 为参考,通过 RHi、RLo 的比例输出一个相对稳定的 10V 电压,这个 10V 电压经过 LM399 的限流电阻 Rz 给 399 自身供电,根据 LM399 手册给出的 Vz 和 Iz 的关系,从曲线上看基本是一次函数,用典型值 6mV per (10-0.5)mA = 632uV/mA。Rz 为 3K 时此电流大约是 1mA,在手册给出参数的范围内。在这里,我选用了 Vishay MMU/MMB 圆柱形金属膜电阻(晶圆电阻),其手册给出的指标是
a、温度系数为 100ppm
b、P70 的 Loadlift(longterm)为 0.3% per 8000h(差不多一年),1% per 225000h(25 年)
在这里面,功耗最大的 LM399 的限流电阻 Rz=3K,Iz=1mA,Pr = I^R = 3mW,远低于 P70,因此电阻的长稳(longterm)远好于 b 中阐述的 Loadlift,可乐观认为变化不大。那么,主要分析温度导致的影响。已知 Rz 温度系数为 100ppm,那么温度变化 1 度,电阻变化 3K*0.01% = 0.3 欧,Iz 变化 (10V-7V)/3K delta(0.3) = 0.0001mA,折合电压 Vz 变化 0.0632uV,0.0632uV/7V = 0.009ppm,也就是说 Rz 的 100ppm 温度系数弱化为 0.009ppm,弱化了 11111 倍。
所以,Rz 的变化是几乎不需要担心的,即使 Rz 变化 1%,电压的变化也只有 90ppm,这还是 P70 下的 25 年指标呢,实际上由于该电阻功率远低于 P70,所以长稳也是不需要担心的,因为 LM399 的长稳更烂。
然后就是 RHi、RLo  电阻对,假设也使用 Vishay MMU/MMB 电阻,并假设很不幸这一对电阻温漂方向相反,因此温度变化 1 度导致 10V 变化 200ppm(烂死啦),也就是 2mV,折合 Iz 变化就是 0.000667mA,折合 Vz 变化 0.42uV,这个影响比较大,有 0.06ppm 了,温度变化 20 度的话能达到 1.2ppm。
所以根据预设的目标,可以决定和基准相关的三颗电阻的采用,我对 Rz 选用了 Vishay MMU,这一点没有需要改进的地方。但是 RHi、RLo   使用 MMU 也是可以的,LM399 本身温度系数都有零点几个 ppm,这对电阻的影响,其实也远小于 LM399 自身。如果极致追求更好的温度系数性能,可以使用 5ppm 指标的 PTF56 或 S102C 等电阻。

由于上述分析自举电路的稳定性,所以自举运放使用 OP07 就足够了;但 399 基准电压缓冲输出运放选择了 OP177,这是因为它是自校准程序的唯一参考点,它的温度系数和稳定度直接反映在输出上,那么 OP07 的 1.3uV/度的温度系数(Vos Drift/Temprature)就显得比较大了,如果温度变化 20 度,OP07 输出可能变化 26uV,相对 7V 来说就是 3.7ppm,是一个比较大的变化,因此这里使用了失调电压的温度系数更小的运放 OP177。OP177 的这个指标是 0.3uV/度,如果温度变化 20 度,输出最大可能变化 6uV,相对 7V 而言不到 1ppm。

5、电压基准电路的外围原件,为 ADC 和 DAC 提供基准电压的 3 颗分压电阻,以及它们的缓冲运放;DAC 电压的输出缓冲,以及输出缓冲的增益电阻
分析:为 ADC 和 DAC 提供基准电压的 3 颗分压电阻从上述 10V 从分出 5V 基准电压给 ADC 和主 DAC 使用,再分出 2.5V 基准电压给副 DAC 使用。在没有自校准的情况下,它们同样对输出电压有 100% 的绝对影响,但自校准程序消除了这个误差,所以短期稳定性较好的 Vishay MMU/MMB 电阻已经足矣。同样决定 DAC 输出缓冲增益的电阻也是一样的。

也因此,这里的缓冲运放都可以使用比较一般的 OP07 运放,不必使用过于昂贵的 OP177 运放。


改进:由于自校准程序的干预,使得电压源出于不停的调整中而具有较差的短稳,为了获得更好的短稳性能可以关闭自校准程序的实时执行,此时器件的温度系数无法被消除,那么这些电阻采用温度系数更低的电阻有利于获得更好的关闭自校准程序实时执行的情况下的温度系数性能。显然的,将运放由 OP07 替换为 OP177 也有利于降低非调整状态下的温度系数。



在此版本 PCB 中,TR 由于自身坚持使用了 4 运放封装,不仅浪费运放,而且大多数运放也没有必要使用 OPA4277 (OP177 相当)等级的运放,并且由于 OPA4277 较为昂贵(大约 25 软妹币一只),这样做我是非常反对的。

主要会对性能产生影响的器件和分析如上,余下的器件的影响是很小或者没有影响的。模数隔离部分,我主张采用功耗低且集成度高的 ADUM14xx 系列磁耦,但 TR 为节省成本使用了山寨高速光耦 HCLP2631(怎么运放他就不考虑省钱)和 6N137 的组合,这样的结果是隔离部分外围原件多且电路复杂,功耗大。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-21 21:03:28 | 显示全部楼层
占位 3
此版本 PCB 简要说明

请参考 TR 写的帖子
http://bbs.38hot.net/thread-37337-1-1.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-21 21:03:59 | 显示全部楼层
四、制作与调试

制作部分在 3 提到的帖子中也阐述了,这里也不再赘述,本章节的重点是如何调试。在调试中如果遇到其它问题,欢迎到“问题汇总”帖中提出
http://bbs.38hot.net/read-htm-tid-38857.html


本章只讲述正确无误将元器件安装好,且烧录程序后开机,能通过自检的后续调试。

0、调试设备的准备,本调试需要一台可靠的电压表,它应该具有至少超过 6 位半的分辨率,0.1ppm 线性度和 8ppm 精度指标,且经过校准。推荐的仪器为安捷伦(HP)3458A、Advantest R6581、Fluke 8508、Datron 1281 等。


1、基准电压校准(ADC 满度增益校准)

由于程序预设的 LM399 电压为 7V,而实际上的 399 电压在 6.75V-7.25V 之间分布,所以在新制作好的电压源第一次开机的时候,程序预设的 10V 输出,实际上是 10*(399Vz/7V),我不推荐购买二手拆机的 LM399,因此一般来说新品都是年份较近的,它们的电压都略高于 7V,所以第一次开机的输出电压都略高于 10V,所以要对电压源做基准电压校准。

校准步骤:
用电压表测量此时的输出电压 V1st.,它和 10V 的比值就是 LM399 基准电压和 7V 的比值,假设这里测得输出的 10V 为 10.024578V,那么 LM399 的电压就应该是 7.0172046V,将其填入基准电压一栏。这一步骤校准了基准电压,它将保证程序在被设定 10V 的时候输出的电压也是 10V。

2、输出缓冲的满度增益校准
由于 DAC 是经过一个 G=2.5 的缓冲器输出的,所以需要对这个缓冲器的实际增益进行校准,这一部不是非常的必要,由于自校准程序的干预,即使不做这一步,自校准程序也能把输出校准到正确的值(以 399 基准电压为准)。但是如果增益偏差较大,自校准程序会需要更长的时间才能把输出电压调整回来,所以这一步的进行还是有意义的。

校准步骤:
将电压表接上电压源的输出,然后按“Reset”按钮重新启动电压源,在进入工作界面后的第一个工作周期内,电压表上的读数和 10V 的比值就是满度增益校准值,将其写入满度增益一栏。如果来不及读数,可以将 USB 电缆插入,然后运行上位机程序,设置工作状态为开环,设置输出电压为 10V,然后读数。
cr6004.png

3、非线性校准

由于下面几个因素,回读系统存在一定的非线性误差
a、ADC 本身的非线性误差
b、模拟开关的导通电阻、导通电阻匹配和漏电流
c、运放的偏流和增益误差

大体上,在对基准电压进行校准之后,由于自动调零电路和程序的存在,所以 0 点是无需校准的,因此 0 点和 10V 点经过校准后已经准确,而整体非线性误差大体上是 0-10 之间的一条类二次函数曲线。在测试了数台样机之后,我将其归纳为一个二次三项式写入程序中,一般来说可以满足大多数情况下的应用。

但是在制作样机的时候也发现,一些样机的非线性误差曲线与预想的二次函数差距较大,为了更完美校正非线性,可以自行制作特定的非线性误差曲线。程序提供二次三项式和三次四项式两个曲线模版。绘制特定曲线之前,须先将当前曲线的系数归零,使得非线性误差校正函数不干预程序工作,然后用可靠的电压表接上源的输出,在 PC 上用上位机程序依次设置 0-12V 的 13 个点,并在电压表上读出这 13 个点的实际电压值,它们和设置值之间的误差就是每一个点的“总未调整误差”,将总未调整误差和设置值做 X-Y 关系图(X 轴位为置值,Y 轴为误差值),即可得到一个总未调整误差曲线,以二次或三次曲线拟合此总未调整误差曲线,将得到的二次或三次曲线的系数回填到程序中即可。

注意在使用上位机设置本电压源的输出电压的时候,由于自校准程序的执行需要时间,应在设置一个新的电压之后,过一段时间再从电压表上读数,一般来说这大约需要 10 秒钟,可以观察电压源屏幕右下方的 Run Setp,当完成至少一个周期(0-16)之后才能读数,或者观察电压源屏幕第二行的回读值,等于第一行的设定值的时候才能从电压表上读数。

示范:将电压表的读数填入表格列 C,将其和设置值(表格列 A)的误差计算出来,填写到表格列 F,然后做列 A 为 X 轴,列 F 为 Y 轴的 X-Y 关系图并拟合此曲线。表格列 H 是应用此曲线后的重新测试情况,可见非线性误差被纠正得比较完美。
cr6005.png

程序源代码中内置的非线性误差模版
cr6006.png


并不是每一台的非线性都能被比较完美纠正,下面两台样机的非线性误差类似于上面的例子,即使使用同样的曲线也能获得较好的效果:
Cr6007.png

cr6008.png


而这一台样机的总未调整曲线非常糟糕,使用之前的通用曲线拟合的效果非常糟糕,使用为它特定的三次四项式之后好多了
cr6009.png


后续的调整:
应用非线性误差校正曲线后,须重新测试 0V 和 10V 点是否发生偏移,如果发生较大的偏移,可以考虑重新校准这两个点。由于非线性已经校准,所以可以认为此时电压源是一个线性函数,即输入(在上位机程序上的设置值)和输出(电压)之间成一次函数关系,因此首先校正 0 点误差,此误差可以由非线性校正模版中的常数项修正,将此项减去万用表上反映的 0 点误差填回即可修正 0 点误差。修正 0 点误差之后,再重新进行第一项的基准电压校准(ADC 满度增益校准)即能修正 10V 点误差。
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2013-3-21 21:04:12 | 显示全部楼层
占位 5
后续的开发
回复 支持 反对

使用道具 举报

发表于 2013-3-21 21:08:58 | 显示全部楼层
强烈支持,元件稀缺,只能有机会了再仿制了、
回复 支持 反对

使用道具 举报

发表于 2013-3-21 21:09:44 | 显示全部楼层
这个要先顶后看
回复 支持 反对

使用道具 举报

发表于 2013-3-21 21:25:27 | 显示全部楼层
    
回复 支持 反对

使用道具 举报

发表于 2013-3-21 21:28:24 | 显示全部楼层
唉,没插成楼,顶lz
回复 支持 0 反对 1

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们|Archiver|手机版|38度发烧友 ( 粤ICP备14041877号-2 )

Powered by Discuz! X3.3 © 2001-2012 Comsenz Inc. Designed by 999test.cn

声明:论坛所有内容均由网友个人自主发表,并不代表本站立场。相关内容仅供参考,由此造成的人身伤害或财产损失均需自行承担。

  

GMT+8, 2018-12-13 08:42 , Processed in 0.151318 second(s), 27 queries , Gzip On.

快速回复 返回顶部 返回列表