การควบคุมมอเตอร์ Brushless ด้วย Arduino

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

 Electronic Speed Controller (ESC)

 มอเตอร์ Brushless


        หลักการควบคุมตัว Electronic Speed Controller (ESC) จะคล้ายๆ กับการสั่งงานมอเตอร์ Servo ซึ่งจะควบคุมโดยความกว้างของสัญญาณ PWM ขนาด 50 เฮิรตซ์ ซึ่งโดยส่วนมากความกว้างของพัลซ์ที่ใช้จะอยู่ในช่วง 1-2 ms หรือ 0.5-2.5 ms สำหรับระยะเวลาของสัญญาณ 50 เฮิรตซ์ สามารถคำนวณได้จากสมการนี้นะครับ

Period = 1 / frequency

จากสมการ จะได้ Period = 1/50 = .02 วินาทีหรือ 20 มิลลิวินาที 

         ระยะเวลาของสัญญาณ 50 เฮิรตซ์ คือ 20 มิลลิวินาที แสดงว่า ESC ต้องได้รับสัญญาณเพื่อไปควบคุมและสั่งงานมอเตอร์ Brushless ทุกๆ 20 ms ดังแสดงในรูปแบบสัญญาณ PWM รูปที่ 1
รูปที่ 1 ความกว้างของสัญญาณ PWM


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

       การสั่งงานมอเตอร์ Brushless โดยใช้บอร์ด Arduino เราต้องเชื่อมต่ออุปกรณ์ต่างๆ เข้าด้วยกัน ซึ่งรูปแบบการต่อก็ตามรูปเลยครับ


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

เริ่มต้นด้วยการสร้าง Object เพื่อเรียกใช้งานคุณสมบัติต่างๆ ภายในคลาส
Servo esc; 

กำหนด PIN ที่ใช้ในการควบคุมสัญญาณ PWM 
esc.attach(6);

กำหนดค่าวามกว้างของสัญญาณ PWM
esc.writeMicroseconds(2000); //Set Max Pulse-width
esc.writeMicroseconds(1000); //Set Min Pulse-width

        เราสามารถกำหนดค่าวามกว้างของสัญญาณ PWM เพื่อควบคุมความเร็วของมอเตอร์ Brushless โดยใช้คำสั่ง esc.writeMicroseconds(Pulse-width)

Note: Pulse-width อยู่ในช่วงตั้งแต่ 1000 us ถึง 2000 us

        ในบทความนี้มีโค้ดโปรแกรมตัวอย่าง ให้ก็อปปี้โค้ดโปรแกรมตัวอย่างด้านล่างไปวางในโปรแกรม Arduino IDE และอัพโหลดไปที่บอร์ด Arduino ได้เลย

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




Hardware Specification
1) Arduino Mega 2560
2) Hobbywing SkyWalker 40A
3) EMAX MT2216-810KV
4) Lipo Battery 3000mAh 11.1V
        
        สำหรับวันนี้ สิ่งที่ได้เขียนบรรยายไปก็คือความรู้ส่วนหนึ่งที่ได้มาจากพัฒนาผลงานและสิ่งประดิษฐ์ซึ่งเนื้อหานั้นอาจจะยังไม่คลอบคลุม หวังว่าบทความนี้จะเป็นประโยชน์มากสำหรับพี่ๆ เพื่อนๆ และน้องๆ ที่กำลังเรียนรู้และใช้งานบอร์ด Arduino กันอยู่ 
        บทความนี้เขียนขึ้นมาโดยใช้ความรู้ความเข้าใจของผู้เขียน ที่เคยทำการศึกษาและทดลองใช้งานมา หากมีข้อผิดพลาดประการไดสามารถเสนอแนะมาได้เลยนะครับ
    
แหล่งอ้างอิง
http://www.toptechboy.com/raspberry-pi/raspberry-pi-lesson-28-controlling-a-servo-on-raspberry-pi-with-python/
https://drive.google.com/file/d/1po-nuJaCpEofP028197MIVW6r6yB5msf/view?usp=sharing


สอบถามข้อมูลเพิ่มเติม
Facebook: รักการเขียนโค้ด ดอทคอม 
Tell: 091-4782789

ความคิดเห็น

แสดงความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ทำ Web server เพื่อรับข้อมูลจาก Sensor และควบคุมอุปกรณ์ต่างๆ ตอนที่ 2 ส่งข้อมูลจากบอร์ด NodeMCU ขึ้น Web Server

เรียนรู้การออกแบบวงจรอิเล็กทรอนิกส์พื้นฐาน และใช้งานบอร์ด Arduino ตอนที่ 1 ทำความรู้จักกับโปรแกรม Tinkercad Circuits