PFM Mode DC-DC Synchronous Buck Converter Using Arduino UNO

โครงงานนี้เป็นการใช้บอร์ดควบคุม Arduino UNO สร้างสัญญาณควบคุมแบบ PFM : Pulse Frequency Modulation สำหรับควบคุมการจ่ายกำลังให้โหลดลักษณะเดียวกับโครงงานที่ผ่านมา โดยโครงงานนี้จะใช้บอร์ดต้นแบบสำเร็จซิงโครนัสบักคอนเวอร์เตอร์ เป็นภาคขับกำลังเอาต์พุตและใช้บอร์ด Arduino UNO รับสัญญาณป้อนกลับค่าแรงดันเอาต์พุต (Vo) มาประมวลผลและควบคุมการจ่ายแรงดันให้คงที่ตามที่กำหนด

PFM Mode DC-DC Synchronous Buck Converter Using Arduino UNO
รูปที่ 1 ลักษณะการต่อบอร์ดต้นแบบสำหรับทดลอง
PFM Mode DC-DC Synchronous Buck Converter Using Arduino UNO
รูปที่ 2 วงจรสำหรับทดลองควบคุมแบบ Pulse Frequency Modulation

ในรูปที่ 1 และรูปที่ 2 แสดงลักษณะการต่อบอร์ดต้นแบบวงจรซิงโครนัสบักคอนเวอร์เตอร์และบอร์ดควบคุม Arduino UNO สำหรับทดลอง โดยวงจรทั้งหมดในการทดลองจะเป็นลักษณะคล้ายกับเนื้อหาในตอนที่ 1 (www.electronicsdna.com/getting-started-stm32f103c-board-with-arduino-ide-lep) แต่ปรับโค้ดโปรแกรม Arduino และบอร์ดควบคุมใหม่ให้ทำงานแบบ Pulse Frequency Modulation

PFM Mode DC-DC Synchronous Buck Converter Using Arduino UNO
รูปที่ 3 สัญญาญ PFM เมื่อวงจรอยู่ในสถานะสแตนบาย
PFM Mode DC-DC Synchronous Buck Converter Using Arduino UNO
รูปที่ 4 กำหนดค่าแรงดันเอาต์พุตเมื่อวงจรอยู่ในสถานะสแตนบาย

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

/*
   Arduino UNO Control PFM Mode 
   Synchronous Buck Converter Topology 

   Vi = 20V
   Vo = 9V@4A 
   Po = 36W (Continuous Power : COP)
   Fs = 16kHz-80kHz
   R&D By : www.electronicsDNA.com        
 */

#include <PWM.h>

int  PWMpin = 9;           // the pin PWM Driver Signal
long frequency = 0;      // Set frequency (in Hz) 
long Output_Fs = 0;
int  Setpoint = 512;       // 512 for Vo = 9V  

void setup()
{
  //initialize all timers except for 0, to save time keeping functions
  InitTimersSafe();  
  Serial.begin(9600);  
  pinMode(13, OUTPUT); 
  //sets the frequency for the specified pin
  bool success = SetPinFrequencySafe(PWMpin,frequency);  
  
  if(success) {    
    digitalWrite(13, HIGH);   
    delay(300);  
    digitalWrite(13, LOW);      
  }       
 }
 
void loop()
{ 

MAINLOOP:
   
   int VoltageFB = analogRead(A0);    
  
    //    Serial.print("\t Vo = ");  
    //    Serial.println(Voltage); 
       
        if(Setpoint>VoltageFB){Output_Fs = Output_Fs+500; goto  OUT_PUT;} 
        if(Setpoint<VoltageFB){Output_Fs = Output_Fs-500; goto  OUT_PUT;} 
         
OUT_PUT:           
        
    //------ OUT PUT Frequency Set -------------------------------   
   
        if (Output_Fs>80000)  
            {                                  
             Output_Fs = 80000;  
             bool success = SetPinFrequencySafe(PWMpin,frequency);          
             pwmWrite(PWMpin,0); 
             delay(1000); 
             goto  MAINLOOP;                                            
            }
            
        if (Output_Fs<1600)
            {         
             Output_Fs = 1600;       
            }

            frequency = Output_Fs;           
            bool success = SetPinFrequencySafe(PWMpin,frequency);          
            pwmWrite(PWMpin,90);            
  
            Serial.print("  PFM Signal = ");  
            Serial.print(Output_Fs);               
            Serial.println(" Hz "); 
            delay(10); 
 } 

ในส่วนโปรแกรม Arduino ข้างบนเป็นการทำงานสำหรับควบคุมการสร้างสัญญาณแบบ PFM โดยใช้บอร์ดควบคุม Arduino UNO ด้วยการกำหนดสัญญาณเอาต์พุต PFM ที่ตำแหน่งขา D9 จากนั้นจะรับสัญญาณป้อนกลับ (VFB) เป็นค่าแรงดันเอาต์พุตมายังขา A0 แล้วเปรียบเทียบกับค่าคงที่ 512 โดยในกรณีที่ค่าแรงดันเอาต์พุตน้อยกว่า 512 จะทำให้ขา D9 ส่งสัญญาณพัลซ์ที่มีความถี่สูงขึ้น และเมื่อค่าแรงดันเอาต์พุตมีค่ามากกว่า 512 จะทำให้ขา D9 ส่งสัญญาณพัลซ์ที่มีความถี่ลดลง โดยช่วงความถี่การทำงานจะกำหนดไว้ที่ 16kHz ถึง 80kHz

Download Arduino Library ——-> PWM.h

PFM Mode DC-DC Synchronous Buck Converter Using Arduino UNO
รูปที่ 5 สัญญาณ PFM เมื่อวงจรจ่ายกระแสเอาต์พุต 1.8A
PFM Mode DC-DC Synchronous Buck Converter Using Arduino UNO
รูปที่ 6 ค่าแรงดันเอาต์พุตเมื่อวงจรจ่ายกระแสเอาต์พุต 1.8A

รูปที่ 5 และรูปที่ 6 เป็นการทดลองที่ 1 ด้วยการให้วงจรซิงโครนัสบักคอนเวอร์เตอร์ จ่ายกระแสโหลดที่ประมาณ 1.8A ด้วยตัวต้านทานค่าคงที่ 5 โอห์ม จะสังเกตเห็นว่าความถี่สวิตชิ่งจะมีค่าประมาณ 19kHz และแรงดันเอาต์พุตจะเท่ากับ 9.18V (มีค่าลดลงเล็กน้อยที่ 0.08V เมื่อเทียบในสถานะวงจรสแตนบาย)

PFM Mode DC-DC Synchronous Buck Converter Using Arduino UNO
รูปที่ 7 สัญญาณ PFM เมื่อวงจรจ่ายกระแสเอาต์พุต 4A
PFM Mode DC-DC Synchronous Buck Converter Using Arduino UNO
รูปที่ 8 ค่าแรงดันเอาต์พุตเมื่อวงจรจ่ายกระแสเอาต์พุต 4A

รูปที่ 7 และรูปที่ 8 เป็นการทดลองที่ 2 ด้วยการให้วงจรซิงโครนัสบักคอนเวอร์เตอร์ จ่ายกระแสโหลดเพิ่มขึ้นที่ประมาณ 4A ด้วยตัวต้านทานค่าคงที่ 2.2 โอห์ม จะสังเกตเห็นว่าความถี่สวิตชิ่งเพิ่มขึ้นที่ประมาณ 23kHz และแรงดันเอาต์พุตจะเท่ากับ 9.18V (มีค่าลดลงเล็กน้อยที่ 0.09V เมื่อเทียบในสถานะวงจรสแตนบาย)

PFM Mode DC-DC Synchronous Buck Converter Using Arduino UNO
รูปที่ 9 แสดงลักษณะทั่วไปของการทดลองบอร์ดต้นแบบ
คลิปวิดีโอแสดงสัญญาณ PFM เมื่อวงจรจ่ายกระแสเอาต์พุต 4A ต่อเนื่อง

สำหรับโครงงานการใช้บอร์ดควบคุม Arduino UNO สร้างสัญญาณควบคุมแบบ PFM : Pulse Frequency Modulation ให้กับวงจรซิงโครนัสบักคอนเวอร์เตอร์และการทดลองการทำงานพอสังเขปนี้ เป็นการพัฒนาเพิ่มเติมมาจากโครงงาน PFM Mode DC/DC Synchronous Buck Converter Using STM32F103C8T6 [LEP] ที่ผ่านมา ทั้งนี้คิดว่าเนื้อหาในโครงงานพอจะเป็นแนวทางให้ผู้อ่านสามารถนำไปแก้ไขและปรับปรุงเพื่อนำไปใช้งานต่างๆ ได้อย่างเหมาะสมต่อไป

Reference

  1. https://www.researchgate.net/figure/Hysteretic-PFM-buck-regulator-basic-architecture_fig2_241164469
  2. https://www.digikey.it/it/articles/using-pfm-to-improve-switching-dc-dc-regulator-efficiency-at-low-loads
  3. https://www.ti.com/lit/an/slva236a/slva236a.pdf
  4. https://www.qinxtech.com/new/what-is-the-difference-between-pwm-and-pfm/
  5. https://en.wikipedia.org/wiki/Pulse-frequency_modulation
  6. https://techweb.rohm.com/product/power-ic/dcdc/897/
  7. https://www.semanticscholar.org/paper/PWM-and-PFM-Operation-of-DC-DC-Converters-for-Sengupta/c885a1d9de3a1873e46ee4cecf33983184e6006a
  8. https://community.infineon.com/t5/Knowledge-Base-Articles/Difference-Between-PWM-and-PFM-Mode-PWM-vs-PFM/ta-p/251143#.
  9. https://www.digikey.co.th/th/articles/the-advantages-of-pulse-frequency-modulation-for-dc-dc-switching-voltage-converters
  10. https://www.ti.com/lit/ds/symlink/tps61086.pdf
  11. https://www.semanticscholar.org/paper/A-PWM-PFM-Dual-Mode-DC-DC-Buck-Converter-with-for-Kim-Kim/ee2e3ba52c8105d9aa70b7975585935108ecd8d0
  12. https://www.analog.com/en/resources/technical-articles/choose-the-right-regulator-for-the-job-part-2-primary-regulator-control-schemes.html
  13. https://www.mouser.com/ds/2/100/002-08228_MB39C007_2_ch_DC_DC_Converter_IC_with_PF-931455.pdf
  14. https://files.core.ac.uk/download/pdf/79572373.pdf