热电偶的使用【MAX6675/MAX31855篇】

木仔科技 2022-04-19 09:32:40

与TMP36等半导体温度传感器不同,热电偶内部没有电子器件,它们只需将两条金属线焊接在一起即可。

由于两种连接金属的物理作用,导线两端的电压会随着温度的升高而轻微但可测量。使用的金属类型会影响电压范围,成本和灵敏度,这就是为什么我们有几种不同类型的热电偶的原因。在半导体传感器或热敏电阻上使用热电偶的主要改进是温度范围大大增加。例如,TMP36的温度可从-50升至150°C,之后芯片本身可能会损坏。另一方面,普通的热电偶的温度范围可以从-200°C到1350°C(K型),有些可以超过2300°C!如下图:

热电偶通常用于HVAC系统,加热器和锅炉,窑炉等。有几种不同的类型,但是本教程将讨论K类型,这是非常常见的,并且更易于与之交互。

使用它们的一个困难是被测电压很小,并且变化很大。每°C约50 uV(uV为1/1000000伏)。虽然可以使用干净的电源和良好的运算放大器来读取这些电压,但还有其他复杂性,例如非线性响应(并非总是50uV/°C)和冷温度补偿(仅测量到的影响)差分,并且必须有一个参考,就像接地是电压的参考一样)。因此,我们建议仅使用可以为您完成繁重工作的接口芯片,让您轻松集成传感器而不会带来太多麻烦。在本教程中,我们将使用一个甚至不需要ADC的MAX31855 K热电偶接口芯片,输出一个很好的温度数字数据信号。

电偶温度范围:-100°C到500°C

输出范围:-6至+ 20mV

精度:+-2°C

正如我们之前提到的那样,对于大多数人来说,尝试实际测量导线上的电压将非常困难,因此我们强烈建议使用热电偶接口芯片。到目前为止,我们所见过的最好的是MAX6675(及其替代版本称为MAX31855)。

首先要确定哪根电线是哪根。热电偶是通过将两根导线焊接在一起制成的,芯片读取两者之间的电压差。一个是负极(对于K型由Alumel制成),另一个是正极(同上,Chromel)。幸运的是,电线采用了颜色编码,几乎所有时间您都会发现Alumel为红色,Chromel为黄色。

根据需要将导线连接到放大器:

MAX6675和MAX31855热电偶放大器与接地的热电偶不兼容。

我们已经看到一些K型热电偶,其引线标记不正确,因此如果您发现热电偶温度下降而不是加热时上升,尝试交换红色和黄色电线

Arduino代码

如果您使用的是AD595接口芯片,则只需将电压输出连接到微控制器上的模拟输入,然后进行一些基本数学运算即可将将10 mV/°C输入到数字输出中。

如果您打算使用MAX6675/MAX31855,还有更多工作要做。

首先,Vin和GND必须连接到3-5V电源。然后,三个数据引脚必须连接到数字IO引脚:

CLK (时钟)是MAX6675/MAX31855的输入(微控制器的输出),指示何时显示另一位数据

DO (数据输出)是MAX6675/MAX31855的输出(微控制器的输入),带有数据的每一位

CS (片选)是MAX6675/MAX31855的输入(微控制器的输出),它告诉芯片何时是时候读取热电偶并输出更多数据了。

在我们的草图的开头,我们定义了这些引脚。对于我们的示例, DO 连接到数字3 , CS 连接到数字4, CLK 连接到引脚5

在嘈杂的环境中,MAX31855 v1.0可能需要在热电偶引线之间添加一个0.01uF电容器。

MAX31855不支持接地的热电偶-如果传感器接地,芯片将返回错误

Arduino库

如果您有较旧的MAX6675分支,请从Arduino库管理器中下载 Adafruit MAX6675 库。

如果您具有较新的MAX31855分支,请从以下位置下载 Adafruit MAX31855 库:

打开Arduino库管理器:

如果有MAX6675分组,请搜索 MAX6 675 库并安装

如果有MAX31855分组,请搜索 Adafruit MAX31855 库并安装它

打开文件 -》 示例-》 MAX6675/Adafruit_MAX31855 -》 serialthermocouple 草图并将其上传到Arduino。上传后,打开串行端口监视器以显示摄氏温度和华氏温度的当前温度。

readCelsius()或 readFahrenheit()以获取浮点结果。

添加显示 通常的要求是将温度输出到本教程中的“经典”字符LCD上。

为此接线,我们将 CLK 连接到数字 3 , CS 转换为数字 4 和 DO 转换为数字 5。一旦工作,就可以更改草图中的引脚连接

我们也有一个示例草图。首先按照我们的教程使LCD工作。现在加载新草图文件-》示例 -》 MAX31855 》 lcd热电偶并像在串行热电偶测试中一样插入热电偶模块,您会看到内部温度和热电偶温度以摄氏度显示。

Python和CircuitPython

将MAX31855传感器与Python和CircuitPython以及Adafruit CircuitPython MAX31855模块一起使用很容易。此模块使您可以轻松编写可从热电偶读取温度的Python代码。

您可以将此传感器与任何CircuitPython微控制器板或具有GPIO和Python的计算机一起使用,这要归功于我们的CircuitPython支持的Adafruit_Blinka -Python兼容性库。

CircuitPython微控制器接线

首先,按照与Arduino前几页完全相同的方式将aMAX31855连接到您的电路板上。下面是将Feather M0连接到传感器的示例:

板3V 至 sensorVdd

板GND 至传感器GND

板卡SCK 到 sensorCLK

板卡MISO sensorDO

Python计算机接线

由于您可以使用数十种Linux计算机/主板,因此我们将显示Raspberry Pi的接线。对于其他平台,请访问Linux上的CircuitPython指南,以了解您的平台是否受支持。

以下是连接SPI的Raspberry Pi:

Pi 3.3V 到传感器 Vin

Pi GND 到传感器 GND

Pi SCLK 到传感器 CLK

Pi MISO 到传感器 DO

Pi GPIO 5 至传感器 CS

MAX31855库的CircuitPython安装

接下来您需要在电路Python板上安装Adafruit CircuitPython MAX31855库

首先请确保您正在为板运行最新版本的Adafruit CircuitPython。

下一步,您需要安装必要的库才能使用硬件-认真按照以下步骤从Adafruit的CircuitPython库捆绑包中查找和安装这些库。例如,Circuit Playground Express指南上有一个很棒的页面,说明如何为快速和非表达板安装库包。

记住非表达板,例如Trinket M0,Gemma M0和Feather/Metro M0 basic,您需要从捆绑包中手动安装必要的库:

adafruit_max31855.mpy

adafruit_bus_device 》

在继续之前,请确保您开发板的lib文件夹或根文件系统具有 adafruit_max31855.mpy,和 adafruit_bus_device 。

下一步连接到开发板的串行REPL,这样您就可以在CircuitPython上得到》》》 提示。

MAX31855库的Python安装

您需要安装Adafruit_Blinka库,该库在Python中提供了CircuitPython支持。这可能还需要在您的平台上启用I2C并验证您正在运行Python3。由于每个平台都略有不同,并且Linux经常更改,请访问Linux上的CircuitPython指南以准备好您的计算机!

完成后,从命令行运行以下命令:

sudo pip3 install adafruit-circuitpython-max31855

如果您的默认Python是版本3,则可能需要改为运行“ pip”。只要确保您不尝试在Python 2.x上使用CircuitPython,就不支持它!

CircuitPython和Python的用法

为演示传感器的用法,我们将对其进行初始化并读取温度。首先通过运行以下命令初始化SPI连接和库:

下载:文件

复制代码

import board

import busio

import digitalio

import adafruit_max31855

spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)

cs = digitalio.DigitalInOut(board.D5)

max31855 = adafruit_max31855.MAX31855(spi, cs) import board

import busio

import digitalio

import adafruit_max31855

spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)

cs = digitalio.DigitalInOut(board.D5)

max31855 = adafruit_max31855.MAX31855(spi, cs)

现在,您可以读取温度属性,以从摄氏度中检索传感器的温度:

下载:文件

复制代码

print(‘Temperature:{} degrees C’.format(max31855.temperature)) print(‘Temperature:{} degrees C’.format(max31855.temperature))

使用MAX31855和CircuitPython代码读取温度就是全部!

完整示例代码

下载:Project Zip 或 max31855_simpletest.py | 在Github上查看

复制代码

import time

import board

import busio

import digitalio

import adafruit_max31855

spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)

cs = digitalio.DigitalInOut(board.D5)

max31855 = adafruit_max31855.MAX31855(spi, cs)

while True:

tempC = max31855.temperature

tempF = tempC * 9 / 5 + 32

print(‘Temperature:{} C {} F ’.format(tempC, tempF))

time.sleep(2.0)

import time

import board

import busio

import digitalio

import adafruit_max31855

spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)

cs = digitalio.DigitalInOut(board.D5)

max31855 = adafruit_max31855.MAX31855(spi, cs)

while True:

tempC = max31855.temperature

tempF = tempC * 9 / 5 + 32

print(‘Temperature:{} C {} F ’.format(tempC, tempF))

time.sleep(2.0)

0 阅读:20

木仔科技

简介:产品开发,方案设计,电路板设计,电路研发,程序研发!