ขับมอเตอร์ 2 ล้อด้วย TB6612FNG บน ESP32 / Arduino

วิธีต่อ motor driver TB6612FNG กับมอเตอร์ TT สองตัว ตารางสั่งเดินหน้า ถอย เบรก ควบคุมความเร็วด้วย PWM และเรื่องไฟเลี้ยงที่ต้องระวัง

อัปเดต 2026-10-31

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 ที่ใช้ในชุดแชสซีทั่วไป

สั่งทิศทาง

IN1IN2ผล
HIGHLOWหมุนทางหนึ่ง (ความเร็วตาม PWM)
LOWHIGHหมุนอีกทาง
HIGHHIGHเบรก (short brake) หยุดทันที
LOWLOWปล่อยให้หมุนจนหยุดเอง

หุ่นแบบ 2 ล้อเลี้ยวด้วยการหมุนล้อสองข้างต่างกัน: ล้อซ้ายเดินหน้า ล้อขวาถอย = หมุนขวาอยู่กับที่ ถ้าประกอบแล้วล้อข้างหนึ่งหมุนกลับทาง ไม่ต้องแก้สาย สลับ HIGH/LOW ของข้างนั้นในโค้ดก็พอ

การต่อขา

แผนผังวงจร TB6612FNG กับ ESP32 แบตเตอรี่ 2S และ buck converter ในตัวจำลอง
การต่อขาบน ESP32 DevKit V1 (จัดขาอัตโนมัติจากตัวจำลอง)
TB6612FNG
Motors
VM → แบต 7.4 V
VCC → 3V3
GND → GND
PWMA → GPIO25
AIN1 → GPIO27
AIN2 → GPIO14
PWMB → GPIO26
BIN1 → GPIO13
BIN2 → GPIO4
STBY → 3V3 (ต่อค้างไว้)

วงจรในตัวจำลองต่อแบต 2S (7.4 V) เข้า VM โดยตรง และใช้ buck converter ลดเป็น 5 V เลี้ยงบอร์ด กระแสกระชากตอนมอเตอร์ออกตัวจึงไม่ไปรบกวนไฟของบอร์ดมากนัก

มอเตอร์ TT ส่วนใหญ่ออกแบบสำหรับ 3–6 V ถ้าเลี้ยง VM ด้วยแบต 2S (7.4–8.4 V) อย่าสั่ง PWM เต็ม 100 % ตลอดเวลา ให้จำกัดไว้ราว 70–80 % มอเตอร์จะร้อนน้อยลงและอายุยาวขึ้น

โค้ดขับมอเตอร์ (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
ชิ้นส่วนจำนวนราคาประมาณ
ESP32 DevKit V1 (30 ขา)1฿130–฿250
TB6612FNG motor driver1฿50–฿120
ชุดแชสซี 2WD
มีมอเตอร์ TT 2 ตัว ล้อ 2 ล้อ และล้อ caster
1฿150–฿300
ถ่าน Li-ion 186502฿60–฿150
รางถ่าน 18650 แบบ 2 ก้อน (2S)1฿20–฿60
Buck converter 7.4 V → 5 V 3 A1฿30–฿90
สวิตช์เปิด-ปิด1฿5–฿20
สายจัมเปอร์ ผู้-ผู้ / ผู้-เมีย ชุด 40 เส้น1฿30–฿60
แนะนำเพิ่ม
ที่ชาร์จถ่าน 186501฿100–฿250
รวมโดยประมาณ฿535–฿1,200

ราคาประมาณการ ณ 2026-10-31 ยังไม่ได้ตรวจกับร้าน

ลองในตัวจำลอง

ปุ่มด้านล่างเปิดหุ่นที่มีแค่ล้อกับ motor driver ลองขับด้วยปุ่ม W A S D หรือกด Run โปรแกรมตัวอย่างในหน้า Code แล้วเปิดหน้า Wiring ดูวงจร

เปิดหุ่น 2 ล้อในตัวจำลอง →