บทที่ M06 · PID Control · Ziegler-Nichols

PID & Auto-Tuning อุณหภูมิ

จะคุมอุณหภูมิให้ "นิ่ง" ตามที่ตั้งไว้ไม่ใช่แค่เปิด-ปิดฮีตเตอร์ — ต้องใช้ PID บทนี้พาเข้าใจหลักการ PID, การจูนด้วย Ziegler–Nichols, และวิธี Auto-Tune ของ ตัวควบคุม Delta DTK4848 ผ่าน FX5U

ทำไมเปิด-ปิด (On/Off) ไม่พอ?

ลองคิดดู: ถ้าเราเปิดฮีตเตอร์เมื่ออุณหภูมิ < 60 °C และปิดเมื่อ > 60 °C — อุณหภูมิจะ แกว่ง รอบจุด setpoint ตลอด เพราะมีความล่าช้าของระบบ (Thermal lag)

On / Off Control (ไม่ใช้ PID) °C t SP 60°C ⚠️ Overshoot สูง · แกว่งตลอดไป PID Control °C t SP 60°C ✓ เข้าจุดเร็ว · นิ่งสนิท
เทียบ Response — On/Off แกว่งรอบ SP ตลอด · PID เข้าจุดเร็วและคงที่หลังจาก settle
Honeywell ON-OFF controller display
หน้าจอ Industrial Controller ที่ตั้งโหมด "ON-OFF CONTR ALG" — SP (Set Point) แสดงคู่กับ PV (Process Value)

PID คืออะไร — แบบไม่ต้องคำนวณ

PID controller block diagram
Block Diagram ของ PID Controller — Error = Setpoint − Output, ผ่าน P/I/D 3 ทาง รวมกันแล้วส่งเข้า Process

PID คือสูตร 3 ส่วน ที่รวมกันเพื่อตัดสินใจว่า "ตอนนี้ควรเปิดฮีตเตอร์กี่ %":

P · Proportional
"ตอนนี้ห่างจาก Setpoint แค่ไหน"
ยิ่งห่าง → ยิ่งสั่งให้ Output มาก. ถ้าตั้ง Kp สูง ระบบตอบสนองเร็ว แต่อาจ Overshoot
I · Integral
"สะสมข้อผิดพลาดที่ผ่านมา"
แก้ Steady-state error ที่ P ทำให้หายไม่ได้. Ti น้อย = สะสมเร็ว แต่ระบบอาจไม่นิ่ง
D · Derivative
"เปลี่ยนเร็วแค่ไหน"
มอง แนวโน้ม — ถ้ากำลังเข้า setpoint เร็วเกิน จะลดกำลังไว้. ลด Overshoot
PID derivative term formula
สูตร Derivative term — D_out = K_d · de(t)/dt — K_d คูณกับอัตราการเปลี่ยนแปลงของ error

ผลของพารามิเตอร์แต่ละตัว

เพิ่มพารามิเตอร์Rise TimeOvershootSettling TimeSS Error
Kp ↑↓ เร็วขึ้น↑ แย่ลงเปลี่ยนแปลงน้อย↓ ดีขึ้น
Ti ↓ (เพิ่ม I)↓ เร็วขึ้น↑ แย่ลง↑ แย่ลง= 0
Td ↑เปลี่ยนแปลงน้อย↓ ดีขึ้น↓ ดีขึ้นเปลี่ยนแปลงน้อย

วิธี Ziegler–Nichols (Closed-loop)

วิธีคลาสสิกที่ใช้ได้กับระบบจริงโดยไม่ต้องสร้างโมเดลคณิตศาสตร์ — เพียงทดลองหา 2 ค่า:

  1. ตั้งค่าเริ่ม
    • Ti = ∞ (ปิด I)
    • Td = 0 (ปิด D)
    • Kp = เริ่มจากค่าน้อย ๆ เช่น 0.5
  2. ค่อย ๆ เพิ่ม Kp ทีละนิด ทุกครั้งที่เพิ่ม → สังเกตการตอบสนอง — ใน Trend graph อุณหภูมิเริ่มจะ แกว่ง รอบ setpoint
  3. หา Ku (Ultimate Gain) ค่า Kp ที่ทำให้ระบบแกว่งแบบ คงที่ (sinusoidal sustained oscillation) — ไม่บานออก ไม่จางหาย
  4. วัด Pu (Ultimate Period) ระยะเวลาของ 1 รอบการแกว่ง (peak ถึง peak) — ใช้นาฬิกาจับ หรืออ่านจาก Trend graph
  5. คำนวณ Kp, Ti, Td จากตาราง ใช้ตารางมาตรฐาน Ziegler-Nichols ด้านล่าง

ตาราง Ziegler–Nichols Classic

ControllerKpTiTd
P0.50 × Ku
PI0.45 × KuPu / 1.2
PID (recommended)0.60 × KuPu / 2Pu / 8
PID (Pessen Integral)0.70 × KuPu / 2.53·Pu / 20
PID (Some Overshoot)0.33 × KuPu / 2Pu / 3
ตัวอย่างคำนวณ ถ้าเจอ Ku = 4.0, Pu = 30 วินาที → ใช้สูตร PID classic:
Kp = 0.60 × 4.0 = 2.4 · Ti = 30 / 2 = 15 s · Td = 30 / 8 = 3.75 s

เครื่องคำนวณ Ziegler-Nichols

กรอก Ku และ Pu ที่หาได้จากการทดลอง → ระบบคำนวณ Kp/Ti/Td สำหรับ Controller 5 รูปแบบให้ทันที · กดปุ่ม "ลองค่านี้ →" เพื่อโยนค่าลง Playground ด้านล่างและดูผล

🧪 ลองจูน PID เอง — Live Simulator

เลื่อน Kp / Ti / Td แล้วดูกราฟ Response ตอบสนองทันที — Plant model เป็น First-Order Heater (K=1, τ=25s, dead-time θ=5s) คล้ายเตาฮีตเตอร์จริง · Setpoint = 60°C, เริ่มจาก Ambient 25°C · กดปุ่ม Preset เพื่อเปรียบเทียบ (Kp ต่ำ-สูง, P only, PI, PID Ziegler-Nichols)

ลองเล่นดูครับ เริ่มจาก preset "Kp ต่ำเกิน" → จะเห็นว่าระบบช้าและถึง SP ไม่ได้ · เปลี่ยนเป็น "Kp สูงเกิน" → ระบบแกว่ง Overshoot สูง · ลอง "PI" → SS error หาย แต่ยังช้า · สุดท้าย "PID Ziegler-Nichols" (Kp=2.4, Ti=15s, Td=3.75s ตรงกับตัวอย่างด้านบน) — เข้าจุดเร็ว, Overshoot น้อย, นิ่ง

การใช้ Auto-Tune ที่ตัว Delta DTK4848

โชคดี — Delta DTK4848 มี Auto-Tune ในตัว ไม่ต้องไปนั่งเพิ่ม Kp ด้วยมือ มันจะทำขั้นตอน Relay Feedback Method (คล้าย ZN) ให้อัตโนมัติ

Delta DTK Temperature Controller showing 120.0°C
Delta DTK4848 — ตัวควบคุมอุณหภูมิแบบ PID มี Auto-Tune ในตัว (แสดง Process Value แดง + Set Point เขียว ที่ 120.0 °C)
  1. เตรียมระบบจริง ต่อ Thermocouple Type-K เข้า DTK4848 → ฮีตเตอร์ + SSR (Solid State Relay) ออก Output 1 — ตรวจสายให้แน่นและขั้วบวก-ลบของ Thermocouple ถูก
  2. ตั้ง Set Point ที่ DTK กดปุ่ม Set → ตั้งอุณหภูมิเป้าหมาย เช่น 60 °C
  3. เปิด Auto-Tune Mode เข้า Parameter Menu → หา AT (Auto-Tune) → เปลี่ยนค่าเป็น ON — หน้าจอจะเริ่มกระพริบ "AT"
  4. รอ ~5–15 นาที ระบบจะ ตั้งใจให้ฮีตเตอร์ on/off ค้าง เพื่อวัด Ku และ Pu → เสร็จแล้ว DTK จะ เซฟค่า Kp/Ti/Td อัตโนมัติ และดับสัญลักษณ์ AT
  5. ทดสอบผล เปลี่ยน Set Point เป็นค่าอื่น (เช่น 70 °C) — ดู Trend Graph ที่ HMI ว่ามาถึงค่าเร็วและนิ่ง
ระวัง — Auto-Tune ระบบต้องเข้า Steady State ก่อน! ห้ามกด AT ตอนเปิดเครื่องใหม่ที่อุณหภูมิห้อง — ต้องรอให้ระบบนิ่งที่ใกล้ Set Point ก่อน ไม่งั้นค่าที่คำนวณจะเพี้ยน

การควบคุมผ่าน FX5U — โดยไม่ใช้ AT ของ DTK

ถ้าเราอยาก เขียน PID เอง ใน FX5U (เช่น เพื่อใส่ใน HMI หรือควบคุม fan ร่วม) ใช้คำสั่งในตัว:

; FX5U มี Instruction PIDRUN — ตัวอย่าง:
;
;   PIDRUN s1 s2 s3 d
;     s1 = Set Point Register (D100)
;     s2 = Process Value Register (D102) — ค่าวัดจริง
;     s3 = Parameter Table Start (D200..D224 — 25 word)
;     d  = Output Register (D104) — ส่งไป SSR / Analog Out

LD    M0                  ; Enable PID
PIDRUN  D100  D102  D200  D104

; เซฟค่า PID parameter ลงตาราง D200..D224 ตอน Init
LD    M8002              ; Initial Pulse
MOV   K2400  D200        ; Kp = 2400 (ตัวคูณ 1000)
MOV   K15    D204        ; Ti = 15 s
MOV   K375   D208        ; Td × 100 = 3.75 s × 100
MOV   K1000  D210        ; Sampling time = 1000 ms
MOV   K0     D224        ; Output limit min
MOV   K10000 D226        ; Output limit max (= 100.00%)

เอกสารและวิดีโอ

ห้อง Lab Process Control จริง

ห้อง Lab Process Control ของภาควิชา EE ที่ใช้ทำการทดลอง — มีสถานีหลายตัวสำหรับการทดลอง Temperature, Flow, Level, Pressure

Process Control Lab room
ห้องปฏิบัติการ Process Control — แต่ละสถานีมี Controller, Pump, Tank, Valve ครบสำหรับการ Auto-Tune
PID lab process diagram
ผังกระบวนการ — Tank T01–T03, Pump P01–P02, Valves V01–V08, Sensor LT01/FT01/FT02
Pressure transmitters
Differential Pressure Transmitters ที่ใช้วัด Process Variable แบบ 4–20 mA
Pneumatic control valve with Honeywell positioner
Pneumatic Control Valve พร้อม Honeywell Positioner — Actuator ที่รับ Output 4–20 mA จาก PID Controller
Pneumatic Globe Valve with YT-1000 positioner
Pneumatic Globe Valve + YT-1000 Positioner — รับสัญญาณควบคุมจาก PID แล้วปรับช่องเปิดวาล์วตามสัดส่วน
Motorized ball valve
Motorized Ball Valve (AKK) — ทางเลือกแบบ Electric Actuator (ไม่ต้องใช้ลมอัด) — เหมาะกับงานเปิด/ปิด ON-OFF
4-20 mA Signal Isolator
Signal Isolator 4-20 mA — แยกกราวด์ระหว่าง Sensor และ PLC, ป้องกัน Ground loop ในงานควบคุม
กฏของหัวแม่มือ ถ้าระบบช้า (Thermal lag สูง) ลด Kp ลง · ถ้ามี Steady-state error ลด Ti · ถ้า Overshoot เยอะ เพิ่ม Td — ปรับทีละตัว ทีละน้อย