PID Control Buck Converter By using Arduino UNO

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

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

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

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

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

รูปที่ 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

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

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

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

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