gpt4 book ai didi

Esp32 Micropython Max31865 Spi连接及数据读取

转载 作者:行者123 更新时间:2023-12-04 15:04:39 25 4
gpt4 key购买 nike

我需要使用 MAX31865 SPI 通信读取温度数据。首先,我尝试读取 4 字节数据:

import machine
import ubinascii

spi = machine.SPI(1, baudrate=5000000, polarity=0, phase=0)

#baudrate controls the speed of the clock line in hertz.
#polarity controls the polarity of the clock line, i.e. if it's idle at a low or high level.
#phase controls the phase of the clock line, i.e. when data is read and written during a clock cycle
cs = machine.Pin(15, machine.Pin.OUT)
cs.off()


cs.on()
data = spi.read(4)
cs.off()


print(ubinascii.hexlify(data))

我用不同的代码尝试了很多次,但结果总是相似的b'00000000'

我正在使用 ESP32 WROOM。

我使用了这个引脚:

ESP32:D12-D14-3V3-GND-D15

Max31865:SDO - CLK - VIN - GND - CS

我是 micropython 和 esp32 的新手。

我不知道该怎么办。有什么建议、推荐的教程或想法吗?

最佳答案

简短回答:看看您是否可以使用 CircuitPython 及其 drivers for MAX31865 .

长答案:一堆东西。我怀疑您一直在关注 MAX31855 的 Adafruit 教程,但它的 SPI 接口(interface)与 MAX31865 有很大不同。

您的 SPI 连接缺少 SDI 引脚。您必须连接它,因为通信是双向的。此外,我建议在 ESP32 端使用默认的 SPI 引出线,如 micropython documetation for ESP32 中所述。 .

SPI 初创公司似乎缺少一些东西。看着 SPI documentation调用 machine.SPI() 要求您为参数 sckmosimiso 赋值。这些可能是您在 MAX31865 上连接 SCLKSDISDO 的 ESP32 端的引脚(注意 mosi 表示“master out, slave in”,miso 是“master in, slave out”)。

MAX 上的芯片选择信号是反相的(这就是数据表中 CS 输入上面那一行的意思)。您必须将其设置为 low 以激活芯片,将其设置为 high 以禁用它。

你不能只从芯片中读取数据,它有一个你必须遵循的协议(protocol)。首先,您必须请求芯片进行温度到电阻的转换。 datasheet for your chip explains how to do that, the relevant info starts on page 13 (对于初学者来说有点难以阅读,但无论如何都要尝试,因为它是该芯片的权威信息来源)。在高层次上,它是这样工作的:

  1. 向配置寄存器写入启动转换的值。
  2. 等待转换完成。
  3. 从 RTD(电阻到数字)寄存器读取以获得转换结果。
  4. 根据转换结果计算温度值。

代码可能更接近于此(未经测试,很可能无法立即运行 - 但它应该传达了这个想法):

import ubinascii, time
from machine import Pin, SPI

cs = Pin(15, Pin.OUT)
# Assuming you've rewired according to default SPI pinout
spi = machine.SPI(1, baudrate=100000, polarity=0, phase=0, sck=Pin(14), mosi=Pin(13), miso=Pin(12))

# Enable chip
cs.off()
# Prime a 1-shot read by writing 0x40 to Configration register 0x00
spi.write(b'\x00\x40')
# Wait for conversion to complete (up to 66 ms)
time.sleep_ms(100)
# Select the RTD MSBs register (0x01) and read 1 byte from it
spi.write(b'\x01')
msb = spi.read(1)
# Select the RTD LSBs register (0x02) and read 1 byte from it
spi.write(b'\x02')
lsb = spi.read(1)
# Disable chip
cs.on()
# Join the 2 bytes
result = msb * 256 + lsb
print(ubinascii.hexlify(result))

根据“转换 RTD 数据寄存器”部分将结果转换为温度数据表中的温度值”。

旁注 1:此处 spi = machine.SPI(1, baudrate=5000000, polarity=0, phase=0) 您配置了 5MHz 的波特率,这是此的最大值芯片。根据您连接设备的方式,它可能无法正常工作。 SPI协议(protocol)是同步的,由主设备驱动,所以你可以设置任何你想要的波特率。从一个低得多的值开始,可能是 100KHz 左右。在你弄清楚如何与芯片对话后增加它。

旁注 2:如果您希望转换结果比我代码中的 100 毫秒 sleep 更快,请将 DRDY 线从 MAX 连接到 ESP32 并等待它变低。这意味着转换完成,您可以立即读出结果。

关于Esp32 Micropython Max31865 Spi连接及数据读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66384156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com