Two-Phase Buck Converter Based on Arduino UNO

โครงงานนี้เป็นการนำบอร์ด Arduino UNO มาควบคุมการทำงานของวงจรบักคอนเวอร์เตอร์แบบ 2 เฟส (Digital Control) ซึ่งในโครงงานที่ผ่านมาได้นำเสนอวงจรในลักษณะเดียวกัน แต่ใช้ไอซีแบบอะนาลอกเบอร์ SG3524 เป็นตัวควบคุม (โครงงาน Simple Dual-Phase Buck Converter by Using SG3524 Controller) โดยในโครงงานจะใช้ส่วนของวงจรภาคกำลังบักคอนเวอร์เตอร์เดิมและปรับวงจรอีกเล็กน้อย เพื่อให้วงจรส่วนของ บอร์ด Arduino UNO และบักคอนเวอร์เตอร์แบบ 2 เฟสสามารถทำงานร่วมกันได้

Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 1 เตรียมบอร์ด Arduino UNO สำหรับใช้ควบคุมแทน
Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 2 การเชื่อมต่อระหว่างบอร์ด Arduino UNO และวงจรบักคอนเวอร์เตอร์
Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 3 ลักษณะของการเตรียมทดลองโครงงาน

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

Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 4 ค่าแรงดันอินพุตในการทดลอง (Vi)
Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 5 สัญญาณขับขาเกตสำหรับคอนเวอร์เตอร์ 2 เฟส ขณะสแตนบาย (วัดสัญญาณที่ขา D3 และ D11 ของบอร์ด Arduino UNO)
Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 6 ใช้แคล้มมิเตอร์สำหรับวัดกระแสเอาต์พุต (Io)
รูปที่ 7 ค่าแรงดันเอาต์พุตที่กำหนด (Vo) ขณะวงจรสแตนบาย
Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 8 โหลดตัวต้านทานทดสอบวงจรขนาด 10 โอห์ม 20 วัตต์

ในรูปที่ 4 ถึงรูปที่ 8 เป็นการเตรียมเครื่องมือและอุปกรณ์สำหรับสำหรับการทดสอบโครงงาน โดยแรงดันอินพุตในการทดสอบจะกำหนดไว้ที่ประมาณ 25V กำหนดแรงดันเอาต์พุตที่ 12V วัดกระแสเอาต์พุตด้วยแคล้มมิเตอร์และโหลดตัวต้านทานค่าคงที่ขนาด 10 โอห์ม 20 วัตต์ จำนวน 2 ตัว

Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 9 การทดลองที่ 1 ให้วงจรจ่ายกระแสโหลดที่ 1.21A
Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 10 สัญญาณขับขาเกตเมื่อตอบสนองกระแสโหลดที่ 1.21A
Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 11 ค่าแรงดันเอาต์พุตเมื่อวงจรจ่ายกระแสโหลด 1.21A

รูปที่ 9 ถึงรูปที่ 11 เป็นการทดลองที่ 1 ด้วยการให้วงจรจ่ายกระแสโหลดที่ 1.21A จากนั้นวัดค่าแรงดันเอาต์พุตที่เกิดขึ้น รวมทั้งสังเกตสัญญาณขับที่ขาเกต (รูปที่ 10) เพื่อตอบสนองให้แรงดันเอาต์พุตให้คงที่

Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 12 การทดลองที่ 2 ให้วงจรจ่ายกระแสโหลดที่ 2.34A
Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 13 สัญญาณขับขาเกตเมื่อตอบสนองกระแสโหลดที่ 2.34A
Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 14 ค่าแรงดันเอาต์พุตเมื่อวงจรจ่ายกระแสโหลด 2.34A

ในรูปที่ 12 ถึงรูปที่ 14 เป็นการทดลองที่ 2 ซึ่งจะเป็นลักษณะเดียวกับการทดลองที่ 1 แต่จะให้วงจรจ่ายกระแสโหลดเพิ่มขึ้นที่ 2.34A และวัดค่าแรงดันเอาต์พุตที่เกิดขึ้น รวมทั้งสังเกตสัญญาณขับที่ขาเกต เพื่อตอบสนองให้แรงดันเอาต์พุตคงที่ โดยจากการทดลองค่าแรงดันเอาต์พุตลดลง 1.71V เมื่อเทียบกับแรงดันเอาต์พุตขณะวงจรสแตนบาย

/*
    *Pseudo Code for Arduino UNO
    *Application for DC-DC Two Phase Converter By using Arduino UNO.
  
     Vi : 25VDC
     Vo : 12VDC    
     Io : 2.38A (Continuous)    
     Po : 24W 
     Fs : 31.372kHZ
     Eff : > 80%
     Protection : Output Short circuit and Current Limit
     
   *Design by : www.electronicsDNA.com
   *Date : 15/1/2023 (V.0)
*/

int Output_PWM = 0;   
int Voutput = 0;     
int Iinductor = 0;   
int Setpoint = 500;   // 500 = 12V @ Voltage output  
double error;

void setup()
{
pinMode (3, OUTPUT);   //  PWM Signal Lo Side
pinMode (11, OUTPUT);  //  PWM Signal Hi Side
pinMode (13, OUTPUT);  //  LED Signal OK RUN System
Serial.begin(9600);

TCCR2A=0b10110001;   // Generate inverted PWM signals in output 
TCCR2B=0b00000001;   // Set Fsw = 31.9 kHz

delay(500);
digitalWrite(13, HIGH); 
delay(500);
digitalWrite(13, LOW);  
}

void loop()
{

MainLoop:

  Iinductor  = analogRead(A0);    // Read ADC A0 for Iinductor 
  Voutput    = analogRead(A1);  // Read ADC A1 for Voutput 
 
  Serial.print(" IL = ");
  Serial.println(Iinductor); 

  // Loop Output Short circuit and Current Limit

   if(Iinductor>30) {  // 30 Is Set Current (6A)  
       Output_PWM = 0;

       OCR2A = Output_PWM;          // PIN D11 
       OCR2B = 255-Output_PWM;      // PIN D3 
       delay(300); 
       goto  MainLoop;           
   }

 //      error = (Setpoint-Voutput);   
 //      Serial.print("\t Err = ");        
 //      Serial.println(error); 

       if(Setpoint>Voutput){   
         Output_PWM = Output_PWM+2;        
          goto  OUT_PUT;
         } 
        if(Setpoint<Voutput){  
          Output_PWM = Output_PWM-2; 
          goto  OUT_PUT;
         }        
      
OUT_PUT:    

       if (Output_PWM<1){Output_PWM=0;}      //  Limit Min PWM Signal  
       if (Output_PWM>128){Output_PWM=128;}     //  Limit Max PWM Signal 

       OCR2A = Output_PWM;       // PIN D11 
       OCR2B = 255-Output_PWM;        // PIN D3  
     
    //   delay(1);                // Delay for Adj Stability Loop Control
    
       } 

สำหรับโปรแกรม Arduino UNO ที่ใช้ในการทดลอง (แสดงข้างบน) เป็นตัวอย่างที่ใช้ในการทดลองโครงงาน ซึ่งผู้อ่านสามารถปรับการใช้งานได้ตามต้องการ ซึ่งจะสังเกตเห็นว่าโปรแกรมจะแบ่งออกเป็น 3 กลุ่มใหญ่ คือ กลุ่มแรกจะเป็นการประกาศค่าตัวแปรและกำหนดรีจิสเตอร์สำหรับสร้างสัญญาณพัลซ์วิดมอดูเลตชั่น void setup() กลุ่มที่สอง เป็นเมนลูป void loop() จะตรวจสอบค่าแรงดันเอาต์พุต (Voutput) เพื่อเปรียบเทียบกับค่าที่กำหนด (Setpoint) และปรับขนาดของค่าตัวแปรสัญญาณพัลซ์วิดธ์มอดูเลตชั่น (Output_PWM) ในกลุ่มที่สาม (OUT_PUT) จะส่งค่าตัวแปรสำหรับรีจิสเตอร์ (OCR2A และ OCR2B) เพื่อการสร้างพัลซ์ให้เกิดขึ้น นอกจากนี้จะกำหนดขนาดของค่าตัวแปร (Output_PWM) ให้อยู่ในช่วง 0-128 เท่านั้น

Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 15 การทดลองที่ 3 ทดลองให้เอาต์พุตช๊อตเซอร์กิต
Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 16 ค่าแรงดันเอาต์พุตเท่ากับ 0V เมื่อเอาต์พุตซ๊อตเซอร์กิต
Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 17 กรแสเอาต์พุตมีค่าประมาณ 0A เมื่อเอาต์พุตซ๊อตเซอร์กิต
Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 18 สัญญาณขับขาเกตเมื่อเอาต์พุตซ๊อตเซอร์กิต

สำหรับรูปที่ 15 ถึงรูปที่ 18 เป็นการทดลองที่ 3 ด้วยการทดสอบให้วงจรเกิดการช๊อดเซอร์กิตที่เอาต์พุต ทั้งนี้เพื่อเป็นการตรวจสอบส่วนของการทำงานควบคุมกระแสเกิน (Current Limit Circuit) ที่จะทำให้วงจรได้รับความเสียหายและการทำงานร่วมกับโปรแกรมควบคุมการทำงาน

Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 19 วงจรที่ออกแบบและใช้ในการทดลองโครงงาน
Two-Phase Buck Converter Based on Arduino UNO
รูปที่ 20 ลักษณะของการทดลองโครงงานทั้งหมด

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

Reference

  1. https://oa.upm.es/35986/1/INVE_MEM_2014_195391.pdf
  2. https://www.infineon.com/dgdl/Infineon-Digital_multiphase_controller_dual_phase_operation_in_multiphase_buck_applications-ApplicationNotes-v01_00-EN.pdf?fileId=5546d46272e49d2a01737bf04c75581c
  3. https://www.analog.com/en/technical-articles/improve-twophase-buck-converter-performance-with-a-coupledchoke-topology.html
  4. https://www.researchgate.net/figure/Circuit-and-operating-modes-of-two-phase-buck-converter-a-Circuit-b-Mode-1-and-c_fig1_331271726
  5. https://eu.mouser.com/new/maxim-integrated/maxim-max77540-buck-converter/
  6. https://iopscience.iop.org/article/10.1088/1755-1315/354/1/012030/pdf
  7. https://www.maximintegrated.com/content/dam/files/design/technical-documents/reference-designs/maxrefdes1033.pdf