Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.2)

เดิมจากตอนที่ 1 ได้ทำการทดลองขับมอเตอร์ 3 เฟสด้วยความถี่พาหะสวิตชิ่ง (Carrier-based PWM) ที่ประมาณ 3.9kHz และที่ความถี่ 31kHz ตัวมอเตอร์หมุนได้แต่ยังไม่ดีนัก และพยายามแก้ปัญหาที่เกิดขึ้นด้วยวิธีการต่างๆ จนทำให้เพาเวอร์โมดูลไอจีบีที (Power Module IGBT) เสียหาย และได้สั่งซื้อมาใหม่เพิ่มเติมเพื่อทดลองกันต่อ โดยในตอนที่ 2 จะทดลองใช้สัญญาณขับแบบพัลซ์ความถี่ต่ำประมาณ 24Hz-62Hz ด้วยการใช้บอร์ดควบคุม Arduino UNO สำหรับขับมอเตอร์แบบเบื้องต้นครับ

Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.2)
รูปที่ 1 เพาเวอร์โมดูลไอจีบีที TM-35 ที่สั่งซื้อมาทดลองเพิ่มเติม

ในรูปที่ 1 เป็นเพาเวอร์โมดูลไอจีบีทีที่สั่งซื้อมาใหม่อีก 2 ตัวสำหรับทดลองกันต่อ ซึ่งสามารถสั่งซื้อผ่านช่องทางออนไลน์ต่างๆ เช่น Shopee หรือ Lazada ครับ

Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.2)
รูปที่ 2 เตรียมถอดเปลี่ยนเพาเวอร์โมดูลไอจีบีที
Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.2)
รูปที่ 3 ถอดเพาเวอร์โมดูลไอจีบีทีเดิมออก

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

Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.2)
รูปที่ 4 เปลี่ยนตัวเพาเวอร์โมดูลไอจีบีทีเรียบร้อยแล้ว

รูปที่ 4 ลักษณะของการเปลี่ยนเพาเวอร์โมดูลไอจีบีทีเสร็จเรียบร้อยและต่อสายไฟเลี้ยงแรงดันสูง, สายเชื่อมต่อกับมอเตอร์ทั้ง 3 เส้น และสายสัญญาณสำหรับควบคุมจากบอร์ด Arduino UNO

Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.2)
รูปที่ 5 ลักษณะการยึดเพาเวอร์โมดูลไอจีบีที (1)
Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.2)
รูปที่ 6 ลักษณะการยึดเพาเวอร์โมดูลไอจีบีที (2)

รูปที่ 5 และรูปที่ 6 แสดงลักษณะการยึดเพาเวอร์โมดูลไอจีบีทีและการเชื่อต่อระหว่างบอร์ดควบคุม Arduino UNO

Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.2)
รูปที่ 7 แสดงเตรียมการทดลองใหม่อีกครั้ง

รูปที่ 7 เริ่มการทดลองด้วยการเชื่อมต่อสายขับกำลังมอเตอร์ทั้ง 3 เส้น (U V W) และขารับไฟเลี้ยงจะต่อเข้ากับแหล่งจ่ายแรงดันสูงแบบปรับค่าได้ด้วยวาริแอก

Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.2)
รูปที่ 8 การทดสอบวัดสัญญาณพัลซ์ที่เกิดขึ้น

รุปที่ 8 ลักษณะของการวัดสัญญาณที่เกิดขึ้นจากบอร์ดควบคุม Arduino UNO โดยเราจะตรวจสอบในเรื่องของความถี่ที่เกิดขึ้นด้านความถี่สูงและความถี่ต่ำ การตรวจสอบช่วงสัญญาณหยุดการทำงานช่วงขณะ (Dead Time) ระหว่างตัวขับกำลังด้านบน (High side) และ (Low side) ให้อยู่ในช่วงที่เหมาะสม

Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.2)
รูปที่ 9 ลักษณะการต่ออุปกรณ์สำหรับการทดลอง

รูปที่ 9 แสดงลักษณะของการต่ออุปกรณ์และเครื่องมือต่างๆ ในการทดลองโดยในการทดลองนี้จะสุ่มวัดสัญญาณที่เกิดขึ้นจากขา D3 และ D11 ของบอร์ดควบคุม Arduino UNO เพื่อสังเกตร่วมกับผลการทดลองที่เกิดขึ้น

/*
  Program test speed control 3phase Induction Motor
  MCU : Arduino UNO
  +VBUS : 130VDC
  SpeedAdj : POT 10K(B)@ ADC:A0
  Frequency pulse signal : 24Hz-62Hz
  Dev by : www.electronicsDNA.com 
  Date : 18-9-2021 (V.0)
*/

int UHI = 6;     // Hi U for IGBT
int ULO = 5;     // Lo U for IGBT
int VHI = 11;    // Hi V for IGBT
int VLO = 3;     // Lo V for IGBT
int WHI = 9;     // Hi W for IGBT
int WLO = 10;    // Lo W for IGBT
int Deadtime = 60;   // SET Dead time
int on_time = 1200;  // SET ON time 
int val = 0;               
                                    
void setup() 
{
Serial.begin(9600); 
pinMode(UHI, OUTPUT);    // Set pin for output 6 signal driver
pinMode(ULO, OUTPUT);
pinMode(VHI, OUTPUT);
pinMode(VLO, OUTPUT);
pinMode(WHI, OUTPUT);
pinMode(WLO, OUTPUT);

digitalWrite(UHI, LOW);    // set Output 6 pin All Logic LOW  
digitalWrite(ULO, LOW);
digitalWrite(VHI, LOW);
digitalWrite(VLO, LOW);
digitalWrite(WHI, LOW);
digitalWrite(WLO, LOW);
delay(500);
}

void loop()  
{
   on_time = 2500;                   // 2500
   val = analogRead(A0);         // Read ADC0 for value data
   val = (1024-val);                  // Inv Val for Adj Time Driver  
   on_time = on_time+(val*4);
   Serial.println(on_time);        // Send data for observe time 
 
   digitalWrite(VLO, HIGH);    
   delayMicroseconds(on_time);
   digitalWrite(WLO, LOW);     
   delayMicroseconds(Deadtime);  
   digitalWrite(WHI, HIGH);    
   delayMicroseconds(on_time);
   digitalWrite(UHI, LOW);     
   delayMicroseconds(Deadtime);  
   digitalWrite(ULO, HIGH);    
   delayMicroseconds(on_time);
   digitalWrite(VLO, LOW);     
   delayMicroseconds(Deadtime);  
   digitalWrite(VHI, HIGH);    
   delayMicroseconds(on_time);
   digitalWrite(WHI, LOW);     
   delayMicroseconds(Deadtime);  
   digitalWrite(WLO, HIGH);    
   delayMicroseconds(on_time);    
   digitalWrite(ULO, LOW);     
   delayMicroseconds(Deadtime);  
   digitalWrite(UHI, HIGH);    
   delayMicroseconds(on_time);
   digitalWrite(VHI, LOW);     
   delayMicroseconds(Deadtime);     
}

สำหรับโปรแกรมการทดลองข้างบนนี้เป็นตัวอย่างแบบง่าย เพื่อใช้ในการทดลองการขับมอเตอร์ด้วยความถี่ต่ำ โดยเริ่มต้นจะกำหนดค่าการหน่วงเวลาเริ่มต้นที่ 2500uS (on_time = 2500;) และเราสามารถปรับความถี่ขับมอเตอร์ด้วยตัวต้านทานปรับค่า (RP1) มายังตัวแปร val (val = analogRead(A0);) ที่เป็นส่วนสำคัญ และเราสามารถปรับตัวโปรแกรมเพื่อใช้งานในรูปแบบต่างๆ ตามความเหมาะสม

Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.2)
รูปที่ 10 สัญญาณขับมอเตอร์ที่ขา D3 และ D11 ที่ความถี่ต่ำประมาณ 24Hz
Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.2)
รูปที่ 11 สัญญาณขับมอเตอร์ที่ขา D3 และ D11 ที่ความถี่สูงประมาณ 62Hz

รูปที่ 10 และรูปที่ 11 แสดงลักษณะของสัญญาณที่เกิดขึ้นจากบอร์ดควบคุม Arduino UNO เมื่อทดลองปรับค่าความต้านทาน RP1 เพื่อตรวจสอบการปรับความถี่ของการขับมอเตอร์ให้อยู่ในช่วงที่กำหนด โดยจากผลการทดลองด้านความถี่ต่ำจะอยู่ที่ประมาณ 24Hz และด้านความที่สูงประมาณ 62Hz นั้นเอง

รูปที่ 12 วงจรที่ใช้ในการทดลอง (ใช้วงจรเดิมในเวอร์ชั่น 1)

รูปที่ 12 เป็นลักษณะของวงจรที่ใช้ในการทดลองโดยเป็นวงจรเดียวกับในตอนที่ 1 แต่ที่ค่าแรงดันไฟเลี้ยงเดิม (+BUS) ประมาณ 100VDC โดยในการทดลองนี้จะเพิ่มเป็น 130VDC เท่านั้น ในส่วนอื่นยังคงลักษณะเดิมทั้งหมด

Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.2)
รูปที่ 13 ลักษณะของการทดลองโครงงาน (1)
รูปที่ 14 ลักษณะของการทดลองโครงงาน (2)

รูปที่ 13 และรูปที่ 14 เป็นลักษณะของการทดลองโครงงานในตอนที่ 2 ซึ่งจากการทดลอง ตัวมอเตอร์สามารถหมุนได้เป็นที่น่าพอใจแต่อาจจะยังให้แรงบิดไม่ตลอดย่านที่กำหนด (ไม่เป็นเชิงเส้นมากนัก) ซึ่งจะต้องปรับรูปแบบของการขับให้เหมาะสมยิ่งขึ้น ทั้งนี้ในการทดลองยังคงเป็นแนวทางเบื้องต้น เพื่อศึกษาพฤติกรรมการทำงานของเพาเวอร์โมดูลไอจีบีที TM-35 และเป็นการทดลองสำหรับแชร์ให้ผู้อ่านสามารถนำไปปรับใช้งานได้ตามความเหมาะสมครับ.

Reference

  1. https://electronics-project-hub.com/3-phase-sine-wave-generator-code-arduino
  2. https://forum.arduino.cc/index.php?topic=236778.0
  3. https://github.com/cmasenas/3-Phase-Sine-Arduino/blob/Release/DDS_Generator.ino
  4. https://forum.arduino.cc/index.php?topic=121727.0
  5. http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-dds-sinewave-generator/index.html
  6. http://www.berryjam.eu/2015/04/driving-bldc-gimbals-at-super-slow-speeds-with-arduino
  7. https://www.infineon.com/dgdl/AP1609710_different_PWM_for_three_phase_ACIM.pdf?fileId=db3a304412b407950112b40a1bf20453
  8. https://github.com/carneeki/OpenVFD/blob/master/software/OpenVFD.ino
  9. https://pdf.dzsc.com/FSB/FSBS10CH60.pdf
  10. https://www.onsemi.com/products/power-modules/intelligent-power-modules-ipms/fsbs10ch60
  11. http://smartguard2000.com/www.smartguard.org/indexbced.html?lay=show&ac=article&Id=539046650