树莓派双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) # 其他初始化代码...
三、测试建议
- 先单独测试每个模块:断开一个MAX31865,只接一个,运行代码看是否能正常读取温度,排除单个模块的问题
- 用万用表测量PT电阻的阻值,对比MAX31865计算出的温度(PT100在0℃时是100Ω,PT1000是1000Ω),验证采集准确性
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

