You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

树莓派2(Raspbian Stretch)GPIO引脚卡输入高电平模式,电机故障求助

树莓派GPIO卡滞+电机故障排查指南

嘿,看你在Raspbian Stretch的树莓派2上搭避障小车时踩坑了——GPIO引脚卡IN/HIGH模式、电机动不了,还没配DC-DC转换器,我来帮你一步步捋清楚问题:

一、先把代码里的低级错误修好

你的代码片段里有变量名拼写错误,还同时混用了gpiozeroRPi.GPIO两个GPIO库,这俩库会抢GPIO控制权,直接导致配置失败!先给你修正两个版本的代码,选一个用就行:

版本1:用RPi.GPIO(适合精细控制)

import RPi.GPIO as GPIO
from time import sleep

# 先把引脚定义清楚(BCM模式)
MOTOR_A_IN = 5
MOTOR_A_OUT = 6
TEST_LED = 17

def setup_gpio():
    GPIO.setmode(GPIO.BCM)
    # 把电机和LED引脚都设为输出模式
    GPIO.setup(MOTOR_A_IN, GPIO.OUT)
    GPIO.setup(MOTOR_A_OUT, GPIO.OUT)
    GPIO.setup(TEST_LED, GPIO.OUT)

def test_hardware():
    # 先测LED,验证GPIO能不能正常工作
    GPIO.output(TEST_LED, GPIO.HIGH)
    sleep(2)
    GPIO.output(TEST_LED, GPIO.LOW)
    sleep(2)
    # 再测电机正转/反转
    GPIO.output(MOTOR_A_IN, GPIO.HIGH)
    GPIO.output(MOTOR_A_OUT, GPIO.LOW)
    sleep(3)
    GPIO.output(MOTOR_A_IN, GPIO.LOW)
    GPIO.output(MOTOR_A_OUT, GPIO.HIGH)
    sleep(3)
    # 停止电机
    GPIO.output(MOTOR_A_IN, GPIO.LOW)
    GPIO.output(MOTOR_A_OUT, GPIO.LOW)

def cleanup():
    GPIO.cleanup()  # 程序结束必须执行,不然GPIO会被锁死

if __name__ == "__main__":
    try:
        setup_gpio()
        test_hardware()
    finally:
        cleanup()

版本2:用gpiozero(更简洁,适合快速开发)

from gpiozero import Motor, LED
from time import sleep

# 直接初始化电机和LED
motor = Motor(forward=5, backward=6)
led = LED(17)

# 先测LED
led.on()
sleep(2)
led.off()
sleep(2)

# 再测电机
motor.forward()
sleep(3)
motor.backward()
sleep(3)
motor.stop()

二、解决GPIO引脚卡IN/HIGH模式的问题

如果改完代码还是不行,大概率是GPIO被异常锁定或者硬件有问题:

  • 强制释放GPIO资源:程序崩溃后GPIO容易被锁,在终端跑这几条命令强制重置引脚:
    sudo rpi-gpio set 5 op dl  # 把引脚5设为输出、低电平
    sudo rpi-gpio set 6 op dl  # 同理处理引脚6
    sudo rpi-gpio set 17 op dl # 处理LED引脚
    
    跑完再重新运行测试代码。
  • 检查硬件短路:把电机驱动和树莓派的连接全拔掉,只留LED,再测GPIO。如果LED能正常亮灭,说明是电机驱动那边的接线有短路(比如引脚接反、电机线碰GND)。
  • 电源问题是核心!:你没配DC-DC转换器,电机启动时会瞬间拉低树莓派的电源电压,直接搞乱GPIO模块的供电,导致引脚锁死。电机的电流远大于树莓派GPIO能扛的16mA,必须给电机单独供电,用DC-DC转换器隔离电机和树莓派的电源,一定要把树莓派的GND和电机驱动的GND连在一起,不然信号没法正常传输。

三、最后提个关键提醒

树莓派GPIO的输出电流极小,绝对不能直接驱动电机!必须用L298N或者TB6612这类电机驱动模块,配合外部电源(比如4节AA电池),DC-DC转换器是用来把电机电源的电压降到树莓派能用的5V(如果你的电机驱动需要5V供电的话),没有它的话,电机启动时的电压波动会直接搞垮树莓派的系统。

内容的提问来源于stack exchange,提问作者themadcoderz

火山引擎 最新活动