跳到主要内容

如何使用Raspberry Pi Pico与DC电机

覆盆子pi pico与直流电机
(图片信用:汤姆的硬件)

覆盆子π皮科是一个诱人的小,但强大的董事会,为用户提供机会创建伟大和小的项目。一种类型的项目是机器人,为此我们需要马达。那么我们如何用树莓派皮科来控制直流电机呢?我们能把它们直接连接到GPIO吗?简短的回答是否定的。

Raspberry Pi Pico的GPIO管脚无法提供直流电机所需的电流,如果我们尝试,很有可能会损坏Pico。相反,我们需要一个电机控制器作为Pico和我们的电机之间的桥梁。我们打开/关闭两个Pico GPIO管脚,它们控制电机控制器,反过来,打开/关闭两个输出,使电机移动。

对于这个项目,您将需要

  • 覆盆子π皮科运行Micropopthon(见如何设置覆盆子pi pico
  • 托尼安装在你的电脑上
  • 4 x男性对男性跳线电线
  • 半或全尺寸面包板
  • 电机控制器板.在我们的例子中,我们用了DRV8833.芯片,但L298或L9110S芯片也应该工作。
  • 5V / 6V直流电动机.我们使用微型齿轮金属电机,但标准的直流业余电机也会工作。请注意,电机需要2个公对公跳线来连接接线板。

(图片信用:汤姆的硬件)

树莓派皮科直流电机的硬件设置

我们在该项目中使用的芯片是DRV8833,我们的特定版本用于面包板,但还有许多其他版本,包括用于嵌入机器人的版本。市场上还有其他电机控制器,如L298D和L9110,这是机器人的简单且价格实惠的组件。所有电机控制器共享相同的输入/输出约定。

(图片信用:汤姆的硬件)
  1. 将覆盆子pi pico放入面包板因此,微USB端口悬挂在面包板的末端。
  2. 将DRV8833电机控制器放入面包板因此,引脚是中央通道的两侧。
  3. 将Raspberry Pi Pico的VBUS引脚连接到VCC引脚DRV8833的一个跳线。这将直接从USB提供的5V供电电机控制器。
  4. 连接树莓派皮科GND引脚到GND引脚DRV8833。
  5. 连接GPIO 14.覆盆子pi pico到In1.DRV8833。
  6. 连接GPIO 15.覆盆子pi pico到In2.DRV8833。
  7. 将OUT1和OUT2连接到电机的销钉,这项测试并不重要。

(图片信用:汤姆的硬件)

用覆盆子PI Pico软件设置DC电机

电路建立后,连接你的树莓皮皮和打开桑尼应用程序。

从机器进口引脚

2。创建两个对象,电机1a和motor1b。这些将存储用于控制DRV8833电机控制器的输出的GPIO管脚号码。

MOTOR1A = PIN(14,PIN.OUT)MOTOR1B = PIN(15,PIN.OUT)

3.创建一个函数使电机“前进”。要做到这一点,我们需要告诉一个引脚拉高,另一个拉低。这,反过来,沟通我们的预期方向电机控制器和相应的输出引脚将遵循suit迫使电机在一个设定的方向移动。

Def forward(): motor1a.high() motor1b.low()

4。创建一个移动“向后”的功能。这看到GPIO引脚状态反转,导致电机在相反的方向旋转。

def后退():motor1a.low()motor1b.high()

5。创建一个函数来停止电机。通过将两个引脚拉低,我们告诉电机控制器停止电机的所有移动。

Def stop(): motor1a.low() motor1b.low()

6。创建一个最终的“测试”函数这将调用以前的函数并运行一个测试序列,将电机“向前”旋转两秒钟,然后“向后”两秒钟。然后它停止电机。

Def test(): forward() utime.sleep(2) backward() utime.sleep(2) stop()

7。为循环创建一个运行测试功能的循环五次。

对于I系列(5):test()

将代码保存到Raspberry Pi Pico为motor.py,并单击绿色箭头运行代码。电机将向两个方向旋转五次。

6个评论 论坛评论
  • CooliPi
    使用PWM或Delta-Sigma调制,可以调节电机的转矩(它与电流成比例)。

    我用过一次L298。

    使用硬件PWM或那些Bitbanging GPIO处理器,应该使用后者使用Delta-Sigma调制来使其模拟和非常精确。
    回复
  • Bobber76
    您好,首先,我对微控制器/微量产物进行比较新的是,如果我问明显,请提前道歉。

    我试图复制这个演示,我已经成功了。程序开始,电机开始移动。电机启动移动后几乎立即立即停止并为我提供以下错误。

    连接丢失(读失败:设备报告准备读取但没有返回数据(设备断开或端口多次访问?))
    现在我自己焊接DRV8833板,这是我的第一次焊接。我能在两个引脚之间建立一个桥接吗?(端口多路访问?)

    我拍了几张焊的照片。也许有些东西对你来说,人们更经历了几个别针,我想知道我是否有联系,但我不认识任何桥接。不幸的是,我似乎无法弄清楚如何将本地图像附加到此消息。:(
    我的代码如下…

    导入utime.
    从机器进口引脚

    motor1a =引脚(14,引脚. out)
    MOTOR1B = PIN(15,PIN.OUT)

    def forward():
    motor1a.high()
    motor1b.low()

    def后退():
    motor1a.low()
    motor1b.high ()

    def停止():
    motor1a.low()
    motor1b.low()

    def test():
    转发()
    Utime.sleep(2)
    落后()
    Utime.sleep(2)
    停止()

    For I in range(5):
    测试()
    打印(“测试号”,I + 1)

    任何建议将不胜感激,

    鲍勃
    回复
  • Bobber76
    仍然在一个差不多星期后挣扎。因此我有......

    焊接一个新的DRV8833芯片。用万用表确认连续性
    更换一个新的面包板
    替换新电机,确认正确的接触
    从演示复制和粘贴精确的代码以消除拼写错误
    我真的很损失下一步。使用组件的确切部件是

    Koobook DRV8833电机驱动


    Flormoon DC电机
    上面列出的代码,我仍然得到相同的错误/行为。电机将旋转~½秒,然后桑尼产生以下信息,

    连接丢失(读失败:设备报告准备读取但没有返回数据(设备断开或端口多次访问?))

    任何建议将不胜感激。

    谢谢,
    回复
  • 曲折
    @Bobber76你试过用单独的电源来驱动电机,而不是用Pico的VBUS吗?
    回复
  • Bobber76
    @Chabes是的,刚从今天从亚马逊收到AAX4电池,它确实有效。我对此相当陌生,所以我并不完全确定如何在面包板上连接所有内容。来自电池组的黑色/负连接到地面,电连接红色/正为DRV8833驱动器的VCC。那工作。所有其他连接都如教程中所述。

    你知道为什么演示版可以用微处理器供电而我需要外部供电吗?

    感谢您的回复......非常感谢。
    回复
  • 曲折
    @bobber76听起来像你正确的它。我没有专家,但我之前遇到了类似的问题。

    我有一些USB连接线有点糟糕(特别是较长的),它们一直是我过去的一些问题的来源。你可能也有类似的情况。

    如果不是电缆,也许你所拥有的特定电机可能比OP的电机更令人振奋。

    比我更有经验的人可能会给出更全面的回答。

    很高兴听到你有工作!
    回复