资讯详情

DIY nA级源表:从吉时利2450到自制高精度SMU

📅 2026/9/20 22:30:31 | 华诺云谱 👁 阅读
DIY nA级源表:从吉时利2450到自制高精度SMU
1. 为什么我要自己动手做一台nA级源表第一次接触吉时利2450是在一个传感器测试项目里当时需要给一个光电二极管做暗电流特性曲线电流范围在几百pA到几微安之间。租了一台2450用了两周数据确实漂亮但租金加押金算下来够买一台不错的示波器了。后来项目结束再想复现类似测试的时候发现手里只有一台普通台式电源和一块六位半万用表根本测不了nA级的电流——普通万用表的电流档底噪就在微安级别信号完全被淹没。这就是我决定自己搭一台nA级电流源表的起点。所谓源表英文叫SMUSource Measure Unit核心能力是一边输出精确的电压或电流一边同步测量电流或电压而且测量分辨率要足够高能覆盖nA甚至pA级别。吉时利2450之所以成为行业标杆是因为它把高精度源、高精度测量、触摸屏交互和图形化分析集成在了一台机器里但价格也摆在那里。我这台DIY方案的目标很明确电压输出范围0到±10V电流测量分辨率做到1nA以下电流输出范围覆盖1nA到10mA能通过串口或USB把数据传到电脑上画I-V曲线。不追求和2450完全对标但核心的nA级测量能力要有而且成本控制在千元级别。适合谁参考做传感器特性测试的硬件工程师、搞电化学或半导体器件研究的学生、以及喜欢折腾精密模拟电路的DIY爱好者。如果你连运放的虚短虚断都还没搞明白建议先补一下模电基础再往下看。2. 整体方案设计与核心器件选型2.1 源表的基本架构拆解一台源表说到底就是三块东西拼起来的电流/电压源、电流/电压测量、控制与通信。吉时利2450用的是自己定制的多量程跨阻放大器加高精度ADC架构我们DIY不可能复刻它的ASIC但可以用分立器件搭出功能等价的电路。我的方案架构是这样的DAC产生设定电压经过电压-电流转换电路输出到待测器件DUT同时用跨阻放大器TIA把流过DUT的电流转换成电压信号再由高精度ADC采集。MCU负责控制DAC输出、读取ADC数据、处理量程切换并通过串口把数据发给上位机。整个链路里决定nA级测量能力的关键在TIA的反馈电阻和运放的偏置电流这两个参数选不好后面怎么调都是白搭。为什么不用现成的源表芯片市面上确实有集成式的SMU方案但要么分辨率不够要么价格比整台2450还贵。分立方案虽然调试麻烦但每一级都能自己掌控出了问题也知道去哪里找。而且DIY的乐趣不就在这儿吗。2.2 跨阻放大器nA级测量的心脏跨阻放大器的原理很简单运放的反相输入端接DUT同相端接地反馈电阻Rf跨接在输出和反相输入端之间。流过DUT的电流Iin全部流过Rf输出电压Vout -Iin × Rf。要测1nA的电流如果Rf选1GΩ输出就是1mV这个电压用24位ADC采完全没问题。但这里有个坑运放的输入偏置电流Ib必须远小于你要测的最小电流。如果你要测1nA运放的Ib至少要在100pA以下最好在10pA以下。普通运放比如LM358的Ib在nA级别直接就把信号淹没了。我选的是LMP7721它的Ib典型值只有3fA对飞安最大也就20fA用来做nA级测量绰绰有余。备选方案还有ADA4530-1Ib也在fA级别但价格贵不少。反馈电阻的选择需要权衡。Rf越大同样的电流产生的电压越大但响应速度越慢而且大电阻的寄生电容会影响稳定性。我准备了四档反馈电阻1MΩ、10MΩ、100MΩ、1GΩ通过继电器切换。1MΩ档测10μA到10mA10MΩ档测1μA到1mA100MΩ档测100nA到100μA1GΩ档测1nA到10μA。这样每个量程内ADC都能用到比较满的输入范围信噪比最优。注意1GΩ的电阻不好买而且普通电阻的电压系数和温度系数在大阻值下会变得很明显。我用的是玻璃封装的高阻值电阻温度系数控制在100ppm/℃以内。如果你买不到可以用多个100MΩ串联但要注意串联后的寄生电容。2.3 ADC与DAC的精度匹配ADC我选的是ADS125624位ΔΣ型有效位数在21位左右输入范围±5V时最小分辨电压约2.4μV。配合1GΩ的Rf理论电流分辨率是2.4μV / 1GΩ 2.4fA当然实际受噪声限制做不到这么低但nA级是稳稳的。ADS1256自带PGA可以进一步放大弱小信号不过我在TIA后面加了一级可编程增益放大器PGA用的是PGA280增益1到128可调这样小信号可以再放大后再进ADC。DAC选的是AD576116位输出范围±10V可配置。16位在±10V下的分辨率为305μV对于电压输出精度来说够用了。如果你要求更高可以上18位的AD5781但价格翻倍。DAC的输出经过一个精密运放缓冲后驱动电压-电流转换级。这里有个细节DAC的参考电压必须和ADC的参考电压同源否则两者的漂移方向不一致会导致测量误差。我用的是LTZ1000基准7.2V输出经过分压后分别给ADC和DAC做参考。LTZ1000贵是贵了点但它的温漂只有0.05ppm/℃是DIY能达到的最高水平了。预算有限的话可以用LM399温漂0.5ppm/℃也够用。2.4 MCU与通信方案MCU我用的STM32F103C8T6就是最常见的蓝板。它自带USB和多个SPI、I2C接口控制ADS1256和AD5761绰绰有余。有人会问为什么不用STM32F4系列精度更高其实源表的精度瓶颈在模拟前端不在MCU的数字处理能力。F103的SPI速率跑ADS1256的30kSPS采样率完全没问题。通信方面我同时保留了USB虚拟串口和UART两种方式。USB虚拟串口方便直接连电脑UART则可以通过CH340这类芯片转成串口兼容性更好。上位机我用Python写了一个简单的GUI用pyqtgraph实时画I-V曲线数据可以存成CSV。这部分不是重点后面简单带过。3. 核心电路细节与实操要点3.1 跨阻放大器的稳定性补偿TIA最容易出的问题是自激振荡。原因是大反馈电阻和运放的输入电容、PCB寄生电容形成了极点导致相位裕度不足。我一开始用1GΩ反馈电阻的时候输出直接变成了一个几MHz的正弦波完全没法用。解决办法是在反馈电阻两端并联一个小电容Cf。Cf和Rf形成一个新的极点用来补偿相位。Cf的计算公式是Cf sqrt(Cin / (2π × Rf × GBW))其中Cin是运放输入电容加上PCB寄生电容大约5pFGBW是运放的增益带宽积LMP7721是17MHz。代入Rf1GΩCf sqrt(5pF / (2π × 1GΩ × 17MHz)) ≈ 0.22pF0.22pF太小了PCB上随便一条走线都不止这个电容。实际调试时我直接在Rf两端焊了一个1pF的村田GRM系列电容然后用示波器看阶跃响应发现稍微过冲但稳定了。如果你也遇到振荡可以先用2.2pF试然后逐步减小到刚好不振荡为止。实操心得Cf不能太大否则响应速度会变得很慢。测I-V曲线时如果扫描速度要求不高Cf大一点没关系但如果要做瞬态测量Cf必须精确补偿。我一般会留一个可调电容的位置调试时用可调电容找到最佳值然后换成固定电容。3.2 量程切换的继电器驱动四档反馈电阻的切换我用了欧姆龙G6K-2F-Y信号继电器它的接触电阻小于100mΩ绝缘电阻大于1GΩ关键是体积小、驱动电流低。继电器线圈需要5V驱动STM32的GPIO只有3.3V所以加了一级ULN2003达林顿阵列来驱动。这里有个容易忽略的问题继电器切换时会产生电弧和EMI可能干扰ADC的读数。我在继电器线圈两端加了续流二极管1N4148并在触点两端并联了100pF的电容来吸收高频噪声。另外量程切换后要等一段时间再采样让TIA的输出稳定下来。我的做法是切换后延时50ms再启动ADC转换。继电器的布局也很讲究。四个继电器要尽量靠近TIA的反馈回路走线要短而粗减少寄生电感和电容。我第一版PCB把继电器放在了板子另一侧结果切换时噪声大得没法看后来重新布局才解决。3.3 电源与接地设计nA级测量对电源噪声极其敏感。普通开关电源的纹波在几十mV级别经过TIA的电源抑制比衰减后仍然可能在输出端产生nA级的噪声。我的方案是两级稳压第一级用LM317和LM337做预稳压把纹波降到mV级别第二级用LT3045和LT3094这对超低噪声LDO输出噪声只有0.8μVrms给运放和ADC供电。接地方面我采用了星型接地。模拟地AGND和数字地DGND在ADC芯片下方单点连接所有模拟电路的接地都汇到AGND数字部分汇到DGND。PCB上专门留了一层完整的模拟地平面数字信号线不走模拟区域。这个做法在低速高精度电路里很有效实测下来ADC的底噪从原来的几十μV降到了几μV。注意LT3045的散热要处理好它的压差如果太大比如输入12V输出5V功耗会很高。我一开始没加散热片跑了几分钟就烫得摸不得后来加了小铜片才稳定。建议输入电压不要超过8V或者用两级降压。3.4 保护电路不能省DUT如果短路或者接反TIA的输入端可能承受超出运放绝对最大额定值的电压。LMP7721的输入电压范围是电源轨加0.3V超过就会损坏。我在TIA输入端串联了一个100kΩ的限流电阻并在运放输入端加了BAV199低漏电流二极管做钳位。BAV199的漏电流只有3pA对nA级测量的影响可以忽略。输出端也加了保护。电压-电流转换级的输出如果短路到地运放会进入限流状态。我在输出串联了一个10Ω的电阻并在输出端加了TVS二极管SMBJ12A来吸收瞬态高压。这些保护措施在正常测量时不会影响精度但关键时刻能救你一命。4. 完整搭建流程与调试记录4.1 PCB设计与打样原理图设计我用的是Altium Designer 20。整个电路分成四块电源板、模拟板、数字板、接口板。我一开始想做成一块板后来发现电源的噪声会耦合到模拟部分所以改成了两块板电源板单独一块模拟和数字放另一块中间用排线连接。PCB布局的要点TIA的反馈回路面积要尽可能小Rf和Cf直接焊在运放的引脚旁边ADC的模拟输入走差分线尽量等长继电器的驱动线远离模拟信号线电源走线要宽至少20mil。打样我用的嘉立创四层板沉金工艺一张板子不到50块钱。焊接的时候有个坑LMP7721是SOT-23-5封装引脚间距很小手焊容易连锡。我的做法是先用细锡丝在焊盘上镀一层薄锡然后用热风枪吹上去最后用放大镜检查有没有短路。1GΩ的电阻是玻璃封装的焊接时温度不能太高烙铁停留时间不要超过3秒。4.2 上电调试步骤第一步电源检查。不焊运放和ADC先给电源板上电用万用表测各路输出电压是否正常。LT3045输出应该是5VLT3094输出应该是-5V纹波用示波器看应该在1mV以下。第二步DAC输出验证。焊上AD5761和缓冲运放用STM32输出一个固定码值测量DAC输出电压。我设置的是0x8000对应0V0xFFFF对应10V0x0000对应-10V。实测线性度很好误差在1mV以内。第三步TIA静态测试。焊上LMP7721和反馈电阻输入端悬空不接DUT测量TIA输出电压。理想情况下应该是0V附近实际会有几mV的失调。LMP7721的失调电压最大500μV经过1GΩ反馈电阻后等效为0.5pA的电流误差可以接受。如果失调太大可以用运放的调零引脚或者软件校准。第四步接标准电阻验证。用一个已知的100MΩ电阻作为DUT施加1V电压理论电流是10nA。切换到100MΩ档看ADC读数是否接近10nA。我实测下来误差在2%以内主要来自电阻本身的精度和TIA的增益误差。软件校准后可以降到0.5%以内。第五步噪声测试。输入端接一个屏蔽盒里的10GΩ电阻施加0V电压记录ADC读数的峰峰值。我实测的噪声在5pA峰峰值左右换算成电流分辨率大约是1pA完全满足nA级测量的需求。4.3 上位机软件与数据采集STM32的固件用Keil MDK开发主要流程是初始化ADC和DAC设置定时器触发ADC采样采样数据通过USB虚拟串口发送。采样率我设的是10SPS对于I-V曲线扫描足够了。数据格式是ASCII码每行一个电流值方便Python解析。Python上位机用pyqt5做界面pyqtgraph画图。核心代码很简单import serial import pyqtgraph as pg from PyQt5 import QtWidgets ser serial.Serial(COM3, 115200) app QtWidgets.QApplication([]) win pg.GraphicsLayoutWidget() plot win.addPlot(titleI-V Curve) curve plot.plot(peny) def update(): line ser.readline().decode().strip() if line: current float(line) # 更新曲线数据 ... timer pg.QtCore.QTimer() timer.timeout.connect(update) timer.start(100)实际使用的时候我会先设置DAC从-10V扫到10V步进10mV每个点延时100ms后读取ADC然后画成I-V曲线。整个扫描过程大约需要3分钟对于大多数传感器测试来说够用了。5. 常见问题与避坑指南5.1 读数跳动大怎么办这是最常见的问题。原因可能有三个电源噪声、接地不良、TIA振荡。排查顺序是先用示波器看TIA输出有没有高频振荡如果有调整Cf如果没有检查电源纹波必要时增加LC滤波最后检查接地确保模拟地和数字地单点连接且连接点靠近ADC。我遇到过一次读数跳动特别大的情况查了半天发现是USB线的地线环路引入了噪声。后来在USB线上加了一个共模扼流圈问题就解决了。所以如果你用USB通信注意一下线缆的质量。5.2 量程切换后读数不准继电器切换后需要一定的稳定时间。我一开始只延时10ms发现读数偏高后来改成50ms就正常了。另外继电器的触点氧化也会导致接触电阻变大尤其是小信号档位。建议选用金触点的信号继电器比如欧姆龙G6K系列的金触点版本。还有一个可能的原因是反馈电阻的电压系数。高阻值电阻在承受较大电压时阻值会发生变化。比如1GΩ电阻在10V电压下阻值可能变化0.1%。解决办法是限制每个量程的最大输出电压或者选用电压系数更小的电阻。5.3 测不了负电流TIA只能测单向电流如果要测负电流电流流出DUT需要双电源供电或者用两个TIA。我的方案是给LMP7721提供±5V双电源这样输出可以正负摆动能测双向电流。但要注意负电源的噪声同样会影响测量所以LT3094的噪声指标要和LT3045一样好。如果你只需要测单向电流可以简化设计用单电源供电但TIA的输出会有一个偏置需要在软件里减去。5.4 常见问题速查表现象可能原因排查方法解决方案读数跳动大电源噪声示波器看电源纹波增加LC滤波或更换LDO读数跳动大TIA振荡示波器看TIA输出调整Cf或增加隔离电阻读数跳动大接地环路检查地线连接单点接地加共模扼流圈量程切换后不准稳定时间不足增加延时看是否改善延时改为50ms以上量程切换后不准继电器触点氧化测量触点电阻更换金触点继电器测不了负电流单电源供电检查运放电源改为双电源供电线性度差反馈电阻电压系数不同电压下测阻值更换低电压系数电阻ADC读数满量程PGA增益设置错误检查PGA配置寄存器重新配置增益5.5 几个容易被忽略的细节屏蔽。整个模拟板最好放在金属屏蔽盒里尤其是TIA部分。我用的是一个铝制外壳接大地。实测下来不加屏蔽盒时噪声大约10pA峰峰值加了之后降到3pA。热电动势。不同金属连接处会产生热电动势比如铜-锡焊点。在nA级测量中热电动势可能产生pA级的误差。解决办法是让所有连接点的温度尽量一致避免温度梯度。我在关键节点用了低热电动势的焊锡。清洁。PCB上的助焊剂残留会吸收水分导致漏电流。焊接完成后要用无水酒精清洗PCB尤其是TIA输入端的区域。我洗了三遍漏电流从几百pA降到了几pA。校准。DIY的源表需要定期校准。我用的是Fluke 8846A六位半万用表和一套精密电阻作为参考。校准方法是在每个量程下用已知电阻产生已知电流记录ADC读数计算增益和偏移写入STM32的Flash。建议每半年校准一次。6. 实测性能与改进方向6.1 实测数据经过校准后我这台DIY源表的实测性能如下参数指标电压输出范围±10V电压输出分辨率305μV电流测量范围1nA - 10mA电流测量分辨率1pA1GΩ档电流测量精度±0.5%读数 0.1%满量程噪声3pA峰峰值1GΩ档0V偏置扫描速度10点/秒和吉时利2450相比主要差距在扫描速度和自动化功能上。2450可以做到每秒几千个点而且内置了各种器件测试模板。但就nA级电流测量的核心能力而言这台DIY设备已经能满足大部分传感器和器件的静态特性测试需求。6.2 还可以怎么改进如果你想让性能再上一个台阶可以考虑这几个方向换用更高位的ADC比如ADS128232位分辨率可以再提高一个数量级增加电流输出功能现在只有电压源加一个电流源电路就能实现真正的四象限源表加入温度补偿用温度传感器监测关键器件的温度软件补偿温漂改用以太网通信提高数据传输速率支持更快的扫描。我个人最想改进的是扫描速度。现在10点/秒的速度测一条完整的I-V曲线要几分钟如果能提高到1000点/秒就可以做瞬态特性分析了。瓶颈主要在ADS1256的采样率和STM32的处理能力换用STM32H7系列加ADS127L01应该能实现。最后分享一个我在调试过程中总结的小技巧每次改动电路后先用一个已知的大电阻比如10MΩ验证基本功能再切换到小信号测试。这样可以快速定位问题是出在电路本身还是小信号处理部分。我踩过好几次坑都是因为直接上nA级信号结果调了半天发现是某个焊点虚焊。先用大信号验证能省很多时间。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。