极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

123
返回列表 发新帖
楼主: nust_奔跑

Ardunio MEGA+MAX6675热电偶测温

[复制链接]
发表于 2016-11-13 21:54:31 | 显示全部楼层
你好,这个人模块精度只有0.25℃,可以给推荐个更高精度的吗
回复 支持 反对

使用道具 举报

发表于 2017-7-27 15:40:27 来自手机 | 显示全部楼层
额,用的库正在学习怎么不用库来写
回复 支持 反对

使用道具 举报

发表于 2017-8-13 06:39:37 | 显示全部楼层
看来楼主是搞工控的解释这么清,俺是仪表工
回复 支持 反对

使用道具 举报

发表于 2019-4-14 16:42:20 | 显示全部楼层
有仿真电路图可以分享吗?
回复 支持 反对

使用道具 举报

发表于 2020-3-7 21:57:31 | 显示全部楼层
MAX6675目前看到有三种库文件,两种是以IO口模拟SPI总线的。一种是
*MAX6675 thermocouple library by E. Kremer*的SPI总线通讯,实际调用SCK,MISO两条总线,和一个CS脚位。查阅它的MAX6675.h和MAX6675.opp两个文件,可以追查到它是调用了SPI.h以及其它的库文件。
实际测试中,发现,这种方式不浪费SPI总线脚位,可以发挥SPI的优势。在sample文件中,对于CS_PIN做了一个全局声明,在使用多组MAX6675的时候,需要修订,另外添加一个循环数和数组用于存储温度。
上三个文件的代码供参考:
MAX6675.h
-------------
#include <SPI.h>

#define MAX6675_Settings (SPISettings(1000000, MSBFIRST, SPI_MODE1))
#define MAX6675_THERMOCOUPLE_OPEN_BIT 0x04
#define MAX6675_THERMOCOUPLE_OPEN -1.0
#define MAX6675_READ_PERIOD 250
#define MAX6675_CONVERSION_RATIO 0.25

class MAX6675
{
        private:
                uint32_t _lastCallTime;
                int16_t _SSPin;
                uint16_t _incomingMessage;
                float _currentTemp;
                       
        public:
                MAX6675 (int16_t SSPin);
                float readTempC() = 0.0;
        //        float readTempF();
};


MAX6676.opp
-------------
#include <MAX6675.h>

MAX6675::MAX6675(int16_t SSPin)
{
        _SSPin = SSPin;
        pinMode(_SSPin, OUTPUT);
        digitalWrite(_SSPin, HIGH);
        SPI.begin();
        _lastCallTime = 0;
}

float MAX6675::readTempC()
{
        if (millis() - _lastCallTime >= MAX6675_READ_PERIOD)
        {
                SPI.beginTransaction(MAX6675_Settings);
                digitalWrite(_SSPin, LOW);
                _incomingMessage = SPI.transfer16(0x00);               
                digitalWrite(_SSPin, HIGH);
                SPI.endTransaction();
                _lastCallTime = millis();
               
                if (_incomingMessage & MAX6675_THERMOCOUPLE_OPEN_BIT)
                        return MAX6675_THERMOCOUPLE_OPEN;
                _currentTemp = (_incomingMessage >> 3) * MAX6675_CONVERSION_RATIO;
                return _currentTemp;
        }
        return _currentTemp;
}

//float MAX6675::readTempF()
//{
//        return readTempC() * 9.0/5.0 + 32;
//}


TempViaSPI.ino
--------------
#include <MAX6675.h>

float Temp[4];
int CS_PIN;

void setup()
{
  Serial.begin(38400);
  Serial.println("4CH MAX6675 connected via SPI");
  Serial.println("OK...");
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  digitalWrite(2,HIGH);
  digitalWrite(3,HIGH);
  digitalWrite(4,HIGH);
  digitalWrite(5,HIGH);
  delay(500);
}

void loop()
{
  for ( int i=0; i<=3; ++i)
  {
    int CS_PIN = i+2;
    MAX6675 tcouple(CS_PIN);
    float celsius = tcouple.readTempC();
    Temp[i] = celsius;
    Serial.print("Temp of pin");
    Serial.print(CS_PIN);
    Serial.print(": ");
    Serial.println(Temp[i]);
    celsius = 0;
    delay(50);
  }
  Serial.println();
  delay(2000);
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-23 14:07 , Processed in 0.047179 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表