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 สำหรับขับมอเตอร์แบบเบื้องต้นครับ

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


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

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


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

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

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

รูปที่ 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);) ที่เป็นส่วนสำคัญ และเราสามารถปรับตัวโปรแกรมเพื่อใช้งานในรูปแบบต่างๆ ตามความเหมาะสม


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

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


รูปที่ 13 และรูปที่ 14 เป็นลักษณะของการทดลองโครงงานในตอนที่ 2 ซึ่งจากการทดลอง ตัวมอเตอร์สามารถหมุนได้เป็นที่น่าพอใจแต่อาจจะยังให้แรงบิดไม่ตลอดย่านที่กำหนด (ไม่เป็นเชิงเส้นมากนัก) ซึ่งจะต้องปรับรูปแบบของการขับให้เหมาะสมยิ่งขึ้น ทั้งนี้ในการทดลองยังคงเป็นแนวทางเบื้องต้น เพื่อศึกษาพฤติกรรมการทำงานของเพาเวอร์โมดูลไอจีบีที TM-35 และเป็นการทดลองสำหรับแชร์ให้ผู้อ่านสามารถนำไปปรับใช้งานได้ตามความเหมาะสมครับ.
Reference
- https://electronics-project-hub.com/3-phase-sine-wave-generator-code-arduino
- https://forum.arduino.cc/index.php?topic=236778.0
- https://github.com/cmasenas/3-Phase-Sine-Arduino/blob/Release/DDS_Generator.ino
- https://forum.arduino.cc/index.php?topic=121727.0
- http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-dds-sinewave-generator/index.html
- http://www.berryjam.eu/2015/04/driving-bldc-gimbals-at-super-slow-speeds-with-arduino
- https://www.infineon.com/dgdl/AP1609710_different_PWM_for_three_phase_ACIM.pdf?fileId=db3a304412b407950112b40a1bf20453
- https://github.com/carneeki/OpenVFD/blob/master/software/OpenVFD.ino
- https://pdf.dzsc.com/FSB/FSBS10CH60.pdf
- https://www.onsemi.com/products/power-modules/intelligent-power-modules-ipms/fsbs10ch60
- http://smartguard2000.com/www.smartguard.org/indexbced.html?lay=show&ac=article&Id=539046650