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 สำหรับประมวลผลและใช้โปรแกรมควบคุมการทำงานแบบเบื้องต้น และสามารถนำไปพัฒนาต่อในลักษณะตามที่ต้อง

Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 1 เริ่มเตรียมอุปกรณ์สำหรับประกอบโครงงาน
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 2 วางเลเอาต์อุปกรณ์บนแผ่นวงจรพิมพ์ (PCB)

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

Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 3 เริ่มพันหม้อแปลงสวิตชิ่ง
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 4 ลักษณะของหม้อแปลงสวิตชิ่งที่พันเสร็จแล้วสำหรับทดลอง

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

Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 5 ลักษณะตัวเหนี่ยวนำที่พันใหม่สำหรับใช้ในวงจร

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

Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 6 ลักษณะของการประกอบวงจร (1)
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 7 ลักษณะของการประกอบวงจร (2)

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

Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 8 อุปกรณ์และเครื่องมือที่ใช้ในการทดลอง
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 9 การวัดสัญญาณขับ (Driver signal) ของวงจรในขณะสแตนบาย

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

Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 10 การวัดค่าแรงดันอินพุตในการทดลอง
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 11 การวัดค่าแรงดันเอาต์พุตของวงจร

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

Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 12 แหล่งจ่ายไฟเลี้ยงกระแสตรงสำหรับทดลอง
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 13 ตัวต้านทานโหลดสำหรับทดสอบการทำงานขนาด 10 โอห์ม 20 วัตต์ 2 ตัว
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 14 การวัดสัญญาณขับในขณะสแตนบาย (***แก้ไขการตั้งอัตราส่วนการวัดสัญญาณที่ X10 ต้องเป็น (X1))

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

Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 15 การทดลองที่ 1 ให้วงจรจ่ายกระแสโหลดที่ 0.67A
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 16 การทดลองที่ 1 แรงดันเอาต์พุตเมื่อจ่ายกระแสโหลดที่ 0.67A
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 17 การทดลองที่ 1 สัญญาณขับเพื่อตอบสนองต่อการจ่ายกระแสโหลดที่ 0.67A

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

Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 18 การทดลองที่ 2 ให้วงจรจ่ายกระแสโหลดที่ 1.24A
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 19 การทดลองที่ 2 แรงดันเอาต์พุตเมื่อจ่ายกระแสโหลดที่ 1.24A
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 12 การทดลองที่ 2 สัญญาณขับเพื่อตอบสนองต่อการจ่ายกระแสโหลดที่ 1.24A
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 21 การทดลองที่ 3 ให้วงจรจ่ายกระแสโหลดที่ 2.40A
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 22 การทดลองที่ 3 แรงดันเอาต์พุตเมื่อจ่ายกระแสโหลดที่ 2.40A
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 23 การทดลองที่ 3 แรงดันอินพุตเมื่อจ่ายกระแสโหลดที่ 2.40A
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 24 การทดลองที่ 3 สัญญาณขับเพื่อตอบสนองต่อการจ่ายกระแสโหลดที่ 1.24A
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 25 การแสดงผลข้อมูลที่หน้า Serial Monitor บนโปรแกรม Arduino IDE

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

Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 26 วงจรในส่วนของบอร์ดควบคุมและสัญญาณขับเพาเวอร์มอสเฟต (1)
Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 27 วงจรในส่วนของขับกำลังคอนเวอร์เตอร์และเอาต์พุต (2)

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

Simple DC to DC Push-Pull Converter with Arduino UNO
รูปที่ 28 ลักษณะของการทดลองโครงงานวงจรพุช-พูล คอนเวอร์เตอร์

สำหรับโครงงานสวิตชิ่งวงจรพุช-พูล คอนเวอร์เตอร์ (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