ตอนที่ 13: ถอดสมการคณิตศาสตร์เบื้องหลัง PID Controller: เปลี่ยนตัวเลขให้เป็นพฤติกรรมทางฟิสิกส์

1. 🎯 ตอนที่ 13: ถอดสมการคณิตศาสตร์เบื้องหลัง PID Controller: เปลี่ยนตัวเลขให้เป็นพฤติกรรมทางฟิสิกส์
2. 📖 เปิดฉาก (The Hook)
สวัสดีครับน้องๆ และเพื่อนวิศวกรนักพัฒนาทุกท่าน! ยินดีต้อนรับกลับสู่ซีรีส์ เจาะลึกวิศวกรรมระบบควบคุม (Control Systems) จาก 101 ถึง Advance สไตล์วิศวกรรุ่นพี่ครับ
ในตอนก่อนๆ เราได้เห็นภาพรวมการทำงานของ P, I และ D กันไปแล้วแบบคอนเซปต์กว้างๆ แต่ในฐานะที่เราเป็น Control Systems Engineer หรือผู้ที่ต้องลงมือเขียนโค้ดฝังสมองกล (Firmware) ให้กับหุ่นยนต์ เราจะหนี “คณิตศาสตร์” ไปไม่ได้เลยครับ
หลายคนพอเห็นเครื่องหมายอินทิเกรต (Integral) หรือดิฟเฟอเรนเชียล (Derivative) ในตำราก็อาจจะเริ่มปวดหัวและอยากปิดหนังสือหนี แต่เชื่อพี่เถอะครับว่า คณิตศาสตร์ในระบบควบคุม ไม่ใช่ตัวเลขที่ลอยอยู่บนหอคอยงาช้าง แต่มันคือ “ภาษา” ที่ใช้บรรยาย “พฤติกรรมทางฟิสิกส์ (Physical Behavior)” ของเครื่องจักร วันนี้พี่จะพาไปถอดรหัสสมการระดับตำนานตัวนี้ ให้กลายเป็นเรื่องที่เข้าใจง่ายและจับต้องได้ เหมือนการขับรถเลยครับ!
3. 🧠 แก่นวิชา (Core Concepts)
สมการของ PID Controller ถูกสร้างขึ้นมาเพื่อคำนวณหา “สัญญาณสั่งงาน (Control Output)” ที่จะส่งไปให้ Actuator (เช่น มอเตอร์ หรือ ฮีตเตอร์) โดยอาศัยข้อมูลจาก “ความผิดพลาด (Error)” เพียงอย่างเดียว
เรามากางสมการคลาสสิก (Parallel Form) ในโดเมนเวลา (Time Domain) ดูกันก่อนครับ: $$ u(t) = K_p e(t) + K_i \int_{0}^{t} e(\tau) d\tau + K_d \frac{de(t)}{dt} $$
โดยที่ $e(t)$ คือ Error ซึ่งเกิดจาก $Setpoint - Process Variable$ ณ เวลา $t$
ทีนี้ เรามาถอดรหัสตัวแปร $K_p, K_i, K_d$ ให้กลายเป็นฟิสิกส์กันครับ:
- $K_p e(t)$ (Proportional - สัดส่วน): “พลังแห่งสปริง”
- คณิตศาสตร์: เอาค่าคงที่ $K_p$ คูณกับ Error ดื้อๆ
- ฟิสิกส์: เปรียบเสมือนการติด “สปริง” ดึงเป้าหมายเอาไว้ ยิ่งรถคุณอยู่ห่างจากเป้าหมาย (Error มาก) สปริงก็ยิ่งยืดออกและออกแรงดึงกลับแรงขึ้น (คันเร่งถูกเหยียบลึกขึ้น) แต่พอยิ่งใกล้เป้าหมาย แรงดึงก็ยิ่งน้อยลง
- $K_i \int e(\tau) d\tau$ (Integral - ปริพันธ์): “พลังแห่งการชดเชยน้ำหนัก”
- คณิตศาสตร์: การหาพื้นที่ใต้กราฟของ Error ที่สะสมมาตั้งแต่อดีตจนถึงปัจจุบัน คูณด้วยค่า $K_i$
- ฟิสิกส์: สมมติรถของคุณขับขึ้นเขา คันเร่งจากสปริง ($P$) อาจจะออกแรงไม่พอทำให้รถหยุดนิ่งกลางเนิน (Steady-state error) ตัว $I$ จะทำหน้าที่จดจำว่า “รถหยุดนิ่งมานานแค่ไหนแล้ว” และค่อยๆ สะสมพลังงานเพิ่มคันเร่งขึ้นเรื่อยๆ จนกว่ารถจะขยับไปถึงยอดเขาได้สำเร็จ เป็นตัวการันตีว่าเป้าหมายจะต้องถูกชน 100%
- $K_d \frac{de(t)}{dt}$ (Derivative - อนุพันธ์): “พลังแห่งโช้คอัพ (Damper)”
- คณิตศาสตร์: การหาความชัน (Slope) หรืออัตราการเปลี่ยนแปลงของ Error ในเสี้ยววินาทีนั้น คูณด้วยค่า $K_d$
- ฟิสิกส์: ถ้ารถของคุณพุ่งเข้าหาเป้าหมายเร็วเกินไป (Error ลดลงอย่างรวดเร็ว ความชันติดลบ) สมการก้อนนี้จะสร้างแรง “สวนทาง” กับการเคลื่อนที่ เปรียบเสมือน “โช้คอัพหน่วง” หรือการแตะเบรกเพื่อป้องกันไม่ให้รถพุ่งทะลุเป้าหมาย (Overshoot)

4. 🧮 ร่ายมนต์สมการและโค้ดควบคุม (The Math & Implementation)
เมื่อเราต้องนำสมการแคลคูลัสแบบต่อเนื่อง (Continuous-time) มาเขียนลงในไมโครคอนโทรลเลอร์ที่เป็นระบบดิจิทัล (Discrete-time) เราต้องแปลงร่างมันให้อยู่ในรูปของสมการผลต่าง (Difference Equation) ครับ
การแปลงแคลคูลัสเป็นโค้ดคอมพิวเตอร์ ทำได้ง่ายๆ ดังนี้:
- $\int e(t)dt$ กลายเป็นการบวกสะสมแบบง่ายๆ (Euler integration):
integral_sum += error * dt - $\frac{de(t)}{dt}$ กลายเป็นการหาความต่างของ Error หารด้วยเวลา:
(error - prev_error) / dt
ลองมาดูตัวอย่างการเขียนโค้ดภาษา C/C++ สไตล์วิศวกร Embedded ฝังสมองกลกันครับ:
// ตัวแปรพารามิเตอร์ของระบบ (Global Variables)
float Kp = 2.0; // Proportional Gain (ความแข็งของสปริง)
float Ki = 0.5; // Integral Gain (ความดุดันในการสะสมอดีต)
float Kd = 0.1; // Derivative Gain (ความฝืดของโช้คอัพหน่วง)
float integral_sum = 0.0; // ตัวเก็บค่าสะสมพื้นที่ใต้กราฟ
float prev_error = 0.0; // ตัวเก็บค่า Error ของรอบที่แล้ว
// ฟังก์ชันนี้จะถูกเรียกทุกๆ รอบเวลา dt (เช่น ทุกๆ 10ms หรือ 0.01 วินาที)
float PID_Compute(float setpoint, float measured_value, float dt) {
// 1. คำนวณ Error ปัจจุบัน (e(t))
float error = setpoint - measured_value;
// 2. คำนวณ P-Term (พลังแห่งปัจจุบัน)
float P_out = Kp * error;
// 3. คำนวณ I-Term (พลังแห่งอดีต)
integral_sum += (error * dt); // สะสมพื้นที่สี่เหลี่ยมทีละแผ่น
float I_out = Ki * integral_sum;
// 4. คำนวณ D-Term (พลังแห่งอนาคต)
float derivative = (error - prev_error) / dt; // หาความชัน
float D_out = Kd * derivative;
// เก็บ Error ปัจจุบันไว้เป็นอดีตสำหรับรอบถัดไป
prev_error = error;
// 5. รวมพลัง 3 เทอม เพื่อเป็นสัญญาณส่งไปขับ Actuator (u(t))
float output = P_out + I_out + D_out;
return output;
}5. 🛡️ เคล็ดลับจากคัมภีร์ลับ (Under the Hood / Pro-Tips)
ในโลกของการออกแบบระบบควบคุม มีเรื่องน่าปวดหัวอย่างหนึ่งที่วิศวกรมือใหม่มักจะพลาด นั่นคือ “รูปแบบของสมการ PID” ครับ!
สมการที่เราถอดรหัสกันด้านบนเรียกว่า Parallel Form (รูปแบบขนาน หรือ Ideal Form) ซึ่งค่า $K_p, K_i, K_d$ จะแยกเป็นอิสระต่อกันโดยสิ้นเชิง
แต่ถ้าคุณไปซื้อ PLC หรืออุปกรณ์ Industrial Controller แบรนด์ดังๆ มาใช้ คุณมักจะเจอสมการในรูปแบบ Standard Form (หรือ ISA Form) ที่มีหน้าตาแบบนี้ครับ: $$ u(t) = K_p \left( e(t) + \frac{1}{T_i} \int_{0}^{t} e(\tau) d\tau + T_d \frac{de(t)}{dt} \right) $$ ในรูปแบบนี้ $K_p$ จะถูกดึงเป็นตัวร่วมออกมาอยู่นอกวงเล็บ!
- $T_i$ เรียกว่า Integral Time (เวลาปริพันธ์)
- $T_d$ เรียกว่า Derivative Time (เวลาอนุพันธ์)
ทำไมถึงสำคัญ? เพราะถ้าคุณจูนค่าในโปรแกรมจำลองที่ใช้สมการแบบ Parallel ($K_i, K_d$) แล้วเอาตัวเลขไปป้อนใส่ PLC ที่ใช้สมการแบบ Standard ($T_i, T_d$) เครื่องจักรคุณจะรวนทันทีครับ! ความสัมพันธ์ในการแปลงค่าระหว่าง 2 รูปแบบนี้คือ:
- $K_i = \frac{K_p}{T_i}$
- $K_d = K_p \cdot T_d$
ดังนั้น ก่อนจะป้อนพารามิเตอร์ใดๆ ให้กับ Controller อ่าน Datasheet ให้ดีก่อนนะครับว่าเขาใช้สมการรูปแบบไหน!
6. 🏁 บทสรุป (To be continued…)
จะเห็นได้ว่าสมการคณิตศาสตร์ที่ดูน่ากลัวของ PID Controller แท้จริงแล้วก็คือการแปลงลอจิกและสัญชาตญาณของฟิสิกส์ (สปริง, มวล, โช้คอัพ) ให้ออกมาเป็นภาษาคอมพิวเตอร์นั่นเอง การที่เราเข้าใจความหมายเบื้องหลังตัวแปร $K_p, K_i, K_d$ จะทำให้เรามองเห็นภาพว่า เวลาที่หุ่นยนต์ของเรามีอาการสั่น หรือพุ่งเลยเป้าหมาย เราควรจะไปปรับที่ตัวแปรไหน
แต่การจะปรับค่าพารามิเตอร์เหล่านี้ให้พอดีเป๊ะ คงจะมานั่งสุ่มเดากันไม่ไหวแน่ๆ ในตอนต่อไป พี่จะพาไปเปิดคัมภีร์การจูน (Loop Tuning) ที่วิศวกรทั่วโลกนิยมใช้กัน อย่างวิธีการของ Ziegler-Nichols รอติดตามกันได้เลยครับ!
ต้องการที่ปรึกษาด้านการออกแบบระบบควบคุม (Control Systems), หุ่นยนต์อัตโนมัติ (Robotics) หรือพัฒนาระบบ Automation ขั้นสูงให้กับโรงงานของคุณ? ทีมงาน WP Solution พร้อมให้บริการออกแบบและติดตั้งระบบแบบครบวงจร ดูรายละเอียดบริการของเราได้ที่: www.wpsolution2017.com หรือพูดคุยปรึกษาเบื้องต้นได้ที่ Line: wisit.p