曾经想过要DIY一个比较精确的电压测量系统,其精度比市面上的3位半万用表要高,可以测量到0.0001V,用来DIY一个高精度电源。
查了部分高位万用表使用的专用IC后,发现其中的ICL7135效果还不错,于是做了几块板来测试。
在选择了大量的积分电容做实验后,最终找到了一种可以达到所谓的9999的电容,经测试基本符合要求,但这个电容体积相当大,不方便做成表头的形式。偶然一个机会发现了一片高位的ADC,其性能超过ICL7135并不需要很多元件,于是向凌特公司申请了两片LTC2400回来测试。
LTC2400,24位ADC。5V供电,输入电压为-0.3V-5V,串型数据流,比并行ADC更节省走线,做了块实验板,效果好不错,完全超过ICL7135。
完成后录了个视频。原理图见附件内容
扩展1:原理图见附件
在运行中考虑到AD586的温飘有2PPM,在天热或天冷的时候电压会有偏差,所以后来打算打算使用更高精度的恒温基准来为电路提供基准电压,看了很久,发现性价比较高的只有LM399。
而LM399的输出电压为7V,高于LTC2400的5V。如果用精密电阻做分压,其效果还不如直接用AD586。因为AD586使用的是晶圆电阻,其比值稳定度要比一般的精密电阻还要好。
另外LTC2400的输入电压只有5V,想扩展到10V如果使用精密电阻的话,其稳定度也就无法得到了保证。
为了能使用到LM399的高稳定电压,最终做了一个想到了一个设计方案:
使用电阻将LM399的电压降到5V给LTC2400做基准使用。
另外使用另一对电阻将LM399的电压降到5V内,而将这对电阻分别用模拟开关进行切换LM399的电压和待测电压。由于电阻受温度的影响变化是一个较长的过程,而短时间(几秒)内电阻的变化非常小。这样,待测电压和LM399的电压就成了一个比值内的关系。首先将LM399的电压÷测量到的LM399分压=目前分压电阻的比值,这个比值在几秒内的时间是微忽其微的,再用这个比值×测到的输入电压分压,则获得了准确的输入电压。
更方便的就是,这样可以很好的将量程扩展到了10V。
在每一个测量周期,LTC2400分别测量0V 7V 被测电压。然后根据0V的误差(归0误差)和基准电压,得到当前系统中的误差和电阻的比值,再用这两个值算出输入的电压。LTC2400的测量速度约为6次/秒,这样,不需要1秒就可以完成一个比较周期。
扩展2:原理图见附件
在添加了LM399做为基准后,经过了一段时间的测试,发现测量的电压值要比原AD586要准确,而且增加了运放做LTC2400的缓冲,测量输入阻抗也提高了,后觉得四路模拟开关还空出一路,就打算再添点东西,把这路也使用上。于是就有了在这个基础上增加DAC部分的打算。
LTC2400是一个24位的ADC,要想满足它的性能,就必须使用18位以上的DAC。但18位的DAC太贵,所以打算用两个12位便宜的DAC联合输出24位。
由于DAC输出的电压为0-5V,所以决定用一个2.5倍电压放大电路升到12.5V左右。
其实升压电路也有一定的误差,并随温度的变化而变化。为了消除这个误差,决定用主DAC先产声一个电压,测量后用副DAC产生一个电压并降至1/4000做为误差的微调。
之后还考虑到单片机对模拟电路的干扰问题,所以决定使用光藕进行数模隔离。
基本电路图。
这个已经算是有点复杂了。
其流程如下:
设置10.00000V
指定主DAC输出4V
4V被放大到10V(电路中设计放大倍数约2.5倍)
ADC测量基准电压
ADC测量接地电压
ADC测量DAC输出后放大的电压
将DAC输出后放大的电压与10.00000V做比较,得出一个电压差
命令副DAC输出相应的电压纠正电压差
ADC测量输入点电压。
。
。
。
如此循环,ADC都将测出输出电压与设定电压的差值并通过副DAC纠正,逐步逼近设定电压。
画完图后已经不打算再自己做电路板,便到工厂开样板。
经测试很成功。但测试时临近年末,部分商家已放假,所以只能在垃圾堆里翻出一个坏的显示屏临时调试使用。
使用电脑232接口控制单片机,使系统分别输出0-11V。并用6位半万用表测量。
精确到0.0001V算是没有问题,由于线性度的关系,暂时还无法精确到0.00001V