โมดูล 1/5 · สัปดาห์ 1–3 · 27 ชม.

หลักการวัดและความไม่แน่นอน

UAT 205 เซนเซอร์และระบบเครื่องมือวัด

เวลาเรียนประมาณ 85 นาทีร่าง รอตรวจปรับปรุงล่าสุด 27 กันยายน 2569

บทเรียน

เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ

  1. อธิบายห่วงโซ่การวัดและคุณลักษณะของเซนเซอร์ เช่น ช่วงวัด ความละเอียด ความไว และความไม่เป็นเชิงเส้น
  2. สร้างกราฟสอบเทียบด้วยวิธีกำลังสองน้อยที่สุด และเทียบกับการสอบเทียบสองจุด
  3. ประเมินความไม่แน่นอนรวมด้วยกฎการแพร่ความไม่แน่นอนและสัมประสิทธิ์ความไว
  4. คำนวณความละเอียดของ ADC และทำนายความถี่ที่ปรากฏเมื่อเกิด aliasing

ความรู้พื้นฐานที่ควรมี: UAT 106 โมดูล 5 (ความไม่แน่นอน Type A และ Type B) · UAT 103 โมดูล 5 (เครื่องมือวัดทางไฟฟ้า)

ทำไมต้องรู้

โดรนรู้ทุกอย่างเกี่ยวกับตัวเองผ่านเซนเซอร์ ถ้าเซนเซอร์อ่านผิดเพียงเล็กน้อย ตัวควบคุมก็ตัดสินใจบนตัวเลขที่ผิด ผลคือโดรนลอยไม่นิ่ง ความสูงเพี้ยน หรือข้อมูลสำรวจใช้ไม่ได้ วิชานี้สอนให้รู้ว่าเซนเซอร์แต่ละชนิดวัดอย่างไร ผิดได้อย่างไร และสอบเทียบอย่างไร

ทั้งวิชาใช้กรณีสมมติเดียว: แล็บประกอบโดรน VTOL ปีกตรึงสำหรับสำรวจแปลงเกษตร และต้องสอบเทียบเซนเซอร์ทั้งชุดก่อนบินภารกิจ ตัวเลขทั้งหมดเป็นข้อมูลสมมติสำหรับฝึก ยกเว้นที่ระบุแหล่ง โค้ด Python ของทุกโมดูลดาวน์โหลดได้ที่ /downloads/uat-205/

ห่วงโซ่การวัด

การวัดหนึ่งครั้งผ่านหลายขั้น เซนเซอร์ (sensor) แปลงปริมาณจริง เช่น อุณหภูมิหรือความดัน เป็นสัญญาณไฟฟ้า วงจร ปรับสัญญาณ (signal conditioning) ขยายและกรองสัญญาณ ADC แปลงเป็นตัวเลข แล้วซอฟต์แวร์ใช้ค่าสอบเทียบแปลงกลับเป็นหน่วยที่ต้องการ ทุกขั้นเพิ่มความคลาดได้ ผลการวัดที่สมบูรณ์จึงต้องมีทั้ง ค่า และ ความไม่แน่นอน เสมอ (Fraden, 2016)

ห้ากล่องเรียงจากซ้ายไปขวามีลูกศรเชื่อม เซนเซอร์ ปรับสัญญาณและกรองกัน alias ADC ประมวลผลและสอบเทียบ และค่าที่วัดได้พร้อมความไม่แน่นอน เหนือกล่องแรกเขียนว่าปริมาณจริง
ภาพที่ 1 ห่วงโซ่การวัด

คุณลักษณะที่ต้องอ่านจาก datasheet ก่อนเลือกเซนเซอร์:

  • ช่วงวัด (range) ค่าต่ำสุดถึงสูงสุดที่วัดได้ ค่าเต็มสเกลเรียกว่า FS (full scale)
  • ความละเอียด (resolution) การเปลี่ยนแปลงเล็กที่สุดที่ระบบแยกได้ ไม่ใช่ความแม่น
  • ความไว (sensitivity) เอาต์พุตที่เปลี่ยนต่อหน่วยอินพุต เช่น mV/°C
  • ความไม่เป็นเชิงเส้น (nonlinearity) ความห่างจากเส้นตรงที่ใช้แทน มักบอกเป็น %FS
  • แบนด์วิดท์และเวลาตอบสนอง เซนเซอร์ตามการเปลี่ยนแปลงได้เร็วแค่ไหน

กราฟสอบเทียบ

การสอบเทียบ (calibration) คือการเทียบค่าที่เซนเซอร์อ่านกับค่าอ้างอิงที่รู้ความไม่แน่นอน แล้วหาความสัมพันธ์เพื่อแก้ค่า วิธีง่ายที่สุดคือ สองจุด ใช้จุดปลายสองข้าง ส่วนวิธี กำลังสองน้อยที่สุด (least squares) ใช้ทุกจุดหาเส้นตรงที่ผลรวมกำลังสองของค่าคลาดน้อยที่สุด ตามคู่มือสถิติของ NIST

เมื่อได้สมการแล้ว ต้องหาความไม่แน่นอนของผล คู่มือ GUM (JCGM 100:2008) ข้อ 5.1.2 ให้ กฎการแพร่ความไม่แน่นอน ถ้า และอินพุตไม่สัมพันธ์กัน ความไม่แน่นอนรวมคือ โดย คือ สัมประสิทธิ์ความไว (sensitivity coefficient) บอกว่าอินพุตนั้นส่งผลต่อผลลัพธ์มากเท่าใด

ตัวอย่างที่ 1 สอบเทียบเซนเซอร์อุณหภูมิของแบตเตอรี่

แช่เซนเซอร์คู่กับเทอร์โมมิเตอร์อ้างอิง (ความไม่แน่นอนมาตรฐาน 0.10 °C) ที่หกอุณหภูมิ มัลติมิเตอร์อ่านแรงดันได้ความไม่แน่นอนมาตรฐาน 2 mV

import math
import statistics as st

T_REF = [0, 10, 20, 30, 40, 50]                   # °C จากเทอร์โมมิเตอร์อ้างอิง
V = [0.502, 0.598, 0.701, 0.797, 0.905, 1.001]     # V ที่เซนเซอร์ให้
FS = 50.0                                          # °C ช่วงเต็มสเกล
U_V, U_REF = 0.002, 0.10                           # V, °C ความไม่แน่นอนมาตรฐาน

two_point = ((V[-1] - V[0]) / (T_REF[-1] - T_REF[0]), V[0])
mt, mv = st.mean(T_REF), st.mean(V)
gain = sum((t - mt) * (v - mv) for t, v in zip(T_REF, V)) / sum((t - mt) ** 2 for t in T_REF)
least = (gain, mv - gain * mt)

for name, (a, b) in (("two-point", two_point), ("least squares", least)):
    res = [(v - b) / a - t for t, v in zip(T_REF, V)]
    print(f"{name:<14} {a * 1000:.3f} mV/°C, offset {b:.4f} V, residuals "
          + " ".join(f"{r:+.2f}" for r in res) + f" °C, worst {max(map(abs, res)) / FS:.2%} FS")

a, b = least
res = [(v - b) / a - t for t, v in zip(T_REF, V)]
u_fit = math.sqrt(sum(r * r for r in res) / (len(res) - 2))
c_v = 1 / a                                        # °C ต่อ V (สัมประสิทธิ์ความไว)
u_c = math.sqrt((c_v * U_V) ** 2 + U_REF ** 2 + u_fit ** 2)
print(f"c_V = {c_v:.1f} °C/V, u from voltage {c_v * U_V:.2f} °C, u_fit {u_fit:.2f} °C")
print(f"combined u_c = {u_c:.2f} °C, expanded U = {2 * u_c:.2f} °C (k = 2)")
two-point      9.980 mV/°C, offset 0.5020 V, residuals +0.00 -0.38 -0.06 -0.44 +0.38 +0.00 °C, worst 0.88% FS
least squares  10.034 mV/°C, offset 0.4998 V, residuals +0.22 -0.21 +0.05 -0.38 +0.38 -0.05 °C, worst 0.76% FS
c_V = 99.7 °C/V, u from voltage 0.20 °C, u_fit 0.31 °C
combined u_c = 0.38 °C, expanded U = 0.77 °C (k = 2)

เส้นกำลังสองน้อยที่สุดกระจายค่าคลาดให้ทุกจุด จึงมีค่าคลาดที่แย่ที่สุดต่ำกว่าวิธีสองจุด ความไม่แน่นอนรวมมาจากสามแหล่ง ได้แก่ มัลติมิเตอร์ที่ถูกขยายด้วย เทอร์โมมิเตอร์อ้างอิง และความไม่เป็นเชิงเส้นที่เส้นตรงอธิบายไม่ได้ แหล่งที่ใหญ่ที่สุดคือความไม่เป็นเชิงเส้น ถ้าต้องการผลดีขึ้น ต้องลดแหล่งนี้ก่อน เช่น ใช้สมการกำลังสองแทนเส้นตรง

ADC และการสุ่มสัญญาณ

ADC ขนาด บิตที่แรงดันอ้างอิง แบ่งช่วงเป็น ระดับ ความกว้างหนึ่งระดับคือ LSB บทเรียน MT-001 ของ Analog Devices แสดงว่าสัญญาณรบกวนจากการแบ่งระดับในอุดมคติมีค่า rms เท่ากับ และ SNR ในอุดมคติสำหรับสัญญาณไซน์เต็มสเกลคือ dB

อีกเรื่องที่สำคัญคือ ความถี่ในการสุ่ม ตามทฤษฎีของ Shannon (1949) ต้องสุ่มเร็วกว่าสองเท่าของความถี่สูงสุดในสัญญาณ ถ้าช้ากว่านั้น สัญญาณความถี่สูงจะแปลงร่างเป็นความถี่ต่ำที่ไม่มีอยู่จริง เรียกว่า aliasing เหมือนล้อรถในวิดีโอที่ดูเหมือนหมุนช้าหรือหมุนถอยหลัง ในโดรน แรงสั่นจากใบพัดที่ถูกสุ่มช้าเกินไปอาจกลายเป็นการแกว่งช้าที่ตัวควบคุมพยายามแก้ วงจรปรับสัญญาณจึงต้องมี ตัวกรองกัน alias (anti-aliasing filter) ก่อน ADC

ตัวอย่างที่ 2 ความละเอียด ADC และความถี่แฝง

import math

N, VREF = 12, 3.3
lsb = VREF / 2 ** N
print(f"LSB {lsb * 1000:.3f} mV, quantization noise {lsb / math.sqrt(12) * 1000:.3f} mV rms, "
      f"ideal SNR {6.02 * N + 1.76:.1f} dB")

def alias(f, fs):
    return abs(f - round(f / fs) * fs)

for f, fs in ((180, 200), (1170, 1000), (450, 1000)):
    print(f"{f:>5} Hz sampled at {fs:>4} Hz appears at {alias(f, fs):>3.0f} Hz")

diff = max(abs(math.sin(2 * math.pi * 180 * n / 200) + math.sin(2 * math.pi * 20 * n / 200)) for n in range(200))
print("180 Hz samples match an inverted 20 Hz wave:", diff < 1e-9)
LSB 0.806 mV, quantization noise 0.233 mV rms, ideal SNR 74.0 dB
  180 Hz sampled at  200 Hz appears at  20 Hz
 1170 Hz sampled at 1000 Hz appears at 170 Hz
  450 Hz sampled at 1000 Hz appears at 450 Hz
180 Hz samples match an inverted 20 Hz wave: True

แรงสั่น 180 Hz ที่สุ่ม 200 Hz ให้ค่าตัวอย่างเหมือนคลื่น 20 Hz ทุกจุด ซอฟต์แวร์แยกไม่ออกหลังสุ่มแล้ว จึงต้องกรองก่อนสุ่ม ส่วน 450 Hz ที่สุ่ม 1,000 Hz ไม่เกิด aliasing เพราะต่ำกว่าครึ่งหนึ่งของความถี่สุ่ม

กราฟเวลา 0 ถึง 50 มิลลิวินาที เส้นบางสีเทาคือคลื่น 180 เฮิรตซ์แกว่งถี่ จุดสีฟ้าคือค่าที่สุ่มทุก 5 มิลลิวินาที เส้นประสีชมพูคือคลื่น 20 เฮิรตซ์ที่ลากผ่านจุดสุ่มทุกจุด
ภาพที่ 2 aliasing ของแรงสั่น 180 Hz ที่สุ่ม 200 Hz

ปฏิบัติการประจำโมดูล

ปฏิบัติการ: สอบเทียบเซนเซอร์อุณหภูมิ

  1. ต่อเซนเซอร์อุณหภูมิแบบแอนะล็อกเข้ากับบอร์ดไมโครคอนโทรลเลอร์ของแล็บ บันทึกความละเอียดของ ADC
  2. วัดคู่กับเทอร์โมมิเตอร์อ้างอิงที่มีใบรับรองอย่างน้อยห้าอุณหภูมิ รอให้อุณหภูมิคงที่ก่อนอ่านทุกครั้ง
  3. ใช้โค้ดตัวอย่างที่ 1 หาสมการสอบเทียบและงบความไม่แน่นอน
  4. วัดซ้ำที่อุณหภูมิที่ไม่ได้ใช้สอบเทียบ ตรวจว่าค่าคลาดอยู่ในความไม่แน่นอนที่คำนวณ
  5. บันทึกสัญญาณจากแท่นสั่นหรือมอเตอร์ที่อัตราสุ่มสองค่า และอธิบายความถี่ที่ปรากฏด้วยตัวอย่างที่ 2

ข้อผิดพลาดที่พบบ่อย

ระวัง

  • ถือว่าความละเอียดคือความแม่น
  • สอบเทียบสองจุด โดยไม่ตรวจความไม่เป็นเชิงเส้นระหว่างทาง
  • ไม่รายงานความไม่แน่นอน ของผลสอบเทียบ
  • ใช้จุดสอบเทียบชุดเดียวกันตรวจผล
  • สุ่มสัญญาณโดยไม่มีตัวกรองกัน alias

สรุป

  • ห่วงโซ่การวัดมีหลายขั้น ผลการวัดต้องมีทั้งค่าและความไม่แน่นอน
  • กำลังสองน้อยที่สุดใช้ทุกจุดสอบเทียบ และบอกความไม่เป็นเชิงเส้นผ่านค่าคลาดที่เหลือ
  • ความไม่แน่นอนรวมคำนวณด้วยสัมประสิทธิ์ความไวตามกฎการแพร่ของ GUM
  • ADC มีสัญญาณรบกวนจากการแบ่งระดับ LSB/√12 และต้องกรองก่อนสุ่มเพื่อกัน aliasing

แบบฝึกตรวจความเข้าใจ

  1. ADC 10 บิต แรงดันอ้างอิง 5 V มี LSB เท่าใด
  2. ถ้า โดย V/°C สัมประสิทธิ์ความไวของ เท่าใด
  3. ความไม่แน่นอนสามแหล่ง 0.3, 0.4 และ 0 °C รวมเป็นเท่าใด
  4. สัญญาณ 90 Hz สุ่มที่ 100 Hz ปรากฏที่ความถี่เท่าใด
  5. ทำไมต้องกรองสัญญาณก่อนเข้า ADC แทนการกรองในซอฟต์แวร์ภายหลัง
เฉลย
  1. mV
  2. °C/V
  3. °C
  4. Hz
  5. หลังสุ่มแล้ว ความถี่แฝงกับความถี่จริงมีค่าตัวอย่างเหมือนกันทุกจุด ซอฟต์แวร์แยกไม่ได้

สรุปสูตรสำคัญ

กฎการแพร่ความไม่แน่นอน (อินพุตไม่สัมพันธ์กัน)
ความละเอียดและสัญญาณรบกวนจากการแบ่งระดับของ ADC
ความถี่ที่ปรากฏเมื่อเกิด aliasing

แหล่งอ้างอิงหลัก

  1. JCGM. (2008). Evaluation of measurement data — Guide to the expression of uncertainty in measurement (JCGM 100:2008). BIPM. link
  2. Fraden, J. (2016). Handbook of modern sensors: Physics, designs, and applications (5th ed.). Springer. link
  3. NIST/SEMATECH. Linear least squares regression (section 4.1.4.1). e-Handbook of statistical methods. link
  4. Kester, W. Taking the mystery out of the infamous formula, "SNR = 6.02N + 1.76dB," and why you should care (Tutorial MT-001). Analog Devices. link
  5. Shannon, C. E. (1949). Communication in the presence of noise. Proceedings of the IRE, 37(1), 10–21. link

อ่านเพิ่มเติม

ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล

ในชั้นเรียน / ภาคสนาม

ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย

หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz

แบบทดสอบประจำโมดูล

แบบทดสอบนี้ใช้ตรวจความเข้าใจ (formative) ไม่ใช่การสอบเก็บคะแนน

โดเมนความรู้: เซนเซอร์และระบบสมองกลฝังตัว · คณิตศาสตร์ ฟิสิกส์ และสถิติ