Files
Calculators-for-University-…/python/Bridge resistance measurement.ipynb
T

188 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": [
"# 电桥法测量电阻计算器 (Wheatstone Bridge)\n",
"\n",
"本 Notebook 用于通过**惠斯通电桥(单臂电桥)**测量未知电阻值 $R_x$。包含不同比例臂($1:1, 1:10, 10:1$ 等)下的平衡电阻统计、电桥灵敏度 $S$ 测定、仪器误差限 $\\Delta_{\\mathrm{inst}}$ 评估、不确定度合成及各比例臂对比汇总。\n",
"\n",
"---\n",
"### 实验原理与数学公式\n",
"\n",
"#### 1. 惠斯通电桥平衡条件\n",
"当检流计指针示数为零时,电桥达到平衡:\n",
"$$R_x = R_0 \\cdot \\frac{R_1}{R_2} = R_0 \\cdot C$$\n",
"* $R_x$:待测电阻\n",
"* $R_0$:比较臂标准电阻箱读数\n",
"* $C = R_1 / R_2$:比例臂倍率(如 $1, 0.1, 10$)\n",
"\n",
"#### 2. 电桥灵敏度 $S$ 与仪器误差限 $\\Delta_{\\mathrm{inst}}$\n",
"平衡后微调比较臂电阻使检流计偏转 $\\Delta n$ 格(通常取 5 格),记偏调后的读数为 $R_0'$:\n",
"$$\\Delta R_0 = |R_0' - R_0|, \\quad S = \\frac{\\Delta n}{\\Delta R_0 / R_0} = \\frac{\\Delta n \\cdot R_0}{\\Delta R_0}$$\n",
"电桥所能分辨的最小电阻改变量(即由灵敏度决定的仪器误差限)为:\n",
"$$\\Delta_{\\mathrm{inst}} = \\frac{R_0}{S} = \\frac{\\Delta R_0}{\\Delta n}$$\n",
"\n",
"#### 3. 不确定度传递与合成公式\n",
"比例臂 $C$ 由精密标准电阻构成,其不确定度可忽略,则:\n",
"* $R_0$ 的合成不确定度:\n",
"$$u(R_0) = \\sqrt{ u_A^2(R_0) + u_B^2(R_0) }, \\quad u_A(R_0) = \\frac{s(R_0)}{\\sqrt{n}}, \\quad u_B(R_0) = \\frac{\\Delta_{\\mathrm{inst}}}{\\sqrt{3}}$$\n",
"* 待测电阻 $R_x$ 的不确定度:\n",
"$$u(R_x) = C \\cdot u(R_0), \\quad u_r(R_x) = \\frac{u(R_x)}{R_x} = \\frac{u(R_0)}{R_0}$$\n",
"* 结果按照“四舍六入五凑偶”保留一位有效数字,末位对齐。"
],
"id": "aae827c35ef68a9f"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"from decimal import Decimal\n",
"from python.utils import scientific_round, calculate_stats\n",
"\n",
"print(\"电桥法计算模块加载完成。\")"
],
"id": "c7d75a2788fc0cac"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1. 测量实验数据配置 (支持多组标称值与比例臂)\n",
"> **提示**:可以在 `calibration_data` 列表中增减测试组。每组包含:标称值、比例臂标签、比例因子 $C$、5次平衡读数 $R_0$ 列表,以及偏转 5 格时的读数 $R_0'$。"
],
"id": "44f6b780972c58ad"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 实验测量数据配置列表\n",
"# 结构: dict(R_nominal, ratio_label, C, R0_list, R0_prime)\n",
"calibration_data = [\n",
" {\n",
" \"R_nominal\": \"10000\", \"ratio_label\": \"1:1\", \"C\": Decimal(\"1\"),\n",
" \"R0_list\": [Decimal(\"9985.2\"), Decimal(\"9985.0\"), Decimal(\"9985.3\"), Decimal(\"9985.1\"), Decimal(\"9985.2\")],\n",
" \"R0_prime\": Decimal(\"9995.2\")\n",
" },\n",
" {\n",
" \"R_nominal\": \"10000\", \"ratio_label\": \"10:1\", \"C\": Decimal(\"10\"),\n",
" \"R0_list\": [Decimal(\"998.5\"), Decimal(\"998.4\"), Decimal(\"998.6\"), Decimal(\"998.5\"), Decimal(\"998.5\")],\n",
" \"R0_prime\": Decimal(\"1002.5\")\n",
" },\n",
" {\n",
" \"R_nominal\": \"2000\", \"ratio_label\": \"1:1\", \"C\": Decimal(\"1\"),\n",
" \"R0_list\": [Decimal(\"1996.8\"), Decimal(\"1996.9\"), Decimal(\"1996.7\"), Decimal(\"1996.8\"), Decimal(\"1996.8\")],\n",
" \"R0_prime\": Decimal(\"2002.8\")\n",
" },\n",
" {\n",
" \"R_nominal\": \"2000\", \"ratio_label\": \"10:1\", \"C\": Decimal(\"10\"),\n",
" \"R0_list\": [Decimal(\"199.7\"), Decimal(\"199.6\"), Decimal(\"199.7\"), Decimal(\"199.8\"), Decimal(\"199.7\")],\n",
" \"R0_prime\": Decimal(\"201.2\")\n",
" },\n",
" {\n",
" \"R_nominal\": \"200\", \"ratio_label\": \"1:1\", \"C\": Decimal(\"1\"),\n",
" \"R0_list\": [Decimal(\"199.65\"), Decimal(\"199.62\"), Decimal(\"199.68\"), Decimal(\"199.64\"), Decimal(\"199.65\")],\n",
" \"R0_prime\": Decimal(\"201.15\")\n",
" },\n",
" {\n",
" \"R_nominal\": \"200\", \"ratio_label\": \"1:10\", \"C\": Decimal(\"0.1\"),\n",
" \"R0_list\": [Decimal(\"1996.4\"), Decimal(\"1996.2\"), Decimal(\"1996.5\"), Decimal(\"1996.4\"), Decimal(\"1996.3\")],\n",
" \"R0_prime\": Decimal(\"2005.4\")\n",
" },\n",
" {\n",
" \"R_nominal\": \"200\", \"ratio_label\": \"10:1\", \"C\": Decimal(\"10\"),\n",
" \"R0_list\": [Decimal(\"19.96\"), Decimal(\"19.95\"), Decimal(\"19.97\"), Decimal(\"19.96\"), Decimal(\"19.96\")],\n",
" \"R0_prime\": Decimal(\"20.36\")\n",
" }\n",
"]\n",
"\n",
"print(f\"成功载入 {len(calibration_data)} 组电桥测量方案。\")"
],
"id": "c3bfc04680149d32"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. 批量计算、灵敏度分析与不确定度评定"
],
"id": "254400fffad68f9"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"delta_n = Decimal(\"5\") # 偏转格数\n",
"results = []\n",
"\n",
"for item in calibration_data:\n",
" R_nom = item[\"R_nominal\"]\n",
" ratio = item[\"ratio_label\"]\n",
" C = item[\"C\"]\n",
" R0_data = item[\"R0_list\"]\n",
" R0_prime = item[\"R0_prime\"]\n",
" \n",
" R0_mean_temp = sum(R0_data) / Decimal(len(R0_data))\n",
" delta_R0 = abs(R0_prime - R0_mean_temp)\n",
" \n",
" if delta_R0 == 0:\n",
" S = Decimal(\"Infinity\")\n",
" delta_inst = Decimal(\"0\")\n",
" else:\n",
" S = delta_n * R0_mean_temp / delta_R0\n",
" delta_inst = R0_mean_temp / S\n",
" \n",
" R0_mean, u_R0, u_a_R0, u_b_R0, _ = calculate_stats(R0_data, str(delta_inst))\n",
" \n",
" Rx_mean = C * R0_mean\n",
" u_Rx = C * u_R0\n",
" u_r_Rx = u_Rx / Rx_mean if Rx_mean != 0 else Decimal(\"0\")\n",
" Rx_final, u_Rx_final = scientific_round(Rx_mean, u_Rx)\n",
" \n",
" results.append({\n",
" \"R_nominal\": R_nom, \"ratio_label\": ratio, \"C\": C,\n",
" \"R0_mean\": R0_mean, \"S\": S, \"delta_inst\": delta_inst,\n",
" \"Rx_mean\": Rx_mean, \"u_Rx\": u_Rx, \"u_r_Rx\": u_r_Rx,\n",
" \"Rx_final\": Rx_final, \"u_Rx_final\": u_Rx_final\n",
" })\n",
"\n",
"print(\"=\" * 85)\n",
"print(\" 测 量 结 果 汇 总 表 \")\n",
"print(\"=\" * 85)\n",
"header = f\"{'标定电阻':>8} {'比例臂':>8} {'R0均值(Ω)':>12} {'灵敏度S':>10} {'Δ_inst(Ω)':>12} {'Rx(Ω)':>12} {'u(Rx)(Ω)':>10} {'相对不确定度':>10}\"\n",
"print(header)\n",
"print(\"-\" * 85)\n",
"for res in results:\n",
" S_str = f\"{res['S']:.1f}\" if res['S'] != Decimal(\"Infinity\") else \"∞\"\n",
" print(f\"{res['R_nominal'] + ' Ω':>8} {res['ratio_label']:>8} {res['R0_mean']:>12.4f} {S_str:>10} \"\n",
" f\"{res['delta_inst']:>12.4f} {res['Rx_mean']:>12.4f} {res['u_Rx']:>10.4f} {res['u_r_Rx']*100:>9.2f}%\")\n",
"print(\"=\" * 85)\n",
"\n",
"print(\"\\n\" + \"*\" * 55)\n",
"print(\" 最 终 规 范 修 约 结 果 \")\n",
"print(\"*\" * 55)\n",
"for res in results:\n",
" print(f\"标定 {res['R_nominal']:>5} Ω (比例臂 {res['ratio_label']:>4}) : Rx = {res['Rx_final']} ± {res['u_Rx_final']} Ω\")\n",
"print(\"*\" * 55)"
],
"id": "9a88f538183e4b0c"
}
],
"metadata": {
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 5
}