obsidian-notes/模拟电路/万 用 表DIY一个五位半电压表——毫欧表的兄弟篇,毫欧表_五位半电压表二合一套件正式发布 - P.md
CSSC-WORK\murmur 3e6078442b init version
2024-04-15 11:19:57 +08:00

16 KiB
Raw Permalink Blame History

title updated created source tags
万 用 表DIY一个五位半电压表——毫欧表的兄弟篇毫欧表/五位半电压表二合一套件正式发布 - Powered by Discuz! 2022-01-13 05:20:54Z 2022-01-09 03:41:17Z http://bbs.38hot.net/thread-45486-1-1.html
adc
dac
基准

#基准 #adc #dac

先来个大头照:

特性汇总:

  • 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是101分压用于10V9M90.9K实际上是1M//100K是1001分压用于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分压电阻就是10M1.111M101.01K

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

100mV/1V量程通过Socket_mV端子接入串接了3个10K电阻目的是防止mV档误接高压损坏。芯片的管脚上一般会有两个二极管连到电源和地如果输入电压超过VCC或者VEE就会导通钳位到VCC+0.7V或者VEE-0.7V从而保护芯片。但是这个二极管的通流是有限的一般是几个mA到几十个mA例如AD8628是5mA74HC4052是20mA如果不加限流电阻电压略微超过限制这个二极管就会烧毁因此前面加了3个10K电阻做限流。为什么要3个10K而不用1个30K呢主要是因为一个0805电阻的耐压只有150300V而且0805的功率只有0.1W10K电阻的话最大电流只有3.16mA3.16mA*30K=94.8V短时间200300V问题也不大。一般台表这个电阻用的都是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开环增益140dB0.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=110Hz的条件下RMS noise是2.38uV,峰峰值 noise为2.38*6.6=15.7uV也就是1V档的1.5个LSB五位半大概看到两个数在跳极端情况可能3个在Slow模式下把10个读数平均提升log(10)/log(4)=1.66bit2^1.66=3.16LSB因此在Slow模式基本上不会跳数了当然由于舍入问题导致的最后一位跳是不能避免的

四、基准电压

这里可以使用C8051F350的内置基准最大15ppm温度系数或者外部基准可以用REF5025工业级2.5ppm(典型)/3ppm最大温度系数商业级3/8ppm或者MAX6192A级2/5ppmB级4/10ppmC级8/25ppm

使用内置和外置基准的frimware是不一样的不能搞错。

五、电池供电的一些特殊考虑

由于锂电池的能用电压范围大概是3.x4.2V,而我不想使用升压电路,因此有些特殊考虑。

1、  模拟开关可以用74HC4052或者MAX4782不能用74HCT4052带T的要5V供电

2、    运放都采用RRIO的

3、    外置电压基准用的是REF5025或者MAX6192不能用ADR421因为ADR421的最低输入电压是4.5V。这个也是我没有用更高档的电压基准芯片的原因目前最好的2.5V基准可能是MAX6325C_A0.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档

100V档我就没有办法测了

原理图

OhmMeter_F350_V21.pdf

3F

过来捧个场,乍一看还以为楼主用了啥模拟开关居然不用继电器切换高低压量程,原来是用了两个插孔 我用 ADS1232 做的“万用表”(量程有限),还是用了经典的继电器切换