PFM Mode DC-DC Synchronous Buck Converter Using Arduino UNO

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


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


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


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


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

สำหรับโครงงานการใช้บอร์ดควบคุม Arduino UNO สร้างสัญญาณควบคุมแบบ PFM : Pulse Frequency Modulation ให้กับวงจรซิงโครนัสบักคอนเวอร์เตอร์และการทดลองการทำงานพอสังเขปนี้ เป็นการพัฒนาเพิ่มเติมมาจากโครงงาน PFM Mode DC/DC Synchronous Buck Converter Using STM32F103C8T6 [LEP] ที่ผ่านมา ทั้งนี้คิดว่าเนื้อหาในโครงงานพอจะเป็นแนวทางให้ผู้อ่านสามารถนำไปแก้ไขและปรับปรุงเพื่อนำไปใช้งานต่างๆ ได้อย่างเหมาะสมต่อไป
Reference
- https://www.researchgate.net/figure/Hysteretic-PFM-buck-regulator-basic-architecture_fig2_241164469
- https://www.digikey.it/it/articles/using-pfm-to-improve-switching-dc-dc-regulator-efficiency-at-low-loads
- https://www.ti.com/lit/an/slva236a/slva236a.pdf
- https://www.qinxtech.com/new/what-is-the-difference-between-pwm-and-pfm/
- https://en.wikipedia.org/wiki/Pulse-frequency_modulation
- https://techweb.rohm.com/product/power-ic/dcdc/897/
- https://www.semanticscholar.org/paper/PWM-and-PFM-Operation-of-DC-DC-Converters-for-Sengupta/c885a1d9de3a1873e46ee4cecf33983184e6006a
- https://community.infineon.com/t5/Knowledge-Base-Articles/Difference-Between-PWM-and-PFM-Mode-PWM-vs-PFM/ta-p/251143#.
- https://www.digikey.co.th/th/articles/the-advantages-of-pulse-frequency-modulation-for-dc-dc-switching-voltage-converters
- https://www.ti.com/lit/ds/symlink/tps61086.pdf
- https://www.semanticscholar.org/paper/A-PWM-PFM-Dual-Mode-DC-DC-Buck-Converter-with-for-Kim-Kim/ee2e3ba52c8105d9aa70b7975585935108ecd8d0
- https://www.analog.com/en/resources/technical-articles/choose-the-right-regulator-for-the-job-part-2-primary-regulator-control-schemes.html
- https://www.mouser.com/ds/2/100/002-08228_MB39C007_2_ch_DC_DC_Converter_IC_with_PF-931455.pdf
- https://files.core.ac.uk/download/pdf/79572373.pdf