【物理实验及其数据处理】 集成电路传感器特性测量及其应用

实验目的

1.学习和测量AD590温度传感器的特性
2.测量输出电流与温度之间的关系并绘制该传感器的伏安特性曲线
3.通过设计数据处理程式提升python编程能力,以及培养计算思维

实验仪器

实验仪器的规格型号依各学校的规定,会有相应的变化,由于本人是上个学期做的实验,“年代久远”,有所忘记,请原谅。在此,本人引用了某高校的相应规定作为参考

智能式数字恒温控制仪;量程0 至 19.999V四位半数字式电压表;直流1.5V 至 12V稳压输出电源;可调式磁性搅拌器以及加热器;玻璃管;AD590集成电路传感器;ZX21型电阻箱;保温杯;水银温度计等

实验原理

先在这里简单的介绍下AD590温度传感器:
AD590传感器是美国ANALOG DEVICES公司研发的两段式集成电路温度传感器,管脚引出有两个,红色引线接电源正端,黑色引线接电源负端,另一根引线则接地或者不用。AD590工作电压为4~30V,若两端电压在4V一下,则出现非线性。
集成电路传感器将温敏晶体管与其他相应辅助电路集成与同一芯片上,其能够给出正比于绝对温度的正比输出,一般用于-50℃~120℃间的温度测量。在AD590传感器两侧加有某一直流电压时,其输出电流(I)与温度(T)之间成以下关系
I = B ∗ T + A I = B* T + A I=BT+A
其中I的单位为毫安 μ A \mu A μA,T的单位为℃;B为传感器灵敏度(理论值为B0 = 1μA/℃);A为0℃时的电流值

实验电路图如下:【物理实验及其数据处理】 集成电路传感器特性测量及其应用_第1张图片

实验步骤

该实验步骤大致如下:

1.将输出电源的输出电压调至4V,将保温杯里的液体从29.0℃缓缓至50.0℃,每隔3℃记录一次电压表示数。
2.将温度保持在50℃,将电源电压降至1.4V,记录此时传感器两端电压,并且按如下表格记录数据:
【物理实验及其数据处理】 集成电路传感器特性测量及其应用_第2张图片

数据处理

在这里,笔者仅提供最小二乘法拟合的代码,伏安曲线的请读者自行描绘

使用的库

首先,我们来简单介绍下我们将使用的python库:

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

numpy是数据处理常用的库之一,其由C语言编写,具有效率高的特点;scipy常用与科学计算以及仿真,在本例中,我们将使用scipy模块中的optimize子包中的leastsq方法对实验数据进行拟合;matplotlib库是常用的数据可视化的库,我们常用它来绘制曲线,图表等,在这里,我们利用其pyplot子包来绘制拟合后的曲线

数据读取

file_path = input("請輸入您所測量的AD590的輸出電流I與溫度t的關係圖表: ")


I_t = np.loadtxt(file_path, delimiter=',')

我们使用numpy的loadtxt方法来读取数据的csv文件。csv文件是一种以纯文本形式存储表格数据(数字和文本)的文件类型,每条记录用字段组成,字段之间用","或其他字符进行分格。
loadtxt方法读取数据后,把数据转化为双精度浮点数类型

最小二乘法拟合

首先,我们先定义我们需要拟合的函数为线性函数:

def func(p, x):
    k, b = p
    return k * x + b

定义损失函数:

def error(p, x, y):
    return func(p, x) - y

训练数据:

p0 = [1, 20]

# 把error函數中除了p0以外的參數打包到args中
Para = leastsq(error, p0, args=(t, I1))
B, A = Para[0]

我们首先初始化参数,将其设置为p0=[1,20](常用)
然后调用leastsq函数,其括号内第一项为损失函数,第二项为初始参数,我们需要训练的数据将其打包进args中(args=[x,y])
当训练完成后,将para[0]中的元素分别赋值于B,A当中(para[0]是训练好的参数)

计算相关系数

计算相关系数设计到最小二乘法的公式(讲到这里,觉得我的程序真的好低效),我们需要分别计算 L t t L_{tt} Ltt, L t i L_{ti} Lti以及 L i i L_{ii} Lii,其分别是计算下标第一个向量的每一个元素减去其向量的均值再乘以下表第二个向量的每一个元素减去第一个向量的均值,然后累加作和(有点拗口)。相关系数的计算公式如下 r = L i i L t t ∗ L i i r=\frac{L_{ii}}{\sqrt{L_{tt}*L_{ii}}} r=LttLii Lii

其计算代码如下:

# 相關係數計算

t_hat = np.mean(t)
I1_hat = np.mean(I1)
Ltt = 0
for i in range(len(t)):
    Ltt = Ltt + (t[i] - t_hat) ** 2
Lti = 0
for i in range(len(I1)):
    Lti = Lti + (t[i] - t_hat) * (I1[i] - t_hat)
Lii = 0
for i in range(len(I1)):
    Lii = Lii + (I1[i] - I1_hat) ** 2
r = Lti / pow(Ltt * Lii, 0.5)

最后,我们计算下实验误差

误差分析

Bt = 1.0
Er_B = abs(B - Bt) / Bt

画图

# 畫圖
plt.figure(figsize=(8, 6)) # 設置圖標比例
plt.scatter(t, I1, color='blue', label='sample', linewidths=1.0) # 畫散點圖
T = np.linspace(0, 50, 10000)  # 在0~50℃之間取10000個點
i = B * T + A
plt.plot(T, i, color='red', label='The Line of I-T')  # 畫輸出電流與溫度的關係圖
plt.legend()
plt.show()  

结果输出

print('經計算得A為:{:.2f},B為:{:.2f},相關係數r={:.3f},誤差為{:.3f}'.format(A, B, r, Er_B))

你可能感兴趣的:(python,物理学)