PID Control Buck Converter By using Arduino UNO

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

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

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

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

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

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

// PID Basic Example

// Reading analog input 0 to control analog PWM output 3

#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);
}

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

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

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

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

YouTube : Basics for PID Control Buck Converter By using Arduino UNO

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