You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派双SPI接口同时采集PT100与PT1000 RTD温度的问题

双MAX31865温度采集:PT100(3线)+ PT1000(2线)实战优化

看起来你已经搭好了硬件框架,但代码里有几个容易踩的坑,我帮你梳理下修正方案和常见问题排查:

一、修正后的完整代码

首先补上缺失的依赖导入,加上温度输出和错误处理,同时明确SPI参数(避免默认总线冲突):

import time
from Max31865 import Max31865

# 初始化PT100(3线制):片选引脚26,使用SPI0总线
maxGarraum = Max31865(spi_bus=0, spi_cs=26)
maxGarraum.initPt100_3WireSensor(26, True)

# 初始化PT1000(2线制):片选引脚24,使用SPI0总线(如果硬件接的是SPI1,改成spi_bus=1)
maxFleisch = Max31865(spi_bus=0, spi_cs=24)
maxFleisch.initPt1000_2WireSensor(24, True)

try:
    while True:
        # 读取PT100温度并处理可能的错误
        pt100_temp = maxGarraum.getCurrentTemp()
        if isinstance(pt100_temp, float):
            print(f"PT100 (Garraum) Temperature: {pt100_temp:.2f}°C")
        else:
            print(f"PT100 Error: {pt100_temp}")
        
        # 读取PT1000温度
        pt1000_temp = maxFleisch.getCurrentTemp()
        if isinstance(pt1000_temp, float):
            print(f"PT1000 (Fleisch) Temperature: {pt1000_temp:.2f}°C")
        else:
            print(f"PT1000 Error: {pt1000_temp}")
        
        time.sleep(1)
except KeyboardInterrupt:
    print("采集终止")

二、关键问题排查

1. SPI总线与片选引脚冲突

  • 树莓派默认启用SPI0(引脚SCLK=11, MISO=9, MOSI=10),如果两个MAX31865都接SPI0,只要片选引脚(CS)分别接26和24就没问题,但要确保硬件接线时两个模块的SCLK/MISO/MOSI都对应接树莓派的同一SPI总线引脚
  • 如果用SPI1(引脚SCLK=21, MISO=19, MOSI=20),要在初始化时指定spi_bus=1,同时硬件对应接线

2. 3线/2线制配置正确性

  • 3线PT100必须确保initPt100_3WireSensor调用正确,硬件上要把MAX31865的3/2W引脚接高电平(你说接线符合文档,这点应该没问题,但可以再核对)
  • 2线PT1000要确保initPt1000_2WireSensor调用正确,3/2W引脚接低电平

3. 常见硬件故障点

  • 检查PT电阻的接线:3线PT100要把两根同名线(比如两个红色)分别接MAX31865的RTD_A和RTD_B,第三根接RTD_C;2线PT1000直接接RTD_A和RTD_B
  • 确保MAX31865的电源是3.3V(树莓派的3.3V引脚),不要接5V
  • 检查SPI总线是否在树莓派中启用:通过raspi-config的"Interface Options" -> "SPI"开启

4. Max31865.py库的潜在问题

如果你用的是第三方库,要确保它支持多实例初始化,并且能正确处理不同的SPI总线/片选。如果库没有暴露spi_bus参数,可能需要修改库代码,在初始化SPI时指定总线,比如:

# 在Max31865.py的__init__方法中添加spi_bus参数
def __init__(self, spi_bus=0, spi_cs=8):
    self.spi = spidev.SpiDev()
    self.spi.open(spi_bus, spi_cs)
    # 其他初始化代码...

三、测试建议

  1. 先单独测试每个模块:断开一个MAX31865,只接一个,运行代码看是否能正常读取温度,排除单个模块的问题
  2. 用万用表测量PT电阻的阻值,对比MAX31865计算出的温度(PT100在0℃时是100Ω,PT1000是1000Ω),验证采集准确性

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:14:00