Basic Current-sharing by using Voltage-Controlled Current Source for DC-DC Converters V.2

โครงงานการต่อขนานของวงจรดีซี ทู ดีซีคอนเวอร์เตอร์ เพื่อแชร์กระแสระหว่างกัน (Current-sharing) ในครั้งนี้ เป็นการพัฒนาต่อจากโครงงานเดิมที่นำเสนอไว้ก่อน (Basic Current-sharing for DC-DC Converters V.1) ซึ่งจะเป็นการแชร์กระแสในลักษณะของ Master-Slave Operation แต่ในโครงงานงานจะทดลองในลักษณะของ Voltage-Controlled Current Sources ซึ่งจะนำเอาบอร์ดต้นแบบเดิมมาปรับแต่งการต่อใช้งานเล็กน้อยและปรับโปรแกรมการทำงาน Arduino UNO เพื่อให้สามารถทำงานตามแนวความคิดที่ต้องสำหรับการออกแบบโครงงานครับ



รูปที่ 1 ถึงรูปที่ 3 แสดงบอร์ดต้นแบบเดิมจากโครงงานที่ผ่านมา โดยนำมาทดลองและต่อใช้งาน รวมทั้งปรับให้เป็นการทำงานแบบใหม่คือ Voltage-Controlled Current Sources โดยยังคงใช้บอร์ดควบคุม Arduino UNO เช่นเดิม



ในรูปที่ 4 ถึงรูปที่ 6 เป็นการวัดสัญญาณเพื่อตรวจสอบความถูกต้อง การกำหนดค่าแรงดันเอาต์พุตไว้ที่ประมาณ 12V และการแสดงผลการทำงานของบอร์ดควบคุม Arduino UNO ซึ่งจะแสดงมาที่หน้าต่าง Serial monitor ในส่วนของค่าแรงดันเอาต์พุตและค่ากระแสโหลดจากวงจรดีซี ทู ดีซี คอนเวอร์เตอร์ทั้ง 2 วงจร
/*
    *Pseudo Code for MCU Arduino 
    *Application for Basic Current-sharing for DC-DC Converter. 
    *Design by : www.electronicsDNA.com
    *Date : 25/5/2023 (V.2)
    
      Vi : 18V-25VDC
      Vo : 12VDC
      Io : 3A (Continuous)     
      Fs : 31.37kHz
      Eff : > 80%  
*/
int Output_PWM = 0;  
int Voutput = 0;  
int Iphase1 = 0;      
int Iphase2 = 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 
TCCR2B=0b00000001;   // Set Fsw = 31.37 kHz
delay(500);
digitalWrite(13, HIGH); 
delay(500);
digitalWrite(13, LOW);  
}
void loop()
{
       Voutput   = analogRead(A5);  // Read ADC A1 for Voutput 
       Serial.print(" Vo = ");
       Serial.print(Voutput); 
MainLoop:
       Iphase1 = analogRead(A0);  // Read ADC A0 for Iinductor (D3)
       Iphase2 = analogRead(A4);  // Read ADC A0 for Iinductor (D11) 
 
       Serial.print(", Io1 = ");
       Serial.print(Iphase1); 
  
       Serial.print(", Io2 = ");
       Serial.println(Iphase2);   
  // Loop Output Short circuit and Current Limit Protection
   if(Iphase1>300||Iphase2>300) {   // 300 Is Set Current Io < 5A  
       Output_PWM = 0;
       OCR2A = Output_PWM;          // PIN D11 Hi Side 
       OCR2B = 255-Output_PWM;      // PIN D3 Hi Side     
       delay(300); 
       goto  MainLoop;           
   }
 
       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 Hi Side 
          OCR2B = 255-Output_PWM;      // PIN D3 Hi Side    
       if (Iphase1>Iphase2){OCR2A = Output_PWM+2;}  // Adj PWM register OCR2A for Current-sharing 
                                                    // Iphase1 for PWM PIN D3 
                                                    // Iphase2 for PWM PIN D11         
          
     //   delay(1);                    // Delay for Stability Loop Control
    
       } 
สำหรับโปรแกรมการทำงาน Arduino UNO นั้น จะมีปรับปรุงบ้างเล็กน้อยเมื่อเทียบกับโครงงานเดิม ในส่วนของการอ่านค่ากระแสจากวงจรทั้ง 2 ส่วน ด้วยคำสั่ง Iphase1 = analogRead(A0); และ Iphase2 = analogRead(A4); การป้องกันกระแสเกินให้กับวงจรจะใช้คำสั่ง if(Iphase1>300||Iphase2>300) และการปรับชดเชยกระแสให้ใกล้เคียงกันด้วยคำสั่ง if (Iphase1>Iphase2){OCR2A = Output_PWM+2;} ทั้งนี้โปรแกรมการทำงานยังเป็นแนวคิดแบบง่ายสำหรับการทดลอง




สำหรับรูปที่ 7 ถึงรูปที่ 10 การทดลองที่ 1 โดยการให้วงจรดีซี ทู ดีซี คอนเวอร์เตอร์ จ่ายกระแสโหลดที่ 580mA จากนั้นวัดสัญญาณพัลซ์วิดธ์มอดูเลตชั่นและวัดค่าแรงดันเอาต์พุตที่ได้ รวมทั้งการแสดงผลการทำงานในหน้าต่าง Serial monitor




รูปที่ 11 ถึงรูปที่ 14 การทดลองที่ 2 ให้วงจรจ่ายจ่ายกระแสโหลดเพิ่มขึ้น 1.16A และวัดสัญญาณพัลซ์วิดธ์มอดูเลตชั่น วัดค่าแรงดันเอาต์พุตที่ได้ รวมทั้งการแสดงผลการทำงานในหน้าต่าง Serial monitor




รูปที่ 15 ถึงรูปที่ 18 การทดลองที่ 3 ปรับการจ่ายกระแสโหลดที่ 2.25A เช่นเดิมวัดสัญญาณพัลซ์วิดธ์มอดูเลตชั่นและวัดค่าแรงดันเอาต์พุต การแสดงผลการทำงานในหน้าต่าง Serial monitor



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


รูปที่ 22 และรูปที่ 23 แสดงบล๊อกไดอะแกรมการทำงานการทำงานของวงจรดีซี ทู ดีซีคอนเวอร์เตอร์ เพื่อแชร์กระแสระหว่างกันในลักษณะของ Voltage-Controlled Current Sources โดยจะต่อขนานกันโดยตรงทางด้านเอาต์พุตสำหรับวงจรดีซี ทู ดีซีคอนเวอร์เตอร์

สำหรับโครงงานนี้เป็นการพัฒนาจากโครงงานเดิม เพื่อศึกษาการต่อขนานของวงจรดีซี ทู ดีซีคอนเวอร์เตอร์ให้แชร์กระแสระหว่างกันได้ในลักษณะของ Voltage-Controlled Current Sources โดยการทดลองสรุปได้ว่าลักษณะของการแชร์ในลักษณะนี้ จะให้ความถูกต้องของการจ่ายกระแสจากวงจรดีซี ทู ดีซีคอนเวอร์เตอร์เพิ่มขึ้น ด้วยการตรวจจับค่ากระแสที่เกิดขึ้นทั้ง 2 ช่อง แล้วทำการปรับชดเชยการทำงานให้วงจรดีซี ทู ดีซีคอนเวอร์เตอร์ทั้ง 2 ส่วนทำงานใกล้เคียงกันมากที่สุด โดยยังคงให้ค่าแรงดันเอาต์พุตเป็นไปตามที่กำหนดไว้
Reference
- https://www.industrial-electronics.com/switching-power-supply_1-24.html
 - https://www.thierry-lequeu.fr/data/SLUP094.pdf
 - https://www.edn.com/balancing-power-sharing-of-paralleled-boost-converters-in-speakers/
 - https://e2e.ti.com/blogs_/b/powerhouse/posts/how-to-design-a-simple-two-phase-current-sharing-synchronous-buck-regulator-using-a-voltage-mode-controller
 - https://www.sunpower-uk.com/glossary/what-is-current-sharing/
 - https://www.ednasia.com/op-amp-amplifies-current-sense-voltage-in-demo-boards/