การควบคุมมอเตอร์ไฟตรง

มอเตอร์ไฟตรง

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

1. มอเตอร์ไฟฟ้ากระแสตรง (DC Motor)

2. มอเตอร์ไฟฟ้ากระแสสลับ (AC Motor)

โดยมอเตอร์ทั้งสองประเภทจะมีส่วนประกอบที่แตกต่างกันออกไปบ้างแต่ส่วนประกอบหลักคือจะมีส่วนที่อยู่กับที่เราเรียกว่า สเตเตอร์ (Stator) และส่วนที่เคลื่อนที่ซึ่งเราเรียกว่า โรเตอร์ (Rotor) มอเตอร์ไฟฟ้ากระแสตรงมีด้วยกันหลายแบบ สำหรับมอเตอร์ไฟฟ้ากระแสตรงอย่างง่ายคือมอเตอร์ที่ใช้แม่เหล็กถาวร

 

หลักการทำงาน

มอเตอร์จะอาศัยแรงดูดและแรงผลักที่เกิดจากสนามแม่เหล็กเมื่อมีกระแสไหลผ่านลวดตัวนำจะทำให้เกิดสนามแม่เหล็กรอบตัวนำนั้น ถ้าเรานำตัวนำดังกล่าวไปวางไว้ในสนามแม่เหล็กจากแม่เหล็กถาวรก็จะเกิดการต้านและเสริมกับเส้นแรงแม่เหล็กจากแม่เหล็กถาวร ทำให้เกิดแรงดูดและแรงผลักขึ้นที่ขดลวด รูปที่ 1(ก) แสดงลักษณะโครงสร้างของมอเตอร์ไฟตรงที่ใช้แม่เหล็กถาวรในส่วนของสเตเตอร์และมีการป้อนกระแสผ่านคอมมิวเตเตอร์ไปยังโรเตอร์ เพื่อให้แกนเหล็กที่โรเตอร์เป็นแม่เหล็กไฟฟ้า ดังแสดงในรูปที่ 1(ข) โดยกระแสไฟฟ้า I จะทำให้เกิดแรง F ขึ้น

จากรูปที่ 1 จะเห็นได้ว่าเมื่อจ่ายกระแสผ่านขั้วต่อที่เรียกว่าแปรงถ่าน (brushes) ไปยังวงแหวนพิเศษที่เรียกว่า คอมมิวเตเตอร์ (commutator) ซึ่งต่อเข้ากับวงรอบตัวนำกระแสที่ไหลผ่านตัวนำจะทำให้เกิดเส้นแรงแม่เหล็กรอบตัวนำโดยด้านหนึ่งจะเกิดเป็นแรงผลักขึ้น ทำให้วงรอบตัวนำมีการหมุน โดยแรงที่เกิดจะแปรตาม กระแสที่ไหลผ่าน I ความยาวของตัวนำ lและความเข้มของสนามแม่เหล็กถาวร B

 

image description

 

รูปที่ 1 (ก) โครงสร้างและ (ข) การทำงานของมอเตอร์ไฟตรง

 

รูปที่ 2 แสดงภาพถ่ายลักษณะภายในของมอเตอร์ไฟตรงขนาดเล็กทั่วไป โดยรูปที่ 2(ก) แสดงส่วนของสเตเตอร์ซึ่งประกอบด้วยแม่เหล็กถาวรและส่วนของแปรงถ่านซึ่งเป็นส่วนที่อยู่นิ่งของขั้วที่ส่งกระแสไฟฟ้าเข้าไปยังขดลวดอาร์เมเจอร์ และ รูปที่ 2(ข) แสดงส่วนของโรเตอร์ โดยมอเตอร์ไฟตรงที่ใช้แม่เหล็กถาวรในทางปฏิบัติจะมีการเพิ่มความยาวของลวดตัวนำซึ่งเป็นส่วนของขดลวดบนโรเตอร์โดยการพันขดลวดรอบแกนโลหะ ซึ่งเรามักเรียกขดลวดนี้ว่า ขดลวดอาร์เมเจอร์ (armature) เพื่อเป็นการเพิ่มแรงบิดให้กับมอเตอร์ คอมมิวเตเตอร์เป็นส่วนที่หมุนของขั้วที่รับกระแสไฟฟ้าเข้าไปยังขดลวดอาร์เมเจอร์ที่อยู่บนโรเตอร์ ดังแสดงในรูปที่ 2(ข)

 

 

image description

 

รูปที่ 2 ภาพถ่ายภายในมอเตอร์ไฟตรง (ก) โครงสร้างและ (ข) การทำงานของมอเตอร์ไฟตรง

 

 

วิธีการควบคุมมอเตอร์ทั่วไป อาจแบ่งตามชนิดของปริมาณที่ต้องการควบคุม คือ

1. การควบคุมทิศทางการหมุนของมอเตอร์ (direction control)

2. การควบคุมความเร็วของมอเตอร์ (speed control)

3. การควบคุมแรงบิดของมอเตอร์ (torque control)

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

 

ชุดเฟืองขับมอเตอร์

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

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

 

image description

 

รูปที่ 3 ตัวอย่างการทดรอบด้วยเฟือง โดยมีอัตราทด 4:1

 

ในกรณีที่ต้องการให้อัตราทดเฟืองมีค่าสูงมาก ๆ เช่น 80:1 หากเป็นระบบเฟืองเพียง 1 ชั้น ถ้าเฟืองส่งมีขนาด 8 ฟันจะต้องสร้างเฟืองรับมีขนาดถึง 640 ฟัน ซึ่งในทางปฏิบัติเราไม่สามารถทำเช่นนั้นได้ เพราะต้องใช้เฟืองที่มีขนาดใหญ่ เราจึงต้องมีการสร้างระบบทดเฟืองเป็นชั้น ๆ ต่อกันไปจนได้อัตราทดที่ต้องการ การคำนวณหาอัตราทดทำได้ดังแสดงในตัวอย่างในรูปที่ 4

 

image description

 

รูปที่ 4 ตัวอย่างการทดเฟืองหลายชั้น

 

 

รูปที่ 5 แสดงภาพภายในกล่องเฟืองขับที่มักจะติดตั้งอยู่กับมอเตอร์ไฟตรงขนาดเล็ก โดยกล่องเฟืองขับนี้มีอัตราทดเฟืองรวมมีค่าเท่ากับ 48 (จากระบบเฟืองที่ซ้อนกันอยู่ภายใน)

 

image description

 

รูปที่ 5 ภาพส่วนประกอบภายในชุดเฟืองขับ

 

 

การควบคุมมอเตอร์ไฟตรง

การควบคุมทิศทางการหมุน

การควบคุมทิศทางการหมุนของมอเตอร์ไฟตรง ทำได้โดยการควบคุมทิศการไหลของกระแสไฟตรงที่ผ่านมอเตอร์ นั่นคือ มอเตอร์จะหมุนกับทิศทางหากมีการกลับทิศทางการฉีดกระแส โดยรูปแบบการต่อสวิตช์สำหรับควบคุมการหมุนของมอเตอร์นี้ แสดงดังรูปที่ 6(ก) และมีชื่อเรียกว่าวงจรเฮดบริดจ์ (H-bridge circuit) เนื่องจากวงจรมีลักษณะเป็นรูปตัว H โดยในการเปลี่ยนทิศทางการหมุนของมอเตอร์ (รูปที่ 6(ข) และ 6(ค)) สวิตช์ทั้งสี่ตัวจะต้องถูกสลับพร้อม ๆ กัน เพื่อมิให้มอเตอร์หยุดหมุนและไม่ให้เกิดการลัดวงจร ในทางปฏิบัติเรามักจะใช้ไอซีสำเร็จรูปในการควบคุมการหมุนของมอเตอร์เพื่อหลีกเลี่ยงปัญหาการลัดวงจร

 

image description

 

รูปที่ 6 ภาพลักษณะวงจรเฮดบริดจ์ขณะ (ก) มอเตอร์ไม่หมุน (ข) มอเตอร์หมุนตามเข็มนาฬิกา (clockwise, CW) และ (ค) มอเตอร์หมุนทวนเข็มนาฬิกา (counter clockwise, CCW)

 

การควบคุมความเร็วมอเตอร์

ในการควบคุมความเร็วของมอเตอร์ไฟตรงสามารถทำได้การใช้สัญญาณ PWM (Pulse Width Modulation, การมอดูเลตความกว้างพัลส์) โดยกำหนดความกว้างของสัญญาณจะทำให้มอเตอร์ซึ่งเป็นอุปกรณ์ทางกลที่มีการตอบสนองช้าเมื่อเทียบกับสัญญาณไฟฟ้า ‘รู้สึก’ ถึงค่าเฉลี่ยของสัญญาณ และทำให้ความเร็วในการหมุนของมอเตอร์ซึ่งแปรผันโดยตรงกับระดับแรงดันมีค่าเปลี่ยนแปลงไป รูปที่ 7 แสดงตัวอย่างสัญญาณ PWM และค่าเฉลี่ย ซึ่งมีค่าเท่ากับผลคูณของค่าแรงดันและค่ารอบการทำงาน (duty cycle) ของสัญญาณ

 

image description

 

รูปที่ 7 ลักษณะสัญญาณ PWM ที่รอบการทำงานต่าง ๆ เส้นประแสดงระดับค่าเฉลี่ยของสัญญาณนี้

 

ในการเขียนโปรแกรมด้วย Arduino IDE คำสั่ง analogWrite() เป็นคำสั่งที่ใช้ในการสร้างสัญญาณ PWM จากบอร์ดไมโครคอนโทรลเลอร์ โดยคำสั่งนี้มีรูปแบบคือ

 

analogWrite(pin, value)

 

โดยค่า pin คือชื่อขาดิจิทัล (D0-D8) ที่ต้องการส่งสัญญาณ PWM ออกไป และ ค่า value นี้ จะเป็นค่าเลขฐานสิบ ระหว่าง 0 ถึง 1023 (= 210-1) ซึ่งค่าสูงสุด 1023 นี้จะเฉพาะเจาะจงกับบอร์ด NodeMCU เนื่องจาก ESP8266 เป็นชิปประมวลผลแบบ 10 บิต โดยในโค้ดต่าง ๆ ในไลบรารีของบอร์ดนี้ จะกำหนดให้ค่า 1023 คือตัวแปรชื่อ PWMRANGE และค่ารอบการทำงานของสัญญาณที่ส่งออกมาจะขึ้นกับค่า value นี้ โดยสัญญาณจะมีค่าคาบคงที่เท่ากับ 1 มิลลิวินาที (ความถี่ 1 kHz) สำหรับชิป ESP8266 นี้

 

บอร์ดขับมอเตอร์

ในการขับมอเตอร์ด้วยคำสั่งจากไมโครคอนโทรลเลอร์นั้นเรามักจะต้องใช้บอร์ดขับมอเตอร์แยกจากบอร์ดไมโครคอนโทรลเลอร์ และใช้ไฟเลี้ยงมอเตอร์แยกจากไฟเลี้ยงบอร์ดไมโครคอนโทรลเลอร์ เนื่องจากไมโครคอนโทรลเลอร์ทั่วไป ไม่ได้ออกแบบมาให้สามารถจ่ายกระแสสูง ๆ สำหรับการทำงานของมอเตอร์ โดยในที่นี้เราจะกล่าวถึงบอร์ดขับมอเตอร์ที่ใช้ไอซีเบอร์ L298N (จ่ายกระแสได้สูงสุด 2 A/มอเตอร์) ซึ่งบอร์ดนี้สามารถขับมอเตอร์ได้ 2 ตัวพร้อมกันและมีลักษณะดังรูปที่ 8

 

image description

 

รูปที่ 8 บอร์ดขับมอเตอร์ L298N

 

ในการควบคุมการหมุนและความเร็วของมอเตอร์นั้น ทำโดยการป้อนสัญญาณควบคุมจาก บอร์ดไมโครคอนโทรลเลอร์ไปยังบอร์ดขับมอเตอร์ โดยมีลักษณะของสัญญาณควบคุมดังแสดงในตารางที่ 1 โดยหากเราจะควบคุมทิศทางการหมุนของมอเตอร์ A ก็ทำได้ผ่านสัญญาณที่ขา IN1 และ IN2 และการควบคุมความเร็วของมอเตอร์ด้วยสัญญาณ PWM ที่ป้อนให้กับขา ENA ซึ่งหากไม่ต้องการควบคุมความเร็ว ก็ทำได้โดยการใช้จัมเปอร์บนบอร์ดแทนการป้อนสัญญาณ และสำหรับมอเตอร์ B เราก็สามารถทำได้ในทำนองเดียวกัน

 

ตารางที่ 1 ตารางแสดงวิธีการส่งสัญญาณควบคุมทิศทางและความเร็วมอเตอร์ A และ B

 

 

ทิศการหมุน

IN1

IN2

IN3

IN4

ควบคุมความเร็วด้วยสัญญาณ PWM

ENA

ENB

มอเตอร์ A

ตามเข็ม

HIGH

LOW

-

-

HIGH

-

ทวนเข็ม

LOW

HIGH

-

-

HIGH

-

ไม่หมุน

LOW

LOW

-

-

HIGH

-

ไม่หมุน

HIGH

HIGH

-

-

HIGH

-

มอเตอร์ B

ตามเข็ม

-

-

HIGH

LOW

-

HIGH

ทวนเข็ม

-

-

LOW

HIGH

-

HIGH

ไม่หมุน

-

-

LOW

LOW

-

HIGH

ไม่หมุน

-

-

HIGH

HIGH

-

HIGH

 

 

 

การทดลองควบคุมมอเตอร์ไฟตรง

วัตถุประสงค์

1. สามารถต่อบอร์ด Node MCU v.3 กับบอร์ดขับมอเตอร์และมอเตอร์ได้

2. สามารถเขียนโปรแกรมให้ NodeMCU ควบคุมทิศทางการหมุนของมอเตอร์ไฟตรงได้

3. สามารถเขียนโปรแกรมให้ NodeMCU ควบคุมความเร็วในการหมุนของมอเตอร์ไฟตรงได้

 

อุปกรณ์ที่ใช้ในการทดลอง

 

1.     เครี่องคอมพิวเตอร์ที่มีระบบปฏิบัติการ Windows (ตั้งแต่ Windows 7 ขึ้นไป)
พร้อมติดตั้งโปรแกรม
Arduino IDE 1.8.8 IoT                            1 เครื่อง

2.     NodeMCU v.3                                                              1 บอร์ด

3.     NodeMCU Base Ver 1.0                                                 1 บอร์ด

4.     บอร์ดขับมอเตอร์ที่ใช้ไอซีเบอร์ L298N                                     1 บอร์ด

5.     มอเตอร์ไฟตรง                                                               1 ตัว

6.     อะแด็ปเตอร์ 9 V                                                            1 ตัว

7.     สาย USB                                                                    1 เส้น

8.     สายต่อวงจร (สายจัมพ์ เมีย-เมีย)                                           3 เส้น

9.     สายต่อวงจร (สายจัมพ์ ผู้-ผู้)                                                2 เส้น

10.    สายต่อวงจร (สายจัมพ์ ผู้-เมีย)                                             2 เส้น

 

วิธีการทดลอง

ตอนที่ 1 การควบคุมทิศทางการหมุนของมอเตอร์

1. ต่อวงจรดังรูปที่ 9

2. เขียนโปรแกรมดังที่แสดงในโค้ดหน้าถัดไป จากนั้นจึงอัปโหลดลง NodeMCU v.3 แล้วสังเกตทิศทางการหมุนของมอเตอร์ โดยหากมอเตอร์ไม่หมุนอย่างต่อเนื่อง เนื่องจากไฟเลี้ยงจาก USB ไม่เพียงพอ ก็ขอให้ใช้อะแด็ปเตอร์ร่วมในการจ่ายไฟไปยังบอร์ดขับมอเตอร์

 

image description

 

รูปที่ 9 การเชื่อมต่อ NodeMCU v.3 กับบอร์ดขับมอเตอร์และมอเตอร์ไฟตรง โดยในกรอบสี่เหลี่ยมสีเขียวคือการต่อสายในกรณีที่ไฟเลี้ยงจากพอร์ต USB นั้นไม่เพียงพอ

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

// Control DC Motor via L298N by NodeMCU ESP8266

 

int IN1 = D1;

int IN2 = D2;

 

void setup() {

    pinMode(IN1, OUTPUT);

    pinMode(IN2, OUTPUT);

}

 

void loop() {   

    digitalWrite(IN1, HIGH);

    digitalWrite(IN2, LOW);

}

 

 

3. แก้ไขโปรแกรมบรรทัดที่ 12 และ 13 โดยสั่งให้ขา IN1 เป็นลอจิก LOW และ IN2 เป็นลอจิก HIGH จากนั้นจึงอัปโหลดโปรแกรมใหม่ แล้วสังเกตการหมุนของมอเตอร์

 

12

13

 

    digitalWrite(IN1, LOW);

    digitalWrite(IN2, HIGH);

 

 

 

ตอนที่ 2 การควบคุมความเร็วมอเตอร์

1. ต่อวงจรดังรูปที่ 10 โดยเอาจัมเปอร์ที่ขา ENA ออกก่อน

2. เขียนโปรแกรมดังที่แสดงในโค้ดหน้าถัดไป จากนั้นจึงอัปโหลดลง NodeMCU v.3 แล้วสังเกตความเร็วในการหมุนของมอเตอร์

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

 

image description

 

รูปที่ 10 การเชื่อมต่อ NodeMCU v.3 กับบอร์ดขับมอเตอร์
และมอเตอร์ไฟตรงเพื่อควบคุมความเร็ว

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

// Control DC Motor via L298N by NodeMCU ESP8266

 

int IN1 = D1;

int IN2 = D2;

int ENA = D3;

 

void setup() {

    pinMode(IN1, OUTPUT);

    pinMode(IN2, OUTPUT);

    pinMode(ENA, OUTPUT);

}

 

void loop() {

    for (int speed=0; speed<1024; speed++) {

        digitalWrite(IN1, HIGH);

        digitalWrite(IN2, LOW);

        analogWrite(ENA,speed);

        delay(10);

    }

}

 

 

 

แบบฝึกหัดท้ายการทดลอง

จงเขียนโค้ดที่ควบคุมให้มอเตอร์ค่อย ๆ เริ่มหมุนตามเข็มนาฬิกา จากหยุดนิ่งไปเร็วที่สุด แล้วค่อย ๆ หยุดลง (จากเร็วที่สุดไปหยุดนิ่ง) แล้วจึงหมุนทวนเข็มนาฬิกาจากหยุดนิ่งไปเร็วที่สุด แล้วค่อย ๆ หยุดลง (จากเร็วที่สุดไปหยุดนิ่ง) โดยมีลักษณะการเปลี่ยนแปลงของค่าความเร็วแบบเชิงเส้นดังแสดงในรูปที่ 11

 

image description

 

รูปที่ 11 ลักษณะการเปลี่ยนแปลงของค่าความเร็วมอเตอร์ที่กำหนดในแบบฝึกหัด