[转载] DIY一个五位半电压表
4878 查看
23 回复
 楼主 | 发布于 2018-01-31 | 只看楼主
分享到:

这是从38hot上转载的一个DIY设计,真的很不错!


有兴趣的可以去买作者的套件:https://shop103150609.taobao.com/?spm=a1z10.5-c.0.0.4d6e73e8XRHDKw



特性汇总:
- 100mV/1000mV/10V/100V四个档位,大概有50%超量程余量
五位半显示,最大150000 count
支持任意值校正,通过面板按钮即可校正。精度保守一点吧,0.01% Reading+4 LSB,后面有测试图
-  Fast/Slow两档速度,Fast10/秒,Slow1/
数据从USB UART输出,波特率115200(目前只输出,不能从上位机控制)
默认5分钟自动关机,可以关闭该功能
使用一节锂电池供电,支持从USB充电
支持背光,可以关闭
工作电流:17mA(背光关闭);44mA(背光打开)。一节145005号)锂电池可以连续工作1.52天(背光关闭)


一、序
现在三位半甚至四位半的电压表(多用表)已经非常廉价,而且随着器件的进步,自己DIY一个五位半甚至六位半的电压表其实也不是什么难事,已经有人做了六位半多用表,本来这个帖子是没有太大必要的。原本设计的是一个毫欧表,为了测试C8051F350的24bit ADC,顺便兼容了一个电压表功能。仅仅在贴子最后附带提了几句,发现大家都对它也感兴趣,因此新开一个帖子讨论一下吧。

一个直流电压表最关键的有3个部分:模拟前端、ADC和基准电压,下面分开讨论。


二、模拟前端
模拟前端肩负了几个重要任务:输入信号的衰减或者放大/低通滤波/阻抗变换/防护。
大家都知道一般来说ADC只有一个量程,台式的一般是10/20V,手持的三位半或者四位半是200mV,这个称为基本量程,也是精度最高的量程,其他的量程都要把输入信号放大或者衰减到这个量程再来测量。这个表的基本量程是1V,而且由于MCU内置了PGA,因此模拟前端仅需要考虑衰减。

10V和100V量程通过Socket_V端子接入,100mV/1V量程通过Socket_mV端子接入,这个和常见的不一样,为什么这样?这两个输入信号是有高压的,不能通过模拟开关切换,一般台表使用继电器切换这两个端子,手持表通过刀盘切换,而这个是做毫欧表顺便做的,不想为电压表增加太多东西(现在就加了两个运放、一个模拟开关和几个跳线),加继电器我是不愿意的,做刀盘又没有本事,而且端子有4个,不用白不用J

10V和100V量程通过Socket_V端子接入,通过4052模拟开关选择衰减量,9M(实际上是9个1M串联):1M是10:1分压,用于10V;9M:90.9K(实际上是1M//100K)是100:1分压,用于100V。


模拟开关接成这样主要是想尽量减小模拟开关对分压的影响。模拟开关的Ron其实无关紧要,如果Ron的恒定的,可以通过软件增益校正回来,麻烦的是Ron的变化。从下图可以看出,在不同的输入电压下,Ron是不一样的,变化大概是20欧姆,如果通过S2把分压结果取出来,那么S1的Ron就可以折合到9M中去,S1的Ron变化20欧姆,相对于9M来说,大概变化了20/9M=2.2ppm;如果不用S2,而是直接从A点把分压结果取出来,那S1的Ron变换就得折合到下面的电阻,20/90.9K=220ppm!

2.2ppm对于一个五位半的电压表来说,已经小于1LSB的一半了,因此基本上可以忽略。这个便宜的74HC4052还有一个问题leakage current比较大,DS上写在25度下,最大0.1uA,幸好实际测试这个漏电流要少3-4个数量级,对分压和mV档的输入阻抗基本没有影响。
当然,选择74HC4052纯粹是出于成本考虑,如果要提高性能,可以选用MAX4782,和74HC4052管脚兼容,可以直接替换。下图是MAX4782的Ron曲线,可以发现在各种共模电压/各种温度下,Ron的变化不会大于0.3欧,相对于9M电阻,0.3/9M=0.03ppm,这个误差就算是六位半都可以忽略了。而且MAX4782的漏电流的典型值是2pA,相当不错。


这个衰减方案有一个缺点——100V档的输入阻抗不是标准的10M,因为要保证10V档输入阻抗为10M,那100V档输入阻抗只能为9.09M。其实不是使用类似衰减方案的手持表也是如此,例如Fluke 15/17,分压电阻就是10M:1.111M:101.01K

台式万用表一般是直接100:1分压,这样完全避免Ron的变化对分压的影响,而且100V/1000V档的输入阻抗都是10M。为什么我不这样做呢?因为我的基本档是1V,如果直接100:1分压,10V档的输入就只能先衰减到1/100再放大10倍,引入更多的噪声,由于10V档是比较重要的档位,噪声导致读数跳动是难以接受的(C8051F350的内置PGA不是很好)。而台式表的基本量程是10/20V,100V档没有这么重要,加上人家的分压电阻/PGA比较好,这样先衰减再放大关系也不大。

100mV/1V量程通过Socket_mV端子接入,串接了3个10K电阻,目的是防止mV档误接高压损坏。芯片的管脚上一般会有两个二极管连到电源和地,如果输入电压超过VCC或者VEE,就会导通,钳位到VCC+0.7V或者VEE-0.7V,从而保护芯片。但是这个二极管的通流是有限的,一般是几个mA到几十个mA,例如AD8628是5mA,74HC4052是20mA,如果不加限流电阻,电压略微超过限制,这个二极管就会烧毁,因此前面加了3个10K电阻做限流。为什么要3个10K而不用1个30K呢?主要是因为一个0805电阻的耐压只有150~300V,而且0805的功率只有0.1W,10K电阻的话最大电流只有3.16mA,3.16mA*30K=94.8V,短时间200~300V问题也不大。一般台表这个电阻用的都是1W以上的(例如34401用8个13K 1W的电阻串联),因为它要求耐压1000V。


那是不是限流电阻越大越好呢?从保护的角度,是的。但是,有两个问题:
1、这个电阻会带来噪声——约翰逊噪声。如果这个电阻在百K级以下,而你不是做纳伏计,约翰逊噪声不是很大问题,这里不考虑了。
2、误差电压=电阻 x 运放的输入偏置电流,因此要看具体情况来选择。例如,使用AD8628,输入偏置电流为30pA,前端使用3个10K电阻做限流,引入误差30p*3*10K=0.9uV。如果偏置电流是固定的,那这个误差电压是可以作为offset校正的,但是偏置电流会随共模电压/温度等变化,从下图可以看出,在25度下,随共模电压变化,偏置电流变化几个pA,也就是说输入会变化0.x uV,总的来说,对于一个五位半的电压表关系不是太大:)


这里说个题外话,大部分的DIY作品都没有考虑防护的问题,我是非常不认可的。如果一个方案没有任何防护能力,我会推翻重来。

一般在串接的限流电阻后并一个小电容,组成的RC时间常数大约是最大测试速率的1/10,起模拟滤波作用。例如100/1000mV档,按照10次每秒的测试速率,RC常数大概是0.01s,因此C=0.01/30K=0.3u,实际选择了0.1u的电容;对于10V/100V档,0.01/10M=1n。有些台表还可加了一个FET控制这个电容或者滤波电路是否接入,这样就可编程是否加模拟滤波,例如Fluke 8840A通过Q304控制是否接入一个3 Pole Filter。

模拟开关之后,直接用一个运放AD8628做跟随,实现阻抗变换——对输入来说G级,对ADC来说欧姆级。AD8628通过自稳零和斩波相结合,使得offset的温漂典型值只有0.002uV/度,而且偏置电流只有30pA,开环增益140dB,0.1-10Hz的噪声峰峰值只有0.5uV,这个运放胜任六位半都没有问题,用在这里足够。考虑ADC的开关电容输入级,运放的输出要接比较大的电容,为了防止运放自激,加了相位补偿(R49*C23=R50*C7)。

有些朋友问我这个板子只有一个4.2V的锂电池,还降压到3.3V,没有升压没有负压,怎么能测试负的电压?其实,COM端子不是表的地,而是3.3V的中点电压SGND,这个电压就是有下面的运放产生,也是用了类似的补偿方法。由于是电池供电,这个表的电压都是浮动的,不管输入电压COM端的共模电平是多少,对于表来说都是Vcc/2,输入电压在前面都会衰减到1.6+/-1V这个区间。产生虚地的这个运放要求不是很高,用LMV321/MCP6002/MAX4165之流的就行了。
不过这里要注意一点,我的USB接口是没有隔离的,也就是说如果连上电脑采集数据时,电脑的地和表的地是连在一起的,那么输入电压的共模电压会加在电脑上,如果电脑也是接地的话,那就出大问题!!如果笔记本电脑也用电池供电或者电源适配器是隔离的话,那电脑的地上也会出现这个共模电平,例如USB接口的外壳,摸到就会触电的!

   


三、ADC
使用C8051F350内置的24bit ADC,这个在毫欧表里面已经说的比较多了。这个表再重温一下,在PGA=1,10Hz的条件下,RMS noise是2.38uV,峰峰值 noise为2.38*6.6=15.7uV,也就是1V档的1.5个LSB(五位半),大概看到两个数在跳(极端情况可能3个),在Slow模式下,把10个读数平均,提升log(10)/log(4)=1.66bit,2^1.66=3.16LSB,因此在Slow模式基本上不会跳数了(当然,由于舍入问题导致的最后一位跳是不能避免的)。

四、基准电压
这里可以使用C8051F350的内置基准(最大15ppm温度系数),或者外部基准可以用REF5025(工业级:2.5ppm(典型)/3ppm(最大)温度系数;商业级:3/8ppm)或者MAX6192(A级:2/5ppm;B级:4/10ppm;C级8/25ppm)。
使用内置和外置基准的frimware是不一样的,不能搞错。


五、电池供电的一些特殊考虑
由于锂电池的能用电压范围大概是3.x~4.2V,而我不想使用升压电路,因此有些特殊考虑。
1、  模拟开关可以用74HC4052或者MAX4782,不能用74HCT4052,带T的要5V供电
2、    运放都采用RRIO的
3、    外置电压基准用的是REF5025或者MAX6192,不能用ADR421,因为ADR421的最低输入电压是4.5V。这个也是我没有用更高档的电压基准芯片的原因,目前最好的2.5V基准可能是MAX6325C_A(0.5典型,1ppm最大),不过最低供电要求是8VL这些基准芯片的封装都是兼容的。
4、    USB接口由于要给电池充电,因此没有隔离,要注意采集数据时的共地问题

六、其他辅助功能
1.         数据输出,支持从USB口输出数据。目前仅支持数据简单的从USB输出,不能通过电脑控制。可以使用各种串口终端,例如超级终端、串口助手等,具体COM几看设备管理器,波特率115200。
通过Mini-USB连到电脑,应该会发现新硬件,Windows会自己联网找驱动(保证网络畅通,大概1-2分钟就能找到,Win7 64bit都没有问题),或者自己去google搜索CH340的驱动。安装驱动之后,设备管理器会多了一个COM口(COM几就难说了)

2.         锂电池充电
内置了一个锂电池充电器,默认充电电流为500mA。在Mini-USB接口旁边有两个LED指示充电状态。
可以通过更改R25调节充电电流。


七、测试
使用一个10V基准,通过KVD分压,和Fluke 8842A对比测试,测试结果请看图,一般偏差在2-3LSB,最大偏差6LSB

10V档
 
读数稳定性(噪声),Slow模式,5分钟


100mV档。这个档位8842A数据跳动比较厉害,将就吧



1V档



原理图在附件中

本帖有更多资源,需 登录 才可以下载,没有帐号?立即 注册

(0 ) (1 )
回复 举报

回复于 2018-02-01 沙发

这个讲解的很详细,对设计过程的好多描述都值得人去琢磨和学习,赞一个。
(0 )
评论 (0) 举报

回复于 2018-02-01 2#

来自网友,关于半位的解释!!


以前国产的老数字表满位的多,比如4位的可以显示9999,根据量程不同小数点也不同,比如可以是.9999V,也可以是9.999V或者99.99V。但是,这样的表有个很不方便的缺陷,就是测量常用的1V或者是10V时,稍微一超过,就要换量程。比如10.01V就只能用99.99V档,造成误差加大,这很不方便。

而国外的很多表做了改进(或者一开始就看出这个问题),把量程设计的高一倍,最多显示19999,这就是4位半,测量10V附近的电压时可以从容应对。这样的3位半或者4位半的IC有大量厂家生产,因此这样的万用表非常多,最高位只能显示0或1,因此叫半位。

但是,当这样的表测量10V时,实际上等于浪费了一半的量程,因为我们都知道,读数在接近满度才最准确。因此,我很欣赏HP/Agilent的做法,把量程选为11999或者12000,只比10的整数幂超过20%。但这样的表也作为半位计算,比如HP/Agilent 34401A,1199999最大,也叫6位半。

再后来,出现了很多高半位可以显示更大数值的,比如3999,有人叫3又3/4位。我手里有个70D,满显示是80000,难道叫4又7/8位?嘿嘿。这样的表有的时候还是很方便,比如1999的测量220V会只显示220,但2999的表就会多一个有效位成为220.0V。


http://www.gfjl.org/thread-12632-1-1.html

(0 )
评论 (0) 举报

回复于 2018-02-01 3#

学习了,多模拟开关的使用,get到新技能了~~
(0 )
评论 (0) 举报

回复于 2018-02-01 4#

不错,学习了,感谢分享;
(0 )
评论 (0) 举报

回复于 2018-02-01 5#

这个厉害了 ,认真的看了一遍,谢谢分享!!!
(0 )
评论 (0) 举报

回复于 2018-02-01 6#

这一块是怎么工作的,一键开关机吗

(0 )
评论 (1) 举报

回复于 2018-02-03 7#

原来一直想买块来玩玩,现在没有卖了
(0 )
评论 (0) 举报

回复于 2018-02-27 8#

谢谢分享~~~~~~
(0 )
评论 (0) 举报

回复于 2018-03-21 9#

tks!
(0 )
评论 (0) 举报

楼主 | 回复于 2018-04-10 10#

支持下;
(0 )
评论 (0) 举报
发表回复
0/3000





举报

请选择举报类别

  • 广告垃圾
  • 违规内容
  • 恶意灌水
  • 重复发帖

全部板块

返回顶部