Voltage Mode Control Flyback Converter SMPS Based on Arduino UNO
โครงงานแหล่งจ่ายไฟสวิตชิ่งเพาเวอร์ซัพพลาย แบบฟายแบกคอนเวอร์เตอร์ ใช้วิธีการควบคุมด้วยโหมดแรงดัน (Voltage Mode Control) และใช้บอร์ดควบคุม Arduino UNO ในการประมวลผลแทนไอซีตัวเดิม (UC3842) ซึ่งทำงานในโหมดกระแส (Current Mode Control) ด้วยการนำวงจรสวิตชิ่งสำเร็จมาปรับแต่งวงจรใหม่ที่เคยนำเสนอเนื้อหามาก่อนหน้านี้ (Flyback Converter for Power Switching Panel TV) เพื่อศึกษาการควบคุมและเรียนรู้การทำงานให้กับแหล่งจ่ายไฟสวิตชิ่งแบบฟายแบกคอนเวอร์เตอร์
รูปที่ 1 และรูปที่ 2 แสดงบอร์ดสวิตชิ่งเพาเวอร์ซัพพลาย แบบฟายแบกคอนเวอร์เตอร์ สำหรับใช้ในการทดลองโครงงาน และตำแหน่งไอซี UC3842 ใช้ในการควบคุมฟายแบกคอนเวอร์เตอร์ ส่วนการทำงานของวงจรในบอร์ดสวิตชิ่งเพาเวอร์ซัพพลาย สามารถดูได้ที่ https://www.electronicsdna.com/flyback-converter-for-power-switching-panel-tv/
ในรูปที่ 3 และรูปที่ 4 เป็นการถอดไอซีควบคุม UC3842 เดิมออกจากบอร์ด ซึ่งไอซีตัวนี้จะทำงานแบบอะนาลอก (Analog Control) และในรูปที่ 4 เป็นวงจรการทำงานที่ยังคงใช้ไอซีควบคุม UC3842 โดยเราจะสนใจในส่วนของการส่งสัญญาณ PWM (ขา 6), การรับสัญญาณตรวจจับกระแส Isense (ขา 3) และขารับสัญญาณป้อนกลับ VFB (ขา 2) เป็นหลัก
รูปที่ 5 และรูปที่ 6 เป็นวงจรเชื่อมต่อ (Interface circuit) ระหว่างบอร์ด Arduino UNO และบอร์ดสวิตชิ่งให้สามารถสื่อสารระหว่างกันได้ ทั้งนี้ตัวบอร์ด Arduino UNO จะประมวลผลสัญญาณในรูปแบบดิจิตอลเป็นหลัก (Digital Control) ซึ่งจะใช้ออปโต้คัปเปิ้ลเป็นส่วนใหญ่และให้วงจรทั้งหมดสามารถควบคุมการทำงานร่วมกันได้อย่างเหมาะสม
ในรูปที่ 7 และรูปที่ 8 แสดงลักษณะการต่อวงจรทั้งหมดเข้าด้วยกันเพื่อใช้ในทดลองการทำงานร่วมกันทั้งหมด โดยในรูปที่ 8 จะเป็นบอร์ดวงจรสวิตชิ่งเดิมแต่ใช้บอร์ดควบคุม Arduino UNO แทนไอซี UC3842 ซึ่งจะสังเกตตำแหน่งส่งสัญญาณพัลซ์วิดมอดูเลตชั่นที่ขา D9, ขารับสัญญาณตรวจจับกระแสที่ขา D2 และขารับสัญญาณป้อนกลับแรงดันเอาต์พุตที่ขา A1 โดยในการทดลองครั้งนี้จะควบคุมค่าแรงดันเอาต์พุตที่ 24V
/* Voltage mode control flyback converter SMPS based on Arduino UNO MCU : Arduino UNO Fs = 45kHz Vi = 220Vac/50Hz-60Hz Vo = 24V/1.2A Output Power : 28W (Continuous) Date : 24-3-2024 (V.0) */ #include <PWM.h> int PinPWM = 9; int Output_PWM = 0; int Voutput; int32_t frequency = 45000; // Fs frequency (in Hz) void setup() { Serial.begin(9600); pinMode(2, INPUT); // PIN 2 Current Limit Signal pinMode(9,OUTPUT); // PIN 9 PWM Signal OUTPUT InitTimersSafe(); bool success = SetPinFrequencySafe(PinPWM,frequency); if(success) { } } void loop() { MainLoop: Voutput = analogRead(A1); // Serial.print(" V = "); // Serial.print(Voutput); // Loop Output Short circuit and Current Limit Protection if(digitalRead(2) == LOW) { Output_PWM = 0; pwmWrite(PinPWM,Output_PWM); delay(300); goto MainLoop; } if(Voutput>560){Output_PWM = Output_PWM-1; goto goPWMSignal;} if(Voutput<550){Output_PWM = Output_PWM+1; goto goPWMSignal;} goPWMSignal: if(Output_PWM>128){Serial.print("\t MAX "); Output_PWM=128; goto setPWMSignal;} if(Output_PWM<0) {Serial.print("\t MIN "); Output_PWM=0; goto setPWMSignal;} setPWMSignal: pwmWrite(PinPWM,Output_PWM); delay(1); }
สำหรับโปรแกรม Arduino เพื่อทดลองารทำงานของวงจรสวิตชิ่งเพาเวอร์ซัพพลาย แบบฟายแบกคอนเวอร์เตอร์ข้างบนนี้ จะแบ่งออกเป็น 3 ส่วนคือ ส่วนแรกจะเป็นการใช้งานไลบารี่ #include <PWM.h> และประกาศค่าตัวแปรที่จะใช้ในการประมวลผล ส่วนที่สอง void setup() จะเป็นการกำหนดฟังก์ชั่นการใช้งาน bool success = SetPinFrequencySafe(PinPWM,frequency); สำหรับสร้างสัญญาณพัลซ์วิดมอดูเลตชั่นและการกำหนดขาอินพุตและเอาต์พุตในการรับและส่งสัญญาณควบคุมในวงจร ส่วนที่สาม void loop() จะเป็นการอ่านค่าแรงดันเอาต์พุตป้อนกลับ (VFB) เข้ามาที่ขา A1 ด้วยคำสั่ง Voutput = analogRead(A1); จากนั้นนำค่าที่ได้มาเปรียบเทียบด้วยคำสั่ง if(Voutput>560) และ if(Voutput<550) เพื่อปรับเปลี่ยนปรับค่าดิวตี้ไซเกิลสัญญาณพัลซ์วิดมอดูเลตชั่น โดยค่าที่ได้จะถูกกำหนดให้อยู่ในช่วง 0-128 (Duty cycle 0%-50%) และส่งไปยังคำสั่ง pwmWrite(PinPWM,Output_PWM); สุดท้ายที่คำสั่ง if(digitalRead(2) == LOW) จะทำหน้าที่ตรวจสอบกระแสที่ไหลผ่านหม้อแปลงสวิตชิ่งไม่เกิน 3A เท่านั้น
ในรูปที่ 9 ถึงรูปที่ 11 เป็นการทดลองวัดสัญญาณขณะวงจรอยู่ในโหมดสแตนบาย (Stanby mode) โดยในการทดลองจะป้อนแรงดันอินพุต (Vi) กระแสสลับที่ 220Vac และค่าแรงดันเอาต์พุต (Vo) กระแสตรงกำหนดไว้ที่ประมาณ 24Vdc ในรูปที่ 11 เป็นการวัดสัญญาณขับขาเกต (CH1) และกระแสที่ไหลผ่านหม้อแปลงสวิตชิ่ง (CH2)
รูปที่ 12 ถึงรูปที่ 14 การทดลองที่ 1 เมื่อให้วงจรจ่ายกระแสโหลดที่ 0.59A จากนั้นสังเกตสัญญาณพัลซ์วิดมอดูเลตชั่นที่ขาเกต (CH1) และกระแสที่ไหลผ่านหม้อแปลงสวิตชิ่ง (CH2) และวัดค่าแรงดันเอาต์พุตดังในรูปที่ 14 เพื่อดูการเปลี่ยนแปลงค่าแรงดันที่เกิดขึ้น
รูปที่ 15 ถึงรูปที่ 17 การทดลองที่ 2 ให้วงจรจ่ายกระแสโหลดเพิ่มขึ้นที่ 1.18A และสังเกตสัญญาณพัลซ์วิดมอดูเลตชั่นที่ขาเกต (CH1) และกระแสที่ไหลผ่านหม้อแปลงสวิตชิ่ง (CH2) มีค่าเพิ่มขึ้นเมื่อเทียบกับการทดลองที่ 1 ส่วนค่าแรงดันเอาต์พุตในรูปที่ 17 เปลี่ยงแปลงเล็กน้อย
สำหรับโครงงานแหล่งจ่ายไฟสวิตชิ่งเพาเวอร์ซัพพลาย แบบฟายแบกคอนเวอร์เตอร์ และใช้บอร์ดควบคุม Arduino UNO ครั้งนี้ ให้ผลการทดลองเป็นที่น่าพอใจ โดยจะขอเน้นเนื้อหาในเรื่องการศึกษาโครงสร้างฟายแบกคอนเวอร์เตอร์และการนำบอร์ดควบคุม Arduino เข้ามาควบคุมการทำงานเป็นหลัก ซึ่งในกรณีที่จะนำบอร์ดควบคุม Arduino มาเป็นตัวควบคุมให้กับวงจรฟายแบกคอนเวอร์เตอร์ เราจะต้องพิจารณาเรื่องต้นทุนของอุปกรณ์ในการออกแบบโดยรวมอีกเรื่องหนึ่ง
Reference
- https://www.electronicsdna.com/flyback-converter-for-power-switching-panel-tv/
- https://www.ti.com/lit/ml/slup072/slup072.pdf?ts=1623464319352&ref_url=https%253A%252F%252Fwww.google.com%252F
- https://www.onsemi.com/pub/Collateral/AN1327-D.PDF
- https://www.onsemi.com/pub/Collateral/SMPSRM-D.PDF
- http://ww1.microchip.com/downloads/en/appnotes/01114a.pdf
- https://www.microchip.com/content/dam/mchp/documents/OTH/ApplicationNotes/ApplicationNotes/00002122B.pdf
- https://www.ti.com/lit/an/slua143/slua143.pdf?ts=1623464672735&ref_url=https%253A%252F%252Fwww.google.com%252F