PID Control Buck Converter By using Arduino UNO

โครงงานนี้เป็นการทดลองควบคุมแรงดันเอาต์พุตให้คงที่ สำหรับวงจรบักคอนเวอร์เตอร์แบบสวิตชิ่ง (Switching Buck Converter) ด้วยการใช้ไมโครคอนโทรลเลอร์ Arduino UNO และโปรแกรมควบคุมแบบปิด (Closed-Loop control) แบบ PID Control โดยส่งค่าแรงดันเอาต์พุตด้วยวงจรแบ่งแรงดันเข้าที่ขา A0 ของบอร์ด Arduino และส่งสัญญาณควบคุมให้กับเพาเวอร์มอสเฟตในลักษณะพัลซ์วิดมอดูเลตชัน (PWM Signal) จากขา 3 (D3) สำหรับการสวิตชิ่งให้แรงดันที่เอาต์พุตคงที่

PID Control Buck Converter
รูปที่ 1 เตรียมอุปกรณ์ต่างๆ สำหรับทดลอง

ในรูปที่ 1 จะเป็นลักษณะของอุปกรณ์ที่ใช้ใรการสร้างวงจรบักคอนเวอร์เตอร์แบบสวิตชิ่ง สำหรับการทดลองครั้งนี้ ซึ่งจะใช้ PCB แบบอเนกประสงค์

PID Control Buck Converter
รูปที่ 2 ตัวเหรี่ยวนำเอาต์พุตที่พันขึ้นสำหรับการทดลอง

สำหรับในรูปที่ 2 จะเป็นตัวเหนี่ยวนำทางด้านเอาต์พุตจะใช้แกนเทอร์รอย ขนาดเส้นผ่าศูนย์กลาง 3.5 เซนติเมตร สีดำและใช้ลวดเบอร์ 20 AWG พันในแกนประมาณ 55 รอบ ซึ่งจะได้ค่าเหนี่ยวนำประมาณ 200uH/5A

PID Control Buck Converter
รูปที่ 3 ลักษณะของวงจรบักคอนเวอร์เตอร์ที่ประกอบเสร็จแล้ว

เมื่อต่อวงจรเสร็จแล้วแสดงดังในรูปที่ 3 ซึ่งในรูปจะเห็นว่าเป็นการต่อวงจรด้านลายทองแดงของ PCB อเนกประสงค์ เพื่อให้ง่ายต่อการทดลอง การปรับแก้ไข การวัดสัญญาณต่างๆ และการเชื่อมต่อสัญญาณควบคุมและสัญญาณป้อนกลับไปยังบอร์ดควบคุม Arduino UNO

PID Control Buck Converter
รูปที่ 4 การต่อร่วมกับบอร์ดควบคุม Arduino UNO

จากนั้นประกอบวงจรต่างๆ เข้าด้วยกันแสดงในรูปที่ 4 ซึ่งจะมีองค์ประกอบด้วยกัน 3 ส่วนคือ ส่วนของตัวควบคุมการทำงานทั้งหมดจะเป็นบอร์ด Arduino UNO (บอร์ดสีน้ำเงิน) บอร์ดสวิตชิ่งบักคอนเวอร์เตอร์ (เป็นบอร์ดอเนกประสงค์) และตัวต้านทานสำหรับทดสอบวงจรจะเป็นตัวต้านทานขนาด 10 โอห์ม 20 วัตต์ 2 ตัว

PID Control Buck Converter
รูปที่ 5 การทดลองให้วงจรจ่ายกระแสไฟฟ้าให้กับโหลด

รูปที่ 5 แสดงลักษณะของการทดลองให้วงจรจ่ายกระแสไฟฟ้าให้กับโหลดที่กระแส 0.5A และ 1A ด้วยการใช้แคลมป์มิเตอร์ในการวัดกระแสที่เกิดขึ้น

/
 Example PID Control for Buck Converter 
 Reading analog input A0 for Control PWM signal output D3
 Fs = 35kHz, Vo = 10V, Vi = 15-20V 
 R&D By : www.electronicsDNA.com
 Date :  22-3-2020,  (V.0)
 / 
 #include <PWM.h>
 #include <PID_v1.h>

 int32_t frequency = 35000;  //frequency (in Hz)
 //Define Variables we'll be connecting to
 double Setpoint, Input, Output;
 //Specify the links and initial tuning parameters
 double Kp=3, Ki=1, Kd=0;  // 2 5 1
 PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);  

 void setup()
 {
   Serial.begin(9600);
   InitTimersSafe(); 
   bool success = SetPinFrequencySafe(3,frequency);
 Setpoint = 500;
   //turn the PID on
   myPID.SetMode(AUTOMATIC);
 }

 void loop()
 {
   Input = analogRead(A0);
  // Serial.println(Input); 
   myPID.Compute();

  // analogWrite(PIN_OUTPUT, Output);
   pwmWrite(3, Output);
  // Serial.println(Output);  
 }

Library PID_v1.h : http://www.mediafire.com/file/1zc1xngmdgmuhlm/Arduino-PID-Library.zip/file

Library PWM.h : http://www.mediafire.com/file/rny8gch6anqeuxk/PWM-master.zip/file

PID Control Buck Converter
รูปที่ 6 ออสซิลโลสโคปเมื่อตอบสนองต่อโหลด ขนาด 10 โอห์ม

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

PID Control Buck Converter
รูปที่ 7 แสดงแหล่งจ่ายไฟเลี้ยงสำหรับทดลองวงจร

ในรูปที่ 7 เป็นแหล่งจ่ายไฟเลี้ยงสำหรับทดลองวงจรขนาด 20V/2A ซึ่งเราสามารถสังเกต ลักษณะการทำงานในด้านพลังงานขาเข้า และประสิทธิภาพการทำงานของวงจรนี้เบื้องต้น

PID Control Buck Converter
รูปที่ 8 การแก้ไขไฟล์ไลบารี่ PID_v1.h ที่ตำแหน่ง SampleTime

ในรูปที่ 8 โปรแกรมจะเป็นการแก้ไขไฟล์ไลบารี่ PID_v1.h ที่ตำแหน่ง SampleTime จากเดิมจะมีค่าเท่ากับ 0.1S ให้เราเปลี่ยนเป็นค่า 0.001S แทน เพื่อให้ระยะเวลาการตรวจสอบค่าความผิดพลาด (Error) เพิ่มมากขึ้น และมีความเหมาะสมกับความเร็วในการตอบค่าแรงดันเอาต์พุตที่เปลี่ยนแปลง

PID Control Buck Converter
รูปที่ 9 วงจรบักคอนเวอร์เตอร์ที่ออกแบบและใช้ในการทดลอง

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

Reference

  1. https://en.wikipedia.org/wiki/PID_controller
  2. http://www.mediafire.com/file/1zc1xngmdgmuhlm/Arduino-PID-Library.zip/file
  3. http://www.mediafire.com/file/rny8gch6anqeuxk/PWM-master.zip/file
  4. http://www.mediafire.com/file/8kyyaz3dgj6n3y4/PID_Control_Buck_converter.txt/file