跑跑啦航模

  要说智能小车最核心的部分,非电机控制莫属——车要动,就得让电机转;要快慢、要前进后退,都得控制电机。这篇把树莓派控制直流电机的原理和写法讲透:PWM 调速 + 电机驱动板 + GPIO Zero 封装,让你几行代码就让小车跑起来。

为什么不能直接把电机的线怼到树莓派引脚

树莓派的 GPIO 引脚只能输出很小的电流(几个毫安级,3.3V 逻辑电平),而直流电机动辄要几百毫安甚至上安的电流。直接怼上去,要么电机纹丝不动,要么烧掉树莓派的 GPIO。所以必须经过电机驱动板(也叫电机驱动芯片/H桥如 L298N、L293D、TB6612 之类):

· 树莓派 GPIO → 驱动板信号脚(只发“怎么转”的信号,电流小)
· 外部电源 → 驱动板电源脚(真正给电机供电的大电流)
· 驱动板 → 电机两根线(输出)

一句话:树莓派负责“指挥”,驱动板负责“出力”。这也是所有靠谱智能车的标准接法。

PWM:怎么控制电机速度

PWM(脉宽调制)就是“快速开关”信号——在一个周期里,通电时间占的比例(叫占空比)决定电机平均电压,也就决定了速度:占空比大、跑得快,占空比小、跑得慢。树莓派引脚就可以输出 PWM,从而调速。方向则由驱动板的 IN1/IN2 两个信号脚的逻辑组合控制(一个高一个低 → 正转,反过来 → 反转)。

用 GPIO Zero 控制单个电机

GPIO Zero 把电机封装成 Motor 类,接好驱动板后,给两个控制脚,几行代码就正反转:

from gpiozero import Motor
from time import sleep

motor = Motor(forward=4, backward=14)

while True:
  motor.forward()  # 正转
  sleep(5)
  motor.backward()  # 反转
  sleep(5)

这里的 forward=4 是正转控制脚(接驱动板 IN1 的 GPIO)、backward=14 是反转控制脚(接 IN2 的 GPIO)。forward()/backward() 就让电机正转/反转。

调速也不难,直接给电机的速度赋值:

motor.forward(speed=0.5)  # 半速前进
motor.backward(speed=1)  # 全速后退
motor.stop()  # 停

speed 取值范围 0~1,0.5 就是一半速度——PWM 占空比就在背后帮你调好了。

两个电机做成小车:Robot 类

小车至少两个驱动轮(左右各一个)。把左右两个电机组合成 Robot 对象,就能直接前进、后退、转弯:

from gpiozero import Robot, Motor
from time import sleep

robot = Robot(left=Motor(4, 14), right=Motor(17, 18))

robot.forward()  # 直行
sleep(3)
robot.right()  # 右转
sleep(1)
robot.backward()  # 后退
sleep(2)
robot.stop()  # 停

left/right 分别放左右两个电机,forward()/backward()/left()/right()/stop() 就是整套驾驶动作。想让它走个正方形、绕个圈,都是这些方法的组合。

  电机控制是智能小车的“脚”。跑跑啦的全自动智能小车整机除了电机,还配了后轮双减速电机带编码器——编码器能实时回传轮子转了几圈,配合程序就能做到“前进 20cm 精确到 99% 精度”这种闭环控制,比起开环“凭感觉跑”,能实现更精准的定位走位。想配齐电机驱动这类动力套件自己攒车,可以看我们传感器模块智能小车产品。淘宝店:paopaola.taobao.com

跑跑啦全自动智能小车整机——双驱动电机

小提示:电机别直接接树莓派引脚,一定过驱动板,树莓派指挥、驱动板出力,才稳。想要小车走位精准,电机带编码器做闭环是关键。

(本文整理自 Raspberry Pi 树莓派官方文档《GPIO Zero》电机/小车示例与 GPIO Zero 官方文档,CC BY-SA 4.0,来源:https://shumeipai.nxez.com/doc-zhcn/docs/program/gpio/gpiozero)

上一篇:树莓派舵机控制:转向与云台入门
下一篇:树莓派超声波测距与避障小车
返回文章列表

跑跑啦航模详情

联系手机15058675618 qq售后群号241350086 微信号paopaola_com
长距离FPV无人机,高清传感器模块,终身保修和升级服务。