UNICON กับ บอร์ดขับมอเตอร์ไฟตรง DRV8871

UNICON กับ บอร์ดขับมอเตอร์ไฟตรง DRV8871

UNICON กับ บอร์ดขับมอเตอร์ไฟตรง DRV8871

            บอร์ดขับมอเตอร์ DRV8871 เป็นบอร์ดขับมอเตอร์ขนาดเล็กมีขนาดเท่ากับเหรียญ 10 บาท ถือว่าเล็กมาก เเต่ประสิทธิภาพเเละการทำงานของมันไม่ได้เล็กตามตัวของมันเลย DRV8871 ยังสามารถขับมอเตอร์ขนาดใหญ่ก็ได้เพื่อเอาไว้ใช้กับหุ่นยนต์ที่ต้องการเเรงขับมาก ๆ อย่างเช่น ซูโม่ เป็นต้น ถือว่าไม่ธรรมดาเลย

            บอร์ดขับมอเตอร์ DRV8871 เป็นบอร์ดขับมอเตอร์ไฟตรงที่มีขนาดเล็ก โดยสามารถขับมอเตอร์ไฟตรงได้ตั้งแต่ 6.5V – 45V และกระแสสูงสุด 3.6A ขับมอเตอร์โดยใช้สัญญาณ PWM

        คุณสมบัติของบอร์ด DRV8871

           – ขับมอเตอร์ได้ตั้งแต่ 6.5V – 45V

           – กระแสไฟสูงสุด 3.6 A

           – ขาพอร์ตอินพุตรับเรงดันได้สูงสุด 5.5V และต่ำสุด 3V

           – ควบคุมด้วยสัญญาณ PWM

           – มีวงจรป้องกันเเรงดันตก

           – เมื่อมีเเรงดันไฟฟ้าน้อยจะทำการหยุดทำงาน

           – มีวงจรป้องกันเเรงดันไฟฟ้าเกิน

           – เมื่ออุณหภูมิของ IC มีความร้อนมากเกินไป บอร์ดจะทำการหยุดทำงานโดยอัตโนมัติ

 

 

 

            หลังจากที่รู้คุณสมบัติของมันเเล้วเราไปทำการทดลองใช้งานกันดีกว่า โดยลองใช้งานกับบอร์ด UNICON ในตัวอย่างที่จะนำมาทำการทดลองเราจะนำมาใช้งานร่วมกับบอร์ด UNICON ซึ่งบอร์ด DRV8871 จะใช้สัญญาณ PWN 2 ขา ในการสั่งงานให้เดินหน้าถอยหลัง

 

ตัวอย่างที่ 1
สั่งมอเตอร์หมุนไปกลับโดยเพิ่มความเร็วจากน้อยไปมาก อ้างอิงจากค่า PWM 
การต่อวงจรของบอร์ด UNICON กับบอร์ด DRV8871

 

ในการต่อวงจรจะต้องมีการจ่ายไฟกับบอร์ด UNICON และบอร์ดขับมอเตอร์แยกกัน โดยบอร์ดขับมอเตอร์ใช้แรงดันต่ำสุด 6.5V และสูงสุด 45V เพื่อใช้เป็นกระแสไฟไปเลี้ยงมอเตอร์

            ขาพอร์ตของบอร์ด UNICON ที่ใช้ในการควบคุมทิศทางของมอเตอร์คือขา 10 และ 11 ที่เป็นพอร์ตที่สามารถขับสัญญาณ PWM ได้ โดยนำขาสัญญาณ PWM ของพอร์ตที่ 10 ไปเชื่อมต่อเข้าไป ขา IN1 ของบอร์ด DRV8871 และนำขาสัญญาณ PWM ของพอร์ตที่ 11 เชื่อมต่อเข้ากับขา IN2 ของบอร์ด DRV8871

            ในกรณีนี้ที่ต่อไฟแยกจากบอร์ด UNICON กับ DRV8871 จะต้องเชื่อมต่อขา GND จากบอร์ด UNICON เข้ากับบอร์ด DRV8871

            เมื่อต่อวงจรเสร็จแล้วตรวจสอบความถูกต้องแล้วเช็คให้ดีว่ามีการเสียบสายสลับกันหรือไม่เพื่อป้องกันการช็อตวงจรของบอร์ด DRV8871

ตัวอย่างโปรแกรมควบคุมมอเตอร์ไฟตรง

#include<unicon.h>

#define Motor_IN1 10
#define Motor_IN2 11

void setup() {
  pinMode(Motor_IN1, OUTPUT);
  pinMode(Motor_IN2, OUTPUT);
  setTextSize(2);
}

void loop()
{
  digitalWrite(Motor_IN1, 0);

  for (int i = 0; i < 255; i++)
  {
    analogWrite(Motor_IN2, i);
    delay(10);
    glcd(1, 1, "Speed = ");
    glcd(1, 9, "%d ", i);
  }
  delay(3000);
  digitalWrite(Motor_IN2, 0);
  for (int i = 0; i < 255; i++)
  {
    analogWrite(Motor_IN1, i);
    delay(10);
    glcd(1, 1, "Speed = ");
    glcd(1, 9, "%d ", i);
  }
  delay(3000);
}

 

การทำงานของโปรแกรม

            โปรแกรมเริ่มต้นโดยการกำหนดให้มีการแสดงค่าความเร็วของมอเตอร์ที่หน้าจอ GLCD ถ้าความเร็วของมอเตอร์เพิ่มขึ้นหน้าจอก็จะแสดงผลความเร็วของมอเตอร์

            เข้าสู่โปรแกรมหลัก จะเป็นการสั่งงานให้มอเตอร์ทำงานโดยการเพิ่มสัญญาณ PWM จากค่าน้อยไปหามาก หรือเพิ่มความเร็วของมอเตอร์จากน้อยไปหามากโดยอ้างอิงจากสัญญาณ PWM ทำงานไปจนครบ 100% แล้วจะค้างอยู่ค่านั้น 3 วินาที จากนั้นก็หมุนกลับโดยเริ่มจากค่าน้อยไปหาค่ามาก แล้วค้างที่ 100% เป็นเวลา 3 วินาที เป็นอันครบรอบ พร้อมกับแสดงค่าของสัญญาร PWM ที่หน้าจอ GLCD และโปรแกรมก็จะทำงานซ้ำแบบนี้ไปตลอด

 

ตัวอย่างโปรแกรมควบคุมมอเตอร์ไฟตรง เดินหน้า และถอยหลัง ด้วยความเร็ว 100%
#include<unicon.h>

#define Motor_IN1 10
#define Motor_IN2 11

void setup()
{
  pinMode(Motor_IN1, OUTPUT);
  pinMode(Motor_IN2, OUTPUT);
}
void loop()
{
  digitalWrite(Motor_IN1, 0);
  analogWrite(Motor_IN2, 255);
  glcd(1, 1, "Forward");
  delay(3000);

  digitalWrite(Motor_IN2, 0);
  analogWrite(Motor_IN1, 255);
  glcd(1, 1, "Back   ");
  delay(3000);
}

           เริ่มต้นจากการหมุนมอเตอร์เดินหน้าด้วยความเร็ว 100% เป็นเวลา 3 วินาที จากนั้นก็จะหมุนมอเตอร์กลับหลังด้วยความเร็ว 100% เป็นเวลา 3 วินาที พร้อมกับการแสดงสถานะเดิน หน้าถอยหลัง บนหน้าจอ GLCD เป็นอย่างนี้ไปตลอด

 

ตัวอย่างที่ 2
ควบคุมความเร็วและทิศทางการหมุนโดยการต่อ มอเตอร์ 2 ตัว
การต่อวงจรของบอร์ด UNICON กับบอร์ด DRV8871 2 ตัว

 

ต่อวงจรแยกแหล่งจ่ายไฟระหว่างบอร์ด UNICON กับ DRV8871 โดย บอร์ด UNICON ใช้กระแสตั้งแต่ 6V-12V และบอร์ด DRV8871 ใช้ตั้งแต่ 6.5V-45V

            ต่อพอร์ตขา PWM เข้ากับ บอร์ด DRV8871

            – นำสาย JST เชื่อมต่อเข้ากับพอร์ต 10 ของบอร์ด UNICON จากนั้นนำขาสัญญาณ PWM เชื่อมต่อเข้ากับขา IN1 และนำขาสัญญาณ GND ต่อเข้ากับพอร์ต GND ของบอร์ด DRV8871 Motor Left
            – ใช้สาย JST เชื่อมต่อเข้ากับพอร์ต 11 ของบอร์ด UNICON นำขาสัญญาณ PWM เชื่อมต่อเข้ากับขา IN2 ของบอร์ด DRV8871 Motor Left
            – นำสาย JST เชื่อมต่อเข้ากับพอร์ต 5 ของบอร์ด UNICON จากนั้นนำขาสัญญาณ PWM เชื่อมต่อเข้ากับขา IN1 และนำขาสัญญาณ GND ต่อเข้ากับพอร์ต GND ของบอร์ด DRV8871 Motor Right
            – ใช้สาย JST เชื่อมต่อเข้ากับพอร์ต 13 ของบอร์ด UNICON นำขาสัญญาณ PWM เชื่อมต่อเข้ากับขา IN2 ของบอร์ด DRV8871 Motor Right
            – นำมอเตอร์ DC 6V-45V เชื่อมต่อเข้ากับบอร์ด DRV8871 ทั้งสองตัว

ตัวอย่างโปรแกรมควบคุมมอเตอร์ 2 ตัว เดินหน้า ถอยหลัง เลี้ยวซ้าย และเลี้ยวขวา

#include<unicon.h>

#define Motor1_INR 10
#define Motor2_INR 11

#define Motor1_INL 5
#define Motor2_INL 13

void setup()
{
  pinMode(Motor1_INR, OUTPUT);
  pinMode(Motor1_INL, OUTPUT);

  pinMode(Motor2_INR, OUTPUT);
  pinMode(Motor2_INL, OUTPUT);
}
void loop()
{
  Forward();
  delay(5000);
  Backward();
  delay(5000);
  TurnRight();
  delay(1000);
  TurnLeft();
  delay(1000);
}

void Forward()
{
  digitalWrite(Motor1_INR, 0);
  digitalWrite(Motor1_INL, 0);

  analogWrite(Motor2_INR, 255);
  analogWrite(Motor2_INL, 255);
  glcd(1, 1, "Forward");
}

void Backward()
{
  digitalWrite(Motor2_INR, 0);
  digitalWrite(Motor2_INL, 0);

  analogWrite(Motor1_INR, 255);
  analogWrite(Motor1_INL, 255);
  glcd(1, 1, "Back   ");
}

void TurnRight()
{
  digitalWrite(Motor1_INR, 0);
  digitalWrite(Motor2_INL, 0);

  analogWrite(Motor2_INR, 255);
  analogWrite(Motor1_INL, 255);
  glcd(1, 1, "TurnRight   ");
}

void TurnLeft()
{
  digitalWrite(Motor2_INR, 0);
  digitalWrite(Motor1_INL, 0);

  analogWrite(Motor1_INR, 255);
  analogWrite(Motor2_INL, 255);
  glcd(1, 1, "TurnLeft   ");
}

การทำงานของโปรแกรม

            เริ่มต้นจากการขับมอเตอร์เดินหน้า 100% เป็นเวลา 5 วินาที ขับมอเตอร์ถอยหลัง 5 วินาที แล้วจากนั้นจะบังคับมอเตอร์หมุนไปทางขวา 1 วินาที เปรียบเสมือนการเลี้ยวขวา และคำสั่งสุดท้าย บังคับให้มอเตอร์หมุนไปทางซ้าย 1 วินาที เปรียบเสมือนการเลี้ยวซ้าย พร้อมกับการแสดงสถานะบนหน้าจอ GLCD

 

ตัวอย่างที่ 3
สั่งมอเตอร์ทำงานโดยการกดสวิตซ์
การต่อวงจรของบอร์ด UNICON กับบอร์ด DRV8871 และ ZX-Switch

 

ต่อวงจรแยกแหล่งจ่ายไฟระหว่างบอร์ด UNICON กับ DRV8871 โดย บอร์ด UNICON ใช้กระแสตั้งแต่ 6V-12V และบอร์ด DRV8871 ใช้ตั้งแต่ 6.5V-45V

            ต่อพอร์ตขา PWM เข้ากับ บอร์ด DRV8871

            – นำสาย JST เชื่อมต่อเข้ากับพอร์ต 10 ของบอร์ด UNICON จากนั้นนำขาสัญญาณ PWM เชื่อมต่อเข้ากับขา IN1 และนำขาสัญญาณ GND ต่อเข้ากับพอร์ต GND ของบอร์ด DRV8871 Motor Left
            – ใช้สาย JST เชื่อมต่อเข้ากับพอร์ต 11 ของบอร์ด UNICON นำขาสัญญาณ PWM เชื่อมต่อเข้ากับขา IN2 ของบอร์ด DRV8871 Motor Left
            – นำสาย JST เชื่อมต่อเข้ากับพอร์ต 5 ของบอร์ด UNICON จากนั้นนำขาสัญญาณ PWM เชื่อมต่อเข้ากับขา IN1 และนำขาสัญญาณ GND ต่อเข้ากับพอร์ต GND ของบอร์ด DRV8871 Motor Right
            – นำสาย JST เชื่อมต่อเข้ากับพอร์ต 13 ของบอร์ด UNICON นำขาสัญญาณ PWM เชื่อมต่อเข้ากับขา IN2 ของบอร์ด DRV8871 Motor Right
            – นำมอเตอร์ DC 6V-45V เชื่อมต่อเข้ากับบอร์ด DRV8871 ทั้งสองตัว
            – ใช้ ZX-Switch มาเชื่อมต่อเข้ากับพอร์ตที่ 18 หรือ A0 โดยให้สวิตซ์ที่เสียบกับพอร์ต A0 ไปควบคุมมอเตอร์ให้เลี้ยวซ้าย เปรียบเสมือนการบังคับหุ่นยนต์
            – ใช้ ZX-Switch มาเชื่อมต่อเข้ากับพอร์ตที่ 19 หรือ A1 โดยให้สวิตซ์ที่เสียบกับพอร์ต A1 ไปควบคุมมอเตอร์ให้เลี้ยวขวา เปรียบเสมือนการบังคับหุ่นยนต์

ตัวอย่างการเขียนโปรแกรมการสั่งงานมอเตอร์ทำงานโดยการกดสวิตซ์

#include<unicon.h>

#define Motor1_INR 10    //Port 10 Connect with PWM
#define Motor2_INR 11    //Port 11 Connect with PWM

#define Motor1_INL 5     //Port 5 Connect with PWM
#define Motor2_INL 13    //Port 13 Connect with PWM

#define Switch1 18      //Port 10 Connect with Analog
#define Switch2 19      //Port 10 Connect with Analog


void setup()
{
  pinMode(Motor1_INR, OUTPUT);      //Port 10 Output Mode
  pinMode(Motor1_INL, OUTPUT);      //Port 11 Output Mode

  pinMode(Motor2_INR, OUTPUT);      //Port 5 Output Mode
  pinMode(Motor2_INL, OUTPUT);      //Port 13 Output Mode

  pinMode(Switch1, INPUT);        //Port 18 Output Mode
  pinMode(Switch2, INPUT);        //Port 19 Output Mode
}
void loop()
{
  int Button1 = digitalRead(Switch1);    //Declare Button1 = digitalRead Port 18
  int Button2 = digitalRead(Switch2);    //Declare Button2 = digitalRead Port 19
  
  glcd(2, 1, "%d", Button1);      //Show Stat Button1 on GLCD
  glcd(3, 1, "%d", Button2);      //Show Stat Button2 on GLCD
  
  if (Button1 == LOW && Button2 == LOW)      //if put Button1 and Button2 Run Function Forward
  {
    Forward();
  }
  if (Button1 == LOW && Button2 == HIGH)    //if put Button1 Run Function Left
  {
    Left();
  }
  if (Button1 == HIGH && Button2 == LOW)    //if put Button2 Run Function Right
  {
    Right();
  }
  if (Button1 == HIGH && Button2 == HIGH)   //When not put Button1 and Button2 Motor will Stop
  {
    Stop();
  }
}

void Forward() //Function forward
{
  digitalWrite(Motor1_INR, 0);
  digitalWrite(Motor1_INL, 0);

  analogWrite(Motor2_INR, 255);
  analogWrite(Motor2_INL, 255);
  glcd(1, 1, "Forward");
}

void Right() //Function Right
{
  digitalWrite(Motor1_INR, 0);
  digitalWrite(Motor2_INL, 0);

  analogWrite(Motor2_INR, 255);
  analogWrite(Motor1_INL, 255);
  glcd(1, 1, "Right    ");
}

void Left()      //Function Left
{
  digitalWrite(Motor2_INR, 0);
  digitalWrite(Motor1_INL, 0);

  analogWrite(Motor1_INR, 255);
  analogWrite(Motor2_INL, 255);
  glcd(1, 1, "Left    ");
}

void Stop()     //Function Stop
{
  digitalWrite(Motor1_INR, 0);
  digitalWrite(Motor1_INL, 0);
  digitalWrite(Motor2_INR, 0);
  digitalWrite(Motor2_INL, 0);

  analogWrite(Motor1_INR, 0);
  analogWrite(Motor1_INL, 0);
  analogWrite(Motor2_INR, 0);
  analogWrite(Motor2_INL, 0);
  glcd(1, 1, "STOP    ");
}

การทำงานของโปรแกรม

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

Facebook Comments Box