hxgc000 发表于 2016-11-13 21:54:31

你好,这个人模块精度只有0.25℃,可以给推荐个更高精度的吗

langjty 发表于 2017-7-27 15:40:27

额,用的库正在学习怎么不用库来写

太行摄狼 发表于 2017-8-13 06:39:37

看来楼主是搞工控的解释这么清,俺是仪表工:lol

贾参谋长 发表于 2019-4-14 16:42:20

有仿真电路图可以分享吗?

HenryXue 发表于 2019-9-16 20:27:31

非常感谢

Romansi 发表于 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;
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 = celsius;
    Serial.print("Temp of pin");
    Serial.print(CS_PIN);
    Serial.print(": ");
    Serial.println(Temp);
    celsius = 0;
    delay(50);
}
Serial.println();
delay(2000);
}
页: 1 2 [3]
查看完整版本: Ardunio MEGA+MAX6675热电偶测温