JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

正確量測:示波器、萬用電表與校準

韌體編譯通過、LED 也在閃 — 但那個 [[ee-pwm|PWM]] 真的是 1 kHz、25% 工作週期嗎?在你量測之前,全都是猜的。這篇教你三件能把「我覺得它在動」變成「我親眼看它在動」的工具:萬用電表、示波器、頻譜分析儀。讀完後你能親手探測自己的板子、相信讀數,而且清楚知道能相信到什麼程度。

蒙眼的困境

想像一位外科醫生在黑暗中開刀,只能用手指摸索、然後*祈禱*。沒有儀器就去除錯嵌入式硬體,感覺就是這樣。你的程式寫著 `set_duty(25)`,編譯器很開心,板子也沒燒起來 — 但它驅動的馬達卻發燙,或者感測器讀回一堆亂碼。在你寫的那行 C 與板上那條銅箔之間的某處,現實已經偏離了你腦中的模型。整套桌上量測的工夫,就是要把燈打開。

這條學習軌之前的每一階,都給了你能*做*的事 — 翻轉 GPIO、發出 PWM 波形、把 SPI 訊框時脈打出去。這一階給你能*看*的東西。三件儀器幾乎涵蓋了你在業餘或專業工作台上會用到的一切:萬用電表回答「穩定值是多少?」,示波器回答「它隨時間長什麼樣?」,頻譜分析儀回答「裡面有哪些頻率?」。學會每一件對什麼誠實 — 又對什麼悄悄說謊 — 你幾乎什麼都能除錯。

萬用電表:你的第一個問題

萬用電表就像桌上的把脈 — 快、便宜,而且是你第一個拿起來的東西。它靠內部重新組態量測三件事。量直流電壓時,它在兩點間接上一個很高的電阻(常是 10 MΩ)並讀取產生的電壓,內部遵循歐姆定律。量電阻時,它把一個已知的微小測試電流推過未知元件,再量回壓。量電流時,做法與電壓相反:它把一個微小的已知電阻(取樣電阻)*串聯*進電路,並讀取其兩端電壓。

在嵌入式工作台上,萬用電表先回答那些無聊卻關鍵的問題。*3.3 V 真的是 3.3 V 嗎?*(穩壓器在負載下垂到 3.05 V,能解釋一百次莫名的重置。)*這條走線是通的,還是焊點裂了?*(導通模式會嗶嗶叫。)*那顆 LED 電阻真的是 330 Ω,還是我抓成 33 Ω?*在你伸手去拿示波器之前,電表往往早就找到了 bug。

How a multimeter measures CURRENT (in series):

   +3.3V ──[ LED ]──[ 330R ]──┐
                              │
              ┌──( mA )───────┘   <- meter BREAKS the loop,
              │   meter            current flows THROUGH it
             GND

How it measures VOLTAGE (in parallel):

   +3.3V ──[ LED ]──┬──[ 330R ]── GND
                    │        │
                  ( V )──────┘   <- meter sits ACROSS the part,
                                    almost no current diverted
量電流用串聯,量電壓用並聯 — 接反了就燒保險絲。

示波器:看見時間本身

萬用電表給你一個數字。但 PWM 訊號*本身*就是變化 — 一個一旦取平均就失去意義的數字。拿萬用電表對著 25% 工作週期、1 kHz 的 PWM,它可能讀出平均值「0.83 V」,而這個值對應不到接腳實際停留過的任何一個真實電壓。要看*波形*,你需要示波器:一台把電壓畫在縱軸、時間畫在橫軸的儀器,每秒重畫數千次,讓重複的訊號在螢幕上靜止下來,就像被頻閃燈定格的螺旋槳。

這個「靜止」是觸發(trigger)的工作 — 示波器最重要的旋鈕,也是新手最常與之搏鬥的一個。觸發告訴示波器*何時開始繪圖*:「在訊號往上越過 1.6 V 的那一瞬間開始掃描」。因為每次掃描都從波形上同一點開始,連續的掃描就能完美疊合,畫面穩如磐石。觸發設錯,波形就會捲動或糊成一條模糊的緞帶 — 不是因為你的訊號壞了,而是因為示波器沒有一致的錨點。

現在來談會咬人的部分。兩項規格決定你能不能相信螢幕上的東西。頻寬是示波器自身前端把你的訊號衰減 30% 的頻率(−3 dB 點)。一台 100 MHz 的示波器去看 100 MHz 訊號,會把它顯示得小 30% 且邊緣變圓 — 著名的經驗法則是:選示波器(與探棒)時,頻寬至少要是訊號中*最快邊緣*的 5 倍,因為陡峭的數位邊緣是由遠高於時脈頻率的諧波組成的。探棒負載更微妙:你把探棒一碰上某節點,就加上了電容(典型 10× 探棒約加 10 pF),量測這個動作本身就稍微改變了你要量的東西,把快邊緣拖慢。在慢吞吞的 SPI 線上你永遠不會察覺;但在 100 MHz 時脈上,你可能去追一個「毛刺」,而它只是因為你的探棒製造出來的。

實例:抓住一個 PWM 與一條 SPI 時脈

我們來驗證你第二階的韌體是否真的如你所想。你把計時器設成 1 kHz、25% 工作週期的 PWM 來調暗 LED。以下是只用一台示波器、從零驗證它的方法。

  1. 先接地。把探棒的接地夾夾到板上已知的 GND — 在表筆碰任何地方*之前*。接地浮接會給你一條垃圾波形,還可能注入雜訊。
  2. 把表筆碰上 PWM 接腳。把時基設到約 500 µs/格,讓 1 ms 週期(1 kHz)橫跨兩格;每格電壓設 1 V,讓 3.3 V 擺幅填滿螢幕。
  3. 把觸發設成上升緣、約 1.6 V。波形鎖定靜止:一個每毫秒重複一次、乾淨的矩形脈衝。
  4. 讀出工作週期。量高電位時間,除以週期。大多數示波器有一鍵自動的「Duty+」與「Freq」量測 — 確認它讀到約 25% 與約 1.000 kHz。
  5. 若讀到 50%,你就找到了 bug:你的比較暫存器是它該有值的一半。示波器剛剛賺回了它的飯錢。
PWM check — what a correct 1 kHz / 25% trace looks like:

  3.3V ┐   ┌───┐         ┌───┐         ┌───┐
       │   │   │         │   │         │   │
   0V  ┘───┘   └─────────┘   └─────────┘   └──
           |<->|             |<->|
          250us            high time = 0.25 ms
       |<------- 1.00 ms (1 kHz) ------->|

  duty = high / period = 0.25 ms / 1.00 ms = 25%   ✓
高電位時間除以週期,直接得出工作週期 — 量它,別只信暫存器。

第五階的 SPI 時脈是同一個概念,只是更快。探測 SCLK,把時基設得夠短以看見個別時脈邊緣(1 MHz SCLK 約 200 ns/格),並用上升緣觸發。現在你能*看見*匯流排在做事:數每個位元組八個時脈脈衝、檢查 MOSI 資料在從機取樣的那個邊緣是否穩定、確認晶片選擇(CS)只在這串傳輸期間拉低。配備邏輯分析儀的示波器甚至會在螢幕上解碼出十六進位位元組 — 讓「我的驅動程式真的送出 0xA5 了嗎?」從猜測變成你直接從畫面讀到的標籤。

頻譜分析儀:看見頻率

示波器把訊號顯示為時間的函數。但有時問題不是「什麼形狀?」 — 而是「裡面住著哪些頻率、各有多強?」。一個和弦在示波器上是一團扭動的混亂;在頻譜分析儀上卻是三個乾淨的尖峰,每個音一個。分析儀畫的是功率對頻率,而非電壓對時間 — 同樣的資料,透過不同的鏡頭來看(數學上,就是時間訊號的傅立葉轉換)。

嵌入式工程師為何要在意?三個理由。第一,EMI:你那可愛的小 PWM 不只待在 1 kHz — 它陡峭的邊緣會在 3 kHz、5 kHz、7 kHz 乃至更遠處輻射諧波,而頻譜分析儀正是你找出害產品電磁干擾測試不過關那根尖峰的方法。第二,時脈純度:一個在示波器上看起來沒問題的振盪器,可能顯示出難看的邊帶(抖動、雜訊),足以毀掉一台收音機或一個 ADC。第三,在雜訊中找針:一個微弱、埋在雜訊底下的 433 MHz 發射器在示波器上看不見,卻會在頻譜上冒出一根尖峰。

校準:為什麼沒有讀數是精確的

這裡有個把工程師和按鈕工區分開來的真理:每一次量測都是錯的,而好的工程師知道錯多少。你的電表讀「3.300 V」。最後那位數字是個自信的謊言。真值住在它周圍的一個區間裡,而那個區間的寬度就是儀器的不確定度校準與量測不確定度,就是把那個區間釘下來的學問。

規格書上像「±(讀值的 0.5% + 2 個字)」這樣的容差,就是對那個區間的承諾。「讀值的 0.5%」這部分隨數值縮放;「+2 個字」這部分是來自最低有效位的固定底限 — 兩者合起來告訴你最壞情況的誤差。校準則是定期的儀式:拿你的儀器去比對一個更可信的參考(而它本身又比對過一個更更可信的,一路往上追到國家標準),再把它調回規格內。一台多年沒校準的電表,可能讀得既自信又*錯誤*。

Worked uncertainty: meter spec ±(0.5% of reading + 2 digits)
Reading on a 4-digit display: 3.300 V  (last digit = 0.001 V)

  0.5% of 3.300 V .......... = 0.0165 V
  + 2 digits (2 x 0.001 V) . = 0.0020 V
  --------------------------------------
  total uncertainty ........ = ±0.0185 V

So the true voltage is somewhere in:
   3.300 - 0.0185  ...  3.300 + 0.0185
   = 3.2815 V  ...  3.3185 V

=> Report it honestly as 3.30 V +/- 0.02 V,
   NOT '3.300 V' as if the last digit were gospel.
容差規格把一個假精確的讀數,變成一個誠實的範圍。