Simple Test SVPWM 3 Phase Induction Motor by Arduino UNO

สำหรับการทดลองนี้เป็นการทดลองแบบง่ายๆ เพื่อขับมอเตอร์ 3 เฟสแบบอินดักชั่น SVPWM ด้วยตัวควบคุม Arduino UNO โดยการทดลองนี้จะเป็นการกำหนดค่า SVPWM จากนั้นใช้การเพิ่มและลดค่า T0, T1 และ T2 ในลักษณะเชิงเส้นเพื่อสังเกตพฤติกรรมและการทำงานของ SVPWM เบื้องต้น สำหรับการควบคุมมอเตอร์ด้วยวิธี SVPWM นั้น เราจะต้องคำนวณค่า T0, T1 และ T2 สำหรับควบคุมความเร็วและแรงบิดตามคุณลักษณะของตัวมอเตอร์ที่ซับซ้อนยิ่งขึ้น ซึ่งขอแนะนำให้ดูข้อมูลตามที่อ้างอิง [1][2] ข้างล่างนี้

Simple Test SVPWM 3 Phase Induction Motor by Arduino UNO
รูปที่ 1 แสดงลักษณะการทดลองวัดสัญญาณที่เกิดขึ้นในลักษณะ SVPWM

รูปที่ 1 จะเป็นการทดลองวัดสัญญาณที่เกิดขึ้นจากการสร้างสัญญาณ SVPWM จากโปรแกรมทั้ง 3 ช่อง คือ ที่ขา D2, D4 และ D6 โดยสัญญาณที่เกิดขึ้นที่จะเป็นไปตามลำดับของการควบคุมในส่วนของเซกเตอร์ (Sector) และกลุ่มของเวกเตอร์ (Vector) ที่สัมพันธ์กันตามช่วงเวลานั้น

Simple Test SVPWM 3 Phase Induction Motor by Arduino UNO
รูปที่ 2 บอร์ดควบคุม Arduino UNO ที่ใช้ในการทดลอง

รูปที่ 2 เป็นบอร์ควบคุมการสร้างสัญญาณโดยในการทดลองนี้จะใช้เป็น Arduino UNO ซึ่งเป็นบอร์ดที่นิยมใช้งานทั่วไป ราคาไม่แพง และสามารถทดลองโครงงานนี้ได้ดี ซึ่งเราสามารถปรับลักษณะการทำงานได้ตามความเหมาะสม

Simple Test SVPWM 3 Phase Induction Motor by Arduino UNO
รูปที่ 3 ส่วนของบอร์ด Smart Power Module : BM64364S สำหรับขับมอเตอร์

รูปที่ 3 บอร์ด Smart Power Module : BM64364S ที่ใช้ในการทดลอง ซึ่งช่วยให้เราสะดวกในการทดลองและออกแบบวงจรได้ง่าย รวมทั้งการจัดการเรื่องสัญญาณต่างๆ ระหว่าง Smart Power Module และบอร์ดควบคุม Arduino UNO ก็ง่ายอีกด้วย

Datasheet for IPM Power IGBT BM64364S-VA

Simple Test SVPWM 3 Phase Induction Motor by Arduino UNO
รูปที่ 4 มอเตอร์ที่ใช้ในการทดลองขนาด 1 แรงม้า 4 โพล

รูปที่ 4 มอเตอร์ที่ใช้ในการทดลอง ซึ่งใช้ขนาดใม่ใหญ่มากเพื่อให้สามารถทดลองได้ง่ายและสะดวกมากขึ้น

/* 
 Arduino Program code credit in the experiment 
 1.http://electrotech4u.blogspot.com/2011/07/implementation-of-space-vector.html
 2.http://electrotech4u.blogspot.com/2013/12/code-for-space-vector-modulation.html
 3.https://www.edaboard.com/threads/svpwm-crooked-3-phase-inverter-output-what-is-wrong-with-the-circuit-proteus.385614/

 MCU : Arduino UNO 
 DC link : 250VDC
 Motor type : 1HP 3 Phase induction 4 Pole
 Smart Power Module : BM64364S
 DC power supply for MCU : 15VDC
 */

 int  valADC = 0; 
 int  D2 = 2, D3 = 3, D4 = 4, D5 = 5, D6 = 6, D7 = 7; // Arduino digital Pins
 int  T0 = 0;   // (T0)
 int  T1 = 0;   // (T1)
 int  T2 = 0;   // (T2)
 // int  T0/7 = (T0/7 = Ts-(T1+T2))

 int  V0 = B10101000;    
 int  V1 = B10100100;   
 int  V2 = B10010100;   
 int  V3 = B10011000;   
 int  V4 = B01011000;   
 int  V5 = B01101000;   
 int  V6 = B01100100;   
 int  V7 = B01010100;  

 void setup() {  
 Serial.begin(9600);   // Arduino UNO
 pinMode(D2, OUTPUT);  // Hi U
 pinMode(D3, OUTPUT);  // Lo U
 pinMode(D4, OUTPUT);  // Hi V
 pinMode(D5, OUTPUT);  // Lo V
 pinMode(D6, OUTPUT);  // Hi W
 pinMode(D7, OUTPUT);  // Lo W  
 PORTD= B00000000;
 delay(500);
 }
 
void loop()
 {
 valADC = analogRead(A0);    
 valADC = (valADC/16);    
 if (valADC<20) {valADC = 12;}         
 T0 = valADC;      // T0 Adj range 12uS-64uS
 T1 = (valADC*2);  // T1 Adj range 24uS-128uS 
 T2 = (valADC*3);  // T0 Adj range 36uS-192uS
 /* 
 Serial.println(T0);  
 Serial.println(T1);  
 Serial.println(T2);        
 delay(500);
 */  
 // sector_1---------------------------
 // v0-v1-v2-v7-v2-v1-v0   
 // v0:
 PORTD= V0;   
 delayMicroseconds(T0);   
 //v1:
 PORTD= V1;   
 delayMicroseconds(T1);         
 //v2:
 PORTD= V2;   
 delayMicroseconds(T2);        
 //v7:
 PORTD= V7;  
 delayMicroseconds(T0);     
 //v2:
 PORTD= V2;   
 delayMicroseconds(T2);    
 //v1:
 PORTD= V1;  
 delayMicroseconds(T1); 
 //v0:
 PORTD= V0;  
 delayMicroseconds(T0); 
 //sector_2---------------------------
 //v0-v3-v2-v7-v2-v3-v0
 //v0:
 PORTD= V0;     
 delayMicroseconds(T0); 
 //v3:
 PORTD= V3;   
 delayMicroseconds(T2); 
 //v2:
 PORTD= V2;     
 delayMicroseconds(T1); 
 //v7:
 PORTD= V7;  
 delayMicroseconds(T0); 
 //v2:
 PORTD= V2;  
 delayMicroseconds(T1); 
 //v3:
 PORTD= V3;  
 delayMicroseconds(T2); 
 //v0:
 PORTD= V0;  
 delayMicroseconds(T0); 
 //sector_3---------------------------
 //v0-v3-v4-v7-v4-v3-v0
 //v0:
 PORTD= V0;  
 delayMicroseconds(T0);
 //v3:
 PORTD= V3;  
 delayMicroseconds(T1);
 //v4:
 PORTD= V4;  
 delayMicroseconds(T2);
 //v7:
 PORTD= V7;  
 delayMicroseconds(T0);
 //v4:
 PORTD= V4;  
 delayMicroseconds(T2);
 //v3:
 PORTD= V3;  
 delayMicroseconds(T1);
 //v0:
 PORTD= V0;  
 delayMicroseconds(T0);
 //sector_4---------------------------
 //v0-v5-v4-v7-v4-v5-v0
 //v0:
 PORTD= V0;  
 delayMicroseconds(T0);
 //v5:
 PORTD= V5;  
 delayMicroseconds(T2);
 //v4:
 PORTD= V4;  
 delayMicroseconds(T1);
 //v7:
 PORTD= V7;  
 delayMicroseconds(T0);
 //v4:
 PORTD= V4;  
 delayMicroseconds(T1);
 //v5:
 PORTD= V5;  
 delayMicroseconds(T2);
 //v0:
 PORTD= V0;  
 delayMicroseconds(T0);
 //sector_5---------------------------
 //v0-v5-v6-v7-v6-v5-v0
 //v0:
 PORTD= V0;  
 delayMicroseconds(T0);
 //v5:
 PORTD= V5;  
 delayMicroseconds(T1);
 //v6:
 PORTD= V6;  
 delayMicroseconds(T2);
 //v7:
 PORTD= V7;  
 delayMicroseconds(T0);
 //v6:
 PORTD= V6;  
 delayMicroseconds(T2);
 //v5:
 PORTD= V5;  
 delayMicroseconds(T1);
 //v0:
 PORTD= V0;  
 delayMicroseconds(T0);
 //sector_6---------------------------
 //v0-v1-v6-v7-v6-v1-v0
 //v0:
 PORTD= V0;  
 delayMicroseconds(T0);
 //v1:
 PORTD= V1;  
 delayMicroseconds(T2);
 //v6:
 PORTD= V6;  
 delayMicroseconds(T1);
 //v7:
 PORTD= V7;  
 delayMicroseconds(T0);
 //v6:
 PORTD= V6;  
 delayMicroseconds(T1);
 //v1:
 PORTD= V1;  
 delayMicroseconds(T2);
 //v0:
 PORTD= V0;  
 delayMicroseconds(T0);    
 } 
Simple Test SVPWM 3 Phase Induction Motor by Arduino UNO
รูปที่ 5 แสดงลักษณะของการต่ออุปกรณ์ต่างๆ สำหรับการทดลอง
รูปที่ 6 วงจรที่ใช้ในการทดลองมอเตอร์ 3 เฟส

รูปที่ 5 แสดงการต่ออุปกรณ์ต่างๆ สำหรับการทดลอง ซึ่งการทดลองครั้งนี้ เป็นแนวความคิดเบื้องต้น เพื่อต้องการใช้โค้ดโปรแกรมที่ไม่ยาวมาก แต่พอทำให้เข้าใจการทำงานและสามารถปรับค่าตัวแปรต่างๆ สำหรับเปลี่ยนค่าพารามิเตอร์ในการควบคุมมอเตอร์ด้วยวิธีการนี้

ท้ายนี้แอดมินขอแนะนำข้อมูลอ้างอิงจากลิ้งข้างล่างนี้ เพื่อเป็นแนวทางในการศึกษาเพิ่มเติม ซึ่งจะช่วยให้เราเข้าใจค่าตัวแปรต่างๆ ที่จะใช้ในการปรับค่า และสามารถควบคุมการทำงานของตัวมอเตอร์ได้อย่างมีประสิทธิภาพสูงสุดครับ.

Reference

  1. http://electrotech4u.blogspot.com/2011/07/implementation-of-space-vector.html
  2. http://electrotech4u.blogspot.com/2013/12/code-for-space-vector-modulation.html
  3. https://www.edaboard.com/threads/svpwm-crooked-3-phase-inverter-output-what-is-wrong-with-the-circuit-proteus.385614/