首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回nan的Adafruit_MAX31855热堆IC readcelcius()命令

返回nan的Adafruit_MAX31855热堆IC readcelcius()命令
EN

Stack Overflow用户
提问于 2017-06-13 15:30:22
回答 1查看 372关注 0票数 0

我目前使用的是Adafruit_MAX31855集成电路和一个K型热电偶。因为某种原因,我在串行显示器上看到了这个.

代码语言:javascript
运行
复制
Internal Temp = 32.44
nan // printed from thermocouple.readCelcius()
Internal Temp = 32.44
nan
Internal Temp = 32.44
nan
Internal Temp = 32.44
nan
Internal Temp = 32.38
nan
Internal Temp = 32.38
nan
Internal Temp = 32.38
nan
Internal Temp = 32.38
nan
Internal Temp = 32.31

现在我知道所有的连接都是正确的,因为我得到了一个内部温度。此外,.readCelcius()命令有时也会返回正确的读数。我起初想,可能是最高温度超出了芯片的能力范围,但在40摄氏度运行时,我有时会得到这个结果。

代码语言:javascript
运行
复制
#include <SPI.h>
#include "Adafruit_MAX31855.h"

int HeaterPWM = 12;
int LEDPin = 13;
long _startTime;
long _currentTime;

#define MAXDO   3
#define MAXCS   4
#define MAXCLK  5

Adafruit_MAX31855 thermocouple(MAXCLK, MAXCS, MAXDO);


void setup() {
  while (!Serial); // wait for Serial on Leonardo/Zero, etc

  Serial.begin(9600);
  pinMode(HeaterPWM, OUTPUT);
  pinMode(LEDPin, OUTPUT);

  Serial.println("MAX31855 test");
  // wait for MAX chip to stabilize
  delay(500);
}

void loop() {

  _startTime = millis();
  while (_currentTime - _startTime < 3000) // heater on for 3 seconds at a time
  {
    Serial.print("Internal Temp = ");
    Serial.println(thermocouple.readInternal());

    _currentTime = millis();
    analogWrite(HeaterPWM, 150);
    digitalWrite(LEDPin, HIGH);
    double c = sampleCelcius(1);
    Serial.println(c);
    delay(10);
  }

  _startTime = millis();

  while (_currentTime - _startTime < 10000) // heater on for 3 seconds at a time
  {
    Serial.print("Internal Temp = ");
    Serial.println(thermocouple.readInternal());

    _currentTime = millis();
    analogWrite(HeaterPWM, 0);
    digitalWrite(LEDPin, LOW);
    double c = sampleCelcius(1);
    Serial.println(c);
    delay(10);
  }
}

double sampleCelcius(int maxSamples)
{
  double result = NAN;
  for (int i = 0; i < maxSamples; i++)
  {
    result = thermocouple.readCelsius();
    if (!isnan(result)) // exit on first good reading.
      break;
    delay(10);
  }
  return result;
}

我检查了我所有的电压和PWM输出等等。以及基准测试热电偶。它在室温下工作是正确的。当我得到一个读数,而不是南,当加热器开着,我似乎得到了非常高的数字,以千,这显然是不正确的。气温应该在65摄氏度左右。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-10 15:46:21

结果表明,Adafruit_MAX31855集成电路不适合在导电表面使用,而且“加热”也会向热电偶发送电压,从而使读数下降。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44525790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档