โมดูล 2/5 · สัปดาห์ 4–6 · 27 ชม.

ผลตอบสนองและเสถียรภาพ

UAT 206 ระบบควบคุมและออโตไพลอตเบื้องต้น

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

บทเรียน

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

  1. อธิบายค่าวัดผลตอบสนองแบบขั้น เช่น เวลาขึ้น overshoot และเวลาเข้าที่
  2. คำนวณ overshoot และเวลาเข้าที่ของระบบอันดับสองจากอัตราส่วนความหน่วงและความถี่ธรรมชาติ
  3. อธิบายเสถียรภาพจากตำแหน่งขั้วบนระนาบ s
  4. คำนวณผลของเวลาหน่วงต่อ phase margin และหาเวลาหน่วงวิกฤต

ความรู้พื้นฐานที่ควรมี: UAT 206 โมดูล 1

ทำไมต้องรู้

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

ค่าวัดผลตอบสนองแบบขั้น

Åström และ Murray (2021) นิยามค่าวัดหลักไว้ดังนี้

  • เวลาขึ้น (rise time, ) เวลาที่ผลตอบสนองขึ้นจาก 10% ถึง 90% ของค่าสุดท้าย
  • overshoot () ส่วนที่เกินค่าสุดท้ายสูงสุด คิดเป็นสัดส่วน
  • เวลาเข้าที่ (settling time, ) เวลาที่ผลตอบสนองเข้ามาอยู่ในแถบ ±2% ของค่าสุดท้ายและไม่ออกไปอีก

สำหรับระบบอันดับสองมาตรฐาน และ ตำราให้ตัวอย่างว่า มี overshoot 16% และ มี 4%

กราฟผลตอบสนองแบบขั้นตามเวลา 0 ถึง 3 วินาที สี่เส้น ซีตา 0.3 สีชมพูเกินขึ้นไปราว 1.37 แล้วแกว่ง ซีตา 0.5 สีทองเกินราว 1.16 ซีตา 0.707 สีฟ้าเกินเล็กน้อย ซีตา 1.0 สีเขียวขึ้นช้าที่สุดและไม่เกิน เส้นประแนวนอนที่ 1
ภาพที่ 1 ผลตอบสนองแบบขั้นของระบบอันดับสองที่ ζ ต่าง ๆ

ตัวอย่างที่ 1 จำลองเทียบกับสูตร

ระบบอันดับสองความถี่ธรรมชาติ 4 rad/s จำลองด้วยขั้นเวลา 1 ms

import math

W0, DT, T_END = 4.0, 0.001, 6.0

def simulate(zeta):
    y = v = 0.0
    out = []
    for _ in range(int(T_END / DT)):
        a = W0 ** 2 * (1 - y) - 2 * zeta * W0 * v
        v += a * DT
        y += v * DT
        out.append(y)
    return out

for zeta in (0.3, 0.5, 0.707, 1.0):
    ys = simulate(zeta)
    over = max(ys) - 1
    formula = math.exp(-math.pi * zeta / math.sqrt(1 - zeta ** 2)) if zeta < 1 else 0.0
    ts = next(i * DT for i in range(len(ys)) if all(abs(v - 1) <= 0.02 for v in ys[i:]))
    print(f"zeta {zeta:<5}: overshoot {max(over, 0):6.1%} (formula {formula:5.1%}), "
          f"settling {ts:.2f} s (4/(zeta*w0) = {4 / (zeta * W0):.2f} s)")
zeta 0.3  : overshoot  37.2% (formula 37.2%), settling 2.81 s (4/(zeta*w0) = 3.33 s)
zeta 0.5  : overshoot  16.3% (formula 16.3%), settling 2.02 s (4/(zeta*w0) = 2.00 s)
zeta 0.707: overshoot   4.3% (formula  4.3%), settling 1.49 s (4/(zeta*w0) = 1.41 s)
zeta 1.0  : overshoot   0.0% (formula  0.0%), settling 1.46 s (4/(zeta*w0) = 1.00 s)

overshoot จากการจำลองตรงกับสูตร ส่วนเวลาเข้าที่จากสูตรเป็นค่าประมาณ ใกล้เคียงที่ ราว 0.5–0.7 แต่คลาดชัดที่ และ 1.0 งานโดรนมักต้องการ ราว 0.6–0.8 คือเกินเล็กน้อยแต่เร็ว

เสถียรภาพและขั้ว

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

ระนาบ s แกนนอน Re แกนตั้ง Im ครึ่งซ้ายระบายสีเขียวเขียนว่าเสถียร เครื่องหมายกากบาทสี่คู่ ซีตา 0.3 สีชมพูอยู่ใกล้แกนตั้งและสูง ซีตา 0.5 สีทอง ซีตา 0.707 สีฟ้าอยู่ที่มุม 45 องศา ซีตา 1.0 สีเขียวเป็นขั้วคู่บนแกนนอน ทุกคู่ห่างจุดกำเนิดเท่ากัน
ภาพที่ 2 ตำแหน่งขั้วบนระนาบ s

เวลาหน่วงกินเฟส

ระบบจริงมี เวลาหน่วง จากตัวกรองเซนเซอร์ การประมวลผล และมอเตอร์ Åström และ Murray แสดงว่าเวลาหน่วง ไม่เปลี่ยนขนาดของสัญญาณ แต่เพิ่มความล้าหลังของเฟส ที่ความถี่ ทำให้ phase margin ลดลง ตำราแนะนำ phase margin ที่เหมาะสมราว 30–60° ถ้าเหลือศูนย์ ระบบจะแกว่งไม่หยุด

ตัวอย่างที่ 2 เวลาหน่วงในลูปอัตราหมุน

แบบจำลองอย่างง่ายของลูปอัตราหมุน ที่ rad/s ความถี่ตัดข้ามเท่ากับ phase margin เท่ากับ (เป็นองศา)

import math

K, DT = 20.0, 0.0005

def run(delay):
    n = int(round(delay / DT))
    buf = [0.0] * n
    y, out = 0.0, []
    for _ in range(int(3 / DT)):
        seen = buf[0] if n else y
        y += DT * K * (1 - seen)
        if n:
            buf = buf[1:] + [y]
        out.append(y)
    return out

print(f"critical delay (phase margin 0) = {math.pi / (2 * K) * 1000:.1f} ms")
for delay in (0.0, 0.02, 0.05, 0.075, 0.09):
    ys = run(delay)
    pm = 90 - K * delay * 180 / math.pi
    tail = max(abs(1 - v) for v in ys[-1000:])
    print(f"delay {delay * 1000:>4.0f} ms: phase margin {pm:5.1f} deg, peak {max(ys):6.2f}, "
          f"error in last 0.5 s {tail:.3f}")
critical delay (phase margin 0) = 78.5 ms
delay    0 ms: phase margin  90.0 deg, peak   1.00, error in last 0.5 s 0.000
delay   20 ms: phase margin  67.1 deg, peak   1.00, error in last 0.5 s 0.000
delay   50 ms: phase margin  32.7 deg, peak   1.50, error in last 0.5 s 0.000
delay   75 ms: phase margin   4.1 deg, peak   2.00, error in last 0.5 s 0.319
delay   90 ms: phase margin -13.1 deg, peak  25.51, error in last 0.5 s 24.513

เวลาหน่วงเพียง 50 ms ทำให้ระบบที่ไม่เกินเป้าเลยเกินไปถึงครึ่งหนึ่ง เมื่อใกล้ 78.5 ms ระบบแกว่งไม่ยอมนิ่ง และเกินค่านั้นระบบแกว่งโตไม่หยุด นี่คือเหตุผลที่ตัวกรองไจโรที่หน่วงมากเกินไปทำให้โดรนสั่น แม้ค่า PID ไม่เปลี่ยน

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

ปฏิบัติการ: ค่าวัดผลตอบสนองและเวลาหน่วง

  1. ใช้โค้ดตัวอย่างที่ 1 ทดลอง สามค่า ดูว่า overshoot และเวลาเข้าที่เปลี่ยนอย่างไร
  2. วาดตำแหน่งขั้วของแต่ละกรณีบนกระดาษกราฟ เทียบกับภาพที่ 2
  3. ใช้โค้ดตัวอย่างที่ 2 เปลี่ยน แล้วหาเวลาหน่วงวิกฤตใหม่ เทียบกับสูตร
  4. ใน SITL เพิ่มเวลาหน่วงหรือลดความถี่ตัวกรองไจโรทีละน้อย สังเกตการแกว่งใน log
  5. บันทึกข้อสรุปว่าควรเลือก และ phase margin เท่าใดสำหรับโดรนในแล็บ

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

ระวัง

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

สรุป

  • ค่าวัดหลักคือ (10–90%), และ (±2%)
  • ระบบอันดับสอง และ
  • ระบบเสถียรเมื่อขั้วทุกตัวอยู่ครึ่งซ้ายของระนาบ s
  • เวลาหน่วงกินเฟส ทำให้ phase margin ลดลงจนระบบแกว่งได้

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

  1. มี overshoot ราวกี่เปอร์เซ็นต์
  2. และ rad/s เวลาเข้าที่โดยประมาณเท่าใด
  3. ขั้วที่ บอกอะไรเกี่ยวกับระบบ
  4. ลูปที่ความถี่ตัดข้าม 20 rad/s มีเวลาหน่วง 10 ms เฟสลดไปกี่องศา
  5. จากข้อ 4 ถ้า phase margin เดิม 90° จะเหลือเท่าใด
เฉลย
  1. ราว 16%
  2. s
  3. ไม่เสถียร เพราะส่วนจริงเป็นบวก ผลตอบสนองจะแกว่งโตขึ้น
  4. rad
  5. ราว 78.5°

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

overshoot ของระบบอันดับสอง
เวลาเข้าที่ (2%)
เฟสที่เวลาหน่วงกินไป

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

  1. Åström, K. J., & Murray, R. M. (2021). Feedback systems: An introduction for scientists and engineers (2nd ed.). Princeton University Press. link
  2. Nise, N. S. (2019). Control systems engineering (8th ed.). Wiley. link
  3. Ogata, K. (2010). Modern control engineering (5th ed.). Pearson.

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

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

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

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

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

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

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

โดเมนความรู้: การควบคุม ออโตไพลอต และการนำทาง · คณิตศาสตร์ ฟิสิกส์ และสถิติ