ค้นหาโค้ด

ควบคุมมอเตอร์ DC ด้วย TB6612FNG และ Arduino

ควบคุมมอเตอร์ DC ด้วย TB6612FNG และ Arduino

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

TB6612FNG_motor_driver-0

ตลอดทั้งคู่มือนี้ เราจะใช้บอร์ด Arduino ร่วมกับบอร์ด breakout TB6612FNG และมอเตอร์เกียร์ไฟฟ้ากระแสตรงสองตัว TB6612FNG เป็นการอัปเกรดครั้งใหญ่เมื่อเทียบกับไดรเวอร์ไบโพลาร์รุ่นเก่าอย่าง L298N เนื่องจากใช้ MOSFET ที่มีประสิทธิภาพสูง ซึ่งมีประโยชน์อย่างยิ่งในการใช้งานที่ใช้แบตเตอรี่ซึ่งต้องการความทนทานและประสิทธิภาพการใช้พลังงาน เนื่องจากไดรเวอร์นี้จ่ายพลังงานให้มอเตอร์ได้มากขึ้นโดยไม่เกิดความร้อนสูงเกินไปหรือต้องใช้แผ่นระบายความร้อนขนาดใหญ่

สำหรับคำอธิบายเพิ่มเติมเกี่ยวกับการตั้งค่าและการเขียนโปรแกรม โปรดตรวจสอบวิดีโอที่เกี่ยวข้องที่ (ในวิดีโอที่ 00:00)

อธิบายฮาร์ดแวร์

ส่วนประกอบหลักในโปรเจกต์นี้ประกอบด้วยไดรเวอร์มอเตอร์ TB6612FNG ไมโครคอนโทรลเลอร์ (Arduino) และมอเตอร์ไฟฟ้ากระแสตรงสองตัว ไดรเวอร์ TB6612FNG รับสัญญาณลอจิกกระแสต่ำจาก Arduino และใช้สัญญาณเหล่านั้นเพื่อสลับพลังงานกระแสสูงจากแบตเตอรี่ไปยังมอเตอร์ โดยทั่วไปแล้วจะมีพินเฉพาะสำหรับพลังงานลอจิก พลังงานมอเตอร์ การควบคุมทิศทาง (AIN1, AIN2, BIN1, BIN2) และการควบคุมความเร็ว (PWMA, PWMB)

TB6612FNG_motor_driver-3

มอเตอร์ไฟฟ้ากระแสตรงรับพลังงานที่ถูกมอดูเลตจากพินเอาต์พุตของไดรเวอร์ (A01/A02 และ B01/B02) เพื่อหมุน พินสแตนด์บาย (STBY) ทำหน้าที่เป็นสวิตช์หลัก ซึ่งเป็นวิธีที่รวดเร็วในการปิดการทำงานของมอเตอร์และทำให้ชิปเข้าสู่สถานะพักพลังงานต่ำ แต่ละส่วนประกอบมีบทบาทสำคัญในการทำให้ระบบขับเคลื่อนทำงานได้อย่างราบรื่นและมีประสิทธิภาพ

รายละเอียดจาก Datasheet

ผู้ผลิต

Toshiba (IC) / หลายราย (โมดูล)

หมายเลขชิ้นส่วน

TB6612FNG

แรงดันไฟฟ้าลอจิก/IO

2.7 V ถึง 5.5 V

แรงดันไฟฟ้าจ่าย (VM)

2.7 V ถึง 15 V

กระแสเอาต์พุต (ต่อช่อง)

1.2 A ต่อเนื่อง

กระแสสูงสุด (ต่อช่อง)

3.2 A

คำแนะนำความถี่ PWM

สูงถึง 100 kHz

เกณฑ์ลอจิกอินพุต

สูง: > 2.0V, ต่ำ: < 0.8V (ที่ VCC 5V)

แรงดันตก / RDS(on) / ความอิ่มตัว

0.5 Ω (โดยทั่วไป)

ขีดจำกัดความร้อน

มีวงจรตัดการทำงานเมื่อร้อนเกินไปในตัว

แพ็คเกจ

SSOP24 / บอร์ด Breakout

หมายเหตุ / รุ่นต่างๆ

แทนที่ L298N ด้วยประสิทธิภาพที่สูงกว่ามาก

 

  • ตรวจสอบให้แน่ใจว่าระดับแรงดันไฟฟ้าถูกต้อง (จับคู่ VCC กับ 5V ของ Arduino หรือ 3.3V ของ ESP32)

  • จ่ายไฟแบตเตอรี่แยกต่างหากสำหรับพิน VM (พลังงานมอเตอร์)

  • ระมัดระวังในการเชื่อมต่อกราวด์ทั้งหมด (แบตเตอรี่ Arduino และโมดูล) เข้าด้วยกันเพื่อป้องกันพฤติกรรมที่ผิดปกติ

  • ทดสอบการเชื่อมต่อก่อนจ่ายไฟเพื่อป้องกันการลัดวงจร

  • ดึงพิน STBY ขึ้นเป็น HIGH เสมอ ไม่เช่นนั้นมอเตอร์จะไม่ทำงาน

คำแนะนำการเดินสายไฟ

เริ่มต้นด้วยการเชื่อมต่อไฟและกราวด์สำหรับส่วนประกอบทั้งหมด เชื่อมต่อกราวด์จาก Arduino ของคุณเข้ากับรางลบของเบรดบอร์ด จากนั้นเชื่อมต่อขั้วบวกของแบตเตอรี่ภายนอกเข้ากับพิน VM บนไดรเวอร์มอเตอร์ และเชื่อมต่อพิน 5V ของ Arduino เข้ากับพิน VCC บนไดรเวอร์

ถัดไป เดินสายอินพุตลอจิก: เชื่อมต่อ AIN1 เข้ากับดิจิทัลพิน 2 บน Arduino, AIN2 เข้ากับดิจิทัลพิน 4 และ PWMA เข้ากับพินที่รองรับ PWM เช่น ดิจิทัลพิน 5 สำหรับมอเตอร์ตัวที่สอง เชื่อมต่อ BIN1 เข้ากับ 7, BIN2 เข้ากับ 8 และ PWMB เข้ากับพิน 6 ตรวจสอบให้แน่ใจว่าได้เชื่อมต่อพิน STBY เข้ากับดิจิทัลพิน 9

สำหรับเอาต์พุตไปยังมอเตอร์ ให้เชื่อมต่อขั้วทั้งสองของมอเตอร์ไฟฟ้ากระแสตรงตัวแรกเข้ากับ A01 และ A02 เชื่อมต่อมอเตอร์ไฟฟ้ากระแสตรงตัวที่สองเข้ากับ B01 และ B02 ตรวจสอบอีกครั้งว่ากราวด์ทั้งหมดใช้ร่วมกันบนรางกราวด์ทั่วไป

TB6612FNG_motor_driver-1

ตัวอย่างโค้ดและคำอธิบาย

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

const int AIN1 = 2;const int AIN2 = 4;const int PWMA = 5;const int STBY = 9;

ในที่นี้ AIN1 และ AIN2 ถูกกำหนดให้ควบคุมทิศทางของมอเตอร์ A ในขณะที่ PWMA จะใช้สำหรับการควบคุมความเร็วผ่าน PWM STBY อนุญาตให้ Arduino ปลุกชิปหรือทำให้ชิปเข้าสู่โหมดพัก

ถัดไป ฟังก์ชัน setup จะกำหนดค่าพินเหล่านี้เป็นเอาต์พุตและเปิดใช้งานชิป:

void setup() {  pinMode(AIN1, OUTPUT);  pinMode(AIN2, OUTPUT);  pinMode(PWMA, OUTPUT);  pinMode(STBY, OUTPUT);    // เปิดใช้งานมอเตอร์ไดรเวอร์  digitalWrite(STBY, HIGH);}

คำสั่ง pinMode() ตั้งค่าพินให้เป็นโหมดเอาต์พุต การตั้งค่า STBY เป็น HIGH ช่วยให้มั่นใจว่า TB6612FNG ทำงานและพร้อมรับคำสั่ง

ในฟังก์ชัน loop เราสั่งให้มอเตอร์หมุนไปข้างหน้าด้วยความเร็วเต็มที่ หยุด แล้วหมุนย้อนกลับ:

void loop() {  // หมุนไปข้างหน้าด้วยความเร็วเต็มที่  digitalWrite(AIN1, HIGH);  digitalWrite(AIN2, LOW);  analogWrite(PWMA, 255);  delay(2000);  // หยุด (ค่อยๆ หยุด)  digitalWrite(AIN1, LOW);  digitalWrite(AIN2, LOW);  analogWrite(PWMA, 0);  delay(1000);}

ในที่นี้ การตั้งค่า AIN1 เป็น HIGH และ AIN2 เป็น LOW บอกให้ H-bridge ภายในดันกระแสไปในทิศทางเดียว analogWrite(PWMA, 255) ใช้ความเร็วสูงสุด หากต้องการหยุด เราดึงพินทิศทางทั้งสองเป็น LOW

สำหรับรายละเอียดเพิ่มเติมและโค้ดเต็มที่มีการควบคุมมอเตอร์คู่และฟังก์ชันที่กำหนดเอง โปรดดูโปรแกรมเต็มที่โหลดไว้ด้านล่างบทความ

การสาธิต / สิ่งที่คาดหวัง

เมื่อการเดินสายเสร็จสมบูรณ์และอัปโหลดโค้ดแล้ว คุณควรเห็นมอเตอร์หมุนไปข้างหน้าเป็นเวลาสองวินาที หยุดหนึ่งวินาที แล้ววนซ้ำ (หากคุณเพิ่มตรรกะการหมุนย้อนกลับ มอเตอร์จะหมุนย้อนกลับในรอบถัดไป) ตรวจสอบให้แน่ใจว่ามอเตอร์ตอบสนองต่อสัญญาณ PWM อย่างถูกต้อง หากมอเตอร์หมุนย้อนกลับเมื่อคุณคาดหวังให้หมุนไปข้างหน้า เพียงสลับสายที่เชื่อมต่อกับ A01 และ A02 (ในวิดีโอที่เวลา 12:30)

ข้อผิดพลาดทั่วไป ได้แก่ การลืมดึงพิน STBY เป็น HIGH หรือพยายามจ่ายไฟให้มอเตอร์โดยตรงจากพิน 5V ของ Arduino แทนการใช้แบตเตอรี่เฉพาะที่พิน VM ซึ่งอาจทำให้ Arduino รีเซ็ตเมื่อรับโหลดหนัก อย่าลืมตรวจสอบแหล่งจ่ายไฟและกราวด์ร่วมของคุณอีกครั้ง

ภาพ

TB6612FNG_motor_driver-4
TB6612FNG_motor_driver-4
TB6612FNG_motor_driver-3
TB6612FNG_motor_driver-3
TB6612FNG_motor_driver-2
TB6612FNG_motor_driver-2
TB6612FNG_motor_driver-1
TB6612FNG_motor_driver-1
TB6612FNG_motor_driver-0
TB6612FNG_motor_driver-0
ไม่มีรหัสแนบมา

สิ่งที่คุณอาจต้องการ

แหล่งข้อมูลและเอกสารอ้างอิง

ยังไม่มีทรัพยากรเลย

ไฟล์📁

แผ่นข้อมูล (pdf)