DiffDriveCar 模块
模块介绍
双轮差速小车驱动类,通过控制左右两个电机的速度实现前进、后退、转向、弧线转弯等运动。适用于双轮差速机器人、智能小车等应用场景。
硬件接线说明
每个电机需接 H 桥驱动模块(如 L298N、TB6612FNG 等):
| 电机 | 引脚 | 说明 |
|---|---|---|
| 左电机 | IN1 | 接 GPIO14(示例) |
| 左电机 | IN2 | 接 GPIO15(示例) |
| 右电机 | IN1 | 接 GPIO16(示例) |
| 右电机 | IN2 | 接 GPIO17(示例) |
⚠️ 重要:电机电源必须独立供电,不要使用开发板的 3.3V/5V 供电!
初始化参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| left_pin1 | Pin | 无 | 左电机控制引脚1(接 H 桥 IN1) |
| left_pin2 | Pin | 无 | 左电机控制引脚2(接 H 桥 IN2) |
| right_pin1 | Pin | 无 | 右电机控制引脚1(接 H 桥 IN1) |
| right_pin2 | Pin | 无 | 右电机控制引脚2(接 H 桥 IN2) |
| default_speed | float | 0.6 | 默认速度(0.0 ~ 1.0),用于 forward/backward 等方法 |
| direction_left | int | 1 | 左轮方向修正(1=正常,-1=反转) |
| direction_right | int | 1 | 右轮方向修正(1=正常,-1=反转) |
| freq | int | 5000 | PWM 频率(Hz) |
| max_duty | int | 1023 | 最大占空比(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_speed | 无 | float | 可读写属性:默认速度(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 资源