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