200kV TEM 物镜设计全流程:从 Glaser 场模型到亚埃分辨率优化

ColumX 团队 · 2026-06-28 · 阅读约 15 分钟
电子光学 TEM 物镜设计 像差优化 数值仿真 FEM
TL;DR

本文用真实仿真数据,完整走通 200kV TEM 物镜的设计流程:从 Glaser 场模型建模、旁轴光线追踪、Seidel/Glaser 混合像差计算,到参数扫描寻优。我们用 ColumX 开源引擎把每一步都算给你看——最终将物镜球差 Cs 从 77.7 mm 优化到 5.3 mm,Scherzer 分辨率从 0.38 nm 推进到 0.24 nm。文章末尾有可交互的仿真 Demo,你可以自己拖滑块体验参数对光路的影响。

一、为什么物镜设计这么难?

如果你曾经拆开过一台透射电镜——当然,大多数人都没有——你会发现物镜是整个仪器中最精密的部件。它需要在不到 10 mm 的工作距离内,将一束 200 kV 的电子聚焦到亚埃尺度的探针上。这相当于在百米外打中一枚硬币,只不过这个「硬币」只有一个原子那么大。

物镜设计的核心矛盾在于:透镜越强,焦距越短(好事),但像差也越复杂(坏事)。球差 Cs 决定了离轴电子的过聚焦程度,色差 Cc 则限制了能量分散电子的聚焦一致性。两者共同决定了仪器的最终分辨率。

更棘手的是,物镜参数之间存在强耦合:提高峰值磁场 B₀ 可以缩短焦距,但磁场太强会让透镜进入「过聚焦」区间,球差反而急剧恶化。改变磁极靴半宽 a 也有类似的非线性效应。这就是为什么经验丰富的电镜工程师往往需要数周甚至数月来调优一个设计——或者,用 ColumX 在几秒钟内完成参数扫描

二、物理基础:Glaser 钟形场模型

在真实电镜中,物镜的磁场分布由磁极靴的几何形状决定,通常需要通过有限元方法(FEM)求解。但在设计初期,我们需要一个解析模型来快速评估参数空间。Glaser 在 1952 年提出的钟形场模型至今仍是电子光学设计的首选工具:

B(z) = B₀ / [1 + ((z − z₀)/a)²]

这个公式只有三个参数:峰值磁场 B₀、半宽参数 a、和透镜中心位置 z₀。但它惊人地准确地描述了真实磁透镜的轴上场分布——误差通常在 5% 以内。

更妙的是,Glaser 场允许严格的解析解。定义无量纲透镜强度:

k² = q·B₀²·a² / (8·m·V*)   其中  V* = V + qV²/(2mc²)  (相对论修正电压)

当 k² < 0.5 时,透镜处于「弱透镜」区间,焦距较长,像差较小;当 k² > 0.5 时进入「强透镜」区间,焦距缩短但像差行为变得复杂。在 200 kV 加速电压下,B₀ = 1.8 T、a = 4 mm 对应的 k² ≈ 4.77,属于典型的强透镜。

B₀ [T]透镜类型f [mm]行为特征
0.50.37弱透镜10.6焦距长,像差小
1.01.47强透镜6.9焦距适中,像差开始非线性
1.53.31强透镜8.5越过最优区间
1.84.77强透镜9.9工程常用值
2.05.88强透镜10.4焦距回升
3.013.24极强透镜20.4多次聚焦,像差恶化

注意表中一个反直觉的现象:B₀ 从 1.0 T 增加到 3.0 T,焦距不是单调递减,而是先降后升。这是 Glaser 透镜的固有特性——当 k² 增大到使 ω = √(1+k²) 超过 π 时,电子在透镜内完成超过半次振荡,焦点位置开始「回退」。

三、旁轴光线追踪:让电子「走」一遍

有了场模型,下一步是追踪电子的运动轨迹。在旁轴近似下(假设电子偏离光轴的距离远小于透镜尺寸),运动方程简化为一个二阶线性 ODE:

r''(z) + α · B(z)² · r(z) = 0   其中  α = q/(8mV*)

这个方程的物理意义很直观:B² 项就像一个「弹簧常数」,磁场越强,电子被拉向光轴的力越大。我们用两条基本射线来完整描述透镜的光学性质:

任何实际射线都可以表示为这两条基本射线的线性组合:r(z) = r₀·g(z) + r'₀·h(z)。这就是旁轴光学的叠加原理。

在 ColumX 中,我们用四阶 Runge-Kutta 方法(步长 ~10⁻⁵ m)求解这个 ODE。对于 B₀ = 1.8 T、a = 4 mm 的物镜,追踪结果如下:

# columx/paraxial.py — 旁轴光线追踪核心代码
def trace_ray(V, B_func, r0, rp0, z_start, z_end, n_pts=1000):
    alpha = q / (8 * m * relativistic_voltage(V))
    dz = (z_end - z_start) / n_pts
    r, rp = r0, rp0

    for i in range(n_pts):
        z = z_start + i * dz
        B = B_func(z)
        # RK4 integration step
        k1 = rp
        k2 = rp + 0.5 * dz * (-alpha * B**2 * r)
        # ... (standard RK4 coefficients) ...
        r  += dz/6 * (k1 + 2*k2 + 2*k3 + k4)
        rp += dz/6 * (k1p + 2*k2p + 2*k3p + k4p)
    return r, rp

交互仿真:拖动滑块,实时观察光路变化

调整物镜参数,观察电子束如何在磁场作用下聚焦。红色圆点标注焦点位置。

200 kV
1.80 T
4.0 mm
7
焦距 f
球差 Cs
Scherzer δ

四、像差:分辨率的终极杀手

理想的透镜会将所有平行射线聚焦到同一点。但真实的磁透镜做不到——离轴距离不同的电子,受到的聚焦力不同。这就是球差(spherical aberration, Cs)。

Cs 的计算有两种经典方法,各有适用范围:

方法 A:Seidel 积分(弱-中等透镜)

Cs = ∫ α · B(z)² · g(z)⁴ dz / [16 · g'(zf)⁴]

直接对旁轴射线的四次方加权积分。物理意义清晰,但当透镜很强时(k² > 1),g(z) 在透镜区内可能穿越零点,导致积分发散。

方法 B:Glaser 渐近公式(强透镜)

Cs = fasym · (fasym/feff)^p · (1 + 1/k²) / 2

其中 p = 4.0 + 0.383·B(zi)/B₀ 是一个自适应幂次,根据像平面处的场强自动调节。这个公式对强透镜更稳定。

在 ColumX 中,我们采用混合策略:用余弦过渡函数在 k² ∈ [0.05, 1.0] 之间平滑混合两种方法,确保在整个参数空间内都能给出物理合理的结果。

# columx/aberration.py — Seidel/Glaser 混合像差计算
def blend_weight(k_sq):
    """k² < 0.05 → 纯 Seidel; k² > 1.0 → 纯 Glaser; 中间余弦过渡"""
    if k_sq <= 0.05: return 1.0
    if k_sq >= 1.0:  return 0.0
    t = (k_sq - 0.05) / 0.95
    return 0.5 * (1.0 + np.cos(np.pi * t))

Cs = w * Cs_seidel + (1 - w) * Cs_glaser

五、参数扫描:寻找最优设计点

现在到了最有趣的部分。我们把 B₀ 和 a 作为设计变量,在合理的工程范围内做参数扫描,看看 Cs 的「地形」长什么样。

5.1 B₀ 扫描:像差的振荡与最优窗口

固定 a = 4 mm、V = 200 kV,让 B₀ 从 0.5 T 扫描到 3.0 T:

球差 Cs 和焦距 f vs. 峰值磁场 B₀ (a = 4 mm, V = 200 kV)
Cs 在 B₀ ≈ 1.0 T 处出现全局最小值(~5.3 mm),此后因过聚焦效应振荡上升

几个关键观察:

全局最小值在 B₀ ≈ 1.0 T 附近,对应 k² ≈ 1.47。这是 Glaser 透镜的「甜蜜点」——透镜足够强以获得短焦距,但还没强到引起多次聚焦。Cs ≈ 5.3 mm 是这组参数下的理论最优。

B₀ 在 1.1–1.2 T 附近出现发散,这不是数值错误,而是物理真实:在这个区间,ω = √(1+k²) 恰好使得 π/ω 对应的像平面落入透镜场区内,旁轴近似下的渐近焦距定义失效。实际工程中必须避开这个「禁区」。

B₀ > 2.0 T 后 Cs 持续恶化。虽然更强的场能进一步缩短焦距,但电子在透镜内的振荡次数增加,离轴像差急剧放大。这就是为什么 300 kV 电镜的物镜不会无限增大磁场——它们转向使用更精密的极靴设计来收窄场分布。

5.2 半宽 a 扫描:窄极靴的优势与代价

固定 B₀ = 1.8 T,让 a 从 2 mm 扫描到 10 mm:

球差 Cs 和焦距 f vs. 透镜半宽 a (B₀ = 1.8 T, V = 200 kV)
窄极靴(a = 2–4 mm)有利于降低 Cs,但机械加工和磁饱和限制了最小可行值

趋势很清晰:更窄的极靴 → 更集中的磁场 → 更短的焦距 → 更低的 Cs。但工程上的限制也很明确——极靴太窄会导致磁饱和(铁磁材料的饱和磁感应强度 ~2.1 T),而且加工精度要求极高。这就是为什么 a = 3–5 mm 是 200 kV 物镜的常见工程选择。

5.3 加速电压的影响

分辨率极限 vs. 加速电压 (B₀ = 1.8 T, a = 4 mm)
更高的加速电压 = 更短的波长 = 更好的理论分辨率,但 Cs 的变化并非单调

加速电压对分辨率的影响来自两个方面:波长 λ 随 V 增大而减小(有利于分辨率),但电子能量更高也使得透镜相对「变弱」,焦距增大。在 B₀ = 1.8 T、a = 4 mm 的配置下,Scherzer 分辨率从 80 kV 的 ~0.45 nm 改善到 300 kV 的 ~0.22 nm——但 Cs 本身的非单调行为意味着并不是简单地「电压越高越好」。

六、优化结果:从 77.7 mm 到 5.3 mm

让我们把上述分析汇总,对比初始设计和优化后的结果:

初始设计 Cs
77.7
mm (B₀=1.8T, a=4mm)
优化后 Cs
5.3
mm (B₀≈1.0T, a=4mm)
Scherzer 分辨率
0.24
nm (↓37%)
最优半角 αopt
10.0
mrad

这个改善是巨大的——球差降低了 93%。代价是焦距从 9.9 mm 缩短到 6.9 mm,意味着工作距离变小,样品空间更紧凑。这在很多现代 STEM 设计中是可接受的。

当然,Cs = 5.3 mm 仍远非现代球差校正电镜的水平(Cs-corrected TEM 可以做到 < 0.05 mm)。但它代表了一个未经校正器的单透镜物镜能达到的物理极限。要进一步突破,就需要多极校正器——这将是后续文章的主题。

ColumX 优化器代码

上述结果由 ColumX v2.3.5 新增的 optimizer 模块自动完成。以下是核心用法:

from columx.column import PredefinedColumns
from columx.optimizer import ColumnOptimizer, DesignVariable, Objective

# 1. 创建初始柱体
col = PredefinedColumns.stem_column(200e3)

# 2. 定义可调参数和设计目标
variables = [
    DesignVariable("Objective B₀", "Objective lens", "B0",
                   bounds=(0.5, 3.0)),
    DesignVariable("Objective a",  "Objective lens", "a",
                   bounds=(2e-3, 10e-3)),
]
objectives = [
    Objective("minimize", "system_Cs"),
]

# 3. 运行混合优化(DE 全局搜索 + DLS 局部精化)
opt = ColumnOptimizer(col, variables, objectives)
result = opt.optimize(method="hybrid")

# 4. 查看结果
print(opt.compare(result))

七、实战经验与避坑指南

在做完大量参数扫描后,我想分享几个在设计过程中反复遇到的经验教训:

教训 1:警惕「禁区」

在 B₀ = 1.1–1.2 T(对应 k² ≈ 2)附近,Seidel 积分和 Glaser 公式都会给出异常值。这不是 bug,而是物理模型的固有行为——像平面落入了透镜场区。实际设计中必须避开这个区间,或者切换到更精确的数值积分方法。

教训 2:全局优化 ≠ 工程最优

参数扫描给出的数学最优解(B₀ ≈ 1.0 T)可能不是工程上的最佳选择。在这个磁场下,极靴可能已经接近磁饱和。一个好的设计需要同时考虑磁路设计和材料约束。

教训 3:单透镜优化只是起点

真实的 STEM 柱体包含聚光镜、物镜、投影镜等多个透镜,系统级像差是各透镜贡献的级联叠加。ColumX 的 LensCascade 模块使用 Conrady 传播公式来处理这种级联效应——这是下一步要做的事。

FEM 有限元磁场仿真验证

前面的设计流程全部基于 Glaser 钟形场的解析模型——它快、好用,但终究是一个近似。真实透镜的磁场分布由极靴几何、铁磁材料的非线性 B-H 曲线、以及磁轭的饱和效应共同决定。要获得精确的场分布,必须求解轴对称的静磁方程:

∇ × (ν · ∇ × A) = J   (其中 ν = 1/μ 为磁阻率,A 为磁矢量位)

ColumX v2.3.5 新增了完整的 FEM 磁场求解器,支持 CST(Cubic Spline Triangulation)SOFEM(Second-Order Finite Element Method) 两种离散方案。核心亮点包括:

Newton-Raphson 非线性求解

铁磁材料的 B-H 关系是非线性的——在高场区,磁导率 μ 随 B 急剧下降(饱和效应)。定点迭代法用初始 μ 值反复求解线性方程组,每次只微调 μ,收敛缓慢。Newton-Raphson 方法则利用 Jacobian 矩阵直接求解非线性方程组,具有二次收敛速度:

J(k) · δA = −R(A(k))   →   A(k+1) = A(k) + δA

其中 R(A) 是非线性残差向量,J 是 Jacobian 矩阵 ∂R/∂A。关键在于 J 包含了 ν(B) 对 B 的导数信息,使得每次迭代都能「看到」正确的收敛方向。

Newton-Raphson 收敛曲线:残差 vs 迭代次数 (NI=3,000 A-turns)
NR 方法(蓝色)在 24 次迭代内收敛至 10⁻⁸ 量级;定点迭代(红色)需要 ~120 次且仍残留 ~10⁻³ 量级的误差

收敛性能:不同 NI 激励下的表现

我们测试了从低激励到深度饱和的一系列安匝数:

NI [A-turns]Gap B₀ [T]NR 迭代数FP 迭代数加速比
1,0000.31212484.0×
3,0000.891241124.7×
5,0001.24522984.5×
8,0001.523231054.6×
10,0001.641241184.9×
15,0001.78925>5.0×

关键观察:即使在 NI=15,000 A-turns 的深度饱和条件下,Newton-Raphson 也仅需 25 次迭代。这是因为 NR 方法的二次收敛特性使其对非线性程度的增加不敏感——只要 Jacobian 矩阵正定,收敛就有保证。相比之下,定点迭代在高 NI 下可能完全发散(表中 "—" 表示未收敛)。

多材料极靴/磁轭区分

真实透镜中,极靴需要高饱和磁感应强度(如 Pure Iron, Bsat ≈ 2.1 T)以承受集中磁场,而磁轭可以用较低成本的材料(如 Mild Steel, Bsat ≈ 1.6 T)。ColumX FEM 求解器支持为不同区域指定独立的 B-H 曲线:

# columx/fem/solver.py — FEM 磁场求解基本用法
from columx.fem import FEMSolver, Material, Mesh2D
from columx.fem.bh_curves import PURE_IRON, PERMENDUR

# 1. 定义材料
pole_mat = Material("pole", bh_curve=PURE_IRON)    # B_sat ≈ 2.1 T
yoke_mat = Material("yoke", bh_curve=PERMENDUR)   # B_sat ≈ 2.4 T

# 2. 创建网格(轴对称 r-z 平面)
mesh = Mesh2D.from_geometry(
    pole_region=pole_geom,
    yoke_region=yoke_geom,
    gap_region=air_geom,
    element_size=0.1e-3  # 0.1 mm in gap
)

# 3. 配置求解器
solver = FEMSolver(
    mesh=mesh,
    materials={"pole": pole_mat, "yoke": yoke_mat},
    method="SOFEM",           # 或 "CST"
    nonlinear="newton_raphson", # 或 "fixed_point"
    NI=3000,                    # 安匝数
    tol=1e-8
)

# 4. 求解
result = solver.solve()
print(f"Gap field B₀ = {result.B0_gap:.4f} T")
print(f"Converged in {result.n_iter} iterations")
print(f"Final residual: {result.residual:.2e}")

# 5. 提取轴上场分布(用于后续光线追踪)
Bz_axis = result.on_axis_field()  # B(z) along r=0
FEM vs Glaser:何时该切换?

Glaser 模型在 B₀ < 1.5 T 时误差通常在 5% 以内,适合快速参数扫描。但当极靴接近饱和(B₀ > 1.8 T)或需要精确评估杂散场时,必须切换到 FEM 求解。ColumX v2.3.5 支持将 FEM 场分布直接注入 ParaxialSolver,替代 Glaser 解析场进行光线追踪——无需任何额外适配。

FEM 求解器
CST + SOFEM
两种离散方案
NI=3,000 迭代
24
Newton-Raphson
NI=15,000 迭代
25
深度饱和仍收敛
NR 加速比
4–5×
vs 定点迭代

八、总结与展望

本文完整展示了 200 kV TEM 物镜设计的核心流程:

  1. Glaser 钟形场 建立磁场分布的解析模型
  2. 通过 旁轴 ODE 求解 获得光线轨迹和传输矩阵
  3. Seidel/Glaser 混合方法 计算球差和色差
  4. 通过 参数扫描 + 混合优化 找到最优设计点

关键数据:在 V = 200 kV、a = 4 mm 的约束下,最优 B₀ ≈ 1.0 T,对应 Cs ≈ 5.3 mm,Scherzer 分辨率 δ ≈ 0.24 nm——相比初始设计提升了 37%。

后续工作方向包括:多透镜级联的系统级优化、球差校正器(Cs-corrector)的参数设计、以及基于 Differential Evolution 的全局多目标优化。ColumX 的 optimizer 模块已经为这些扩展预留了接口。

动手试试

ColumX 是一个开源的电子光学仿真引擎,支持 25+ 模块,涵盖从电子枪到探测器的完整链路。

pip install columx GitHub →