Basics PID Control Constant Current Based on Arduino UNO

ทดลองอีกหนึ่งโครงงานกับการควบคุมกระแสให้คงที่ ด้วยการใช้บอร์ด Arduino UNO โดยใช้โปรแกรมควบคุมแบบ PID Control และใช้สัญญาณ PWM ในการปรับค่ากระแสที่ต้องการควบคุมให้คงที่ และรับสัญญาณป้อนกลับ (Feedback signal) อะนาลอกเข้าที่ขา A0 เพื่ออ่านค่าที่เกิดขึ้นในการทำงาน (Process Value : PV) และเปรียบเทียบกับค่าที่กำหนดการทำงานของระบบ (Set Point : SP) ซึ่งจะได้เป็นค่าความผิดพลาด (Error) ให้โปรแกรมสามารถปรับค่าชดเชย (Compensation) ที่เหมาะสมได้อย่างถูกต้อง

PID Control Constant Current
รูปที่ 1 แสดงแรงดันไฟเลี้ยงในการทดลอง

จากในรูปที่ 1 มัลติมิเตอร์จะวัดค่าแรงดันของแหล่งจ่ายไฟเลี้ยง (Power supply) ที่ใช้ในการทดสอบเท่ากับ 6.58V ซึ่งจะจ่ายให้กับวงจรในโครงงาน (รูปวงจรของโครงงานจะแสดงตามรูปข้างล่างสุดของโครงงานนี้)

PID Control Constant Current
รูปที่ 2 ค่ากระแสที่วัดได้จากการกำหนดค่า Setpoint = 0.5A

รูปที่ 2 เป็นการวัดค่ากระแสที่เกิดขึ้น ซึ่งในที่นี้เราจะกำหนดกระแสที่ต้องการควบคุมไว้ที่ (Set point) 0.5A และผลที่ได้จากแหล่งจ่ายไฟที่ค่าแรงดัน 6.58V มีค่าเท่ากับ 0.49A

PID Control Constant Current
รูปที่ 3 แสดงสัญญาณพัลซ์วิดมอดูเลตชั่นเมื่อแรงดันอินพุตมีค่าประมาณ 6.58V

ในรูปที่ 3 ออสซิลโลสโคปจะแสดงลักษณะของสัญญาณพัลซ์วิดมอดูเลตชั่นที่เกิด จากการปรับค่าที่เหมาะสมที่สุด (ให้ค่า Process Value ใกล้เคียงหรือเท่ากับ Set Point) เพื่อให้รักษาปริมาณกระแสที่ต้องการเท่ากับ 0.5A ซึ่งจะสังเกตเห็นว่ามีค่า Ton ค่อนข้างกว้างเกือบ 100%

PID Control Constant Current
รูปที่ 4 ทดลองปรับค่าแรงดันของแหล่งจ่ายไฟเลี้ยงสูงขึ้น

รูปถัดมาที่ 4 จะเป็นการทดลองเพิ่มค่าแรงดันของแหล่งจ่ายไฟเลี้ยงเป็น 10V และทดลองการทำงานของวงจร ทั้งนี้เพื่อสังเกตการตอบสนองของระบบเมื่อแรงดันอินพุตไม่คงที่

PID Control Constant Current
รูปที่ 5 แสดงค่ากระแสที่วัดได้เมื่อแรงดันอินพุตเพิ่มขึ้นมาที่ 10V

รูปที่ 5 แสดงค่ากระแสที่วัดได้เมื่อที่แรงดันอินพุตเพิ่มขึ้นที่ 10V จะมีค่าเท่ากับ 0.52A ซึ่งผลที่ได้มีค่าสูงกว่าค่าที่เราต้อง (Setpoint) เล็กน้อยประมาณ 0.02A ถือว่ายังยอมรับได้

PID Control Constant Current
รูปที่ 6 ลักษณะของสัญญาณพัลวิดมอดูเลตชั่นที่ตอบสนองแรงดันอินพุต 10V

รูปที่ 6 จะสังเกตเห็นว่าลักษณะของสัญญาณที่เกิดขึ้น เมื่อแรงดันอินพุตเพิ่มขึ้นค่าดิวตี้ไซเคิลลดลง เมื่อเทียบกับค่าแรงดันของแหล่งจ่ายเท่ากับ 6.58V ทั้งนี้เพื่อปรับการตอบสนองต่อค่าแรงดันอินพุตที่เปลี่ยนแปลงและรักษาค่ากระแสที่เรากำหนดให้คงที่

PID Control Constant Current
รูปที่ 7 แสดงการเพื่มแรงดันอินพุตที่ 15V

รูปที่ 7 ลักษณะเดียวกันกับการทดลองที่ผ่านมา เมื่อทดลองปรับค่าแรงดันของแหล่งจ่ายเพิ่มขึ้นเป็น 15.02V และสังเกตลักษณะการตอบสนองของการทำงาน

PID Control Constant Current
รูปที่ 8 ค่ากระแสที่วัดได้เมื่อเพิ่มแรงดันอินพุตไปที่ 15V

รูปที่ 8 แสดงปริมาณกระแสที่เกิดขึ้น เมื่อปรับแรงดันของแหล่งจ่ายไฟเลี้ยงเป็น 15.02V จะมีค่าเท่ากับ 0.55A

PID Control Constant Current
รูปที่ 9 สัญญาณพัลซ์วิตธ์มอดูเลตที่ตอบสนองต่อแรงดันอินพุต 15V

รูปที่ 9 ลักษณะของสัญญาณจะมีค่าดิวตี้ไซเคิลลดลง เมื่อเทียบกับค่าแรงดันของการทดลองที่ผ่านมา และในการทดลองจ่ายแรงดันไฟเลี้ยงเพิ่มไปที่ 20.01V ในรูปถัดไปข้างล่างนี้จะให้ผลการทดลองที่คล้ายกัน

PID Control Constant Current
รูปที่ 10 แรงดันไฟเลี้ยงที่ทดลองเพิ่มขึ้นมาที่ประมาณ 20V
PID Control Constant Current
รูปที่ 11 ปริมาณกระแสที่เกิดขึ้นที่ไฟเลี้ยง 20.01V มีค่าเท่ากับ 0.58A

รูปที่ 11 ปริมาณกระแสที่เกิดขึ้นเมื่อไฟเลี้ยงมีค่าประมาณ 20.01V มีค่าเท่ากับ 0.58A มีค่าความผิดพลาดที่ 0.08A

PID Control Constant Current
รูปที่ 12 สัญญาณพัลวิดธ์มอดูเลตชั่นที่เกิดขึ้น

รูปที่ 12 เป็นลักษณะของสัญญาณพัลซ์วิดมอดูเลตชั่นจะมีค่าดิวตี้ไซเกิลลดลง และค่าความผิดพลาดเล็กน้อยที่ 0.08A

PID Control Constant Current
รูปที่ 13 ลักษณะของการทดลองโครงงาน

ในรูปที่ 13 จะเป็นการต่อวงจรที่ใช้ในการทดสอบทั้งหมดและต่อเข้าด้วยกัน ซึ่งช่วงระหว่างการทดลองนั้น ตัวต้านทาน 10 โอห์ม (โหลด) จะค่อนข้างร้อนจึงต้องใช้พัดลมมาเป่าเพื่อระบายความร้อนให้ลดลง

/********************************************************
 * PID Basic Example
 * Reading analog input 0 to control analog PWM output 3
 * Application for Current Contance Control
 ********************************************************/

#include <PWM.h>
#include <PID_v1.h>

int32_t frequency = 35000;  //frequency (in Hz)
double Setpoint, Input, Output;
double Kp=3, Ki=0.2, Kd=0;  

PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);  

void setup()
{
  Serial.begin(9600);
  InitTimersSafe(); 
  bool success = SetPinFrequencySafe(3,frequency);
    
  Setpoint = 115;  // 120 is SET Current load = 0.5A 
  myPID.SetMode(AUTOMATIC);   //turn the PID on
}

void loop()
{
  Input = analogRead(A0);
 // Serial.println(Input);  // Debuger Input feedback 
  myPID.Compute();
 // analogWrite(PIN_OUTPUT, Output);
  pwmWrite(3,Output);
 // Serial.println(Output); // Debuger PWM Signal Driver MOSFET 
 
}

*** Arduino Library PWM —-> Arduino PWM Frequency Library

*** Arduino Library PID Control —-> Arduino-PID-Library

PID Control Constant Current
รูปที่ 14 ลักษณะของการต่อวงจรต่างๆ ที่ใช้ในการทดลอง

จากรูปข้างบนที่ 14 เป็นลักษณะของการต่อวงจรต่างๆ ที่ใช้ในการทดลองโดยอุปกรณ์ที่จะหน้าที่เป็นสวิตชิ่ง คือเพาเวอร์มอสเฟต STP105N3LL โดยจะสัญญาณควบคุมมาแบบพัลซ์วิดมอดูเลตจากขา 3 และใช้ตัวต้านทาน 1 โอห์ม 1 วัตต์ทำหน้าที่ตรวจจับกระแสที่เกิดขึ้น โดยแรงดันที่ตกคร่อมตัวต้านทานนี้จะผ่านวงจรกรองความถี่ต่ำผ่าน (Low Pass Filter) อีกครั้งก่อนป้อนเข้าที่ขา A0 ซึ่งขานี้จะเป็นขารับสัญญาณป้อนกลับ

จากการทดลองที่ผ่านมานั้นกล่าวโดยสรุปคือ การควบคุมกระแสให้คงที่ด้วยการเขียนโปรแกรม PID Control ให้กับบอร์ด Arduino UNO นั้น โปรแกรมจะพยายามควบคุมค่ากระแสให้คงที่ตามที่เราต้องการ (Set Point) ถึงแม้ว่าแรงดันของแหล่งจ่ายไฟเลี้ยงจะเกิดการเปลี่ยนแปลงก็ตาม (6.58V-20.01V) โดยค่าที่ได้นั้นอาจจะมีค่าความผิดพลาดบ้างเล็กน้อย ซึ่งทั้งนี้ขึ้นอยู่กับเราว่าเหมาะสมที่จะสามารถนำไปประยุกต์ใช้งานได้มากเพียงใด

ข้อมูลเพิ่มเติมและโปรแกรมที่ใช้ในการทดลองดาวน์โหลดได้ที่

  1. https://www.youtube.com/watch?v=vd8ut0kkoyU
  2. https://www.ledsupply.com/blog/constant-current-led-drivers-vs-constant-voltage-led-drivers/
  3. https://www.arrow.com/en/research-and-events/articles/product-roundup-led-power-supply