Skip to content

DiffDriveCar 模块

模块介绍

双轮差速小车驱动类,通过控制左右两个电机的速度实现前进、后退、转向、弧线转弯等运动。适用于双轮差速机器人、智能小车等应用场景。

硬件接线说明

每个电机需接 H 桥驱动模块(如 L298N、TB6612FNG 等):

电机引脚说明
左电机IN1接 GPIO14(示例)
左电机IN2接 GPIO15(示例)
右电机IN1接 GPIO16(示例)
右电机IN2接 GPIO17(示例)

⚠️ 重要:电机电源必须独立供电,不要使用开发板的 3.3V/5V 供电!

初始化参数

参数类型默认值说明
left_pin1Pin左电机控制引脚1(接 H 桥 IN1)
left_pin2Pin左电机控制引脚2(接 H 桥 IN2)
right_pin1Pin右电机控制引脚1(接 H 桥 IN1)
right_pin2Pin右电机控制引脚2(接 H 桥 IN2)
default_speedfloat0.6默认速度(0.0 ~ 1.0),用于 forward/backward 等方法
direction_leftint1左轮方向修正(1=正常,-1=反转)
direction_rightint1右轮方向修正(1=正常,-1=反转)
freqint5000PWM 频率(Hz)
max_dutyint1023最大占空比(ESP32 默认 1023)

导入和实例创建

python
from machine import Pin  # 导入Pin模块
from diff_driver_car import DiffDriveCar  # 导入DiffDriveCar驱动模块

# 初始化双轮小车
car = DiffDriveCar(
    left_pin1=Pin(14), left_pin2=Pin(15),  # 左电机引脚
    right_pin1=Pin(16), right_pin2=Pin(17),  # 右电机引脚
    default_speed=0.6  # 默认速度0.6
)

核心属性方法

属性或方法参数返回类型说明
default_speedfloat可读写属性:默认速度(0.0 ~ 1.0)
forward()speed=None (float)None前进(两轮同向同速)
backward()speed=None (float)None后退
spin_left()speed=None (float)None原地向左旋转(左右轮反向)
spin_right()speed=None (float)None原地向右旋转
arc_turn()direction='left' (str), forward_speed=None (float), turn_ratio=0.5 (float)None弧线转弯(更平滑)
arc_left()forward_speed=None (float), turn_ratio=0.5 (float)None弧线左转
arc_right()forward_speed=None (float), turn_ratio=0.5 (float)None弧线右转
set_speed()left_speed (float), right_speed (float)None直接设置左右轮速度(-1.0 ~ +1.0)
stop()None停止所有电机
deinit()None释放资源

使用示例

python
from machine import Pin
from diff_driver_car import DiffDriveCar
from time import sleep_ms

# 初始化双轮小车
car = DiffDriveCar(
    left_pin1=Pin(14), left_pin2=Pin(15),
    right_pin1=Pin(16), right_pin2=Pin(17),
    default_speed=0.6
)

# 基本运动
car.forward()        # 前进(使用默认速度)
sleep_ms(2000)
car.backward()       # 后退
sleep_ms(2000)
car.spin_left()      # 原地左转
sleep_ms(2000)
car.spin_right()     # 原地右转
sleep_ms(2000)

# 弧线转弯
car.arc_left(forward_speed=0.6, turn_ratio=0.3)  # 弧线左转
sleep_ms(2000)

# 直接控制左右轮
car.set_speed(0.5, 0.8)  # 左轮 50%,右轮 80%
sleep_ms(2000)

car.stop()           # 停止
car.deinit()         # 释放资源

注意事项

硬件与电源要求

  • 必须使用 H 桥驱动模块(如 L298N、TB6612FNG),不可将电机直接连接到 GPIO
  • 电机电源必须独立供电,不要使用开发板的 3.3V/5V 供电,防止电流过大导致主控复位

参数范围

  • speed 范围 0.0 ~ 1.0,建议不超过 0.8 避免电流过大

使用技巧

  • 若某侧轮子转向反了,使用 direction_left/right = -1 修正,无需改逻辑

技术细节

  • 使用完毕后建议调用 deinit() 释放 PWM 资源