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)实现仪器可替换。

主控层 · 调度与数据中枢 工控机 / 服务器 · 测试序列编排 · 资源分配 · 结果汇总 · MES 交互 原则:只做调度,不直接操作仪器 软件栈层 应用层 流程 / UI / 报表 测试执行层 Test Executive 驱动层 IVI / VISA / 厂商驱动 通信层 TCP/IP · USB · GPIB 上层不依赖具体仪器型号 统一接口实现可替换 仪器层 · 激励与测量资源 精密源表 SMU · 四象限 数字万用表 DMM · 6½位 波形发生器 AWG · 任意波 示波器 / 频谱仪 时域 / 频域分析 开关 / 矩阵层 · 通道扩展与路由 继电器矩阵 N×M 交叉点 多路复用器 MUX · 1→N 开关选型要点 低电容 / 低热电势 / 低接触电阻 DUT 接口层 · 物理与电气边界 测试插座 Socket / 探针卡 负载板 / DIB 阻抗匹配 · 去耦 保护电路 ESD · 限流 · 钳位 接地与回流 信号完整性 调度指令 激励 / 测量信号 路由到引脚 驱动 控制 配置 可扩展:通道数 / 仪器型号 / DUT 类型变化时,仅替换对应层,接口不变

可扩展与可复用的设计原则

分层结构本身不是目的,目的是让系统在需求变化时“只改一层”。以下四条原则是实际项目中最常被验证有效的。

原则一:接口标准化。仪器层与软件栈之间统一使用 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 本身。

分层架构的验收标准可以简化为三个问题:换一台同类型仪器,是否需要改测试代码?增加一个工位,是否需要重新设计 DIB?修改一个测试限值,是否需要重新编译?如果三个答案都是“否”,说明分层和配置分离做到位了。
常见误区:把开关矩阵当成“透明导线”。实际上继电器有接触电阻(典型 50mΩ~2Ω)、热电动势(μV 级)、寄生电容(pF 级)和寿命限制(机械继电器约 10⁷ 次,舌簧继电器约 10⁹ 次)。在 μV 级 Vos 测量或 pA 级漏电测量中,矩阵的选型和走线方式往往比仪器本身更影响结果。

总结来看,主控、仪器、开关矩阵、DUT 接口与软件栈这五层,各自解决“调度、激励测量、通道扩展、物理连接、逻辑控制”五个不同问题。可扩展性来自接口标准化和资源池化,可复用性来自配置与代码分离、DIB 家族化设计。把这两条主线贯穿到每一层的设计中,系统才能在换型、扩通道、换仪器时保持稳定和高效。