ขับมอเตอร์ 2 ล้อด้วย TB6612FNG บน ESP32 / Arduino
วิธีต่อ motor driver TB6612FNG กับมอเตอร์ TT สองตัว ตารางสั่งเดินหน้า ถอย เบรก ควบคุมความเร็วด้วย PWM และเรื่องไฟเลี้ยงที่ต้องระวัง
TB6612FNG เป็น motor driver ขนาดเล็กที่ขับมอเตอร์ DC ได้ 2 ตัว เหมาะกับหุ่นยนต์ 2 ล้อแบบ differential drive ใช้ MOSFET ภายใน จึงเสียแรงดันน้อยกว่า L298N ที่ยังพบบ่อยในชุดเริ่มต้น มอเตอร์ได้แรงดันเต็มกว่าและบอร์ดร้อนน้อยกว่า
ขาของ TB6612FNG
| ขา | หน้าที่ |
|---|---|
VM | ไฟเลี้ยงมอเตอร์ 4.5–13.5 V (ต่อจากแบตตรงๆ) |
VCC | ไฟเลี้ยงวงจรลอจิก 2.7–5.5 V (ใช้ระดับเดียวกับบอร์ด: 3.3 V สำหรับ ESP32, 5 V สำหรับ Uno) |
GND | กราวด์ ต้องต่อร่วมกับกราวด์ของบอร์ดและแบต |
PWMA / PWMB | ความเร็วของมอเตอร์ A / B (สัญญาณ PWM) |
AIN1, AIN2 / BIN1, BIN2 | ทิศทางของมอเตอร์ A / B |
STBY | ต้องเป็น HIGH ไดรเวอร์ถึงจะทำงาน ต่อค้างไว้กับ VCC ได้เพื่อประหยัดขา |
A01, A02 / B01, B02 | ออกไปที่ขั้วมอเตอร์ซ้าย / ขวา |
แต่ละช่องจ่ายกระแสต่อเนื่องได้ราว 1.2 A (สูงสุดชั่วขณะ 3.2 A) เพียงพอสำหรับมอเตอร์เกียร์ TT ที่ใช้ในชุดแชสซีทั่วไป
สั่งทิศทาง
| IN1 | IN2 | ผล |
|---|---|---|
| HIGH | LOW | หมุนทางหนึ่ง (ความเร็วตาม PWM) |
| LOW | HIGH | หมุนอีกทาง |
| HIGH | HIGH | เบรก (short brake) หยุดทันที |
| LOW | LOW | ปล่อยให้หมุนจนหยุดเอง |
หุ่นแบบ 2 ล้อเลี้ยวด้วยการหมุนล้อสองข้างต่างกัน: ล้อซ้ายเดินหน้า ล้อขวาถอย = หมุนขวาอยู่กับที่ ถ้าประกอบแล้วล้อข้างหนึ่งหมุนกลับทาง ไม่ต้องแก้สาย สลับ HIGH/LOW ของข้างนั้นในโค้ดก็พอ
การต่อขา
| TB6612FNG Motors | VM → แบต 7.4 VVCC → 3V3GND → GNDPWMA → GPIO25AIN1 → GPIO27AIN2 → GPIO14PWMB → GPIO26BIN1 → GPIO13BIN2 → GPIO4STBY → 3V3 (ต่อค้างไว้) |
|---|
วงจรในตัวจำลองต่อแบต 2S (7.4 V) เข้า VM โดยตรง และใช้ buck converter ลดเป็น 5 V เลี้ยงบอร์ด กระแสกระชากตอนมอเตอร์ออกตัวจึงไม่ไปรบกวนไฟของบอร์ดมากนัก
โค้ดขับมอเตอร์ (Arduino IDE)
// ใช้ขาตามตารางด้านบน
const int PWMA = 25, AIN1 = 27, AIN2 = 14; // ล้อซ้าย
const int PWMB = 26, BIN1 = 13, BIN2 = 4; // ล้อขวา
const int MAX_SPEED = 200; // ~78 % ของ 255
// speed: -255 (ถอยเต็มที่) ถึง 255 (เดินหน้าเต็มที่), 0 = หยุด
void motor(int pwm, int in1, int in2, int speed) {
speed = constrain(speed, -MAX_SPEED, MAX_SPEED);
digitalWrite(in1, speed > 0);
digitalWrite(in2, speed < 0);
analogWrite(pwm, abs(speed));
}
void drive(int left, int right) {
motor(PWMA, AIN1, AIN2, left);
motor(PWMB, BIN1, BIN2, right);
}
void setup() {
int pins[] = { PWMA, AIN1, AIN2, PWMB, BIN1, BIN2 };
for (int p : pins) pinMode(p, OUTPUT);
}
void loop() {
drive(180, 180); delay(1000); // เดินหน้า
drive(150, -150); delay(400); // หมุนขวาอยู่กับที่
drive(0, 0); delay(1000); // หยุด
}
analogWrite() ใช้ได้ทั้ง Arduino Uno (เฉพาะขาที่มีสัญลักษณ์ ~) และ ESP32 (Arduino core 2.0 ขึ้นไป)
ถ้าล้อไม่หมุนตอนสั่งความเร็วต่ำ แปลว่าแรงดันยังไม่พอให้มอเตอร์ออกตัว ให้ตั้งค่าต่ำสุดไว้ เช่นไม่ต่ำกว่า 80
ชิ้นส่วน
| ชิ้นส่วน | จำนวน | ราคาประมาณ |
|---|---|---|
| ESP32 DevKit V1 (30 ขา) | 1 | ฿130–฿250 |
| TB6612FNG motor driver | 1 | ฿50–฿120 |
| ชุดแชสซี 2WD มีมอเตอร์ TT 2 ตัว ล้อ 2 ล้อ และล้อ caster | 1 | ฿150–฿300 |
| ถ่าน Li-ion 18650 | 2 | ฿60–฿150 |
| รางถ่าน 18650 แบบ 2 ก้อน (2S) | 1 | ฿20–฿60 |
| Buck converter 7.4 V → 5 V 3 A | 1 | ฿30–฿90 |
| สวิตช์เปิด-ปิด | 1 | ฿5–฿20 |
| สายจัมเปอร์ ผู้-ผู้ / ผู้-เมีย ชุด 40 เส้น | 1 | ฿30–฿60 |
| แนะนำเพิ่ม | ||
| ที่ชาร์จถ่าน 18650 | 1 | ฿100–฿250 |
| รวมโดยประมาณ | ฿535–฿1,200 | |
ราคาประมาณการ ณ 2026-10-31 ยังไม่ได้ตรวจกับร้าน
ลองในตัวจำลอง
ปุ่มด้านล่างเปิดหุ่นที่มีแค่ล้อกับ motor driver ลองขับด้วยปุ่ม W A S D หรือกด Run โปรแกรมตัวอย่างในหน้า Code แล้วเปิดหน้า Wiring ดูวงจร