第三章:仪器宽化——标准样品(Si、LaB6)测量仪器宽化函数

好,咱们进入第三章。前两章我们聊了衍射峰宽化的物理本质,也讲了怎么从峰形里把晶粒尺寸和微观应变的贡献拆开。但有个关键问题我一直没细说——你测到的峰宽,其实不全是样品本身的贡献。

说白了,你的衍射仪不是完美的。X射线光源有几何展宽、狭缝系统有影响、探测器也有响应函数。这些因素叠加在一起,就形成了所谓的“仪器宽化”。如果不把它扣掉,你算出来的晶粒尺寸会偏小,微观应变会偏大。我在项目里见过不少新手,拿着没扣仪器宽化的数据直接算,结果晶粒尺寸只有几纳米,一看就是错的。

3.1 为什么必须扣仪器宽化?

你想想看,一个完美的单晶硅样品,理论上它的衍射峰应该是一个δ函数——无限窄。但实际测出来呢?峰还是有一定宽度。这个宽度就是仪器本身的贡献。

所以,我们测到的总峰宽 FWHMobs 可以写成:

FWHMobs² = FWHMsample² + FWHMinst² (高斯型叠加)
或者 FWHMobs = FWHMsample + FWHMinst (洛伦兹型叠加)

实际中,我们常用Voigt函数或Pseudo-Voigt函数来拟合,把高斯和洛伦兹分量分开处理。嗯,这里要注意:仪器宽化函数本身也是随2θ角变化的,不是个常数。

核心要点:仪器宽化函数 I(2θ) 必须用标准样品来标定。标准样品要求:无晶粒尺寸宽化(晶粒>1μm)、无微观应变、无堆垛层错。说白了,它的峰宽完全来自仪器。

3.2 常用标准样品:Si 和 LaB₆

我个人的习惯是,实验室常备两种标准样品:

标准样品 优点 缺点 适用场景
单晶硅(Si) 价格便宜、容易获得、峰位准确 峰强较弱、高角区峰形不对称 常规实验室、日常校准
六硼化镧(LaB₆) 峰强高、峰形对称、无择优取向 价格较贵、需要特殊保存 高精度测量、同步辐射

LaB₆ 是我比较推荐的。它的衍射峰在很宽的2θ范围内都保持很好的对称性,而且没有Kα₂的分离问题。我在做纳米材料表征时,只要条件允许,都会用LaB₆做仪器宽化标定。

小技巧:标准样品要研磨成细粉,但不要过度研磨。过度研磨会引入晶粒细化,那就不是“标准”了。我一般用玛瑙研钵轻轻研磨1-2分钟,过325目筛即可。

3.3 仪器宽化函数的测量步骤

好,咱们一步步来。测量仪器宽化函数,其实就三步:

  1. 测量标准样品:在相同的实验条件下(管压、管流、狭缝、扫描速度),测量Si或LaB₆的衍射图谱。
  2. 拟合每个衍射峰:用Pseudo-Voigt或Pearson VII函数拟合每个峰的峰位、峰宽、峰形参数。
  3. 建立仪器宽化函数:将FWHMinst对2θ作图,用多项式或Caglioti公式拟合。

Caglioti公式长这样:

FWHMinst² = U tan²θ + V tanθ + W

其中U、V、W是仪器参数。U主要与光源的发散度有关,V与样品位移有关,W与狭缝宽度有关。我一般在Origin或Python里做这个拟合,R²能达到0.999以上才算合格。

3.4 代码示例:用Python拟合仪器宽化函数

下面是我常用的一个脚本片段。它读取标准样品的峰位和FWHM数据,然后用Caglioti公式拟合:

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

# 标准样品数据(LaB₆,Cu Kα)
two_theta = np.array([21.4, 30.4, 37.4, 43.4, 48.8, 53.6, 58.0, 62.0, 65.8, 69.4])
fwhm_inst = np.array([0.089, 0.092, 0.096, 0.101, 0.107, 0.114, 0.122, 0.131, 0.141, 0.152])

# Caglioti公式
def caglioti(theta, U, V, W):
    return np.sqrt(U * np.tan(theta)**2 + V * np.tan(theta) + W)

# 转换为弧度
theta_rad = np.deg2rad(two_theta / 2)

# 拟合
popt, pcov = curve_fit(caglioti, theta_rad, fwhm_inst, p0=[0.01, 0.001, 0.08])
U, V, W = popt

print(f"U = {U:.5f}, V = {V:.5f}, W = {W:.5f}")

# 绘图验证
theta_fit = np.linspace(10, 40, 100)
fwhm_fit = caglioti(np.deg2rad(theta_fit), U, V, W)

plt.plot(two_theta, fwhm_inst, 'o', label='实验数据')
plt.plot(theta_fit*2, fwhm_fit, '-', label='Caglioti拟合')
plt.xlabel('2θ (°)')
plt.ylabel('FWHM (°)')
plt.legend()
plt.show()

注意:拟合时一定要检查残差。如果残差呈现系统性的偏差(比如低角区拟合偏大、高角区偏小),说明你的标准样品可能有问题,或者仪器状态发生了变化。我曾经遇到过这种情况,后来发现是X射线管老化导致的——换了个新管子就好了。

3.5 仪器宽化函数的应用

有了仪器宽化函数,你就可以对未知样品的峰宽进行校正了。具体做法是:

  1. 测量未知样品,得到每个峰的FWHMobs和峰位2θ。
  2. 用仪器宽化函数计算该2θ位置对应的FWHMinst
  3. 根据峰形类型(高斯/洛伦兹),用对应公式扣除仪器宽化,得到FWHMsample
  4. 用FWHMsample代入Scherrer公式或Williamson-Hall方法,计算晶粒尺寸和微观应变。

这里有个容易踩的坑:仪器宽化函数不是一成不变的。每次更换X射线管、调整狭缝、或者移动了探测器,都需要重新标定。我建议至少每三个月标定一次,或者在每次重要实验前标定。

3.6 知识体系总览

为了让你更直观地理解这一章的内容,我画了一张流程图:

仪器宽化函数测量与校正流程 步骤1:测量标准样品 Si 或 LaB₆ 粉末 步骤2:峰形拟合 Pseudo-Voigt 函数 步骤3:建立函数 Caglioti 公式拟合 输出:U, V, W 参数 应用:校正未知样品 FWHM_sample = FWHM_obs - FWHM_inst 结果:晶粒尺寸 + 微观应变 Scherrer / Williamson-Hall 注意:每次更换光管或调整狭缝后,必须重新标定仪器宽化函数

这张图把整个流程串起来了。从标准样品测量,到峰形拟合,再到Caglioti公式拟合,最后应用到未知样品的校正。你照着这个流程走,基本不会出错。

我的经验:如果你用的是实验室常规衍射仪(不是同步辐射),仪器宽化函数在低角区(2θ < 30°)变化比较平缓,在高角区(2θ > 100°)会急剧增大。所以,如果你只关心低角区的峰,可以用一个简单的多项式拟合;但如果要分析高角区,Caglioti公式是必须的。

好了,这一章就到这里。仪器宽化是XRD数据分析中最容易被忽视、但又最关键的一步。扣好了,你的数据才可信;扣不好,后面算出来的晶粒尺寸和微观应变都是空中楼阁。


公众号:蓝海资料掘金营,微信deep3321