【物理实验及其数据处理】 集成电路传感器特性测量及其应用
實驗目的
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+AI = B* T + AI=B?T+A
其中I的單位為毫安μA\mu AμA,T的單位為℃;B為傳感器靈敏度(理論值為B0 = 1μA/℃);A為0℃時的電流值
實驗電路圖如下:
實驗步驟
該實驗步驟大致如下:
1.將輸出電源的輸出電壓調至4V,將保溫杯里的液體從29.0℃緩緩至50.0℃,每隔3℃記錄一次電壓表示數。
2.將溫度保持在50℃,將電源電壓降至1.4V,記錄此時傳感器兩端電壓,并且按如下表格記錄數據:
數據處理
在這里,筆者僅提供最小二乘法擬合的代碼,伏安曲線的請讀者自行描繪
使用的庫
首先,我們來簡單介紹下我們將使用的python庫:
import numpy as np from scipy.optimize import leastsq import matplotlib.pyplot as pltnumpy是數據處理常用的庫之一,其由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 = preturn 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]是訓練好的參數)
計算相關系數
計算相關系數設計到最小二乘法的公式(講到這里,覺得我的程序真的好低效),我們需要分別計算LttL_{tt}Ltt?,LtiL_{ti}Lti?以及LiiL_{ii}Lii?,其分別是計算下標第一個向量的每一個元素減去其向量的均值再乘以下表第二個向量的每一個元素減去第一個向量的均值,然后累加作和(有點拗口)。相關系數的計算公式如下r=LiiLtt?Liir=\frac{L_{ii}}{\sqrt{L_{tt}*L_{ii}}}r=Ltt??Lii??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))總結
以上是生活随笔為你收集整理的【物理实验及其数据处理】 集成电路传感器特性测量及其应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GIS开发之二维地下管线综合管理系统(A
- 下一篇: 洛谷 P1718 图形复原