National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 08

數位電錶量測

量測功能、量程與積分時間、觸發與多筆讀值
Interaction 25 minute(s)

Learning Objectives

  • 用 MEAS? 指令量直流電壓、直流電流與電阻,知道量電阻前一定要斷電
  • 說明積分時間(NPLC)如何在雜訊與速度之間取捨
  • 用 CONF、SAMP:COUN 與 READ? 一次量多筆讀值,用 query_ascii_values 轉成數字串列
  • 分開使用 INIT 與 FETC?:先觸發量測,再取回讀值

同一顆電阻,量出來的數字為什麼每次不一樣

上一課用數位電錶量了 LED 兩端的電壓,指令只有一行 MEAS:VOLT:DC?。這一課把電錶本身看清楚一點。

把電源供應器設在 5 V,接一顆 1 kΩ 電阻,連續量十次電壓,你會發現最後幾位數字一直在跳: 4.99998、5.00001、4.99996……這不是電錶壞了,是所有量測都有的雜訊。電錶給你兩個選擇:

  • 量慢一點,每一筆都比較穩;
  • 量快一點,一秒內拿到很多筆,再用程式算平均。

選哪一個,要看你的實驗要什麼。這一課要回答:

  1. 電錶有哪些量測功能,用程式切換時要注意什麼?
  2. 「積分時間」是什麼,為什麼設長一點讀值比較穩?
  3. 怎麼一次量很多筆,而且讓電錶量的時候程式不用乾等?

本課的電錶是模擬的教學儀器(Uedu Sim),指令採常見的 SCPI 寫法;各廠牌的指令與預設值以該儀器的程式設計手冊為準。

量測功能:電壓、電流、電阻

數位電錶(DMM)的每一種量測叫一個功能(function)。最常用的三個:

功能 查詢指令 接法 注意
直流電壓 MEAS:VOLT:DC? 並聯在元件兩端 電錶內阻很高,幾乎不影響電路
直流電流 MEAS:CURR:DC? 串聯在迴路裡 真實電錶要把探棒換到電流插孔;並聯上去等於短路,會燒保險絲
電阻 MEAS:RES? 元件兩端,電路要斷電 電錶自己送出小電流來量;電路有電時讀值沒有意義,甚至會損壞電錶

本課的模擬工作台接線是固定的:電壓檔量受測元件兩端,電流檔串在迴路上,所以程式換功能就好;真實的電錶要依功能換插孔。

量到超出範圍時,SCPI 儀器常用 +9.9E+37 這個特別的數字表示「溢位、無限大」。 程式拿到這種值要當成「量不到」,不能拿去計算平均。

逐步看:三種量測功能

注意通訊紀錄:每一個 MEAS:…? 都是一筆送出、一筆收到。看第 13 行:輸出還開著就量電阻,電錶回傳 +9.9E+37; 第 15 行關閉輸出之後再量,才得到大約 1000 Ω。

量程與積分時間(NPLC)

量程(range)是電錶這次準備量多大的值,例如 10 V 檔、100 V 檔。量程越小,同樣位數能分辨的電壓越細; 超過量程就溢位。大多數電錶預設自動量程,程式不設定也能量;要固定量程時,常見寫法是在 CONF 或 MEAS? 後面帶參數 (例如 CONF:VOLT:DC 10),細節以手冊為準。本課的模擬電錶預設自動量程,也接受 CONF:VOLT:DC 10 或 VOLT:RANG 10 固定量程;讀值超過量程時回傳 +9.9E+37(溢位)。

積分時間決定電錶每量一筆要「看」多久,單位常用 NPLC(Number of Power Line Cycles,幾個電源週期)。 電源線上的 60 Hz(台灣)或 50 Hz 干擾是量測雜訊的主要來源之一;如果量測時間剛好是整數個電源週期,這個干擾的正半週與負半週會互相抵消。

NPLC 每筆時間(60 Hz) 每筆時間(50 Hz) 特性
0.02 約 0.33 ms 0.4 ms 很快,雜訊大
1 約 16.7 ms 20 ms 常見的折衷
10 約 167 ms 200 ms 很慢,最穩

臺灣的電網是 60 Hz(1 PLC 約 16.7 ms);為了好算,本課的模擬電錶以 50 Hz 的 1 PLC=20 ms 計算。設定指令是 VOLT:NPLC 10(完整寫法 [SENSe:]VOLTage[:DC]:NPLCycles)。

一個要小心的地方:在很多電錶上,MEAS:VOLT:DC? 等於 CONF:VOLT:DC 加上 READ?,而 CONF 會把沒有寫在指令裡的設定改回預設值。 所以要自己設定積分時間和筆數時,改用三步:

dmm.write("CONF:VOLT:DC")      # 1. 選功能(其他設定回到預設)
dmm.write("VOLT:NPLC 10")      # 2. 改你要的設定
vals = dmm.query("READ?")      # 3. 觸發並讀回

SAMP:COUN 5 讓電錶每次觸發量 5 筆,回傳用逗號隔開的五個數字;query_ascii_values() 會幫你切開並轉成 float 串列。

逐步看:積分時間越長,讀值越穩、越慢

同一個電壓,分別用 0.02、1、10 PLC 各量 5 筆。比較每一輪的兩個數字:花了多少時間、5 筆之間最大差多少。 time.perf_counter() 是計時用的時鐘,本頁的模擬時間和真實儀器的速度相當。

觸發:INIT 與 FETC?

READ? 把「開始量」和「讀回結果」綁在一起:送出之後,程式要等電錶量完才拿得到回答。 量 10 筆、每筆 200 ms,就要等 2 秒,這段時間程式什麼也不能做。

把它拆成兩個指令就自由了:

指令 做什麼 程式要等嗎
INIT 讓電錶開始量(觸發),讀值存在電錶的記憶體 不用,送出就返回
FETC? 把記憶體裡的讀值送回來 還沒量完就等到量完
READ? 等於 INIT 加 FETC? 要
MEAS:…? 等於 CONF 加 READ? 要

送出 INIT 之後,程式可以去設定別台儀器、處理上一批資料,最後再用 FETC? 取回。 FETC? 與 READ? 的等待受 PyVISA 的 timeout 限制(預設 2000 毫秒):量測比 timeout 久,就會丟出 VI_ERROR_TMO。 要量很久時,先放寬 timeout,例如 dmm.timeout = 5000(毫秒);第 10 課會教怎麼估算要等多久。 注意 FETC? 前面一定要有一次 INIT,否則電錶沒有新的讀值可以給(本課的模擬電錶會在錯誤佇列放 -230,"Data corrupt or stale")。

拿到一串讀值後,用 Python 的 statistics 模組算平均(mean)與標準差(stdev):平均是你要報告的值,標準差說明讀值有多分散。

逐步看:INIT 之後程式可以先做別的事

看第 15 行與第 17 行印出的時間:INIT 送出後約 1 ms 就返回,FETC? 才等到 10 筆量完(10 筆 × 1 PLC,約 200 ms)。

互動練習:設定電錶,量得又穩又完整

起始程式用一行 MEAS:VOLT:DC? 量 1 kΩ 電阻兩端的電壓。依序完成任務:

  1. 直接執行起始程式。
  2. 把積分時間設成 10 PLC(先 CONF:VOLT:DC,再 VOLT:NPLC 10)。
  3. 用 SAMP:COUN 10 一次量 10 筆,用 INIT 觸發、FETC? 取回,印出「平均 x V」。10 筆 × 200 ms 約 2 秒,比預設的 timeout 2 秒長,先設 dmm.timeout = 5000。
  4. 關閉輸出之後用 MEAS:RES? 量電阻,印出大約 1000 Ω 的讀值。MEAS? 會把筆數改回 1,所以只回傳一個數字;如果改用 READ?,筆數還是 10,要先 SAMP:COUN 1,否則 float() 會出錯。
  5. 回答一個問題。

小測驗:功能與積分時間

1.

電路還通電時送出 MEAS:RES?,模擬電錶回傳 +9.9E+37。下面哪一個做法正確?

2.

電錶設定 VOLT:NPLC 10、SAMP:COUN 5,1 PLC 以 20 ms 計,一次 READ? 大約要多久?

3.

為什麼積分時間設成整數個電源週期(例如 1 PLC)時,讀值特別穩?

第 1 次作答

小測驗:多筆讀值與觸發

1.

下面的程式會印出什麼?

reply = "+4.99998558E+00,+4.99995779E+00\n"
vals = [float(x) for x in reply.split(",")]
print(len(vals), round(sum(vals) / len(vals), 4))
2.

你想讓電錶量 10 筆的同時,程式先去設定函數產生器。下面哪一個寫法對?

3.

程式先 VOLT:NPLC 10,接著用 MEAS:VOLT:DC? 量測。在很多電錶上,這次量測的積分時間可能是多少?

第 1 次作答

重點整理

  • 量測功能:MEAS:VOLT:DC?(並聯)、MEAS:CURR:DC?(串聯)、MEAS:RES?(電路斷電)。+9.9E+37 表示溢位,不能拿去計算。
  • 量程:預設自動量程;固定量程的寫法以手冊為準。
  • 積分時間 NPLC:越長越穩、越慢;整數個電源週期可以抵消電源線的交流干擾。
  • 自訂設定的量測:CONF → VOLT:NPLC、SAMP:COUN → READ?;MEAS? 會把設定改回預設。
  • INIT 觸發後馬上返回,FETC? 取回讀值(還沒量完就等);query_ascii_values() 把多筆讀值轉成 float 串列。

下一課處理「出錯」:錯誤佇列的完整讀法、逾時、找不到儀器,以及怎麼寫出出錯也一定會關閉輸出的程式。

這一課完成了!
Next lesson:錯誤處理
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。