前两年我在做传感器阵列的测试方案时,最头疼的不是电路本身,而是借不到SMU。源测量单元这玩意一直是实验室里的抢手货,大家排着队用它测IV特性、做击穿电压扫描,原因很简单——它一台机器就把电压源、电流源、电压表、电流表全包了。但商业SMU的价格摆在那,随便一台入门级四象限型号也要大几万,个人开发者基本只能看看。
所以我看到USMU这个开源项目的标题时,第一反应是:终于有人把SMU的软硬件方案摊开讲清楚了。这篇文章就围绕开源SMU项目USMU展开,聊它的核心架构、恒压恒流环路、校准链路,以及我在搭建和实测过程中踩过的坑。适合硬件工程师、仪器爱好者,还有实验室里想低成本搭建一套可靠参数测试平台的朋友参考。
1. 源测量单元到底在测什么——四象限、源与表的一体化
1.1 一台SMU等于四台仪器的组合,但难点在“同步”
很多刚接触SMU的朋友会问:我不就是测个电压、测个电流吗?用直流电源加万用表不就行了?这个问题我一开始也问过,等真拿电源加万用表去测一个二极管的完整IV曲线时才发现,问题不在“能不能测”,而在“怎么测准、测快、测安全”。
普通直流电源的本质是一个电压源,它在输出端会尽力稳住电压,电流只受负载决定,但它没有精确的电流测量能力,更没有“主动限流”到微安级别的本事。万用表倒是能测电流,但表笔串进回路里就有接触电阻和压降,而且你只能“一段一段地测”:先用电源加压,再用万用表读电流,换一个点,再调电源,再读……这样操作不仅慢,还会因为每次接触电阻不一致引入误差,更危险的是,如果被测器件在某个电压点突然进入击穿区,电源响应不过来,瞬间电流可能就把样品烧了。
SMU的本质是一个“可控的源加一个同步测量的表”。它施加电压的同时,通过回路里的采样电阻实时测量电流;或者施加电流的同时,测量端口电压。这两件事不是“先加后测”,而是在同一个控制周期内同时完成,闭环响应速度通常在微秒到毫秒级别。同时,SMU内置了限压、限流、限功率保护,无论负载怎么变化,它都会先把输出钳在安全范围内。这点对测击穿电压、测电池充放电、测LED这种“跨过一个临界点电流就指数级上升”的器件极其重要。
USMU作为一个开源项目,做的正是这件事:把源和表在电路上真正融合在一起,而不是简单地把两个模块拼起来。看它的设计文档会发现,最核心的工程量都花在模拟链路的同步采样和状态切换上,这也是区分“DIY电源”和“SMU”的关键门槛。
1.2 四象限的含义:不是宣传噱头而是硬需求
SMU参数页上最喜欢强调“四象限输出”,听起来很专业,其实用坐标图一句话就能说清。以输出端口为原点,横轴是电压,纵轴是电流,第一象限是正电压正电流,第二象限是正电压负电流,第三象限是负电压负电流,第四象限是负电压正电流。
第一象限好理解,就是给负载供电,像普通电源一样;第三象限也好理解,就是反向供电。但第二象限和第四象限就有点反直觉了:电压是正的,电流却是负的,意思是SMU此时在“吸收”电流,扮演的不是电源而是电子负载。
那什么器件会工作在第二象限呢?最典型的就是太阳能电池片。你测一片光伏电池的光照特性时,电池本身在发电,SMU给它施加一个正向偏压,电流却从电池流入SMU,这时候就需要SMU既能源出又能吸收,电流方向随时可能反转。再比如测二极管反向漏电,你在二极管两端加反向电压,理想情况下没有电流,但实际上会有微安甚至纳安级的漏电流,这个电流是“从被测件流向SMU”,同样处在负电流象限。
商业SMU能做四象限,是因为它的输出级是一对互补功率管,配合双极性电源轨,可以平滑地跨越零点切换工作状态。很多自制电源项目只能做第一象限(正电压正电流),就是因为输出级用了单电源轨加单个功率管,根本无法吸收反向电流。USMU这类开源方案要做的就是把这个双向功率级做出来,这也是它相比普通自制电源最有含金量的地方。
1.3 开源USMU在其中的位置:单象限容易,四象限难
做一套只能“输出电压”的恒压源有多简单?一片基准、一个运放、一个大功率管,半天就能搭出来。但做一台能“施压的同时测流、还能吸收电流、还能自动换挡”的SMU,工作量完全不在一个量级上。
我个人的理解是,USMU这类开源项目的价值,恰恰在于它把“四象限源表”这个看似高不可攀的领域,拉回到了一个认真投入的工程师能独立做到的程度。它的目标不是对标实验室里几十万的计量级源表,而是覆盖三类典型场景:半导体器件的基础特性分析、教学实验室的课程验证、以及对测量链路有定制需求的研发调试。
换句话说,如果你只是想给LED加个恒定电流看它亮不亮,那不需要USMU,一个恒流驱动板就行。但你要测LED正向压降随温度的变化曲线,要测二极管反向恢复特性,要测电池在不同放电倍率下的端电压平台,要给MOSFET扫一组完整的输出特性曲线族,这时候USMU就是一台能真正干活的小型源测单元。
下面这张表是我根据自己的搭建实测整理的参考范围,具体性能取决于器件的选择和PCB布局水平,仅作大方向的对比:
| 参数维度 | 开源USMU典型实现范围 | 商业入门级SMU参考范围 | 计量级SMU参考范围 |
|---|---|---|---|
| 电压输出量程 | ±10V到±30V | ±20V到±100V | ±200V以上 |
| 电流输出量程 | ±1mA到±200mA | ±100nA到±1A | ±fA到±10A |
| 电压分辨率 | 约100μV | 约10μV到100μV | 1μV以下 |
| 电流分辨率 | 约10nA | 约1nA到10nA | fA级 |
| 采样率 | 100S/s到1kS/s | 10kS/s到100kS/s | 1MS/s以上 |
| 四象限能力 | 有,但功率范围受限 | 有 | 有 |
| 软件/校准可控性 | 完全开源可改 | 封闭,依赖原厂 | 封闭,需原厂校准 |
所以说,USMU并不是要替代商业SMU,而是给“预算有限但有动手能力”的人一条可行的路。
2. USMU的硬件核心:恒流恒压环路与关键器件选型
2.1 控制环路的三种常见拓扑,我推荐哪一种
源表最核心的电路是输出级和反馈控制环路。开源的SMU方案里,我见过三种主流拓扑,这里一个个拆开讲。
第一种是“误差放大器加功率管”的线性方案。原理和精密线性稳压电源一脉相承:DAC输出目标电压,误差放大器比较目标值和反馈采样值,输出驱动信号控制功率管,让功率管调整导通程度,使输出稳定在目标值。电流测量则在功率管和负载的回路上串一个精密采样电阻,用ADC读采样电阻两端电压。这种方案的优势是结构直观、噪声低、响应快,调试难度适中,特别适合第一版跑通功能。
第二种是Howland电流泵拓扑。它主要用来做恒流源,能把电压信号线性转换为双向电流,用两个运放和几个精密电阻实现。优点是电流方向可以正负双向,适合做四象限电流源;缺点是负载范围受限于运放输出电压和电阻匹配精度,功率做不大,而且对电阻的精度和温漂要求极高。在我看到的开源SMU方案里,Howland泵通常不是主输出级,而是作为小电流档位的辅助恒流源使用。
第三种是开关电源加线性调整级。先做一级DCDC把电压压到目标值附近,再用线性电路做精细调整。好处是效率高、能做大功率,坏处是开关噪声对精密测量是灾难,必须有极其严格的滤波和屏蔽,对DIY来说调试难度会翻倍。
USMU这类开源源表,绝大多数选择了基于第一种线性方案的变体,只是把功率级改成互补推挽结构,配合正负电源轨实现四象限输出。我也更推荐从这条路入手,原因很简单:它能把“源精度”和“测精度”分开调试,哪个环节出了问题都好定位。
2.2 DAC与ADC的选择逻辑
SMU的精度天花板,很大程度上是从数模转换和模数转换这两个器件开始的。
先说DAC。输出分辨率取决于DAC位数,例如在10V量程下,16位DAC的理论最小步进是10V除以65536,大约0.15mV。这个分辨率做常规半导体IV曲线已经够用。但如果希望输出能到更精细的步进,比如测LED低电流区间的电压变化,就要考虑18位或更高位数的DAC。不过位数只是第一层,重要的是线性度和温漂。很多中低端DAC的积分非线性折合到输出电压上,可能达到几个mV,这比分辨率数字难看得多。所以实际选型要重点看DNL和INL指标,而不是只看位数。
ADC那边,开路测试的量测链路通常分两路:电压回读用SAR型ADC,速度高、延迟低,适合做快速电压采样;电流回读用Δ-Σ型ADC,分辨率极高、抗噪好,适合做微电流测量。我搭USMU时用的配置是:电压通道16位SAR型ADC,电流通道24位Δ-Σ型ADC加可编程增益放大器。有了PGA,2mA档位时把信号放大到ADC满量程附近,比固定增益方案在低电流档位上的表现好很多。
还有两个容易被忽略的器件:电压基准和低通滤波器。基准源的温漂直接决定整机输出的温度稳定性,稳漂超过10ppm的基准源,基本不适合用在SMU上。DAC输出的纹波和毛刺,则要靠滤波电容和运放缓冲器压下来,否则示波器上看是干净的,接上负载后电流读数会抖得厉害。
2.3 采样电阻与量程切换
SMU量电流的方式,本质上就是测一个精密采样电阻上的压降。这里最关键的选型参数是电阻值和温度系数。以200mA量程为例,如果采样电阻取1Ω,满量程压降0.2V,功耗0.04W,尚可接受;但如果直接拿这个1Ω电阻去测2mA量程,压降只有2mV,已经接近ADC的噪声底部。所以SMU必须设置多个量程,不同量程切换不同阻值的采样电阻。
典型量程设计如下:200mA档用0.1Ω电阻,20mA档用1Ω,2mA档用10Ω,200μA档用100Ω。切换方式通常用低导通电阻的继电器或模拟开关。这里我不太推荐用模拟开关切采样电阻,因为导通电阻本身会串联进采样回路,带来额外误差,而且在微安档位,模拟开关的漏电流可能就是测量误差的主要来源。相比而言,信号继电器或干簧继电器的接触电阻稳定性和一致性更好。
再强调一点:采样电阻一定要开尔文接线。也就是把“流过电流的路径”和“测量电压的路径”分开走线。电流走粗线,电压用细线单独引到ADC输入端。否则采样电阻的引线焊盘电阻会被算进采样压降里,0.1Ω的采样电阻配2mΩ焊盘电阻就是2%误差,这个比例在高精度测量里完全不可接受。
2.4 功率级与电源树
线性功率级的输出能力由电源轨和功率管决定。要实现四象限,需要正负对称的电源轨,例如±12V或±15V,输出级用一对互补功率管,分别负责源出正电流和吸收负电流。需要注意的是,功率管的基极驱动电流不能直接从精密运放输出端取,通常需要加一级中功率驱动管,构成达林顿结构,否则运放会因输出电流超限而过热。
功率级的保护电路也必须到位。我在实测时遇到过输出端被外部误接反电压的情况,瞬间一个大电流灌进输出端口,要不是有功率管后级的限流电阻和过流检测,估计一块功率管就要烧掉。建议是:输出端加串联保险或者PTC,功率管附近加温度检测,固件在温度超过阈值时强制切换为安全状态。
3. 零点误差与校准链路:为什么不能直接相信DAC读数
3.1 误差链路上有哪些看不见的坑
很多人搭完硬件,直接用DAC设定的电压值和ADC读回的电流值出结果,发现精度差得离谱,就来问我是不是器件选得不够好。其实大部分情况下,问题不在器件,而在“没有校准”。
误差链路上至少叠加了这几层:DAC的增益误差和偏置误差,基准源的初始误差,放大器的输入失调电压,分压网络的电阻比例误差,采样电阻的绝对值误差,还有PCB上不同金属接点形成的热电势。这些误差叠加起来,可能让实际输出和理论值偏差达到百分之几,而任何一层单独看,元器件本身的数据手册都是合格的。
要把这些系统性误差压掉,唯一可靠的办法就是校准:测出每一档位的实际增益和偏置,然后在软件里反过来修正它。
3.2 校准的完整流程(实测版本)
我自己的校准流程是这样做的,前提是你手里有一样可靠的标准源或标准表,哪怕是借来的六位半万用表,也比什么都没有强很多。
第一步,准备标准设备。一个高精度直流电压基准,或一台经过计量校准的数字万用表,一组低温度系数的精密电阻,阻值覆盖你要校准的各个档位。第二步,校准电压输出和电压回读。在每个电压量程上,分别输出量程的10%、50%、90%,用标准表测实际电压,记录目标值与实际值。第三步,校准电流档位。用精密电阻作为负载,让SMU输出恒流,用标准表测电阻上的压降,算出实际电流,和SMU报告值对比。第四步,把测试点用最小二乘法拟合出线性方程,也就是求出每个档位的增益系数和偏置系数,存到非易失存储器里。第五步,在上电初始化时加载校准系数,所有输出和回读值都经过修正后再显示。
有一点要注意:不要只做两点校准。两点校准假设误差完全是线性的,但DAC的差分非线性会让实际曲线在中段有起伏,用三点甚至五点拟合,能把这类非线性误差压低一个数量级。
3.3 四线制测量为什么必须坚持
校准只能修正系统误差,但没法修正“你接错线导致”的误差。典型的错误就是用两线制去测小电阻或测低电压。
举个例子,你给被测件供200mA电流,测试线缆和接触电阻加一起0.1Ω,线上压降就是20mV。如果SMU用两线制,它以为输出端已经有2V,实际上被测件两端只有1.98V,而且这0.1Ω还会随温度漂移,你读到的不稳定根本不是器件的问题,而是接线的误差。四线制则是给被测件单独引两条感应线到高阻抗输入端,感应线上几乎没有电流,所以线缆压降对电压测量没有影响。USMU的终端接口必须做成四线开尔文结构,哪怕对外的连接器是普通的四芯终端,也要把源端和感应端分开连接。
3.4 验证测量的参考流程
校准做完,我会用一套固定流程来验证整机是否达标。先拿精度0.1%的精密电阻做负载,设置恒压1V,看电流读数是否和理论值吻合;再设置恒流10mA,看电阻上的压降是否准确。接着测一个已知正向特性的二极管,扫描0到2V,看正向压降值和曲线形状是否合理;再测一个稳压管,验证恒流模式下的反向击穿电压。最后是重复性测试:同一条件下连续测10次,看标准偏差是否在预期范围内。
这些验证做完,才有底气说这台USMU是真的能用来干活了。
4. 固件与上位机:从“能加电”到“能扫描”
4.1 输出状态的有限状态机
硬件只是SMU的骨架,固件状态机才是让它安全稳定工作的肌肉。我见过不少DIY源表,硬件做得不错,但固件里只有一个“输出目标值”的死循环,结果切换量程时一团糟。
一个可靠的SMU状态机,至少要有这些状态:空转态,恒压输出态,恒流输出态,限压保护态,限流保护态,过温保护态,错误复位态。从空转切换到输出时,必须软启动,也就是把目标值从0逐步拉高,避免瞬间阶跃对负载造成冲击。输出过程中,ADC实时监控电流和电压,一旦超过设定的保护阈值,立即从恒压态切换到限流态,并在界面上提示状态变化。错误恢复必须由用户主动确认,而不是程序自动重试,否则负载故障时会反复抽动。
4.2 远程控制协议设计
我建议USMU的固件里实现一套基于ASCII文本的远程控制协议,兼容常见的SCPI风格,这样任何语言都能很方便地驱动它。
举个例子就是这样的格式:
:SOUR:VOLT 1.0 ; 设置目标电压为1V :SOUR:CURR 0.05 ; 设置限流为50mA :OUTP ON ; 开启输出 :MEAS:VOLT? ; 查询当前电压 :MEAS:CURR? ; 查询当前电流 :OUTP OFF ; 关闭输出因为协议是文本命令,用串口调试助手就能测试,用Python脚本也能轻松批量控制。我写上位机时,就靠一个简单的串口读写函数,实现了整条IV曲线的自动扫描。
4.3 上位机和数据处理
上位机的核心任务有三个:下发扫描序列、收集回读数据、实时绘制曲线。我用Python加一个简单的GUI框架实现,核心扫描逻辑大致是下面这段循环:
import serial import time import matplotlib.pyplot as plt ser = serial.Serial('COM3', 115200, timeout=0.2) def cmd(s): ser.write(s.encode() + b'\n') time.sleep(0.05) return ser.readline().decode().strip() voltages = [i * 0.02 for i in range(0, 100)] # 0V到2V currents = [] cmd(':SOUR:CURR 0.02') # 限制电流20mA cmd(':OUTP ON') for v in voltages: cmd(f':SOUR:VOLT {v:.3f}') currents.append(float(cmd(':MEAS:CURR?'))) cmd(':OUTP OFF') plt.plot(voltages, currents) plt.xlabel('Voltage (V)') plt.ylabel('Current (A)') plt.savefig('iv_curve.png')这个脚本虽然简陋,但已经能完成一条完整的二极管正向IV曲线测量。再往后可以加测试报告导出、批量器件筛选、多点重复采样取平均等功能,都是在这个框架上叠加的。
4.4 几种常见测试场景怎么跑
下面是我用USMU验证过比较典型的场景。测LED正向IV特性,设置从0V扫描到4V,每步0.05V,限流50mA,时间间隔50ms,可以得到完整的开启电压和串联电阻信息。测二极管反向漏电,设置从0V到反向击穿电压,每步0.5V,限流1mA,记录反向漏电流变化,判断器件的击穿特性。测电池放电曲线,用恒流模式设置200mA放电,每10秒记录一次电池端电压,绘制放电平台曲线。
这些命令和脚本组合起来,基本覆盖了一个半导体实验室常用的基础测试需求。
5. USMU实测中翻过的几个车——避坑经验汇总
5.1 环路自激震荡,症状、定位、修复
第一次把USMU的输出端用一根长同轴电缆接到被测件上时,电流读数忽然开始剧烈跳动,示波器一测,输出端叠加了一个频率很高的正弦波,原来的直流电压变成了直流加振荡。这个问题是功率级的输入电容和反馈环路共同造成的相位裕度不足,属于典型的高增益环路自激,在源表驱动容性负载时非常容易犯。
定位思路是逐级排查:先断开功率级,只测前级运放的输出,正常;接上功率级但不接长线缆,也正常;接上长线缆后振荡立刻出现。说明问题出在“功率级输出阻抗 + 线缆电容”形成的极点拉低了相位裕度。修复方案是在功率级输出端预留一个零点补偿网络,通常是一个几到十几欧姆的电阻串一个几十纳法电容,接在反馈采样的位置,高频率时补偿相位。另一个经验是别把运放的增益带宽选得太高,50MHz级别的运放配电源应用,反而容易自激,我后来换成单位增益带宽1MHz左右、压摆率适中的运放,问题就消失了。
5.2 热电势与连接器温差
微安档位的电流读数,最容易踩的坑不是电磁干扰,而是热电势。只要信号路径上存在两种不同金属的接点,且两个接点有温度差,就会产生热电偶效应。一个铜到镀金端子的接点,在1摄氏度温差下产生的热电势虽然只有几十纳伏到微伏,但在测量微弱信号时,这个电压会被当成信号的一部分放大出来。
对策有几个。第一,信号链路上的连接器尽量用同种金属,比如端子材料统一用黄铜镀镍,配合铜线,避免不同金属混搭。第二,功率管、采样电阻、继电器这些发热器件,要远离高精度信号输入区域,用PCB布局上的隔离距离和局部铺地来散热。第三,如果测量的信号非常微弱,可以考虑把采样电阻附近做等温设计,减少元件之间的温差。听起来玄学,但在做真正精确的电流测量时,这些都是绕不开的细节。
5.3 继电器切换的瞬态毛刺
自动量程功能很美好,但继电器切换到小电流档位时,机械触点从打开到闭合的瞬间会有抖动和飞弧,这个瞬间会产生几十微秒的电压毛刺。在测脆弱的肖特基二极管或栅氧化层很薄的MOSFET时,这个毛刺可能直接造成硬损伤。
我实测中的处理方法是:在固件状态机里增加“量程切换需要先软关断输出”的逻辑。也就是切换量程前,先把输出值降到零,让继电器在近乎零电流的条件下动作,等它稳定后再重新升到目标值。代价是切换时间变慢,大概多花几十毫秒,但换来的是被测器件的安全,这笔账非常划算。
5.4 不要一开始就追求六位半精度
最后一条经验,也是我最想对新手说的:做开源SMU,第一版的目标应该是“能稳定测出一条合理的曲线”,而不是“每一个读数都对着说明书”。
我第一版USMU的精度大概在0.3%到0.5%之间,电压分辨率也只有小数点后三位,但已经足够完成LED筛选、二极管一致性比对、电池放电曲线记录这类日常工作。直到后来慢慢把基准源换成更低温漂的型号,采样电阻全部换成精密电阻,校准流程从两点改成五点拟合,才把精度提升到0.1%附近。如果一开始就想着每一处都用最高规格的器件,大概率会陷入没完没了的调试循环,项目热情早消耗光了。
我搭建USMU最有成就感的时刻,是用自己焊接的板子,扫出了一条平滑的二极管正向IV曲线。那条曲线只有数十个数据点,精度也谈不上计量级,但把它和手册上的参考曲线叠在一起时,形状能完美贴合。那一刻真正理解了什么叫“测量链路是整体工程”,环环相扣,缺一环都跑不出最后的结果。
后续如果想继续玩,方向也很多:加一块高压扩展板把量程推到200V以上,做电池循环测试的自动化脚本,或者把通信协议升级成网络接口以便接入实验室自动化系统。但我的建议始终是:先把单个量程跑熟、跑稳,再谈扩展。量程切换带来的设计难度是成倍增加的,基础没打牢之前,步子迈得太大,坑只会更多。