Files
Calculators-for-University-…/python/Hall effect.ipynb
T

211 lines
8.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 霍尔效应实验数据处理 (Hall Effect)\n",
"\n",
"本 Notebook 用于对霍尔效应实验中直接测得的霍尔电压 $V_H$ 及零磁场电导电压 $V_\\sigma$ 进行线性拟合、导电类型判别、物理参数计算(电导率 $\\sigma$、霍尔灵敏度 $K_H$、霍尔系数 $R_H$、载流子浓度 $n$ 与迁移率 $\\mu$)及完整的不确定度传递分析。\n",
"\n",
"---\n",
"### 实验原理与数学公式\n",
"\n",
"#### 1. 霍尔效应基本关系与载流子类型判别\n",
"将通有控制工作电流 $I_s$ 的半导体薄片置于垂直磁场 $B$ 中,受洛伦兹力偏转产生横向霍尔电压 $V_H$:\n",
"$$V_H = K_H \\cdot I_s \\cdot B$$\n",
"* 若 $V_H > 0$:空穴导电,判定为 **P 型半导体**;\n",
"* 若 $V_H < 0$:电子导电,判定为 **N 型半导体**。\n",
"\n",
"#### 2. 磁场计算(螺线管)\n",
"励磁电流为 $I_m$,螺线管中心磁场强度满足:\n",
"$$B = k_{\\mathrm{sol}} \\cdot I_m = \\left(\\mu_0 \\frac{N}{L_{\\mathrm{sol}}}\\right) I_m$$\n",
"\n",
"#### 3. 电导率 $\\sigma$ 计算\n",
"在零磁场 ($I_m = 0$) 条件下测定不同工作电流 $I_s$ 下沿长度方向的电位差 $V_\\sigma$。线性回归斜率即为霍尔片电阻 $R = V_\\sigma / I_s$,则材料电导率为:\n",
"$$\\sigma = \\frac{L}{R \\cdot b \\cdot d}$$\n",
"* $L$:电极间距(长度);$b$:霍尔片宽度;$d$:霍尔片厚度。\n",
"\n",
"#### 4. 霍尔系数 $R_H$、载流子浓度 $n$ 与迁移率 $\\mu$\n",
"* 霍尔系数:$R_H = |K_H| \\cdot d$\n",
"* 载流子浓度:$n = \\frac{1}{R_H \\cdot e} = \\frac{1}{|K_H| \\cdot e \\cdot d}$($e = 1.602 \\times 10^{-19}\\,\\mathrm{C}$)\n",
"* 载流子迁移率:$\\mu = \\sigma \\cdot R_H = \\sigma \\cdot |K_H| \\cdot d$\n",
"\n",
"#### 5. 回归斜率不确定度与相对误差合成\n",
"* 线性回归斜率 $k$ 的不确定度:$u(k) = |k| \\sqrt{\\frac{1/r^2 - 1}{N - 2}}$\n",
"* 各物理量相对不确定度传递:\n",
"$$u_r(\\sigma) \\approx \\frac{u(R)}{R}, \\quad u_r(K_H) \\approx \\frac{u(k_1)}{k_1}, \\quad u_r(n) = u_r(K_H), \\quad u_r(\\mu) = \\sqrt{u_r^2(\\sigma) + u_r^2(K_H)}$$"
],
"id": "c151d3bfb3ac3774"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import math\n",
"from python.utils import scientific_round, linear_regression\n",
"\n",
"print(\"霍尔效应计算与回归分析模块加载完成。\")"
],
"id": "ebdba69fe30f7d93"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1. 物理常数与霍尔元件几何尺寸"
],
"id": "eb6332ab0ffbedaf"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 基本物理常量\n",
"e_charge = 1.602e-19 # 元电荷 (C)\n",
"mu_0 = 4.0 * math.pi * 1e-7 # 真空磁导率 (T·m/A)\n",
"\n",
"# 霍尔元件几何尺寸 (mm -> m)\n",
"d_mm = 0.095 # 厚度 d (mm)\n",
"b_mm = 0.235 # 宽度 b (mm)\n",
"L_mm = 0.270 # 电极间距 L (mm)\n",
"\n",
"d = d_mm * 1e-3\n",
"b = b_mm * 1e-3\n",
"L = L_mm * 1e-3\n",
"\n",
"# 螺线管磁场比值常数 k_sol = B / Im (T/A)\n",
"k_sol = 0.00209\n",
"\n",
"print(f\"霍尔元件尺寸: L={L_mm} mm, b={b_mm} mm, d={d_mm} mm\")\n",
"print(f\"螺线管比值: k_sol = {k_sol} T/A\")"
],
"id": "964b32703abf7887"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. 实验测量数据输入\n",
"> **包含三组数据**:\n",
"> 1. 固定 $I_m$,测量 $V_H$ 随 $I_s$ 的变化;\n",
"> 2. 固定 $I_s$,测量 $V_H$ 随 $I_m$ 的变化;\n",
"> 3. 零磁场下测量 $V_\\sigma$ 随 $I_s$ 的变化。"
],
"id": "bae2c240cece3f2a"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# --- 1. VH vs Is 数据 (固定 Im = 600 mA) ---\n",
"Im_fixed_mA = 600.0\n",
"B_fixed = k_sol * (Im_fixed_mA * 1e-3) # T\n",
"Is_1 = [0.20 * (i + 1) for i in range(10)] # mA: 0.20 ~ 2.00\n",
"# 实测 VH 带符号读数 (mV)\n",
"VH_signed_1 = [-1.52, -3.05, -4.58, -6.11, -7.63, -9.16, -10.68, -12.21, -13.74, -15.26]\n",
"VH_abs_1 = [abs(x) for x in VH_signed_1]\n",
"\n",
"# --- 2. VH vs Im 数据 (固定 Is = 1.50 mA) ---\n",
"Is_fixed_mA = 1.50\n",
"Im_2 = [100.0, 150.0, 200.0, 250.0, 300.0, 350.0, 400.0, 450.0, 500.0, 550.0, 600.0] # mA\n",
"VH_signed_2 = [-1.91, -2.87, -3.82, -4.78, -5.73, -6.69, -7.64, -8.60, -9.55, -10.51, -11.46] # mV\n",
"VH_abs_2 = [abs(x) for x in VH_signed_2]\n",
"\n",
"# --- 3. Vσ vs Is 数据 (零磁场 Im = 0) ---\n",
"Is_3 = list(Is_1) # mA\n",
"Vsigma = [45.2, 90.5, 135.8, 181.0, 226.3, 271.5, 316.8, 362.0, 407.3, 452.5] # mV\n",
"\n",
"print(\"实验数据载入完成。\")"
],
"id": "b944163d5b6fa5f7"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3. 线性回归分析与参数计算"
],
"id": "913d723bf7836a79"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 1. 回归 1: VH(mV) vs Is(mA) -> 斜率单位 mV/mA = V/A\n",
"k1, b1, r1, uk1 = map(float, linear_regression(Is_1, VH_abs_1))\n",
"\n",
"# 2. 回归 2: VH(mV) vs Im(mA)\n",
"k2, b2, r2, uk2 = map(float, linear_regression(Im_2, VH_abs_2))\n",
"\n",
"# 3. 回归 3: Vσ(mV) vs Is(mA) -> 样品电阻 R (Ω)\n",
"R_sample, b3, r3, u_R = map(float, linear_regression(Is_3, Vsigma))\n",
"\n",
"# 导电类型判定\n",
"carrier_type = \"P 型 (空穴导电)\" if sum(VH_signed_1)/len(VH_signed_1) > 0 else \"N 型 (电子导电)\"\n",
"\n",
"# 电导率 σ = L / (R · b · d)\n",
"sigma = L / (R_sample * b * d)\n",
"u_r_sigma = abs(u_R / R_sample)\n",
"u_sigma = sigma * u_r_sigma\n",
"sigma_final, u_sigma_final = scientific_round(sigma, u_sigma)\n",
"\n",
"# 霍尔灵敏度 KH = k1 / B_fixed\n",
"KH = k1 / B_fixed\n",
"u_r_KH = abs(uk1 / k1)\n",
"u_KH = KH * u_r_KH\n",
"KH_final, u_KH_final = scientific_round(KH, u_KH)\n",
"\n",
"# 霍尔系数 RH = KH * d\n",
"RH = KH * d\n",
"\n",
"# 载流子浓度 n = 1 / (RH · e)\n",
"n_carrier = 1.0 / (RH * e_charge)\n",
"u_n = n_carrier * u_r_KH\n",
"n_final, u_n_final = scientific_round(n_carrier, u_n)\n",
"\n",
"# 迁移率 μ = σ · RH\n",
"mu = sigma * RH\n",
"u_r_mu = math.sqrt(u_r_sigma**2 + u_r_KH**2)\n",
"u_mu = mu * u_r_mu\n",
"mu_final, u_mu_final = scientific_round(mu, u_mu)\n",
"\n",
"print(\"=\" * 55)\n",
"print(\" 霍 尔 效 应 实 验 结 果 汇 总 \")\n",
"print(\"=\" * 55)\n",
"print(f\"材料导电类型 : {carrier_type}\")\n",
"print(f\"VH-Is 回归斜率 k1 : {k1:.4f} V/A (r={r1:.4f})\")\n",
"print(f\"VH-Im 回归斜率 k2 : {k2:.4f} V/A (r={r2:.4f})\")\n",
"print(f\"样品内阻 R (斜率k3): {R_sample:.4f} Ω (r={r3:.4f})\")\n",
"print(\"-\" * 55)\n",
"print(f\"电导率 σ : {sigma_final} ± {u_sigma_final} S/m\")\n",
"print(f\"霍尔灵敏度 |KH| : {KH_final} ± {u_KH_final} V/(A·T)\")\n",
"print(f\"霍尔系数 RH : {RH:.4e} m³/C\")\n",
"print(f\"载流子浓度 n : {n_final} ± {u_n_final} m⁻³\")\n",
"print(f\"载流子迁移率 μ : {mu_final} ± {u_mu_final} m²/(V·s)\")\n",
"print(\"-\" * 55)\n",
"print(f\"相对不确定度 u_r(σ) : {u_r_sigma*100:.2f}%\")\n",
"print(f\"相对不确定度 u_r(KH): {u_r_KH*100:.2f}%\")\n",
"print(f\"相对不确定度 u_r(μ) : {u_r_mu*100:.2f}%\")\n",
"print(\"=\" * 55)"
],
"id": "7f25b56c710f5a1f"
}
],
"metadata": {
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 5
}