Simple MPPT DC-DC Buck Converter with Arduino UNO [LEP]

โครงงานนี้เป็นการออกแบบวงจรซิงโครนัสบักคอนเวอร์เตอร์ขนาดเล็กโดยใช้ไอซี L293D เป็นส่วนของวงจรขับกำลังและใช้บอร์ดควบคุม Arduino UNO ในการประมวลผล โดยโครงงานนี้เป็นเนื้อหาต่อเนื่องจากบทความ Simple MPPT DC-DC Buck Converter with Arduino MEGA1280 [EP1] ทั้งนี้เพื่อศึกษาการทำงานของการติดตามตำแหน่งการจ่ายกำลังไฟฟ้าสูงสุดของโซล่าร์เซลล์ (MPPT : Maximum Power Point Tracking) ให้กับโหลดต่างๆ ต่อไป

Simple MPPT DC-DC Buck Converter with Arduino UNO [LEP]
รูปที่ 1 วงจรที่ออกแบบและใช้ในการทดลองโครงงาน

รูปที่ 1 แสดงวงจรที่ออกแบบและใช้ในการทดลองโครงงาน โดยจะแบ่งภาคการทำงานออกเป็น 3 ส่วนคือ ส่วนแรกซ้ายมือจะเป็นแผงโซล่าร์เซลล์ขนาด 24V จะทำหน้าที่เป็นแหล่งจ่ายพลังงานไฟฟ้าให้กับโหลดต่างๆ ที่ต้องการ ส่วนที่สองเป็นบอร์ดประมวลผล Arduino UNO จะทำหน้าที่รับค่าแรงดัน V(n) และ กระแส I(n) มาประมวลผล เพื่อหาค่าตำแหน่งที่แผงโซล่าร์เซลล์ให้พลังงานไฟฟ้าสูงสุดไปยังโหลด ในส่วนที่สามเป็นวงจรบักคอนเวอร์เตอร์ซึ่งจ่ายกระแสให้กับโหลด (RL) ประมาณ 2.4A (600mAx4) ที่แรงดันเอาต์พุตประมาณ 12V โดยโหลดจะหมายถึงวงจรต่างๆ เช่น วงจรชาร์จแบตเตอรี่, แหล่งจ่ายไฟเลี้ยงแรงดันต่ำกว่า 12V หรือปั้มน้ำขนาดเล็ด 12V เป็นต้น

// Simple MPPT DC-DC Converter //

// --- Global Variables --- 
//     Pin Definitions 

const int PWM_PIN = 9;         // The Arduino pin (e.g., Pin 9 or 10 on Uno for Timer1)
const int VIN_PIN = A0;        // Analog pin for Solar Panel Voltage sensing
const int IIN_PIN = A1;        // Analog pin for Solar Panel Current sensing
const int addLED = 13;         // Display for Power increased 

// MPPT Variables
int pwm = 128;            // Initial PWM duty cycle (0-255 for 8-bit timer)
int delta = 3;            // Small step size for changing the PWM
float Power_now = 0;
float Power_anc = 0;        // "anc" stands for 'previous' or 'ancient'

// ---------------------------------------------

void setup() {
  pinMode(PWM_PIN, OUTPUT);
  pinMode(addLED, OUTPUT);
  Serial.begin(9600);
  
  // --- HIGH-FREQUENCY PWM SETUP (CRITICAL FOR DC-DC CONVERTER) ---
  // A standard analogWrite() is too slow.
  // This example sets Timer1 on an Uno (Pins 9 and 10) to Fast PWM mode with no prescaler (~31.25 kHz)
   
     TCCR1B = TCCR1B & B11111000 | B00000001; // 31KHz //D11 & 12
     TCCR1A |= 0x30; // inversion
   
  analogWrite(PWM_PIN, pwm); // Start PWM at the initial duty cycle
}

void loop() {
  
  // 1. Read and Scale Input Values
  
  float Vin = analogRead(VIN_PIN) * 0.0293;     // 30V
  float Iin = analogRead(IIN_PIN) * 0.004889;   // 5A  
  
  // 2. Calculate Current Power
  
   Power_now = Vin * Iin;    

  // 3. MPPT - Perturb and Observe (P&O) Algorithm   
      
  // Power increased 
  if (Power_now > Power_anc) {pwm += delta; digitalWrite(13, HIGH);delay(100);digitalWrite(13, LOW);}  
  // Power decreased    
  if (Power_now < Power_anc) {pwm -= delta; delay(100);}     
 
  // 4. Update the PWM Output
  // Constrain the PWM value to prevent overflow and protect the circuit (0 to 255)
     pwm = constrain(pwm, 10, 250); // Added a small margin from 0 and 255
     analogWrite(PWM_PIN, pwm);

  // 5. Save the Current Power for the next cycle  
     Power_anc = Power_now;

  // 6. Optional: Print values for debugging/monitoring
     Serial.print("Vin: "); Serial.print(Vin);
     Serial.print("V, Iin: "); Serial.print(Iin);
     Serial.print("A Power: "); Serial.print(Power_now);
     Serial.print("W, PWM: "); Serial.println(pwm);
     delay(200); // Wait 200ms before the next perturbation
}
Simple MPPT DC-DC Buck Converter with Arduino UNO [LEP]
รูปที่ 2 วงจรต้นแบบที่ใช้ในการทดลอง

ในรูปที่ 2 แสดงวงจรต้นแบบของการทดลองวงจร โดยในการทดลองนี้จะใช้แหล่งจ่ายไฟเลี้ยงกระแสตรง (DC Power supply) แทนโซล่าร์เซลล์และปรับค่าแรงดันที่ประมาณ 20V สำหรับทดลอง ซึ่งในการทดลองจะมี 3 เงื่อนไขคือ 1. ปรับค่าแรงดันอินพุตให้เพิ่มขึ้นเรื่อยๆ (15V-20V) ใน เงื่อนไขที่ 2. ทดลองปรับค่าแรงดันอินพุตให้ลดลงเรื่อยๆ (20V-15V) และ เงื่อนไขที่ 3. ไม่ปรับค่าแรงดันอินพุตใดๆ (20V) เพื่อสังเกตการทำงานและใช้ตัวต้านทานค่าคงที่ 20 โอห์มเป็นโหลด (RL)

Simple MPPT DC-DC Buck Converter with Arduino UNO [LEP]
รูปที่ 3 ผลการทดลองที่ 1 เมื่อค่าพลังงานที่ได้ P(n) > P(n-1)

ในรูปที่ 3 แสดงผลการทดลองเมื่อใช้ตัวต้านทานค่าคงที่ขนาด 20 โอห์มเป็นโหลด จากนั้นทดลองปรับค่าแรงดันอินพุตให้เพิ่มขึ้นเรื่อยๆ (P(n) > P(n-1)) จะสังเกตเห็นว่าระบบ MPPT จะติดตามไปที่ตำแหน่งการจ่ายพลังงานไฟฟ้าสูงสุดให้กับโหลด (ในกรณีที่โหลดเป็นระบบชาร์จแบตเตอรี่จะทำให้ชาร์ประจุได้มากที่สุด) โดยทั่วไปในช่วงเวลานี้แผงโซล่าร์เซลล์จะได้รับความเข้มแสงสูง

Simple MPPT DC-DC Buck Converter with Arduino UNO [LEP]
รูปที่ 4 ผลการทดลองที่ 2 เมื่อค่าพลังงานที่ได้ P(n) < P(n-1)

ในรูปที่ 4 แสดงผลการทดลองเมื่อใช้ตัวต้านทานค่าคงที่ขนาด 20 โอห์มเป็นโหลด จากนั้นทดลองปรับค่าแรงดันอินพุตให้ลดลงเรื่อยๆ (P(n) < P(n-1)) จะสังเกตเห็นว่าระบบ MPPT จะติดตามไปที่ตำแหน่งการจ่ายพลังงานไฟฟ้าสูงสุดให้กับโหลดเช่นเดิม (ในกรณีที่โหลดเป็นระบบชาร์จแบตเตอรี่จะทำให้ชาร์ประจุลดลง) โดยทั่วไปในช่วงเวลานี้แผงโซล่าร์เซลล์จะได้รับความเข้มแสงน้อย

Simple MPPT DC-DC Buck Converter with Arduino UNO [LEP]
รูปที่ 5 ผลการทดลองที่ 3 เมื่อค่าพลังงานที่ได้ P(n) = P(n-1)

ในรูปที่ 5 แสดงผลการทดลองเมื่อใช้ตัวต้านทานค่าคงที่ขนาด 20 โอห์มเป็นโหลด และไม่ปรับค่าแรงดันอินพุตใดๆ (P(n) = P(n-1)) จะสังเกตเห็นว่าระบบ MPPT จะคงตำแหน่งการจ่ายพลังงานไฟฟ้าสูงสุดให้กับโหลดไว้ (ในกรณีที่โหลดเป็นระบบชาร์จแบตเตอรี่จะทำให้ชาร์ประจุคงที่ค่าปัจจุบัน) โดยทั่วไปในช่วงเวลานี้แผงโซล่าร์เซลล์จะได้รับความเข้มแสงคงที่เช่นกัน

Simple MPPT DC-DC Buck Converter with Arduino UNO [LEP]
รูปที่ 6 แสดงสัญญาณพัลซ์วิดธ์มอดูเลตชั่นที่ขา 3, 6, 11 และ 14 ไอซี L293D

สำหรับโครงงานการออกแบบวงจรซิงโครนัสบักคอนเวอร์เตอร์ขนาดเล็กโดยใช้ไอซี L293D เป็นส่วนวงจรขับกำลังและใช้บอร์ดควบคุม Arduino UNO ในการประมวลผล โดยวงจรต้นแบบนี้จ่ายกระแสโหลดได้ไม่สูงนักเนื่องจากใช้ไอซีสำเร็จวงจรขับกำลัง (สามารถออกแบบวงจรขับกำลังใหม่เพิ่มเติมได้ภายหลัง) ทั้งนี้เนื้อหาของการทดลองยังเป็นแนวความคิดเบื้องต้นของการศึกษาการทำงานระบบ MPPT : Maximum Power Point Tracking สำหรับนำความรู้ที่ได้ไปพัฒนาระบบการทำงานต่างๆ เพื่อให้สามารถควบคุมการจ่ายพลังงานไฟฟ้าสูงได้ดีขึ้นต่อไป

Reference

  1. https://www.ti.com/lit/ug/tidu404/tidu404.pdf
  2. https://www.researchgate.net/publication/330653338_DC-DC_Boost_Converter_Design_for_Fast_and_Accurate_MPPT_Algorithms_in_Stand-Alone_Photovoltaic_System
  3. https://www.researchgate.net/figure/Electronic-diagram_fig11_303563850
  4. https://www.researchgate.net/figure/Flowchart-of-conventional-HC-MPPT_fig10_303563850
  5. https://www.researchgate.net/figure/Flow-diagram-of-the-perturb-and-observe-P-O-algorithm_fig1_366942234
  6. https://pdfs.semanticscholar.org/d99a/94f1110d6e68d85c90547ea877aefd8fb53f.pdf
  7. https://ijarsct.co.in/Paper5700.pdf
  8. https://www.ijareeie.com/upload/2013/december/25_2Copies_DCToDC.pdf
  9. https://www.researchgate.net/figure/Searching-strategy-of-conventional-P-O-MPPT-algorithm_fig3_354901321
  10. https://www.researchgate.net/figure/Flowchart-of-P–O-based-MPPT-Algorithm_fig1_360395692
  11. https://www.ti.com/lit/an/slvafc9/slvafc9.pdf
  12. https://energybases.com/blog/mppt-explained-principles-benefits-top-brands/