当前位置: 首页 > 知识库问答 >
问题:

RaspBerry pi B rev2-通过Python 3中的SPI通过MCP3208 ADC对LM335(温度传感器)进行采样时出现问题

凌啸
2023-03-14

本周末,我尝试将覆盆子pi与LM335温度传感器连接起来。我使用MCP 3208微控制器(通道0)连接传感器。我的目标是使用python 3脚本(类)在SPI模式下收集样本数据。我已经检查了线路,对我来说一切都很好,但我是一个初学者,对电子概念不太了解。在软件方面,我安装了声称与python 3兼容的quick2wire。事实上,我想用Python3API领导微控制器(而不是通过shell调用)

>

MCP3208 ADC:12位ADC/SPI。我使用CS0从GPIO。传感器连接到通道0(B)。参见数据表。

LM335:温度传感器。输出10mV/°K。最小5muA/最大5mA。它连接到MCP3208通道#0(A)。见数据表

220欧姆电阻器(C)。设置关于LM335输出和期望的温度范围覆盖率与我自己的计算:可能是一个问题。。。

LM335(齐纳二极管型)的连接方式如下:

部件接线如下图所示。请注意,黄色链路连接在CS0 SPI通道上的补鞋匠套件后面。

我使用下面的脚本查询CS0/Channel 0 GPIO接口。不幸的是,我还没有找到关于quick2wire python api的有用信息。我刚刚复制/粘贴了一个在同一目标中编写的示例。我不确定它是否真的有效:

#!/usr/bin/env python3

from quick2wire.spi import *
import sys, time

try:
        channel = int(sys.argv[1])
except:
        channel = 0

MCP3208 = SPIDevice(channel, 0)

while True:
        try:
                response = MCP3208.transaction(writing_bytes(0x41, 0x13), reading(1))
                print ("output = %i" % ord(response[0]))
                time.sleep(1)
        except KeyboardInterrupt:
                break

脚本输出:

output = 0 
output = 0 
output = 0 
output = 0 
output = 0 
 ....

结果与通道1相同(argv=1)

由于MCP3208 Din(探头输出)接收到电压(见下文),quick2wire的读数应为18°C(今天我家的室内温度很低)

  • 3,3 V/2^12=805 muA,我理解为数字步
  • 18°C 273°C=291=

我错了吗?

我没有示波器,我只能读:

  • B检查点处的电压为2.529 V,其他MCP3208通道上的电压为0.5 V(/-5%)

注意:LM335上未使用调整引脚,因此结果不准确,但电压在此处!

我认为这似乎是快速2线方面的一个问题。但是哪个?

quick2wire.spi.SPIDevice类在传输参数的结构、内容和输出响应格式方面有很多详细信息。

def transaction(self, *transfers):
    """
    Perform an SPI I/O transaction.

    Arguments:
    *transfers -- SPI transfer requests created by one of the reading,
                  writing, writing_bytes, duplex or duplex_bytes 
                  functions.

    Returns: a list of byte sequences, one for each read or duplex
             operation performed.
    """
    transfer_count = len(transfers)
    ioctl_arg = (spi_ioc_transfer*transfer_count)()

    # populate array from transfers
    for i, transfer in enumerate(transfers):
        ioctl_arg[i] = transfers[i].to_spi_ioc_transfer()

    ioctl(self.fd, SPI_IOC_MESSAGE(transfer_count), addressof(ioctl_arg))

    return [transfer.to_read_bytes() for t in transfers if t.has_read_buf]

另一个问题:

  • 如何设置SPI配置值,如模式、时钟速度、每字位、LSB...等等。

提前感谢你的帮助。

共有1个答案

哈朗
2023-03-14

我知道你可能打算学习如何使用ADC,所以这并不是你问题的答案(我将使用你的非常丰富的帖子-谢谢),但我知道温度传感器已经在GPIO串行线中打包数据,最适合树莓。

如果你还没有读过的话,你真的必须读这本很棒的教程。

 类似资料:
  • 我是新来的,正在拼命寻找解决我问题的办法。我目前正在尝试使用Python使我的Raspberry Pi与AD7705 16位ADC通信。但不幸的是,事情并没有按预期进行。。。电路如下所示:AD7705电路 我做了大量的研究,并仔细研究了数据表,以选择满足AD7705所有要求的部件。 为了保持我的PCB尽可能简单,我不能使用硬件SPI,所以我一定要bitbanging。由于CS与GND绑定,通信减少

  • 检测物体的温度。 用法 Your browser does not support the video tag. 案例:温度计 说明:通过将温度传感器检测到的温度值转化为舵机转动的角度值,来展示度数。 所需模块:智能电源、温度传感器、双舵机驱动、舵机。

  • 温度传感器模块用于检测水、人体等物体的温度。 净重量:13.7g 体积:24×24×14mm 参数 工作电压:5V 测量范围:-55℃~125℃ 测量精度:±0.5℃(-10℃~85℃) 工作电压:DC 5V 抗跌落能力:1.5m 工作温度(模块):-10℃~55℃ 工作湿度:<95%" 特点 高灵敏度 注意事项 测量温度超过100℃时, 传感器线材可能会损坏。请小心使用以免受损坏设备。

  • 温度传感器能够直接和被检测物体接触,检测其温度。 使用前,请先将温度传感器探头与模块如上图组装。 生活实例 电子温度计上使用了温度传感器 参数 尺寸:24×20mm 读值范围:-55~125℃ 读值误差:±0.5℃ 工作电流:14mA

  • 温度传感器能够直接和被检测物体接触,检测其温度。 使用前,请先将温度传感器探头与模块如上图组装。 生活实例 电子温度计上使用了温度传感器 参数 尺寸:24×20mm 读值范围:-55~125℃ 读值误差:±0.5℃ 工作电流:14mA