Simple DC to DC Push-Pull Converter with Arduino UNO (V.1)

โครงงานสวิตชิ่งวงจรพุช-พูล คอนเวอร์เตอร์ (Push-Pull Converter) ซึ่งเป็นลักษณะของ Voltage-Fed Push-Pull Converter และควบคุมด้วยบอร์ด Arduino UNO โดยรับค่าแรงดันอินพุตประมาณ 40VDC จ่ายแรงดันทางด้านเอาต์พุตที่ 12VDC/2.4A (ประมาณ 28W) ซึ่งโครงงานนี้เป็นเวอร์ชั่น 1 การประกอบวงจรสำหรับการทดลองจะใช้บอร์ดวงจรพิมพ์ (PCB) อเนกประสงค์ และเชื่อมต่อสัญญาณควบคุม (Control signal) และสัญญาณป้อนกลับ (Feedback signal) มายังบอร์ดควบคุม Arduino UNO สำหรับประมวลผลและใช้โปรแกรมควบคุมการทำงานแบบเบื้องต้น และสามารถนำไปพัฒนาต่อในลักษณะตามที่ต้อง


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


รูปที่ 3 และรูปที่ 4 เป็นลักษณะของหม้อแปลงสวิตชิ่งที่ใช้กับโครงงาน โดยใช้แกนแบบ PM-EER-42E และขดลวดปฐมภูมิ (Primary winding) จะพันจำนวน 8 รอบแบบคู่ (แบบมีแท็ปกลาง) และส่วนของขดลวดทุติยภูมิ (Secondary winding) จะพันจำนวน 5 รอบ ซึ่งจะพันแบบคู่ (แบบมีแท็ปกลาง) เช่นกัน และใช้ลวดทองแดงเบอร์ 19-21SWG โดยในระหว่างชั้นนขดลวดทั้งสองจะพันขั้นด้วยเทปก่อน 1 ครั้ง และเมื่อเสร็จแล้วจะใช้เทปพันรอบตัวหม้อแปลงอีกครั้งประมาณ 3 รอบ เพื่อให้แกนประกบเข้าด้วยกันโดยเราไม่ต้องเว้นช่องว่างอากาศ (Air gap) ให้กับแกนของหม้อแปลง

รูปที่ 5 เป็นตัวเหนี่ยวนำทางด้านอินพุตและเอาต์พุตสำหรับฟิลเตอร์ โดยตัวเหนี่ยวนำเอาต์พุตจะมีค่าประมาณ 220uH (ตัวใหญ่) และทางด้านอินพุตจะมีค่าประมาณ 50uH (ตัวเล็ก) ทั้งนี้ค่าความเหนี่ยวนำจะใช้ค่าโดยประมาณและอาจจะปรับใหม่ให้เหมาะสมอีกครั้ง


รูปที่ 6 และรูปที่ 7 เป็นวงจรที่ประกอบขึ้นแบบพุช-พูล คอนเวอร์เตอร์ ตั้งแต่เริ่มต้น (รูปที่ 6) และการเชื่อมต่อสายไฟสำหรับรับไฟเลี้ยงอินพุต รวมการจ่ายกระแสไฟฟ้าทางด้านเอาต์พุตต่างๆ และจุดเชื่อมต่อสำหรับวัดค่าแรงดันและสัญญาณที่เกิดขึ้น


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


ในรูปที่ 10 และรูปที่ 11 เป็นการวัดค่าแรงดันอินพุตสำหรับการทดลอง (รูปที่ 10) โดยจะมีค่าประมาณ 40V และค่าแรงดันเอาต์พุตกำหนดไว้ที่ประมาณ 12V (รูปที่ 11) และเราสามารถปรับได้อีกเล็กน้อยให้ได้ค่าแรงดันตามที่ต้องการ



ในรูปที่ 14 แสดงลักษณะของสัญญาณขับเพาเวอร์มอสเฟต ทั้ง 2 ช่อง โดยแอดมินวัดสัญญาณที่ขาไมโครคอนโทรลเลอร์ โดยจะสังเกตเห็นว่าสัญญาณทั้ง 2 ส่วนจะเลื่อนเฟส (Shift phase) ในรูปที่ช่องวัดสัญญาณที่ 1 (CH1) ค่าแรงดัน Pk-Pk ที่แสดงเท่ากับ 49.6V จะต้องเป็น 4.96V ครับ ทั้งนี้แอดมินลืมกดเปลี่ยนอัตราส่วนให้เป็น (X1) ในตัวออสซิลโลสโคปขณะวัดสัญญาณครับ
/* Arduino Code for DC to DC Push-Pull Converter (V.1) Code Arduino Ref. https://arduino.stackexchange.com/questions/10112/how-to-make-sure-arduinos-pwm-pulses-are-phase-shifted DC to DC : Push-Pull Converter Topology MCU : Arduino UNO Fs = 30-35kHz Vi = 40V Vo = 12V@2.4A Output Power = 30W (Continuous) R&D by : www.electronicsDNA.com Date : 7-8-2022 (V.0) */ byte dutyCycle = 0; int Setpoint = 512; // 12V @ Voltage output int error; int Output_PWM = 0; int Delay = 1; int Io = 0; void setup() { pinMode (3, OUTPUT); // Timer 2 "B" output: OC2B pinMode (11, OUTPUT); // Timer 2 "A" output: OC2A Serial.begin(9600); // Set OC2A on Compare Match when up-counting. // Clear OC2B on Compare Match when up-counting. TCCR2A=0b10110001; // Generate inverted PWM signals TCCR2B=0b00000001; // Set Fs = 31.9 kHz // TCCR2A = bit (WGM20) | bit (COM2B1) | bit (COM2A1) | bit (COM2A0); // TCCR2B = bit (CS21); // phase correct PWM, prescaler of 8 dutyCycle = 0; OCR2A = dutyCycle; // duty cycle out of 255 OCR2B = 255 - dutyCycle; // duty cycle out of 255 delay(500); } void loop(){ Current_loop: Io = analogRead(A0); Serial.print(" Io = "); Serial.print(Io); if(Io>150){ // Limit Io @10A dutyCycle = 0; OCR2A = dutyCycle; // duty cycle out of 255 OCR2B = 255 - dutyCycle; // duty cycle out of 255 delay(300); goto Current_loop; } //-------------------------------------------------------------------------- int Voltage = analogRead(A1); // Serial.print("\t Vo = "); // Serial.println(Voltage); error = (Setpoint-Voltage); // Serial.print("\t Err = "); // Serial.println(error); if(Setpoint>Voltage){ Output_PWM = Output_PWM+2; goto OUT_PUT; } if(Setpoint<Voltage){ Output_PWM = Output_PWM-2; goto OUT_PUT; } OUT_PUT: //------ OUT PUT PWM Set ------------------------------- if (Output_PWM>120) { Output_PWM = 120; } if (Output_PWM<1) { Output_PWM = 0; } OCR2A = Output_PWM; // duty cycle out of 255 OCR2B = 255 - Output_PWM; // duty cycle out of 255 Serial.print(" PWM = "); Serial.println(Output_PWM); delay(1); }
สำหรับตัวอย่างโปรแกรม Arduino ที่ใช้ในการทดลองจะแสดงข้างบน โดยจะเป็นแนวทางให้ผู้อ่านสามารถนำไปปรับปรุงเพื่อใช้งานใหม่ได้ ซึ่งในส่วนของการกำหนดค่าแรงดันที่เอาต์พุตนั้น จะมีด้วยกัน 2 แบบคือ ให้เปลี่ยนค่าตัวแปรที่บรรทัด int Setpoint = 512; // 12V @ Voltage output เป็นค่าใหม่ หรือการปรับค่าตัวต้านทานตำแหน่ง RP1 ของวงจรแสดงในรูปที่ 26



สำหรับรูปที่ 15 ถึงรูปที่ 17 เป็นการทดลองการทำงานของวงจรในครั้งที่ 1 โดยการต่อโหลดที่เอาต์พุต 20 โอห์ม ซึ่งปริมาณกระแสที่วัดได้คือ 0.67A และเราจะสังเกตการตอบสนองการทำงานของวงจรในรูปที่ 16 และรูปที่ 17 ตามลำดับ ซึ่งจะใช้รูปแบบการทดลองเดียวกับการทดลองที่ 2 และ 3 แต่เพิ่มประมาณการจ่ายกระแสเอาต์พุตขึ้น








สำหรับรูปที่ 25 เป็นหน้าต่างแสดงค่าสัญญาณ PWM และปริมาณกระแสเอาต์พุต Io ที่ได้ ขณะวงจรทำงานทั้งนี้เพื่อเป็นการสังเกตการทำงานของโปรแกรมที่กำลังพัฒนาและกำหนดการทำงานของโปรแกมตามที่ออกแบบต่างๆ


ในส่วนของรูปวงจรที่ 26 และรูปที่ 27 นี้แอดมินวาดวงจรออกเป็น 2 ส่วนเพื่อให้เข้าใจง่าย โดยจะแบ่งเป็นส่วนของวงจรควบคุมและสัญญาณขับ (รูปที่ 26) และวงจรขับกำลังคอนเวอร์เตอร์และเอาต์พุต (รูปที่ 27) ซึ่งในการทดลองครั้งนี้แอดมินจะจ่ายไฟเลี้ยงอินพุตเข้าที่ตำแหน่ง +VCC(40V) ในเวอร์ชั่นที่ 1

สำหรับโครงงานสวิตชิ่งวงจรพุช-พูล คอนเวอร์เตอร์ (Push-Pull Converter) ควบคุมด้วยบอร์ด Arduino UNO นี้เป็นอีกแบบหนึ่งที่แอดมินทดลองใช้บอร์ดไมโครคอนโทรลเลอร์เข้ามาควบคุม (Digital Control) ทั้งนี้เพื่อเป็นการเรียนรู้และทำความเข้าใจของแอดมินเอง ซึ่งคิดว่าการทดลองและการออกแบบทั้งหมดคงจะเป็นประโยชน์และพอเป็นแนวทางให้ผู้อ่านสามารถพัฒนาวงจรพุช-พูล คอนเวอร์เตอร์ในรูปแบบที่ต้องการได้ครับ.
Reference
1. Current-fed Push-Pull DC-DC converter | Download Scientific Diagram (researchgate.net)
2. https://www.semanticscholar.org/paper/Soft-Switching-Current-Fed-Push%E2%80%93Pull-Converter-for-Kim-Shin/1ca6aceff725c1c901812ac7872669046a648c8a
3. https://www.semanticscholar.org/paper/Design-and-Development-of-Push-Pull-DC-DC-Converter-Veeresh-Kusagur/467696f455d513ce2070f13302d50c3274107e45
4. https://www.semanticscholar.org/paper/Analysis-of-the-Current-Fed-Push-Pull-Parallel-with-Peretz-Ben-Yaakov/9bf8fc917a3f4043ce61c7c9edad0b2577dc81e5
5. https://www.semanticscholar.org/paper/Analysis-%2C-Design-of-Soft-Switching-Current-Fed-Dc-Manideepak/714a258380149bc82f603bdf8cf34eb0ea913ab0
6. https://www.ti.com/seclit/ml/slup117/slup117.pdf
7. https://patents.google.com/patent/EP0303994B1/en
8. https://www.smps.us/inverters.html
9. https://www.researchgate.net/figure/The-Proposed-Soft-Switched-Push-pull-Current-fed-Converter-adapted-from-14_fig3_351736180
10. http://electronique.marcel.free.fr/VAE/Docs/OT1%20Controleur/Conv%20DC-DC/National/cascade_tutorial_0710.pdf
11. https://wwwee.ee.bgu.ac.il/~pemic/publications/jour003.pdf
12. https://www.scirp.org/journal/paperinformation.aspx?paperid=84197