DC Motor Control Speed Kit : 1 มาเรียนรู้วิธีการกลับทิศทางการหมุน และปรับความเร็วรอบของมอเตอร์ด้วย PWM อย่างง่ายกัน

บทความนี้เรามาเรียนรู้การกลับทิศทางการหมุนของมอเตอร์และวิธีการปรับความเร็วรอบของมอเตอร์ ด้วยชุด DC Motor Control Speed Kit ทำไมเราถึงต้องกลับทิศทางการหมุนของมอเตอร์และทำไมถึงต้องปรับความคุมความเร็วรอบ…. เรามาดูตัวอย่างกัน

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

เรามาเริ่มดูโครงสร้างและหลักการทำงานของ DC motor กันก่อนนะครับ ภายในโครงของ DC motor จะมีแม่เหล็กถาวรอยู่ภายใน ประกอบไปด้วย ขั้วเหนือ (N) กับ ขั้วใต้ (S) ติดตั้งตรงข้ามกันดังรูปภาพที่ 1 ข้างล่างนี้ จากนั้นเราสร้างแม่เหล็กอีกชุดหนึ่งขึ้นมาด้วยการใช้ขดลวดทองแดงพันรอบแกนเหล็กเพื่อนำแรงที่เกิดจากการผลักกัน นำไปใช้ส่งกำลังในการหมุนนั้นเอง

รูปภาพที่ 1 ทิศทางการไหลกระแสไฟฟ้าและทิศการหมุนของมอเตอร์
https://gfycat.com/gifs/search/dc+motor

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

รูปภาพที่ 2 กฎมือขวา
รูปภาพที่ 3
https://gfycat.com/lavishscenteddegus

หากเราดูรูปภาพที่ผ่านมาเราจะเห็นได้ว่าทิศทางการหมุนของ DC motor กำลังหมุนทวนเข็มนาฬิกาอยู่นั้นเอง ถ้าเราต้องการให้หมุนตามเข็มนาฬิกา เราก็เพียงแค่สลับตำแหน่งทิศขั้วบวกกับขั้วลบ เพียงแค่นี้กระแสไฟฟ้าของเราก็กลับทิศทางการไหลส่งผลให้ขดลวดทองแดงของเรามีทิศทางหมุนตามเข็มนาฬิกานั้นเองดังรูปภาพที่ 4

รูปภาพที่ 4 Clockwise and Counter Clockwise
https://technobyte.org/arduino-dc-motor-single-multiple-motors-interface-code/

หากเราต้องการกลับทิศทางการหมุนของ DC Motor อยู่บ่อย ๆ ยกตัวอย่างเช่น การเดินหน้าถอยหลังของรถบังคับ หากเราต้องการเดินหน้าเราก็ต้องให้ทิศทางการหมุนของมอเตอร์ไปในทิศทางหนึ่ง หากเราต้องการให้ถอยหลังเราก็ต้องกลับทิศทางการหมุนของมอเตอร์ไปในอีกทิศทางหนึ่งจึงจะสามารถเดินหน้าและถอยหลังได้ ก็ได้มีการคิดค้นวงจรการกลับทิศการหมุนของ DC Motor คือ วงจร H-bridge ซึ่งจะใช้ สวิตช์ 4 ตัว สำหรับการกลับทิศทางของกระแสไฟฟ้าดังรูปที่ 5

รูปภาพที่ 5 วงจร H-bridge
https://lastminuteengineers.com/l293d-dc-motor-arduino-tutorial/

จากรูปภาพที่ 5 หลักการกลับทิศทางการหมุนของ DC Motor ก็คือใช้สวิตช์ 2 ตัวสลับการเปิดให้กลับแสไฟฟ้าไหลผ่าน DC Motor มีทิศทางตรงข้ามกันก็จะทำ DC Motor หมุนตามเข็มและทวนเข็มตามการเปิดปิดนั้นเอง

เรามาเริ่มศึกษาการกลับทิศทางการหมุนของ  DC Motor โดยใช้ชุด DC Motor Control Speed Kit กัน สำหรับชุดคิทนี้ใช้ Motor Drive Module L298N ที่มีวงจร Dual H-Bridge ภายในตัวสามารถขับ  DC Motor ได้ 2 ตัว ดังรูปภาพที่ 6

รูปภาพที่ 6 Motor Drive Module L298N

สำหรับชุดคิทได้มีการต่อวงจรไว้ดังนี้

รูปภาพที่ 7

โดยที่เราจะใช้ IN1 ต่อเข้ากับ PIN 21 และ IN2  ต่อเข้ากับ PIN 22 เป็นตัวควบคุมการกลับทิศทางการหมุนของมอเตอร์ โดยเข้าจะใช้ MCU NANO32 เป็นตัวสั่ง Motor Drive Module L298N

รูปภาพที่ 8

จาก datasheet ในรูปภาพที่ 8 เขาบอกว่าเมื่อไหร่ก็ตามที่เราเอา Ven = H แล้วกับ C = D ก็จะอยู่ในโหมดของ Fast Motor Stop แล้วถ้าเมื่อไหร่ที่ (IN1) C = H และ (IN2) D = L ก็จะทำให้ DC Motor หมุนไปในทิศทาง Forward ถ้าหากเมื่อไหร่ที่ (IN1) C =L ; (IN2) D = H ก็จะทำให้ DC Motor หมุนไปในทิศทาง Reverse นั้นเองเพียงเท่านี้เราก็สามารถกลับทิศทางการหมุนของมอเตอร์ได้แล้วนั้นเอง ง่ายๆ เลยใช่ไหมครับ

มาเริ่มเขียนโปรแกรมการกลับทิศทางการหมุนด้วยโปรแกรม Arduino กัน ซึ่งมีการเขียน Code ตัวอย่างง่าย ๆ แต่ก่อนที่เราจะทำการอัพโหลด Code ลงใน MCU NANO32 ต้องทำการติดตั้งโปรแกรมเสริม ESP32 ลงใน Arduino IED กันก่อน ได้ที่ https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/

#include <Arduino.h>
#include <math.h>

const int MotorA_pin = 21;        //ประกาศตัวแปรและกำหนด ให้ Pin 21 ต่อเข้ากับ IN1
const int MotorA_pin = 22;        //ประกาศตัวแปรและกำหนด ให้ Pin 22 ต่อเข้ากับ IN2

uint32_t time_now = 0;
uint32_t time_prve1 = 0;

void setup()
{
  pinMode(MotorA_pin, OUTPUT);   // กำหนดให้ Pin 21 เป็น OUTPUT
  pinMode(MotorB_pin, OUTPUT);   // กำหนดให้ Pin 22 เป็น OUTPUT
  Serial.begin(115200);

  delay(5000);
}

void loop()
{
  time_now = millis();


  if (time_now - time_prve1 >= 50)   // สร้าง loop delay ด้วยเวลา
  {
    time_prve1 = time_now;
    //  Forward
    digitalWrite(MotorA_pin, HIGH); 
    digitalWrite(MotorB_pin, LOW);  

   //   Reverse 
   // digitalWrite(MotorA_pin, LOW);
   // digitalWrite(MotorB_pin, HIGH);  
  }
}

สามารถซื้อชุดฝึกการเรียนรู้ควบคุมความเร็วรอบด้วย DC Motor Speed Control Kit (พร้อมคอร์สเรียนออนไลน์ฟรี) ได้ที่

https://www.aiiotshop.com/product/61

ต่อไปเรามาเรียนรู้การปรับความเร็วรอบของมอเตอร์ด้วย (Plus With Modulation : PWM)

Plus With Modulation เป็นเทคนิคการสร้างสัญญาณ Digital ให้เหมือนกับสัญญาณ Analog โดยใช้อุปกรณ์ควบคุมสร้างสัญญาณคลื่นสี่เหลี่ยมสลับกันระหว่าง เปิด (On) กับ ปิด (Off) ด้วยความเร็วสูงๆ จนผลค่าเฉลี่ยที่ได้ออกมาเทียบเท่ากับการเปลี่ยนแรงดันไฟฟ้า (V) ได้โดยตรง ดังนั้นเมื่อเราสามารถปรับแรงดันไฟฟ้าที่จ่ายให้กับมอเตอร์ได้ เราก็จะสามารถปรับความเร็วรอบมอเตอร์ให้หมุนช้าหรือหมุนเร็วได้นั้นเอง

โดยที่ PWM จะใช้ค่า Duty Cycle เป็นตัวบ่งบอกถึงเปอร์เซ็นการเปิดของ PWM ได้ โดยที่เราสามารถคำนวณค่า Duty Cycle ได้ดังนี้

เรามาลองคำนวณหาค่า Duty Cycle กัน โดยผมกำหนดค่า Sampling Time ทุกๆ 10 ms จากนั้นผมลองปรับคาบการเปิดของอุปกรณ์ดังรูปภาพที่ 9

รูปภาพที่ 9 Duty Cycle

จากรูปภาพที่ 9 เราสามารถคำนวณหาค่า Duty Cycle โดยที่เราเวลาจากการเปิดอุปกรณ์ (Ton) หารด้วย Sampling Time คูณด้วย 100 เพียงเท่านี้เราก็จะได้ค่า Duty Cycle มาแล้วนั้นเอง ถ้าหากเราใช้แรงดันไฟฟ้า 12 V เป็นแหล่งจ่ายไฟฟ้าให้กับมอเตอร์ จากนั้นผมสั่งให้ Motor Drive Module L298N ขับ DC Motor ด้วย PWM ที่ค่า Duty Cycle เท่ากับ 50% ดังนั้นแรงดันไฟฟ้าที่ออกมาจาก Motor Drive Module L298N จ่ายให้กับมอเตอร์แรงดันไฟฟ้าจะลดลงเหลือเพียง 6V เท่านั้น จึงทำให้ DC Motor มีความเร็วรอบลดลงนั้นเอง

เรามาเริ่มกันเลยสร้างสัญญาณ PWM ด้วย MCU NANO32 ที่เป็นตระกลู ESP32 โดยใช้โปรแกรม Arduino IDE สำหรับ ไมโครคอนโทรลเลอร์ที่เป็นตระกลู ESP32 จะมีช่องใช้สำหรับการสร้างสัญญาณ PWM ถึง 16 ช่อง ขั้นตอนการสร้างสัญญาณ PWM ด้วย ESP32 มีขั้นตอนดังนี้

  1. ก่อนอื่นต้องเลือกช่องสัญญาณ PWM มี 16 ช่องตั้งแต่ 0 ถึง 15
  2. จากนั้นจะต้องตั้งค่าความถี่สัญญาณ PWM สำหรับ Motor
  3. ตั้งค่าความละเอียดวัฏจักรของสัญญาณ: คุณมีความละเอียดตั้งแต่ 1 ถึง 16 บิต เราจะใช้ความละเอียด 12 บิตซึ่งหมายความว่าคุณสามารถควบคุมความเร็วรอบ Motor โดยใช้ค่าตั้งแต่ 0 ถึง 4095
  4. เลือก PIN GPIO สร้างช่องสัญญาณ PWM
        ledcAttachPin(GPIO, channel)

5. เพื่อควบคุมความเร็วรอบของ Motor โดยใช้ PWM ต้องใช้ฟังก์ชั่นดังนี้

        ledcWrite(channel, dutycycle)

เพียงเท่านี้เราก็สามารถนำ MCU NANO32 สร้างสัญญาณ PWM ให้ปรับความเร็วรอบของมอเตอร์ให้เร็วหรือช้าได้แล้วนั้นเอง…. (สามารถศึกษาการใช้ PWM เพิ่มเติมได้ที่ https://randomnerdtutorials.com/esp32-pwm-arduino-ide/ )

เริ่มต้นสำหรับชุด DC Motor Control Speed Kit จะใช้ VR ตัวที่ 1 ใช้ในการปรับค่า PWM

…..เรามาเริ่มเขียนโปรแกรมปรับความเร็วรอบของมอเตอร์ด้วย PWM ซึ่งมีการเขียน Code ตัวอย่างข้างล่างนี้เลย

#include <Arduino.h>
#include <math.h>

const int led_pin = 16;

const int vr1_pin = 13;   // ประกาศตัวแปรและกำหนด PIN 13 ต่อเข้ากับ VR 1

const int MotorA_pin = 21;   
const int MotorB_pin = 22;

const int freq = 200;       // กำหนด frequency 200 Hz  
const int resolution = 12;  // กำหนดความละเอียด 12 บิต

void setup()
{
  pinMode(MotorA_pin, OUTPUT);
  pinMode(MotorB_pin, OUTPUT);
  Serial.begin(115200);

  pinMode(vr1_pin, INPUT);   //

  // PWM channel ,PWM signal frequency , set the signal’s duty cycle resolution
  ledcSetup(0, freq, resolution);
  ledcSetup(1, freq, resolution);

  ledcAttachPin(MotorA_pin, 0); // เลือก PIN GPIO สร้างช่องสัญญาณ PWM channel 0
  ledcAttachPin(MotorB_pin, 1); // เลือก PIN GPIO สร้างช่องสัญญาณ PWM channel 1

  delay(5000);
}

void loop()
{

    int speed_motor = analogRead(vr1_pin);  // รับค่า Vr 1 จาก 0-4095
    Serial.println (speed_motor);
    if (speed_motor > 0)
    {
      ledcWrite(1, 0);                         
      ledcWrite(0, constrain(speed_motor, 0, 4095)); // ปรับความเร็วรอบมอเตอร์ด้วย PWM จากค่า Vr1 0 - 4095  เทียบเท่ากับ 0-12 V
    }
    else
    {
      ledcWrite(0, 0);                               
      ledcWrite(1, constrain(fabs(speed_motor), 0, 4095)); 
    }

}

สามารถซื้อชุดฝึกการเรียนรู้ควบคุมความเร็วรอบด้วย DC Motor Speed Control Kit (พร้อมคอร์สเรียนออนไลน์ฟรี) ได้ที่

https://www.aiiotshop.com/product/61

1 thought on “DC Motor Control Speed Kit : 1 มาเรียนรู้วิธีการกลับทิศทางการหมุน และปรับความเร็วรอบของมอเตอร์ด้วย PWM อย่างง่ายกัน”

  1. Pingback: DC Motor Control Speed Kit : 2 Read Speed Motor With Sensor Encoder - Maker Asia

Leave a Comment