nust_奔跑 发表于 2013-5-13 13:55:54

Ardunio MEGA+MAX6675热电偶测温

本帖最后由 nust_奔跑 于 2013-5-13 13:59 编辑

1、热电偶工作原理
      两种不同成份的导体两端接合成回路,当两个接合点的温度不同时,在回路中就会产生电动势,这种现象称为热电效应,而这种电动势称为热电势。
       热电偶就是利用热点效应原理进行温度测量的,其中,直接用作测量介质温度的一端叫做工作端(也称为测量端),另一端叫做冷端(也称为补偿端);冷端与显示仪表或配套仪表连接,显示仪表会指出热电偶所产生的热电势。


      热电偶实际上是一种能量转换器,它将热能转换为电能,用所产生的热电势测量温度,对于热电偶的热电势,应注意如下几个问题:
       1、热电偶的热电势是热电偶工作端的两端温度函数的差,而不是热电偶冷端与工作端,两端温度差的函数;
       2、热电偶所产生的热电势的大小,当热电偶的材料是均匀时,与热电偶的长度和直径无关,只与热电偶材料的成份和两端的温差有关;
       3、当热电偶的两个热电偶丝材料成份确定后,热电偶热电势的大小,只与热电偶的温度差有关;若热电偶冷端的温度保持一定,这时候的热电偶热电势仅是工作端温度的单值函数。
      将两种不同材料的导体或半导体A和B焊接起来,构成一个闭合回路。当导体A和B的两个执着点1和2之间存在温差时,两者之间便产生电动势,因而在回路中形成一个大小的电流。
       根据热电偶测温原理,热电偶的输出热电势不仅与测量端的温度有关,而且与冷端的温度有关,需要测量出冷端温度,从而才能准确地测量出真实的温度。下面将介绍集成冷端补偿的芯片MAX6675。
2、MAX6675工作原理
       MAX6675是MAXIM公司的K型热电偶串行模数转换器,它能独立完成信号放大、冷端补偿、线性化、A/D转换及SPI串口数字化输出功能。
       MAX6675内部集成有冷端补偿电路;带有简单的3位串行SPI接口;可将温度信号转换成12位数字量,温度分辨率达0.25℃;内含热电偶断线检测电路。冷端补偿的温度范围-20℃~80℃,可以测量0℃~1023.75℃的温度。
       MAX6675为SO-8脚封装,工作电压为+5V直流电压,功耗为47.1mW,电流为50mA,适用于体积不大,不利散热的装置条件下使用,其引脚图如图1所示。其中SO为SPI串行输出端口引脚; CS为片选信号;SCK为串行时钟输入;T+、T-分别接热电偶的测量端和冷端。




3、Arduino程序
MAX6675的库文件自带的串口输出示例,将采样间隔改为2S。
#include "Max6675.h"

Max6675 ts(8, 9, 10);
// Max6675 module: SO on pin #8, SS on pin #9, CSK on pin #10 of Arduino UNO
// Other pins are capable to run this library, as long as digitalRead works on SO,
// and digitalWrite works on SS and CSK

void setup()
{
      ts.setOffset(0);
      // set offset for temperature measurement.
      // 1 stannds for 0.25 Celsius

      Serial.begin(9600);
}

void loop()
{
      Serial.print(ts.getCelsius(), 2);
      Serial.print(" C / ");
      Serial.print(ts.getFahrenheit(), 2);
      Serial.print(" F / ");
      Serial.print(ts.getKelvin(), 2);
      Serial.print(" K\n");
      delay(2000);
}

4、实物实验演示
MAX6675模块实物图


MEGA+MAX6675的实物图


采用用串口助手接收温度数据,数据如下:
1、 放置在空气中,常温环境下






可以看出,温度还是很稳定的,还说明南京很热,都30℃了。

2、放置于一杯热水中,高温环境





水温稳定在57℃左右,看起来温度不是很高,但是我端水杯还是感觉很烫的。
附上MAX6675的库文件

迷你强 发表于 2013-5-13 17:08:49

;P人体感受到烫的温度为50-60度,所以还是蛮准的

Randy 发表于 2013-5-14 09:08:10

教程和我之前写的差不多,支持啊!

nust_奔跑 发表于 2013-5-14 16:10:29

迷你强 发表于 2013-5-13 17:08 static/image/common/back.gif
人体感受到烫的温度为50-60度,所以还是蛮准的

南京的天气太热了~~~

无为 发表于 2013-7-15 13:59:52

如果要多用的话要如何操作?

nust_奔跑 发表于 2013-7-15 14:56:29

无为 发表于 2013-7-15 13:59 static/image/common/back.gif
如果要多用的话要如何操作?

多路热电偶?
增加一个片选信号即可~

无为 发表于 2013-7-16 08:08:55

nust_奔跑 发表于 2013-7-15 14:56 static/image/common/back.gif
多路热电偶?
增加一个片选信号即可~

这个知道,但不知如何操作,因为多路用的时候,SO,CS都是连在一起的,不知库是否也要多次调用?用I2C总线为每个模块的片选,需要用到数据位的D2位,检测热电偶是否断线,楼主给的库好像不能检测,断开后显示1023.

nust_奔跑 发表于 2013-7-16 11:38:14

无为 发表于 2013-7-16 08:08 static/image/common/back.gif
这个知道,但不知如何操作,因为多路用的时候,SO,CS都是连在一起的,不知库是否也要多次调用?用I2C总线 ...

你还可以通过多路开关,也就是断电和上电,实现多个MAX6675的切换。

无为 发表于 2013-7-16 11:56:22

nust_奔跑 发表于 2013-7-16 11:38 static/image/common/back.gif
你还可以通过多路开关,也就是断电和上电,实现多个MAX6675的切换。

这个……。要是我将两个模块连在板上,同时上电,如:SO连在一起,接至2脚,CSK连在一起,接至3脚,CS1接在4脚,CS2接在5脚,这个程序需要调用两次库吗?如不需要,则此项:Max6675 ts(8, 9, 10);需要做何更改?

无为 发表于 2013-7-17 11:02:18

已经搞定了,多谢楼主!

nust_奔跑 发表于 2013-7-19 00:39:27

无为 发表于 2013-7-17 11:02 static/image/common/back.gif
已经搞定了,多谢楼主!

怎么搞定的?
给大家分享一下,谢谢~

无为 发表于 2013-7-19 10:23:26

采用数组定义就OK了。
int MAX_MISO = 2;
int MAX_SCK= 3;
int MAX_CS[]= {30,31,32,33,34,35,36,37};

nust_奔跑 发表于 2013-7-19 12:13:57

无为 发表于 2013-7-19 10:23 static/image/common/back.gif
采用数组定义就OK了。
int MAX_MISO = 2;
int MAX_SCK= 3;


牛叉~学习了~~

无为 发表于 2013-7-19 12:39:04

nust_奔跑 发表于 2013-7-19 12:13 static/image/common/back.gif
牛叉~学习了~~

也是别人告诉我的……。哈哈

nust_奔跑 发表于 2013-7-19 13:00:28

无为 发表于 2013-7-19 12:39 static/image/common/back.gif
也是别人告诉我的……。哈哈

用数组的话,会自动切换么?
页: [1] 2 3
查看完整版本: Ardunio MEGA+MAX6675热电偶测温