3. 自动化测试系统架构设计
自动化测试系统并不是“把仪器用网线连起来、写个脚本跑一遍”这么简单。真正决定一套系统能否长期稳定运行、能否在换型时快速复用、能否在通道数扩展后仍保持可维护性的,是它的分层架构。一个典型的 ADI 器件自动化测试平台,通常可以拆成五个层次:主控层、仪器层、开关/矩阵层、DUT 接口层、软件栈层。这五层各自承担不同职责,层与层之间通过明确的接口通信,任何一层内部的变化都不应轻易穿透到其他层。
五层结构的职责边界
主控层是整个系统的调度中心,通常由一台工控机或服务器承担。它不直接产生激励信号,也不直接测量电压电流,而是负责测试序列编排、资源分配、结果汇总、数据库写入和与 MES/上位系统的交互。主控层的关键设计原则是“只做调度,不做具体仪器操作”,所有仪器操作都通过软件栈中的驱动层完成。
仪器层包括精密源表(SMU)、数字万用表(DMM)、任意波形发生器(AWG)、示波器、频谱分析仪、电源、电子负载等。每台仪器有独立的通信接口(LAN、USB、GPIB、PXIe)和命令集(SCPI、IVI、专用驱动)。仪器层的设计重点是选型匹配:电压/电流量程、分辨率、采样率、通道数、隔离等级必须覆盖 DUT 的测试需求,并留出 20%~30% 的余量。
开关/矩阵层是自动化测试区别于手动测试的核心。它通过继电器矩阵、多路复用器(MUX)、矩阵开关把有限的仪器通道扩展到几十甚至上百个 DUT 引脚。开关矩阵的设计直接决定测试并行度和信号完整性:高频信号要选低电容、低插入损耗的舌簧继电器;大电流路径要选低接触电阻的功率继电器;微弱信号(pA 级)要选低热电动势、低漏电流的开关。
DUT 接口层是测试系统与芯片之间的物理和电气边界,通常包括测试插座(Socket)、探针卡、负载板(Load Board)、接口板(DIB)以及必要的保护电路。这一层要解决阻抗匹配、去耦、接地、ESD 保护、信号回流路径等问题。接口层的可复用性往往被低估:一个设计良好的 DIB,可以通过更换 Socket 和少量跳线适配同一封装系列的不同型号。
软件栈层是贯穿所有硬件的“神经系统”,通常分为四层:应用层(测试流程、UI、报表)、测试执行层(Test Executive,如 TestStand、自定义调度器)、驱动层(IVI、VISA、仪器厂商驱动)、通信层(TCP/IP、USB、GPIB)。软件栈的分层原则是“上层不依赖具体仪器型号”,通过统一接口(如 IVI-C/IVI-COM)实现仪器可替换。
可扩展与可复用的设计原则
分层结构本身不是目的,目的是让系统在需求变化时“只改一层”。以下四条原则是实际项目中最常被验证有效的。
原则一:接口标准化。仪器层与软件栈之间统一使用 VISA 地址和 IVI 驱动,主控层通过逻辑名(如 “SMU_1”“DMM_1”)而非物理地址调用仪器。这样更换仪器品牌或型号时,只需在配置文件中修改逻辑名映射,测试序列代码不动。开关矩阵的通道命名也应抽象为 “DUT1_VDD”“DUT1_GPIO3” 这类语义名称,而不是 “K12”“MUX3_CH7” 这类物理编号。
原则二:资源池化与并行调度。当系统扩展到多工位时,仪器和矩阵通道应被视为可分配的资源池。主控层维护一张资源占用表,测试序列启动时申请资源、结束时释放。例如两工位并行测试时,工位 A 占用 SMU_1 和矩阵通道 1~16,工位 B 占用 SMU_2 和通道 17~32,互不干扰。资源池化的关键是“申请—使用—释放”必须成对出现,否则会出现通道泄漏导致后续测试失败。
原则三:DUT 接口的家族化设计。同一封装系列(如 LFCSP、TSSOP、BGA)的 DUT 应共用同一块 DIB 底板,只更换 Socket 和少量配置电阻/跳线。DIB 上预留测试点(Test Point)和跳线区,方便在不改板的情况下调整上拉/下拉、滤波或负载。对于引脚数差异较大的型号,可采用“底板 + 子板”结构,子板只负责引脚映射。
原则四:配置与代码分离。测试限值、量程、延时、通道映射、仪器地址等全部放在外部配置文件(如 XML、JSON、YAML 或数据库表)中,测试代码只读取配置并执行。这样换型时工程师改配置即可,不需要重新编译和验证代码。一个典型的配置片段如下:
{
"station": "STATION_A",
"instruments": {
"smu_vdd": { "resource": "TCPIP::192.168.1.101::INSTR", "driver": "IVI_SMU" },
"dmm_out": { "resource": "USB0::0x2A8D::0x1301::MY12345678::INSTR", "driver": "IVI_DMM" }
},
"matrix": {
"dut1_vdd": { "module": "MUX1", "channel": 3 },
"dut1_gpio": { "module": "MUX1", "channel": 7 }
},
"limits": {
"vdd_voltage": { "min": 3.25, "max": 3.35, "unit": "V" },
"idd_quiescent": { "min": 0.8, "max": 1.2, "unit": "mA" }
}
}
一个可复用的测试序列示例
假设要测试一颗 8 引脚运放,测试项包括:电源电流 Iq、输入失调电压 Vos、开环增益 Aol。系统配置为:SMU_1 给 VDD 供电并测 Iq,DMM_1 通过矩阵测量 Vos,AWG 提供小信号、示波器测输出幅度计算 Aol。测试序列可以写成如下伪代码结构:
sequence "OPAMP_BASIC":
1. 资源申请: SMU_1, DMM_1, AWG_1, SCOPE_1, MUX1.CH1~CH8
2. 上电: SMU_1 输出 5.0V, 限流 50mA, 延时 10ms
3. 测 Iq: 读取 SMU_1 电流, 判断 0.8~1.2mA
4. 测 Vos: 配置 MUX1 将 DUT OUT 接到 DMM_1, 读取电压, 判断 ±2mV
5. 测 Aol: AWG_1 输出 10mVpp/1kHz 到 IN+, 示波器测 OUT 幅度
计算 Aol = 20*log10(Vout/Vin), 判断 > 80dB
6. 下电: SMU_1 输出 0V, 关闭输出
7. 资源释放: 释放所有仪器和矩阵通道
8. 结果写入数据库, 标记 PASS/FAIL
这个序列中,第 1 步和第 7 步是资源池化的关键;第 2 步和第 6 步保证 DUT 不会长期带电;第 3~5 步的限值全部来自配置文件,换型时只改配置。实际调试时,如果第 4 步 Vos 读数异常,应先检查矩阵通道是否接触良好、DMM 输入阻抗是否设置为高阻、DUT 是否已稳定上电,而不是直接怀疑 DUT 本身。
总结来看,主控、仪器、开关矩阵、DUT 接口与软件栈这五层,各自解决“调度、激励测量、通道扩展、物理连接、逻辑控制”五个不同问题。可扩展性来自接口标准化和资源池化,可复用性来自配置与代码分离、DIB 家族化设计。把这两条主线贯穿到每一层的设计中,系统才能在换型、扩通道、换仪器时保持稳定和高效。