ควบคุมอุณหภูมิแบบ PID + PWM
ควบคุมอุณหภูมิแบบ P (สัดส่วน) — อ่านค่าจากเซนเซอร์อนาล็อก, สั่ง heater ผ่าน PWM ด้วย duty ที่คำนวณจาก (SV − PV) × Kp. ปรับ setpoint และ gain ได้จาก HMI
หลักการ
โปรแกรมควบคุมอุณหภูมิแบบ P-only + PWM ที่เขียน handmade (ไม่ใช้ EPID wizard) เหมาะสำหรับ:
- เครื่องอุ่นของเหลว
- เตาอบขนาดเล็ก
- ระบบอบแห้งที่ไม่ต้องการความแม่นยำระดับ ±0.1°C
สูตร PID / Control Law
Error(t) = SV − PV(t)
Output(t) = Kp × Error(t) (P-only, simplest form)
Duty(t) = clamp(Output(t), 0, Period) (จำกัด 0–100%)
Y0 = (PWM_counter < Duty) ? ON : OFF (PWM output)
โดย:
- PV (Process Value) อ่านจาก analog input (PT-100 / TC / 4–20 mA)
- SV (Setpoint) ตั้งจาก HMI
- Kp (Proportional gain) ยิ่งสูง → ตอบสนองเร็วแต่อาจแกว่ง
- Period = 2.0 s (ช่วงเวลาของ PWM, ตั้งที่ TV200 K200)
Register Map
| Register | ค่า | หมายเหตุ |
|---|---|---|
| D10 | PV (เช่น 250 = 25.0°C) | อ่านจาก F-4PT / F-4TC / F-4AI |
| D12 | SV (เช่น 500 = 50.0°C) | ตั้งจาก HMI, default 500 |
| D14 | Kp (เช่น 20 = 2.0) | scaled ×10 เพื่อเก็บ 1 decimal |
| D20 | Error = SV − PV | คำนวณทุก scan |
| D22 | Duty cycle (0–2000) | clamped |
| Y0 | Heater (ผ่าน SSR) | PWM output |
เหตุผลที่ไม่ใช้ EPID
EPID ของ SamSoar2022 ต้องกำหนดค่า Kp, Ti, Td, sampling time ผ่าน EPID Wizard ใน IDE ก่อน compile ไม่สามารถกำหนดทั้งหมดใน ladder โปรแกรมที่ import ผ่าน CSV ได้
โปรแกรมนี้จึงเขียน PID แบบ manual ที่ import แล้วใช้ได้ทันที (สามารถขยายเป็น PI หรือ PID เต็มด้วยการเพิ่ม integral/derivative terms ได้)
ขยายเป็น PID เต็ม
เพิ่ม D22 (Integral accumulator) และ D24 (Previous error) แล้วใช้สูตร:
P = Error × Kp
I(t) = I(t−1) + Error × Ki × Δt
D(t) = (Error(t) − Error(t−1)) × Kd / Δt
Output = P + I + D (แล้ว clamp)
ดู คำแนะนำ PID Control สำหรับ derivation และ tuning
โปรแกรม PLC
I/O Assignment
| Address | Role | Note |
|---|---|---|
| X0 | Enable button (NO) | ปุ่ม start PID loop |
| X1 | Stop button (NC) | |
| D10 | PV (Process Value, from analog input) | ต่อกับ PT-100 / TC / 4-20mA sensor ผ่าน analog extension (F-4PT, F-4TC, F-4AI). Scale: 1 decimal (250 = 25.0°C) |
| D12 | SV (Setpoint, tunable from HMI) | Default 500 (50.0°C). เขียนค่าใหม่จาก HMI เพื่อเปลี่ยน setpoint |
| Y0 | Heater output (PWM) | ขับ SSR ผ่าน transistor output ของ PLC |
Parameters ที่ปรับได้
D12default: 500 (50.0°C)Setpoint — ตั้งจาก HMI ได้ตลอด
D14default: 20 (Kp = 2.0)Proportional gain. เพิ่มถ้าตอบสนองช้า, ลดถ้าแกว่ง
TV200 / K200default: 2.0 sPWM period. สั้นลง = ตอบสนองเร็วแต่ต้อง SSR + โหลด switching เร็ว. ยาวขึ้น = smoother แต่ lag เพิ่ม
อุปกรณ์ที่แนะนำ
คำถามที่พบบ่อย
ทำไมไม่ใช้คำสั่ง EPID?
EPID ต้องกำหนดค่า Kp, Ti, Td, sampling time ผ่าน EPID Wizard ใน SamSoar2022 IDE ซึ่งไม่สามารถฝังใน CSV import ได้ โปรแกรมนี้ถึงเลือกเขียน P-control แบบ manual ที่ import แล้วใช้ได้เลย
ต้องการเพิ่ม Integral + Derivative ให้เป็น PID เต็มทำยังไง?
เพิ่ม D22 (I accumulator), D24 (Prev error), D26 (D component). สูตร I: D22 += (Error × Ki × dt). D: D26 = (Error − D24) × Kd / dt. แล้วรวม: D22 + D26 + P term → clamp → PWM. ดูรายละเอียดใน docs/plc/advanced-techniques/plc-pid-control
ทำไมต้อง clamp duty 0-2000?
PWM output ต้องไม่เกิน period. ถ้า duty > period, Y0 ติดตลอด = 100% duty. ถ้าให้คำนวณได้ติดลบ, PWM จะไม่ทำงาน. Clamp ช่วยป้องกันทั้ง 2 กรณี
ทำไม Kp = 20 (ไม่ใช่ 2.0 ตรงๆ)?
Samkoon PLC ใช้ integer math เป็นหลัก. D14 = 20 แทน Kp = 2.0 (คูณ 10 เพื่อรักษา 1 decimal precision). เวลาคำนวณ: Duty = Error × D14 ได้ผลลัพธ์ที่ scale ถูกต้อง
อุปกรณ์ที่ต้องการนอกจาก PLC?
1) Analog input module — F-4PT (PT-100 RTD), F-4TC (Thermocouple), หรือ F-4AI (4-20mA). 2) SSR สำหรับขับ heater (เพราะ PLC transistor output รับกระแสไม่ได้สูง). 3) Heater element.
เอกสารที่เกี่ยวข้อง
วิธีนำเข้าไฟล์ใน SamSoar2022
- ดาวน์โหลดไฟล์
pid-temperature-pwm.csvจากแท็บ CSV ด้านบน - เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
- เมนู File → Import → เลือกไฟล์
.csvที่เพิ่งดาวน์โหลด - กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
- ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC

