Adafruit MCP9600 I2C 热电偶放大器:高精度温度测量的理想之选

电子说

1.4w人已加入

描述

Adafruit MCP9600 I2C 热电偶放大器:高精度温度测量的理想之选

在电子工程师的日常工作中,温度测量是一个常见且重要的任务。热电偶作为一种广泛使用的温度传感器,具有测量范围广、响应速度快等优点,但它的输出信号通常很微弱,需要一个高性能的放大器来进行处理。Adafruit MCP9600 I2C 热电偶放大器就是这样一款优秀的产品,今天我们就来详细了解一下它。

文件下载:4101.pdf

产品概述

热电偶对环境非常敏感,因此需要一个带有冷补偿参考的优质放大器。Adafruit MCP9600 正好满足了这一需求,它可以轻松与任何支持 I2C 接口的微控制器或单板计算机连接。芯片内部处理所有模拟信号,支持 K、J、T、N、S、E、B 和 R 等多种类型的热电偶。此外,它还可以设置过温/欠温警报,并通过常见的 I2C 接口读取热电偶(热端)温度和芯片(冷端)温度。

该 breakout 板集成了芯片、3.3V 稳压器和电平转换电路,经过组装和测试,适用于 3.3V 或 5V 逻辑电平。板上配备了 2 针端子块(用于连接热电偶)和引脚头(可插入面包板或实验板)。

主要特性

  • 广泛的热电偶兼容性:支持 K、J、T、N、S、E、B 和 R 型热电偶。
  • 宽温度测量范围:不同类型的热电偶有不同的测量范围,例如 K 型为 -200°C 至 +1372°C,J 型为 -150°C 至 +1200°C 等。
  • 高分辨率:分辨率为 ±0.0625 °C,但要注意 K 型热电偶的精度约为 ±2°C 至 ±6°C。
  • 内部温度读取:可以读取芯片内部的温度。
  • 电源和逻辑电平兼容性:支持 3.3V 至 5V 的电源供应和逻辑电平。
  • I2C 数据连接:通过 I2C 接口进行数据传输。

引脚说明

电源引脚

  • Vin:电源引脚,芯片可处理 2.7V 至 5V 的电压。建议使用与微控制器逻辑电平相同的电源,例如对于 5V 的 Arduino,使用 5V 电源。
  • GND:电源和逻辑的公共接地引脚。

I2C 逻辑引脚

默认 I2C 地址为 0x67。

  • SCL:I2C 时钟引脚,连接到微控制器的 I2C 时钟线。
  • SDA:I2C 数据引脚,连接到微控制器的 I2C 数据线。

警报引脚

A1 - A4 为警报 1 - 4 输出引脚。

地址引脚

ADDR:用于设置 I2C 地址。默认情况下,ADDR 引脚连接到 Vin,将 I2C 地址设置为 0x67。可以使用跳线或直接将 ADDR 引脚连接到 GND 来更改 I2C 地址。该 breakout 板支持总共五个 I2C 地址,这意味着可以在同一 I2C 总线上连接多达五个 MCP9600 breakout 板。

地址 J1 J2
0x67 - -
0x66 - -
0x65 X X
0x64 - X
0x60 (ADDR 连接到 GND) -

不同平台的使用方法

Arduino

接线

将 MCP9600 连接到 Feather 或 Metro / Arduino 非常简单:

  • 如果使用 Feather(3.3V),将 Feather 的 3V 连接到板的 VIN。
  • 如果使用 5V 的 Arduino(如 Uno 等),将 Arduino 的 5V 连接到板的 VIN。
  • 将 Feather 或 Arduino 的 GND 连接到板的 GND。
  • 将 Feather 或 Arduino 的 SCL 连接到板的 SCL。
  • 将 Feather 或 Arduino 的 SDA 连接到板的 SDA。
  • 将热电偶的 + 极连接到板的螺丝端子 +。
  • 将热电偶的 - 极连接到板的螺丝端子 -。

需要注意的是,即使没有连接热电偶,MCP9600 也会返回热端的温度值,并且不会报错。

安装

可以使用 Arduino IDE 中的库管理器安装 Adafruit MCP9600 库。点击“Manage Libraries...”菜单项,搜索“Adafruit MCP9600”,并选择该库进行安装。同时,还需要安装 Adafruit BusIO 库。

加载示例

打开“File -> Examples -> Adafruit MCP9600 -> mcp9600_test”,并将其上传到连接了传感器的 Arduino。上传完成后,打开串口监视器(“Tools -> Serial Monitor”),应该可以看到热端、冷端和 ADC 的值。

示例代码

#include < Wire.h >
#include < Adafruit_I2CDevice.h > 
#include < Adafruit_I2CRegister.h > 
#include "Adafruit_MCP9600.h"

#define I2C_ADDRESS (0x67)
Adafruit_MCP9600 mcp;

void setup() {
  Serial.begin(115200);
  while (!Serial) {
    delay(10);
  }
  Serial.println("MCP9600 HW test");

  /* 初始化驱动程序,使用 I2C_ADDRESS 和默认的 I2C 总线。 */
  if (!mcp.begin(I2C_ADDRESS)) {
    Serial.println("Sensor not found. Check wiring!");
    while (1);
  }
  Serial.println("Found MCP9600!");

  mcp.setADCresolution(MCP9600_ADCRESOLUTION_18);
  Serial.print("ADC resolution set to ");
  switch (mcp.getADCresolution()) {
    case MCP9600_ADCRESOLUTION_18:
      Serial.print("18");
      break;
    case MCP9600_ADCRESOLUTION_16:
      Serial.print("16");
      break;
    case MCP9600_ADCRESOLUTION_14:
      Serial.print("14");
      break;
    case MCP9600_ADCRESOLUTION_12:
      Serial.print("12");
      break;
  }
  Serial.println(" bits");

  mcp.setThermocoupleType(MCP9600_TYPE_K);
  Serial.print("Thermocouple type set to ");
  switch (mcp.getThermocoupleType()) {
    case MCP9600_TYPE_K:
      Serial.print("K");
      break;
    case MCP9600_TYPE_J:
      Serial.print("J");
      break;
    case MCP9600_TYPE_T:
      Serial.print("T");
      break;
    case MCP9600_TYPE_N:
      Serial.print("N");
      break;
    case MCP9600_TYPE_S:
      Serial.print("S");
      break;
    case MCP9600_TYPE_E:
      Serial.print("E");
      break;
    case MCP9600_TYPE_R:
      Serial.print("R");
      break;
    case MCP9600_TYPE_B:
      Serial.print("B");
      break;
  }
  Serial.println(" type");

  mcp.setFilterCoefficient(3);
  Serial.print("Filter coefficient value set to: ");
  Serial.println(mcp.getFilterCoefficient());

  mcp.setAlertTemperature(1, 30);
  Serial.print("Alert #1 temperature set to ");
  Serial.println(mcp.getAlertTemperature(1));
  mcp.configureAlert(1, true, true); // 启用警报 1,温度上升触发

  mcp.enable(true);
  Serial.println(F("------------------------------"));
}

void loop() {
  Serial.print("Hot Junction: ");
  Serial.println(mcp.readThermocouple());
  Serial.print("Cold Junction: ");
  Serial.println(mcp.readAmbient());
  Serial.print("ADC: ");
  Serial.print(mcp.readADC() * 2);
  Serial.println(" uV");
  delay(1000);
}

Python & CircuitPython

接线

  • CircuitPython 微控制器接线:与 Arduino 的接线方式相同,例如将 Feather M0 的 3V 连接到传感器的 VIN,GND 连接到 GND,SCL 连接到 SCL,SDA 连接到 SDA。
  • Python 计算机接线:以 Raspberry Pi 为例,将 Pi 的 3V3 连接到传感器的 VIN,GND 连接到 GND,SCL 连接到 SCL,SDA 连接到 SDA。需要注意的是,较旧版本的 Raspberry Pi 固件可能不支持 I2C 时钟拉伸,因此在使用前请确保将固件更新到最新版本,并适当降低 I2C 频率。

库安装

  • CircuitPython 库安装:首先确保运行的是适用于您的电路板的最新版本的 Adafruit CircuitPython。然后从 Adafruit 的 CircuitPython 库捆绑包中复制 adafruit_mcp9600.mpyadafruit_bus_device 到您的 CIRCUITPY 驱动器。
  • Python 库安装:需要安装 Adafruit_Blinka 库以提供 Python 中的 CircuitPython 支持。这可能还需要在您的平台上启用 I2C 并确保运行的是 Python 3。安装完成后,从命令行运行 pip3 install adafruit-circuitpython-mcp9600

使用方法

以下是一个简单的示例代码,用于初始化传感器并读取温度值:

import board
import busio
import adafruit_mcp9600

i2c = busio.I2C(board.SCL, board.SDA, frequency=100000)
mcp = adafruit_mcp9600.MCP9600(i2c)

while True:
    print((mcp.ambient_temperature, mcp.temperature, mcp.delta_temperature))
    time.sleep(1)

警报配置

MCP9600 breakout 板允许您在四个引脚上配置四个独立的警报。将警报引脚连接到您的电路板或计算机的数字输出引脚,并使用 MCP9600 库中的警报配置功能进行设置。具体的配置方法可以参考相关文档。

总结

Adafruit MCP9600 I2C 热电偶放大器是一款功能强大、使用方便的温度测量解决方案。它具有广泛的热电偶兼容性、高分辨率和丰富的功能,适用于各种温度测量应用。无论是使用 Arduino 还是 Python/CircuitPython,都可以轻松地与 MCP9600 进行集成,实现高精度的温度测量和警报功能。

你在实际使用过程中是否遇到过类似的温度测量问题?你对 Adafruit MCP9600 的性能有什么看法?欢迎在评论区分享你的经验和见解。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分