การใช้งาน Motor Drive Module L298N

การใช้ Arduino UNO R3 กับ L298N ควบคุมมอเตอร์ อุปกรณ์ที่ต้องใช้ก็คือ

1. Arduino UNO R3 - Made in italy

2. Motor Drive Module L298N

3. Jumper (M2M) cable wire 40pcs 2.54mm 20cm Male to Male

H-Bridge เป็นโมดูลที่ใช้ในการควบคุมความเร็วและทิศทางของมอเตอร์ และยังสามารถนำไปประยุกต์ใช้กับ Project อื่นได้อีกด้วย เช่น  ตัวหรี่ไฟในบ้าน หรือที่หรี่ไฟในไฟฉายตีกบ แต่การใช้หลอดใส้ทำให้เราเห็นการกระพริบน้อยมากกว่าใน Led

H-Bridge เป็นวงจรที่สามารถใช้ควบคุมกระแสได้ทั้งขั้วบวกและลบด้วยการควบคุม pulse width modulation (PWM) เป็นการควบคุมแบบ digital ที่มีการนำมาใช้กันมาก โดยส่วนมากเพื่อเป็นการประหยัดพลังงานและ สามารถควบคุม Out Put ได้ โดยมีการกระตุ้นอย่างต่อเนื่อง ซึ่งทำให้เกิดการสูญเสียพลังงานน้อยมาก กล่าวคือวงจรพวกนี้จะมีการปล่อยการสูญเสียพลังงานน้อยกว่าวงจรรุ่นเก่าๆ มาก  โดยเฉพาะการควบคุมโวลต์หลอดกระแส out put

PWM(Pulse Width Modulation) คืออะไร

PWM คือเทคนิดการส่งสัญญาณแบบสวิต หรือ ส่งค่าดิจิตอล 0-1 โดยให้สัญญาณความถี่คงที่ การควบคุมระยะเวลาสัญญาณสูงและสัญญาณต่ำ ที่ต่างกัน ก็จะทำให้ค่าแรงดันเฉลี่ยของสัญญาณสวิต ต่างกันด้วย



สำหรับโมดุล PWM ของ Arduino มีความละเอียด 8 bit หรือ ปรับได้ 255 ระดับ ดังนั้นค่าสัญญาณ 0 โวลต์ถึง 5 โวลต์ จะถูกแสดงเป็นสัญญาณแบบดิจิตอล จะได้ 0 ถึง 255 ซึ่งเราสามารถเทียบสัดส่วนคำนวนจากเลขจริง เป็น เลขทางดิจิตอลได้

ตัวอย่าง

ถ้า 5V = 255
 1.0v จะเท่ากับค่าเท่าไร
    = 255/5.0V*1.0V
    =  51

L298N Dual Full-bridge motor driver module (Red PCB) และการต่อวงจร กับ Arduino UNO R3 (ขา ENA และ ENB ถ้ามี Jumper ต่ออยู่ให้ถอดออก)





ภาพรวมการต่อวงจร

หมายเหตุ : จากการทดลองการต่อวงจร ตามรูปด้านล่าง ทดสอบ กับ  บอร์ด Arduino UNO R3 ต่อกับ คอมพิวเตอร์ ผ่านทางสาย USB มอเตอร์ ทั้ง 2 ตัว สามารถ ทำงานได้ โดยไม่ต้อง ต่อ แบตเตอรี่ 9 V และ เมื่อทดลองถอดสาย USB จากคอมพิวเตอร์ออก แล้ว ป้อนไฟเข้าทางพอร์ต Power Supply ของ บอร์ด Arduino UNO R3 ก็สามารถทำงานได้ตามปรกติเช่นเดียวกัน







โปรแกรมที่จะเขียนต่อไปนี้ แสดงการสั่งให้ Motor A และ Motor B หมุนขึ้นหน้า (Forward) เพื่อทดสอบการต่อวงจร และ เข้าใจคำสั่งในการควบคุม Motor โดย บอร์ด Arduino UNO ขา 2 , 3 , 6  จะควบคุมมอเตอร์ A และ ขา 4 , 5 , 7 จะควบคุมมอเตอร์ B

เปิดโปรแกรม Arduino (IDE)  เขียน โค้ด และ Upload  ไปยังบอร์ด Arduino UNO ดังนี้

// Motor A

int dir1PinA = 2;

int dir2PinA = 3;

int speedPinA = 6; //   เพื่อให้ PWM สามารถควบคุมความเร็วมอเตอร์ 


// Motor B

int dir1PinB = 4;

int dir2PinB = 5;

int speedPinB = 7; // เพื่อให้ PWM สามารถควบคุมความเร็วมอเตอร์


void setup()
{
  Serial.begin(9600);

  //กำหนด ขา เพื่อใช้ในการควบคุมการทำงานของ  Motor ผ่านทาง L298N

  pinMode(dir1PinA,OUTPUT);

  pinMode(dir2PinA,OUTPUT);

  pinMode(speedPinA,OUTPUT);

  pinMode(dir1PinB,OUTPUT);

  pinMode(dir2PinB,OUTPUT);

  pinMode(speedPinB,OUTPUT);
}

void loop()
{

// Motor A

  analogWrite(speedPinA, 255); //ตั้งค่าความเร็ว PWM ผ่านตัวแปร ค่าต่ำลง มอเตอร์จะหมุนช้าลง

  digitalWrite(dir1PinA, LOW);

  digitalWrite(dir2PinA, HIGH);


// Motor B

  analogWrite(speedPinB, 255); //ตั้งค่าความเร็ว PWM ผ่านตัวแปร ค่าต่ำลง มอเตอร์จะหมุนช้าลง

  digitalWrite(dir1PinB, LOW);

  digitalWrite(dir2PinB, HIGH);
}



ผลการทำงานของโปรแกรม มอเตอร์ ทั้ง A และ B จะหมุนเดินหน้า (Forward) แสดงว่าการต่อวงจร และ การเขียนโปรแกรมของเรานั้นถูกต้อง

มาดูคำสั่งอื่นๆกันบ้างครับ

//ให้ Motor A ถอยหลัง (Reverse)

          analogWrite(speedPinA, 255);

          digitalWrite(dir1PinA, HIGH);

          digitalWrite(dir2PinA, LOW);


//ให้ Motor B ถอยหลัง (Reverse)

          analogWrite(speedPinB, 255);

          digitalWrite(dir1PinB, HIGH);

          digitalWrite(dir2PinB, LOW);



//ให้ Motor A หยุด (Freespin)

          analogWrite(speedPinA, 0);

          digitalWrite(dir1PinA, LOW);

          digitalWrite(dir2PinA, HIGH);


//ให้ Motor B หยุด (Freespin)

          analogWrite(speedPinB, 0);

          digitalWrite(dir1PinB, LOW);

          digitalWrite(dir2PinB, HIGH);