第25章:常见问题与故障排除
本章总结在使用 KE3036 套件过程中常见的问题及解决方法。
25.1 硬件问题
25.1.1 传感器无输出
症状:传感器读数始终为 0 或最大值
排查步骤:
- 检查电源连接(VCC、GND)
- 检查信号线连接(S 端)
- 确认 GPIO 引脚号正确
- 使用万用表测量电压
# 快速诊断
from machine import ADC, Pin
# 测试数字引脚
test_pin = Pin(16, Pin.IN, Pin.PULL_UP)
print(f"数字值: {test_pin.value()}")
# 测试模拟引脚
test_adc = ADC(26)
print(f"ADC值: {test_adc.read_u16()}")
25.1.2 I2C 设备扫描不到
可能原因:
- 接线错误(SDA/SCL 接反)
- 缺少上拉电阻
- 设备地址错误
- 设备损坏
解决方法:
from machine import I2C, Pin
# 尝试不同频率
for freq in [100000, 400000]:
i2c = I2C(0, sda=Pin(20), scl=Pin(21), freq=freq)
devices = i2c.scan()
print(f"频率 {freq}: 发现 {devices}")
25.1.3 舵机抖动
原因:
- 电源不稳定
- PWM 频率不准确
- 负载过大
解决方法:
- 使用独立电源供电
- 增加滤波电容
- 减轻负载
25.1.4 电机不转
排查步骤:
- 检查电源电压(需要足够电流)
- 检查驱动芯片连接
- 测试 PWM 输出
# 测试 PWM 输出
from machine import Pin, PWM
import time
pwm = PWM(Pin(14))
pwm.freq(1000)
pwm.duty_u16(32768) # 50%
time.sleep(2)
pwm.duty_u16(0)
25.2 软件问题
25.2.1 程序无法上传
解决方法:
- 按住 BOOTSEL 按钮重新连接
- 重新安装 MicroPython 固件
- 尝试不同的 USB 数据线
- 检查串口是否被其他程序占用
25.2.2 程序运行后无响应
排查步骤:
- 添加 print 语句调试
- 使用 try-except 捕获异常
- 检查无限循环中的 sleep
try:
# 你的代码
sensor.measure()
except Exception as e:
print(f"错误: {e}")
25.2.3 内存不足
错误信息:MemoryError
解决方法:
- 释放不用的变量
- 使用 gc 模块
- 减少全局变量
import gc
# 查看内存
gc.collect()
print(f"可用内存: {gc.mem_free()} 字节")
25.2.4 导入模块失败
错误信息:ImportError
解决方法:
- 确认库文件已上传到 Pico
- 检查文件名拼写
- 确认文件在正确目录
import os
print(os.listdir()) # 查看当前目录文件
25.3 传感器特定问题
25.3.1 DHT11 读取失败
# 增加重试机制
def read_dht_safe(sensor, retries=5):
for _ in range(retries):
try:
sensor.measure()
return sensor.temperature(), sensor.humidity()
except OSError:
time.sleep(0.5)
return None, None
25.3.2 ADC 读数不稳定
# 使用滤波
def read_adc_filtered(adc, samples=10):
values = [adc.read_u16() for _ in range(samples)]
values.sort()
return values[samples // 2] # 中值
25.3.3 DS18B20 找不到设备
import onewire
import ds18x20
# 检查设备
ow = onewire.OneWire(Pin(3))
print(f"单总线设备: {ow.scan()}")
25.3.4 红外接收不稳定
- 避免日光直射
- 远离荧光灯
- 调整接收角度
25.4 电源问题
25.4.1 USB 供电不足
症状:
- 连接多个模块时异常
- 电机启动时重启
解决方法:
- 使用外部电源
- 减少同时工作的模块
25.4.2 电压不匹配
注意:
- Pico 是 3.3V 逻辑
- 某些传感器需要 5V 供电但输出 3.3V
- 使用电平转换器连接 5V 设备
25.5 调试技巧
25.5.1 使用 LED 调试
led = Pin(25, Pin.OUT)
# 指示程序运行
led.toggle()
# 错误闪烁
def error_blink(times=3):
for _ in range(times):
led.value(1)
time.sleep(0.1)
led.value(0)
time.sleep(0.1)
25.5.2 串口日志
import sys
def log(level, msg):
print(f"[{level}] {msg}")
sys.stdout.write("") # 刷新缓冲
log("INFO", "系统启动")
log("ERROR", "传感器读取失败")
25.5.3 定时重启
from machine import WDT
# 看门狗定时器(8秒)
wdt = WDT(timeout=8000)
while True:
# 主循环
wdt.feed() # 喂狗,防止重启
25.6 性能优化
25.6.1 减少延时
# 使用 sleep_us 代替 sleep_ms
import utime
utime.sleep_us(100) # 微秒级延时
25.6.2 使用中断
# 使用中断代替轮询
button = Pin(15, Pin.IN, Pin.PULL_UP)
def callback(pin):
print("按钮按下")
button.irq(trigger=Pin.IRQ_FALLING, handler=callback)
25.6.3 预分配内存
# 预分配数组
buffer = bytearray(100)
# 而不是反复创建新数组
25.7 安全须知
25.7.1 电气安全
- 避免短路
- 正确连接电源极性
- 不超过额定电压/电流
25.7.2 静电防护
- 触摸电路板前先释放静电
- 避免在地毯上操作
- 使用防静电手环
25.7.3 激光安全
- 激光模块勿对眼睛照射
- 勿对反射面照射
25.8 本章小结
本章总结了常见问题:
- 硬件问题:接线、供电、驱动
- 软件问题:导入、内存、异常
- 传感器问题:特定故障排除
- 调试技巧:LED、日志、看门狗
希望本教程能帮助你顺利完成 Raspberry Pi Pico 项目开发!
附录:参考资源