此文接上篇:EmoeDAQ-高精度数据采集器-上篇
在上一篇文章中,我们已经基本搭建起了EmoeDAQ的硬件系统框架。经过漫长的测试与验证,DAQ终于迭代到了我个人认为比较完善的程度,一起来看看🐟的设计与测试经验总结吧。
文章没写完时上了锁,有人觉得我们开启付费阅读模式了,🐟澄清一下:没有哦,以后也不会有。单纯是我没写完,先发出来让Emoe的编辑们帮我审审稿。
DAQ的PCBA镇楼~
4-误差分析
4.1-Precision vs Accuracy?
在做误差分析和系统校准之前,我们最好先来看看 精确(Precision) 和 准确性(Accuracy) 这两个概念。
-
精确(Precision)
精确是指测量过程中的重复性(或离散性),体现到我们的DAQ系统中,就意味着测量的噪声大小。噪声越小,测量结果越精确 -
准确性(Accuracy)
准确性指测量值与真实值的 绝对误差。准确性越高,测量值越接近真实值。在DAQ系统中,决定准确性的是基准电压源的精度,以及系统的非线性误差。
用一张流行的网络meme图解释如下:
自然,我们当然是既要又要——保持低噪声的同时,还要有较高的绝对精度。
4.2-误差来源分析
由于硬件的非理想性,信号链中的增益和失调不可能如我们在原理图设计中那样精准。在我们上篇文章中设计的DAQ模拟信号链中,只有全差分放大器是带有增益的,但所有涉及到有源器件的部分都会引入失调误差。
最终,整个信号链的 主要误差来源 可以归纳如下:
-
增益误差
- 全差分放大器增益误差
- ADC增益误差
- 基准电压源的输出电压误差
-
失调误差
- 输入缓冲放大器的失调误差
- 输入偏置电流&失调电流流经有效输入阻抗产生的误差电压
- 全差分放大器的失调电压误差
- ADC自身的失调电压误差
-
噪声
- 有源器件引入的噪声
- 电阻热噪声
4.3-估算误差大小
🐟做了个表格,将各个误差项填进去然后估算。厂家给出的数值并不是器件的平均值,一般都是对大量样本测试、统计分析得出的3σ值(有的黑心厂家会标平均值),所以用于预测误差是比较可信的。
- 增益误差
- 失调误差
失调误差估算时需要注意,因为输入级是差分输入,所以理论上来说输入失调+偏置电流在电阻上产生的压降是对称的,不应当有失调电压产生。当2个输入端电流不相等,或2个输入路径上的有效阻抗不相等时,才会有比较大的失调电压。此处不做详细计算
- 噪声
在这里我粗略估计了一下噪声,发现信号链的噪声要比ADC本底噪声小得多,所以就没有进一步计算,以ADC的噪声性能为准即可。
当然,如果在某些应用场景下,调理输入信号的信号链噪声不可避免的变大的话,还是要认真做好噪声计算。算出信号链输出端(ADC输入端)总噪声后,再以此来估算系统最终的信噪比和无噪声分辨率。
4.4-如何处理误差?
4.4.1-初始误差
看到增益误差这么大,是不是有点不知所措了/:D
Don’t worry,we can fix it。器件的初始误差是固有的,主要的成因是芯片设计/加工时的精度误差或其他因素造成的,这部分是相对比较固定的成分,芯片一旦生产完毕出厂后,这部分误差就不会变动(当然,还是会随着时间流逝逐渐变化,不过我们用 长期漂移(Long-Term Drift) 来描述这类现象)。
这类初始误差,通过外部高精度的参考测量表对比测试,可以轻松地消除。
4.4.2-温漂
而漂移误差(温度漂移),则是我们需要着重考虑的,因为这些误差会随着器件所处的环境温度时刻变化,对系统来说,温漂是主要的误差来源。
因为即使是同一型号的芯片,由于个体差异,温漂曲线也会呈现出多种多样的变化。而这种变化曲线往往不是线性的,很难通过简单的线性拟合去修正,或者说只能在很小的温度区间范围内修正。比如下图中ADR4520的温漂曲线,在全温区范围内他甚至拐了3次弯。
一般来说,IC设计者会尽可能让芯片特性在25°C左右的温区内保持比较缓慢的变化,但仍然难以避免非线性变化的存在。
一般而言有几种方法来减小这种温漂误差:
-
将温漂敏感的器件用隔热材料罩起来密封
在1的基础上,可以给密封区加热/制冷,并执行闭环控制,让系统温度恒定 -
如对精度要求不高,且工作温度稳定,可以简单使用线性拟合温度变化对系统的影响
在2的基础上,可以换用高阶多项式拟合 -
使用一个温漂极低的参考源,让系统隔一段时间测量一次参考源的输出,来实时修正自身的漂移
(有点脱裤子fp的意思…但确实是可行的方法)
4.4.3-老化
长期漂移(Long-Term Drift)是由于芯片die上的金属原子在不规则分子热运动中缓慢扩散导致的特性变化,这种漂移基本是不可能消除的(至少在现有的材料学体系中)。我们只能尽可能通过选型(加钱)来减小长期漂移的影响。
当然,我们可以把这部分成本转嫁给用户,让用户每个季度(90天)进行一次校准标定,甚至更频繁的1个月一次,就可以放松对长期漂移的要求(bushi
以及还有个方法,就是用一个长期漂移极低的参考源作为内部比对参考(和上面脱裤子fp的方法一个意思)。但既然这个参考源无论是老化还是温漂都更小,我为什么不直接用他当我的系统基准源呢(摊手
硬要说的话,也有不用这类基准的理由——成本。要达到极高的指标,一般都只有恒温齐纳基准可选,而这类基准的输出电压通常都在6-7V左右,无法直接适应现代CMOS工艺的高精度ADC(这种集成ADC的基准输入范围通常只能到5V),所以必须使用外部电阻分压器把高电压分到5V,此时就对分压器的指标提出了苛刻要求:高匹配度、极低的匹配温漂,非常好的老化指标,如果这些参数达不到要求,那高等级的电压基准指标就会被限制到分压器的指标。
这么好的分压器,自然也不会便宜。通常高位万用表中使用的深埋齐纳基准搭配的分压器都是金属箔电阻,电阻可能比基准更贵。所以,高指标的bandgap基准是平衡成本与性能的理想选择之一。
4.4.4-生产过程中的迟滞
上面我们提到了长期漂移的概念,但对于制造商而言,系统的早期漂移可能更重要.因为长期漂移是客户需要考虑的,而厂商需要保证产品出厂到客户手中的时刻,精度指标就是达标的。
不幸的是,在PCB的生产过程中,回流焊等升温降温操作会让基准电压源IC等决定系统精度的关键器件产生 热迟滞(详情请参考本站文章:精密电路硬件设计指南),导致这些器件的初始误差进一步加大。此时需要通过通电静置等方式让时间去慢慢消磨掉这些迟滞带来的影响。
下图是ADR45XX系列基准电压源经历3轮冷热循环后产生的迟滞误差示意图。此处的测量操作是:将基准放置在25°C环境下,加热到+125°C,然后冷却到-40°C,再回到25°C室温,此过程为一个循环。经过一个循环后基准的迟滞误差典型值是-13ppm,此误差对于系统来说是不可忽视的。
换句话说,如果你想修改已经稳定的DMM等精密ADC PCB,请小心对待基准及周边的元器件,直接用热风枪将这些敏感器件加热到高温,再自然冷却到室温,会导致基准经受热循环,产生迟滞误差。到时候你就要傻呆呆地等着基准自己释放掉这些热迟滞,回到比较稳定的状态——等上一个星期再回来调试吧。
你猜为什么🐟这篇文章写了这么久…
4.4.5-早期漂移-加速老化
器件的老化并不是线性的,即每过100小时变化1ppm这样;通常来说老化符合这样的规律(出自ti的Application Report: Long-Term Drift in Voltage References :
比如说,LTZ1000手册中给出的老化指标是 2uV/√khr,那么我们可以得知在LTZ1000初始状态稳定之后,经过1000小时,输出电压变化2uV,经过2000小时的时候,输出电压变化2*√2 uV,经过4000小时的时候,输出电压变化4uV。
当然,前提是基准已经 渡过了早期漂移区间。我们看ADR45XX系列基准的长期漂移与早期漂移变化,可以看到在老化曲线的开始段,曲线斜率远大于稳定后的曲线斜率,随着时间流逝,曲线斜率渐小,稳定在一个相对固定的值,这个过程就是 早期漂移。
所以在PCB整板焊接制作完成后,立刻进行校准是 无效操作。基准马上就给你表演一个泥给路哒哟,短短几天就漂的老远。正确的做法是让所有器件处在正常工作状态下一段时间,俗称烤机,让关键器件(基准、电阻)渡过了早期老化阶段后,再对整机进行校准与测试,才能得到较为理想的结果。
你猜为什么🐟这篇文章写了这么久…
5-校准
分析完了误差来源,弄清楚了我们需要如何处理误差,我们终于可以对系统进行校准了。
对于DAQ来说,校准主要分为2部分,即 增益校准 和 失调校准。而系统的积分非线性度校准比较复杂,我们单独讨论。
5.1-ADC校准理论基础
理想的N位ADC无增益和失调误差,即——输入0V电压,他吐的code就是0,输入VREF电压,他吐的code就是2^N-1。如果以一次函数描述,那么他的传输函数就是完美的y(x)=ax,没有b。
真实的ADC存在失调误差——输入0V时,ADC吐的code可能不是0,而是114;同时也存在增益误差,输入还没到VREF电压,ADC就吐出了 2^N-1;或者是输入到了VREF电压,吐的code还不到 2^N-1。如果用传输函数来描述,那就是y(x)=ax+b。
将理想ADC的传输函数(黑线)和2个真实ADC(红、蓝)的情况绘制在下图中
只要学过初中数学,就对这种情况不陌生吧)
那么我们可以用一个增益系数和一个失调系数来校准ADC的传输函数,让其达到更高的精度。比如对上图的红线操作如下:将红线输出的结果减去2个div,然后除以(1+0.01),就可以得到比较贴近真实值的结果。
同理,对于DAC来说,也可以这样粗略地补偿。(但最终精度仍然受限于DAC的分辨率)
5.2-更实际的ADC
实际ADC的传输函数要复杂一些,首先它肯定不是一次函数,而是具有大小不等、随机分布在整个测量范围内的量化误差。每2个code之间的误差可以用DNL(Differential Non-Linearity,微分非线性)来衡量,而对于整体的误差可以用INL(Integral Non-Linearity,积分非线性)来衡量。实际上,INL就是DNL在一段区间内的积分。
实际的ADC传输函数可能长这样(红、蓝为实际ADC曲线,黑色为理想曲线):
AD7175-2数据手册中给出的、在不同工况下ADC的INL曲线
5.2.1-精度的衡量指标-INL/DNL
在 精密电压源设计 一文中我们已经测试过DAC的INL了,这次轮到ADC了。在此之前,我们来补全一下INL和DNL的概念。
为了方便理解,我们假设一个非常简单的模型:ADC的位数为2位,VREF=2V,假设ADC理想无噪声,VREF精确。
对于这个ADC有3种情况:
- 当 0V <= VIN < 1V 时,ADC应该输出的code是0;
- 当 1V <= VIN < 2V 时,ADC应该输出的code是1;
- 当 VIN >=2V 时,ADC应该输出的code是2;
此时,无论是INL还是DNL,各个码值都为0。现在让他不理想一下:
- 当 0V <= VIN < 1.2V 时,ADC输出的code是0;
- 当 1.2V <= VIN < 1.8V 时,ADC输出的code是1;
- 当 VIN >=1.8V 时,ADC输出的code是2;
此ADC的一个LSB大小为 V_LSB = VREF/2^(2-1) = 1V, 那么我们可以计算码值为1时的DNL,INL分别如下:
DNL(1) ={V_{meas-step} - V_{ideal-step} \over V_{ideal-step}} = {1.2-0-1 \over 1}= +0.2 LSB \\
INL(1) = DNL(1) = +0.2LSB
对于码值为2时的INL和DNL:
DNL(2) ={V_{meas-step} - V_{ideal-step} \over V_{ideal-step}} = {1.8-1.2 - 1 \over 1} = -0.4 LSB \\
INL(2) = DNL(1)+DNL(2) = 0.2-0.4=-0.2LSB
从上面的计算和曲线可以得知,DNL是一个相对值,它描述了每2个相邻码值之间的跳变误差情况;INL实际上就是DNL的积分,某点的INL描述了该点的绝对误差值。
在通常的ADC/DAC中,我们描述INL/DNL特性常用的单位是LSB,因为这时ADDA的位数普遍在16位以下;当ADC/DAC的位数高至20位以上时,厂家通常会用ppm of FS(full scale)来表示INL/DNL。感觉可能是因为在20bit以上分辨率下,ADDA的INL/DNL做不到10个LSB以内,再用LSB表示的话,手册上指标一眼看过去就不好看了…1ppm是一百万分之一,比如对于一个20位ADC,分辨率为2^20 = 104.8576万,它的1个LSB就约等于满量程的1ppm了。
此外,当ADDA位数超过20位后,再去逐点测试INL和DNL就有些不切实际了。我想到的原因有几个:
- 如此高精度的ADDA,测量需要的设备精度也需要非常高,导致测试时间变慢
- 超高位数的ADDA器件,逐点测试它们需要的仪器设备超出了常规水准,需要换用间接测量方法
- 测试时间太长,以至于AD/DA器件在测试期间特征已经缓慢发生了变化,导致测试无效
但事实上用脚趾头想想也知道,测试2^24个点(1677万)的高精度数据完全不现实。就不说用平均读数来提高精度了,假设0.5s一个点,那也需要大概2330多小时,考虑到平均读数,这一趟测下来是字面意义上的测半年。更不用说32位的ADC了…
所以对于此类高分辨率的ADC来说,通常都是取有限样本点进行测试。
5.2.2-另一个角度看INL
既然INL描述了系统的绝对误差值,那么是不是有一个更为简单的计算方法呢?
假设现在有一个理想电压源输出电压是Videal,ADC的测量值是Vmeas,那用:
INL = {V_{meas} - V_{ideal} \over V_{LSB}}
就可以得出ADC在此处(输入电压)的INL了?如果你信了这个方法,并进行测试的话,最后得出来的结果会是这样的:
看到这起飞的INL,再看看厂家数据手册里给的数据,是不是开始怀疑人生了。。。
因为此时的误差还包含了ADC的系统增益误差和失调误差。此时 用这个公式算出来的INL 并不是真正的INL。请记住:INL/DNL描述的是ADC自身的特性,不能将其他器件贡献的误差一并算进来!!
所以正确的测量方法是,先为ADC系统执行增益和失调校准,随后再进行取点测试,根据上面的公式算出INL。
如果不想先校准再测试怎么办?也有办法啦,将上面的曲线斜率拉平,然后上下平移到以0高度为中心点,基本对称就可以了。(相当于对数据做了校准)
5.3-为ADC校准
在这种情况下,曲线坎坎坷坷,我们似乎很难去估计曲线的全貌,来得到比较精确的校准系数。此时我们有几种办法:
-
两点校准——取满量程输入和0点,测量失调和增益,算出2个校准系数
-
线性拟合校准——暴力取点,在整个测量范围内取多个校准点,然后根据这些点连成的曲线来估计2个校准系数
-
分段校准——更暴力的取点,通过在测量范围内更密集的取点,找到INL曲线的 拐点,以拐点(可能有多个)为基准,将整个测量范围划分为若干段,对每个小段内分别进行校准,得到多个校准系数。
-
高阶多项式校准——同样需要大量取点,然后用一个复杂的高阶多项式去拟合ADC的传输函数。
-
加钱换更好的ADC。
几种方法中,方法1最为简单,也是多数ADC设计者直接集成进ADC的功能;虽然这种方法非常简单方便操作,但是精度一般。
方法2权衡了精度和测试、校准以及补偿算法的复杂度,是比较优的解。
方法3能实现最高精度,但是在测试与校准的工作量上较2翻了数倍,补偿算法也变得更复杂。
方法4能实现接近方法3的精度(主要取决于ADC的INL曲线有没有奇怪形状的凸起或凹陷,难说),但同样也是复杂度爆炸,补偿算法将更为复杂,处理器的计算量也暴增。
不过请注意,增益校准和失调校准并不能改善ADC的非线性(除非采用分段校准或高阶多项式拟合)。
这是当然的,你都叫线性校准了,那非线性的当然校不掉啦( ̄▽ ̄)"
5.4-ADC内置校准
为了提升ADC的易用性,减少处理器/控制器的计算量,很多ADC已经内置了校准功能,比如我们在DAQ中使用的AD7175-2,他内部有3种校准模式,可以执行ADC自身的失调校准,或者对系统执行失调和增益校准:
- 内部失调校准
ADC在内部将输入接地,测量自身的失调误差,然后将补偿值写入OFFSET校准寄存器 - 系统失调校准
系统校准需要用户在信号链输入端执行,此模式下需要将信号链输入端接地,然后ADC测量整个信号链+ADC自身的失调误差,然后将补偿值写入OFFSET校准寄存器 - 系统增益校准
此模式下需要将信号链输入端接到ADC的参考电压(VREF),然后ADC测量整个信号链+ADC自身的失调误差,再测量VREF的电压,根据2点校准计算出增益补偿系数,写入GAIN校准寄存器
在要求不是特别高的情况下,我们也可以使用ADC内置的校准;但他的缺点我们前面也说过了,就是校准精度有限,可能达不到最好效果。并且内置系统校准能适用的情况非常少,如果前端带有不等于1的增益,是没法使用内置校准的。
6-测试
测试DAQ用到的仪器如下:
- Keysight 34465A 6½ 台式万用表
- Keysight 34420A 7½ 台式万用表(nV Meter)
- Yokogawa 7651 5½ 程控电压源
- 以ADR1000为基准的PWM电压基准源
测试分为几个项目,由于🐟没有温箱,没办法做一些温漂和老化测试,所以只能测一些基础的内容…等以后有钱了买个温箱补测一下。
- NPLC=10时的噪声(1/f)
- NPLC=0.1时的交流底噪,THD
- 短期稳定性与一致性测试
- 积分非线性度(INL)
6.1-NPLC=10时的噪声(1/f)
3个DAQ的通道1一起接到PWM基准电压源的1V输出上,一起测量12个小时得出数据:
在读数比较稳定的区间内(开头那一段比较平缓的区域)计算3个DAQ各自的噪声,结果如下表。可以看出,DAQ的噪声性能优异,采用AD7175-2的DAQ能做到1个LSB的噪声峰峰值。采用AD7177-2的DAQ的噪声更是低了接近一半,ENOB来到了25.4bit。
6.2-NPLC=0.1时的交流底噪
将DAQ的NPLC设置为0.1,此时采样率约为500Hz,将输入通道1接地,测试交流底噪如下,估算了下大概是50nV/√Hz的水平?
然后这个是ADI手册给的测试图,看起来比我的测试数据要小一些。。。
but wait,你纵坐标拉这么大干啥?我也拉一个试试:
啊对对对对对,那看来咱们半斤八两(
6.2.1-NPLC=0.1时的谐波失真
出于好奇,我还是测了下DAQ的交流THD。按理来说这类高位精密ADC的THD应该会小于-100dB,毕竟它的直流INL是如此低。那么我上哪去整失真这么低的正弦信号源呢?我也妹有APX555这类音频分析仪啊(
于是我掏出了群友赞助的DAC11001B,设计了EmoeCalibrator,作为交流信号源给DAQ测试…
以下是DAC11001B输出1Vpp、频率约38.5Hz的交流信号喂给DAQ,DAQ的采样率设置到500Hz/s,采样40000点数据,做FFT分析得到的结果:
挖藕,看起来还是很不错的。我这里没有启用DAC11001B的交流增强模式,可以看到在二次谐波的位置附近有一个小啾啾。真的有这么好吗?换个源交叉验证一下看看——我们用RIGOL的DG4000输出一个19.6Hz,幅度1Vpp的信号试试:
啊,看来DAQ和DAC11001B的性能真的很好。
6.3-短期稳定性与一致性测试
在这个测试中,我们同时验证一下给DAQ恒温与否的效果。
6.3.1-恒温后DAQ的失调短期稳定性
将DAQ内部控制恒温到35°C,然后在外部将其输入对地短接,测试自身的失调电压,NPLC=10,每1秒测试一个数据,测试时间约1小时:
可以看出,恒温后的DAQ失调电压能够维持恒定,底噪为2-3个LSB峰峰值(1.2-1.8uVpp),按照满量程10V计算底噪的ppm值,是惊人的 0.12-0.18 ppm-pp。
6.3.2-对比测试
将DAQ1内部控制恒温到35°C,DAQ2和DAQ3内部不恒温,跟随室温波动;3台DAQ同时完成老化与校准后,将3台DAQ与一台34420A的输入接到一起(34420A设置到固定1V档位),测量PWM电压基准的1V输出,测试时间24小时,得到结果如下:
此测试中,待测源(PWM电压基准)并非恒温,其内部1V是由分压电阻将10V分压得到的,存在温漂变化,通过对比34420,可以对比DAQ的测试效果,排除掉源的温漂影响。
对比34420A来看,恒温后的DAQ的漂移与短期稳定性与34420A的1V档位不分上下,不恒温的DAQ2和3的误差变化非常明显,均超出了10uV(1ppm of Fullscale)。
6.4-积分非线性度(INL)
下图是🐟测试的3个DAQ,其中DAQ1已经进行了校准,DAQ2和DAQ3未经过精细校准,可以看出,校准可以将系统的增益误差校好,并消除失调误差,但是无法消除非线性误差。
比较形象的说,校准了增益误差后,可以把倾斜的曲线放平;校准了失调误差后,可以把偏移的曲线平移到以0为中心的高度。校准的过程就是个平移与缩放的过程。
7-SCPI是好文明!
作为一个EE,你肯定用过/开发过这样的模块,它们的控制协议是这样的:
看完之后:…WTF?这是人读的?
最关键的是,这种协议 不具有普适性,毕竟都是开发者按照个人喜好/习惯随手设计的。当你手头有一大堆这类模块想要使用的时候,你就要挨个品鉴这些开发者的个人xp了。
那么有没有一种较为通用的指令集标准呢?有的。它叫SCPI(Standard Commands for Programmable Instruments)。如果你感兴趣,可以看一看市面上能找到的稍有规模的仪器厂家(比如Keysight,Tektronix,R&S,Keithley,爱德万,普源,鼎阳等)的各类产品的编程手册,稍微现代化一些的仪器基本都是采用SCPI指令集格式的。
7.1-SCPI规范
SCPI规范是在 IEEE 488.2-1987规范之上制定的,它规定了一种在仪器间使用的 通用语法、命令结构和数据格式,同时引入了一些可以在所有仪器上使用的通用命令,比如"CONFigure", "MEASure",SCPI还规定了一些仪器种类,比如可编程电源、万用表、信号源等。当然他仅仅是提出建议,并没有强制要求所有厂商执行。
这就好比喝麦当劳的可乐,每个人习惯不一样,行业协会给出的建议是用吸管喝,于是麦当劳就给顾客提供吸管。如果你不想听这个建议也无所谓,你可以把盖子打开直接一口闷,也可以倒到你自己的高脚玻璃杯里优雅品鉴。
然后突然有一天,麦当劳似乎忘了行业协会的建议,取消了吸管,改为"环保包装"的塑料盖。这时作为消费者(使用者),多少心里会有点膈应(。
7.2-SCPI语法
让我讲语法我也不懂啊,中文/英语语法我上学的时候就啥都没学会(雾
其实SCPI的语法理解起来还是很简单的。我觉得SCPI最好的一点在于,它说的基本是人话,即使不看厂家的编程手册,也能大概猜到什么意思。这样也意味着指令间不会记混淆,同时还适用于所有同类型的设备。
SCPI指令集可以简写为指定的单词开头(大写),比如 "CONFigure:VOLTage:DC:NPLCycles 10" 这句命令,可以简写为:
"CONF:VOLT:DC:NPLC 10"。
这样使用几次习惯之后,即使打简写也能准确把握到指令的含义。当然,每个指令后面跟随的参数还是需要查阅编程手册。
EmoeDAQ的通信协议兼容了SCPI指令集规范,在许多串口助手软件中支持指令的存储功能,通过SCPI就能非常便捷地操作DAQ。同时,也可以使用pyVISA等支持SCPI规范的python库,快速编写测试脚本,实现自动化测试。
打个比方,DAQ的测量命令格式如下:
- 格式:MEASure:VOLTage:DC? {1|2}
- 功能:测量指定通道的电压
- 详细解释:用该命令触发DAQ对某一通道进行采样,采样的积分时间取决于目前的系统设置。支持AutoZero功能,需要注意,在开启AutoZero功能时,实际转换时间将加倍。
- 示例:MEASure:VOLTage:DC? 1 或 MEAS:VOLT:DC? 1
- 返回值:对应通道的电压值
只要按照模板写一套说明书下来,对于开发者和用户来说都是喜闻乐见的吧。
对DAQ进行校准、INL测试和长时间数据采集,🐟都是使用pyVISA库编写的python测试脚本,运行在小主机上全自动化完成的。我觉得这个规范应该让所有模块都用上(,我再也不想品鉴奇怪的,不说人话的协议了。
8-More Fun!
设计DAQ时,我预留了一个6PIN的牛角座接口,可以对外提供±5V的低噪声模拟电源,以及一个I2C接口,可以用来做很多好玩的拓展功能。比如说:
- 程控增益的超低噪声模拟前端
- 高动态范围精密电流测量
- fA计
- nV表
- 高精度温度测量
- 锁定放大器(奇怪的应用!)
- 外接扫描卡实现超多通道电信号测量
当然,任何一个需要精密且隔离的ADC的模拟电子系统都可以用上EmoeDAQ,我们会在以后的文章中多多发掘好玩的应用。敬请期待!
9-EmoeDAQ 后记
认真看到现在的你,现在知道为什么🐟这篇文章写了这么久了吧…做这种实验真的非常耗时间和精力。
南方的冬季没有暖气,昼夜室温变化比较明显,在此条件下测试DAQ的增益误差飘忽不定。🐟尝试了各种办法试图给DAQ保温,结果并不太好,让人非常崩溃。。。所以我又花了点时间给DAQ的模拟部分设计了恒温腔体(CNC加工铝),以及主动制热和恒温,将DAQ的内部温度控制在35°C,来最小化DAQ面对环境的温漂。
EmoeDAQ这个项目最初来自于🐟大学时期想复刻的CERN的HPM7177,当时我给他命名为EmoeMetrology,然而实力证明我没这个条件做Metrology)。在2022年下半年,我想着做一个高精度的隔离采集卡,以满足我的日常精密模拟信号采集任务,于是诞生了EmoeDAQ,第一版算是比较成功,至少满足了我做EmoeFemto时的需求。后来审视之前的设计,发现了许多不足之处。
此时恰好ADI推出了ADMX3652,研究过后发现并不难做,于是计划着做一个正经的精密模拟采集卡。从此开始了一年的项目开发-测试-迭代过程。刚刚数了数文件夹,一共有8个硬件版本…不过总算是做完了。
9.1-And More?
其实DAQ目前仍然存在我不满意的地方,不过此事难两全,想要同时具备low cost和high performance的特性,只能寄希望于ADI的免费样片)。从用户的视角来看,EmoeDAQ肯定不是完美的产品,毕竟每个人、每个项目的需求都不一样,我只能说我抛了个砖,希望以后有性能更好、价格更便宜、软件更完善的开源项目问世吧。
EmoeDAQ的原理图开源,放在github上了:EmoeDAQ-Emoe R&D
参考链接
- precision-and-accuracy
- ADC Gain Calibration—Extending the ADC Input Range in MSC12xx Devices
- Methods for Calibrating Gain Error in Data-Converter Systems
- Reducing effects of external RC filter circuit on gain and drift error for integrated analog front ends (AFEs): ±10V
- EmoeDAQ-高精度数据采集器-上篇
- 精密电压源设计
- 精密电路硬件设计指南
- Long-Term Drift in Voltage References
- SCPI Command