ควบคุมมอเตอร์ DC ด้วย TB6612FNG และ Arduino
ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีควบคุมความเร็วและทิศทางของมอเตอร์ไฟฟ้ากระแสตรงโดยใช้โมดูลขับมอเตอร์ TB6612FNG การตั้งค่านี้จะช่วยให้เราสามารถขับมอเตอร์สองตัวได้อย่างอิสระ ซึ่งเป็นวิธีที่ใช้งานได้จริงสำหรับการสร้างหุ่นยนต์ล้อหรือโปรเจกต์เชิงกล นอกจากนี้ เราจะสำรวจวิธีการใช้การมอดูเลตความกว้างพัลส์ (PWM) เพื่อควบคุมความเร็วของมอเตอร์แต่ละตัวอย่างแม่นยำ ซึ่งจะช่วยเพิ่มความสามารถในการเคลื่อนที่ของโปรเจกต์ของคุณ
ตลอดทั้งคู่มือนี้ เราจะใช้บอร์ด Arduino ร่วมกับบอร์ด breakout TB6612FNG และมอเตอร์เกียร์ไฟฟ้ากระแสตรงสองตัว TB6612FNG เป็นการอัปเกรดครั้งใหญ่เมื่อเทียบกับไดรเวอร์ไบโพลาร์รุ่นเก่าอย่าง L298N เนื่องจากใช้ MOSFET ที่มีประสิทธิภาพสูง ซึ่งมีประโยชน์อย่างยิ่งในการใช้งานที่ใช้แบตเตอรี่ซึ่งต้องการความทนทานและประสิทธิภาพการใช้พลังงาน เนื่องจากไดรเวอร์นี้จ่ายพลังงานให้มอเตอร์ได้มากขึ้นโดยไม่เกิดความร้อนสูงเกินไปหรือต้องใช้แผ่นระบายความร้อนขนาดใหญ่
สำหรับคำอธิบายเพิ่มเติมเกี่ยวกับการตั้งค่าและการเขียนโปรแกรม โปรดตรวจสอบวิดีโอที่เกี่ยวข้องที่ (ในวิดีโอที่ 00:00)
อธิบายฮาร์ดแวร์
ส่วนประกอบหลักในโปรเจกต์นี้ประกอบด้วยไดรเวอร์มอเตอร์ TB6612FNG ไมโครคอนโทรลเลอร์ (Arduino) และมอเตอร์ไฟฟ้ากระแสตรงสองตัว ไดรเวอร์ TB6612FNG รับสัญญาณลอจิกกระแสต่ำจาก Arduino และใช้สัญญาณเหล่านั้นเพื่อสลับพลังงานกระแสสูงจากแบตเตอรี่ไปยังมอเตอร์ โดยทั่วไปแล้วจะมีพินเฉพาะสำหรับพลังงานลอจิก พลังงานมอเตอร์ การควบคุมทิศทาง (AIN1, AIN2, BIN1, BIN2) และการควบคุมความเร็ว (PWMA, PWMB)
มอเตอร์ไฟฟ้ากระแสตรงรับพลังงานที่ถูกมอดูเลตจากพินเอาต์พุตของไดรเวอร์ (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 ตรวจสอบอีกครั้งว่ากราวด์ทั้งหมดใช้ร่วมกันบนรางกราวด์ทั่วไป
ตัวอย่างโค้ดและคำอธิบาย
มาดูตัวระบุหลักและตัวอย่างโค้ดบางส่วนที่ใช้ในโปรเจกต์นี้กัน ส่วนแรกของโค้ดจะเริ่มต้นพินสำหรับการควบคุมทิศทาง ความเร็ว และสแตนด์บาย:
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 รีเซ็ตเมื่อรับโหลดหนัก อย่าลืมตรวจสอบแหล่งจ่ายไฟและกราวด์ร่วมของคุณอีกครั้ง
สิ่งที่คุณอาจต้องการ
-
อเมซอน
-
อเมซอนBuy TB6612FNG or DRV8833 motor driver board from AliExpresss.click.aliexpress.com
แหล่งข้อมูลและเอกสารอ้างอิง
ยังไม่มีทรัพยากรเลย
ไฟล์📁
แผ่นข้อมูล (pdf)
-
เอกสารข้อมูลไดรเวอร์มอเตอร์ TB6612FNG
motor_driver_TB6612FNG_datasheet.pdf0.20 MB