Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x RaspBerry pi B rev2-通过Python 3中的SPI通过MCP3208 ADC对LM335(温度传感器)进行采样时出现问题_Python 3.x_Raspberry Pi - Fatal编程技术网

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

Python 3.x RaspBerry pi B rev2-通过Python 3中的SPI通过MCP3208 ADC对LM335(温度传感器)进行采样时出现问题,python-3.x,raspberry-pi,Python 3.x,Raspberry Pi,本周末,我尝试将覆盆子pi与LM335温度传感器连接起来。我使用MCP 3208微控制器(通道0)连接传感器。我的目标是使用python 3脚本(类)在SPI模式下收集样本数据。 我已经检查了线路,对我来说一切都很好,但我是一个初学者,对电子概念不太了解。 在软件方面,我安装了声称与python 3兼容的quick2wire。事实上,我想用Python3API领导微控制器(而不是通过shell调用) 组件 Raspberry pi REV2型号B,安装Rasbian喘息/Quick2wire/

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

组件
  • Raspberry pi REV2型号B,安装Rasbian喘息/Quick2wire/列出了dev/spix.y设备

  • MCP3208 ADC:12位ADC/SPI。我正在使用GPIO中的CS0。传感器连接到通道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μA,我理解为“数字步进”
  • 微控制器上的18°C+273°C=291=>2,91 VDin引脚
  • 然后返回2910/0.805=3615
我错了吗

控制 我没有示波器,我能读取的唯一测量值是:

  • 检查点B处的电压为2.529 V,其他MCP3208通道上的电压为0.5 V(+/-5%)
注意:LM335上未使用调整引脚,因此结果不准确,但电压在此处

我想这似乎是quick2wire方面的一个问题。但是哪个呢

代码 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。。。等等

提前感谢您的帮助

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


如果你还没有读过的话,你真的必须读。

我看了你的帖子。干得好。正如你所说,我对读/写模式下的ADC控制感兴趣。我收集的所有东西都在这里。你可以随意使用任何你认为合适的东西。嘿,Emmanuel,我知道从那时起已经有一段时间了,但我现在正试图实现完全相同的目标。你能给我一些关于如何计算Rc=220Ω的信息吗?你用什么公式来计算温度?