MAX31856多类型热电偶温度检测方案芯片详解,附可实现的STM32程序代码

背景:

        热电偶的测温是工业现场常用的测温手段,但是欧洲系列的工控领域中使用的大部分都是J型热电偶,而日本以及台湾等地大部分使用的是K型热电偶。因为日本和台湾的工控产品较早地进入国内,因此国内大部分设备胜场厂家在使用热电偶传感器的时候经常会使用K型热电偶。但是随着欧系的高端工控产品进入国内市场,单一支持K型热电偶的测温手段显得太过单一。市场急需一款支持多种热电偶的产品出现,此时Maxim厂家发布了一款支持K, J, N, R, S, T, E, B型的测温芯片MAX31856(市场上多是MAX31856 MUD+封装的芯片,实际功能一致)。

MAX31856芯片的介绍:

        其他的我不想多介绍,免得文章过长使读者疲累。详细的说明请看此链接下的说明书:

        接下来芯片的介绍主要围绕怎么用SPI通讯的方式去设置MAX31856的热电偶类型以及温度转换方式。

        先介绍MAX31856的芯片寄存器总览。

                                                      表1:MAX31856寄存器地址

地址

读写权限

名称

默认

功能

00h/80h

读/写

CR0

00h

设置寄存器0

01h/81h

读/写

CR1

03h

设置寄存器1

02h/82h

读/写

MASK

FFh

故障掩码寄存器

03h/83h

读/写

CJHF

7Fh

冷结温度高温阈值寄存器

04h/84h

读/写

CJLF

C0h

冷结温度低温阈值寄存器

05h/85h

读/写

LTHFTH

7Fh

热电偶测温高温阈值高8位寄存器

06h/86h

读/写

LTHFTL

FFh

热电偶测温高温阈值低8位寄存器

07h/87h

读/写

LTLFTH

80h

热电偶测温低温阈值高8位寄存器

08h/88h

读/写

LTLFTL

00h

热电偶测温低温阈值低8位寄存器

09h/89h

读/写

CJTO

00h

冷结温度偏移寄存器

0Ah/8Ah

读/写

CJTH

00h

冷结温度高8位寄存器

0Bh/8Bh

读/写

CJTL

00h

冷结温度低8位寄存器

0Ch

只读

LTCBH

00h

热电偶温度高八位寄存器

0Dh

只读

LTCBM

00h

热电偶温度中八位寄存器

0Eh

只读

LTCBL

00h

热电偶温度低八位寄存器

0Fh

只读

SR

00h

故障状态记录寄存器

        接下去详细介绍每个寄存器的功能。

寄存器 00h/80h: 设置寄存器0 (CR0)

默认值: 00h

寄存器地址

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

00h/80h

CMODE

1SHOT

OCFAULT1

OCFAULT0

CJ

FAULT

FAULTCLR

50/60Hz

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

名称

描述

7

CMODE

转换模式

0 = 关闭模式 (默认)

1 = 自动转换模式。每100ms(标称)连续发生一次转换。

6

1SHOT

一次性模式

0 = 未请求任何转换(默认)

1 = 当转换模式位=0(正常关闭模式)时,这会导致单冷端和热电偶转换。将1写入该位后,当CS变高时,将触发转换。请注意,如果执行多字节写入,则在事务结束时CS变高时会触发转换。在60Hz滤波模式下,单次转换需要约143ms或在50Hz滤波模式下需要169ms才能完成。该位自清除为0。

5:4

OCFAULT[1:0]

这两位用于启用/禁用热电偶开路故障检测并选择故障检测定时。

3

CJ

冷端传感器禁用

0 = 冷端温度传感器启用(默认)

1 = 冷端温度传感器已禁用。来自外部温度传感器的数据可写入冷端温度寄存器。当该位从0变为1时,最新的冷端温度值将保留在冷端温度寄存器中,直到内部传感器启用或新值写入寄存器。当该位设置为1时,总温度转换时间减少25ms(典型值)。

2

FAULT

故障模式

0 = 比较器模式。故障输出和相应的故障位通过在故障条件为真时断言和在故障条件不再为真时解除断言来反映任何未掩盖故障的状态。在阈值故障条件下处于比较器模式时,存在2°C滞后。(默认)

1 = 中断模式。当非屏蔽故障条件为真时,故障输出和相应的故障位断言,并保持断言状态,直到将1写入故障状态清除位。此操作将取消对故障和相应故障位的评估,直到检测到新故障为止(请注意,如果故障条件仍然存在,则可能会立即发生)。

1

FAULTCLR

故障状态清除

0 = 默认值

1 = 处于中断模式时,将故障状态寄存器(0Fh)中的所有故障状态位[7:0]返回到0,并取消对故障输出的评估。此位在比较器模式下无效。请注意,如果故障依然存在,故障输出和故障位可能会立即重新插入。为防止故障输出重新出现,首先设置故障掩码位。故障状态清除位自清除为0。

0

50/60Hz

50Hz/60Hz噪声抑制滤波器选择
0=选择抑制60Hz及其谐波(默认值)

1=选择抑制50Hz及其谐波
注:仅在“正常关闭”模式下更改陷波频率–而不是在自动转换模式下。

寄存器 01h/81h: 设置寄存器1 (CR1)

默认值: 03h

寄存器地址

N/A

R/W

R/W

R/W

R/W

R/W

R/W

R/W

01h/81h

Reserved

AVGSEL2

AVGSEL1

AVGSEL0

TC TYPE3

TC TYPE2

TC TYPE1

TC TYPE0

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

名称

描述

7

保留

保留

6:4

AVGSEL[2:0]

热电偶电压转换平均模式

000=1个样本(默认)
001=平均2个样品
010=平均4个样品
011=8个平均样本

1xx=16个平均样本
添加采样会增加转换时间并减少噪波。典型转换时间:
自动模式下的单次或第一次转换:
=tCONV+(样本-1)x 33.33mS(60Hz抑制)
=自动模式下的tCONV+(样本-1)x 40mS(50Hz抑制)2到n转换
=tCONV+(样本-1)x 16.67mS(60Hz抑制)
=tCONV+(样品-1)x 20mS(50Hz抑制)
进行转换时,不应更改热电偶电压转换平均模式设置。

3:0

TC TYPE[3:0]

热电偶类型:

0000=B类型

0001=E类型

0010=J类型
0011=K型(默认)

0100=N型
0101=R型

0110=S型

0111=T型
10xx=电压模式,增益=8。

代码=8 x 1.6 x 217 x VIN 11xx=电压模式,增益=32。代码=32 x 1.6 x 217 x VIN
其中代码为TC寄存器中的19位有符号数据,VIN为热电偶输入电压。

寄存器 02h/82h: 故障掩码寄存器 (MASK)

默认值: FFh

寄存器地址

N/A

N/A

R/W

R/W

R/W

R/W

R/W

R/W

02h/82h

Reserved

Reserved

CJ High FAULT

Mask

CJ Low FAULT

Mask

TC High FAULT

Mask

TC Low FAULT

Mask

OV/UV FAULT

Mask

Open FAULT

Mask

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

名称

描述

7:6

保留

保留

5

CJ High FAULT Mask

冷结高故障阈值屏蔽
0=冷端温度高于冷端温度高阈值限值时断言的故障输出
1=故障输出屏蔽(默认)

4

CJ Low FAULT Mask

冷结低故障阈值屏蔽
0=冷端温度低于冷端温度低阈值时断言的故障输出
1=故障输出屏蔽(默认)

3

TC High FAULT Mask

热电偶温度高故障阈值屏蔽
0=热电偶温度高于热电偶温度高阈值限值时断言的故障输出
1=故障输出屏蔽(默认)

2

TC Low FAULT Mask

热电偶温度低故障阈值屏蔽
0=热电偶温度低于热电偶温度低阈值时断言的故障输出
1=故障输出屏蔽(默认)

1

OV/UV FAULT

Mask

过电压或欠电压输入故障屏蔽
0=检测到过压或欠压情况时断言的故障输出

1=故障输出屏蔽(默认)

0

Open FAULT Mask

热电偶开路故障屏蔽

0=检测到热电偶开路情况时断言的故障输出

1=故障输出屏蔽(默认)

寄存器 03h/83h: 冷结温度高温阈值寄存器 (CJHF)

默认值: 7Fh

寄存器地址R/WR/W

R/W

R/W

R/W

R/W

R/W

R/W

03h/83h

CJHF7

CJHF6

CJHF5

CJHF4

CJHF3

CJHF2

CJHF1

CJHF0

Sign2^62^{5}2^{4}2^{3}2^{2}2^{1}2^{0}

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

 寄存器 04h/84h: 冷结温度低温阈值寄存器 (CJLF)

默认值: C0h

寄存器地址

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

04h/84h

CJLF7

CJLF6

CJLF5

CJLF4

CJLF3

CJLF2

CJLF1

CJLF0

Sign2^62^{5}2^{4}2^{3}2^{2}2^{1}2^{0}

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

寄存器 05h/85h: 热电偶测温高温阈值高八位寄存器 (LTHFTH)

目录

默认值: 7Fh

寄存器地址

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

05h/85h

LTHFTH7

LTHFTH6

LTHFTH5

LTHFTH4

LTHFTH3

LTHFTH2

LTHFTH1

LTHFTH0

Sign

2^{10}2^{9}2^{8}2^{7}2^{6}2^{5}2^{4}

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

寄存器 06h/86h: 热电偶测温高温阈值低八位寄存器 (LTHFTL)

默认值: FFh

寄存器地址

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

06h/86h

LTHFTL7

LTHFTL6

LTHFTL5

LTHFTL4

LTHFTL3

LTHFTL2

LTHFTL1

LTHFTL0

2^{3}2^{2}2^{1}2^{0}2^{-1}2^{-2}2^{-3}2^{-4}

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

寄存器 07h/87h: 热电偶测温低温阈值高八位寄存器 (LTLFTH)

默认值: 80h

寄存器地址

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

07h/87h

LTLFTH7

LTLFTH6

LTLFTH5

LTLFTH4

LTLFTH3

LTLFTH2

LTLFTH1

LTLFTH0

Sign

2^{10}2^{9}2^{8}2^{7}2^{6}2^{5}2^{4}

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

寄存器 08h/88h: 热电偶测温低温阈值低八位寄存器 (LTLFTL)

默认值: 00h

寄存器地址

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

08h/88h

LTLFTL7

LTLFTL6

LTLFTL5

LTLFTL4

LTLFTL3

LTLFTL2

LTLFTL1

LTLFTL0

2^{3}2^{2}2^{1}2^{0}2^{-1}2^{-2}2^{-3}2^{-4}

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

寄存器 09h/89h: 冷结温度偏移寄存器 (CJTO)

默认值: 00h

寄存器地址

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

09h/89h

CJTO7

CJTO6

CJTO5

CJTO4

CJTO3

CJTO2

CJTO1

CJTO0

Sign2^{2}2^{1}2^{0}2^{-1}2^{-2}2^{-3}2^{-4}

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

寄存器 0Ah/8Ah: 冷结温度高八位寄存器 (CJTH)

默认值: 00h

寄存器地址

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0Ah/8Ah

CJTH7

CJTH6

CJTH5

CJTH4

CJTH3

CJTH2

CJTH1

CJTH0

Sign2^{6}2^{5}2^{4}2^{3}2^{2}2^{1}2^{0}

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

寄存器 0Bh/8Bh: 冷结温度低八位寄存器 (CJTL)

默认值: 00h

寄存器地址

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0Bh/8Bh

CJTL7

CJTL6

CJTL5

CJTL4

CJTL3

CJTL2

CJTL1

CJTL0

2^{-1}2^{-2}2^{-3}2^{-4}2^{-5}2^{-6}00

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

寄存器 0Ch/8Ch: 热电偶温度高八位寄存器 (LTCBH)

默认值: 00h

寄存器地址

R

R

R

R

R

R

R

R

0Ch/8Ch

LTCBH7

LTCBH6

LTCBH5

LTCBH4

LTCBH3

LTCBH2

LTCBH1

LTCBH0

Sign

2^{10}2^{9}2^{8}2^{7}2^{6}2^{5}2^{4}

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

寄存器 0Dh/8Dh: 热电偶温度中八位寄存器 (LTCBM)

默认值: 00h

寄存器地址

R

R

R

R

R

R

R

R

0Dh/8Dh

LTCBM7

LTCBM6

LTCBM5

LTCBM4

LTCBM3

LTCBM2

LTCBM1

LTCBM0

2^{3}2^{2}2^{1}2^{0}2^{-1}2^{-2}2^{-3}2^{-4}

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

寄存器 0Eh/8Eh: 热电偶温度低八位寄存器 (LTCBL)

默认值: 00h

寄存器地址

R

R

R

R

R

R

R

R

0Eh/8Eh

LTCBL7

LTCBL6

LTCBL5

LTCBL4

LTCBL3

LTCBL2

LTCBL1

LTCBL0

2^{-5}2^{-6}2^{-7}XXXXX

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

寄存器 0Fh/8Fh: 故障状态记录寄存器 (SR)

默认值: 00h

寄存器地址

R

R

R

R

R

R

R

R

0Fh/8Fh

CJ Range

TC Range

CJHIGH

CJLOW

TCHIGH

TCLOW

OVUV

OPEN

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

        如果需要让STM32与MAX31856通讯的话,必须先将上面的寄存器好好阅读。

        然后根据寄存器各个位的含意来进行SPI通信,让MAX31856进行温度转换。

STM32与MAX31856之间的硬件连接

                MAX31856使用的是SPI通信输出数据,因此本文使用STM32的SPI1的接口与MAX31856进行通讯。使用PB3作为SCK、PB4作为MISO、PB5作为MOSI,另外需要使用一个CS片选信号,本文使用的是38译码器的结构,因此在这里不多进行赘述。如果对SPI通讯不是很理解的读者可以百度一下看一下相关资料。此外MAX31856还有温度转换完成信号输出引脚以及检测到错误的信号输出引脚,本文并没用使用他们,在电路设计中将这两个端口外接了LED进行显示。具体连接示意图请看下方的图片。

 STM32主控程序的设计思路

                 第一步:咱们要准备好SPI通讯的基本功能函数,以及MAX31856的片选信号端口的设置。

                 第二步:通过SPI通讯来设置MAX31856的寄存器。

                        首先需要设置的是MAX31856的配置寄存器CR0和CR1。

                        其中在CR0需要设置的数据位是第七位保持默认。第六位1SHOT,将其设置为1时随着CS片选信号的拉高来启动转换,转换完成后自动清0。然后第四和第五位是用于设置热电偶开路检测模式的,具体内容可以看上方说明书的表四,此处将其设置为不检测开路也就是00。第三位保持默认。第二位的故障模式设置为比较模式也就是0。第一位保持默认。第零位保持默认。

                        CR1需要设置的数据位是第6~4位保持默认。第3~0位设置对应热电偶的类型,此处手动选用K型热电偶,保持默认即可。

                        故障掩码寄存器MASK不进行设置,保持默认即可。

                        因为MASK寄存器不进行设置,因此CJHF、CJLF、LTHFTH、LTHFTL、LTLFTH、LTLFTL都不用进行设置。

                        如果测温结果与实际有误差出现,则需要调整CJTO中的冷结温度偏移数据来校准实际的温度转换。

                       上述是MAX31856的工作配置,如果要STM32读取MAX31856的测温数据,则应该读取冷结温度的寄存器CJTH、CJTL。以及热电偶温度寄存器LTCBH、LTCBM、LTCBL。在不屏蔽故障的情况下,则应该继续读取故障记录寄存器SR。

        至此,STM32程序的设计思路已经讲述完毕。

实际验证

         按照上述的硬件连接以及程序设计思路设计程序,并且编译下载到STM32中后,实际的体现效果如下。另外本程序使用的是STM32F407IGT6平台写的程序,有寄存器和库函数两种代码。但是想到很多小白会下载使用,我还是决定将代码转换一下,换到STM32F103ZET6平台。但是具体的接线还是需要根据读者自身的平台调整,然后SPI通讯的CS片选信号也需要调整,我使用的是38译码器进行片选的。因此提供四种的工程下载,下载链接如下:

STM32F407IGT6平台MAX31856测温库函数工程https://download.csdn.net/download/m0_55562152/38492479

STM32F407IGT6平台MAX31856测温寄存器工程STM32F407IGT6平台MAX31856测温寄存器写法注释清晰接线说明留有作者联系邮箱-硬件开发文档类资源-CSDN下载

STM32F103ZET6平台MAX31856测温库函数工程STM32F103ZET6平台MAX31856测温库函数写法注释清晰接线说明留有作者联系邮箱-硬件开发文档类资源-CSDN下载

STM32F103ZET6平台MAX31856测温寄存器工程STM32F103ZET6平台MAX31856测温寄存器写法注释清晰接线说明留有作者联系邮箱-硬件开发文档类资源-CSDN下载

其中程序中可以使用单个手动触发来验证读者自己的MAX31856是否存在问题,还可以使用自动测温来循环遍历读者开发板上所有的MAX31856。并且MAX31856的每个寄存器的读取都可以在单个手动触发测量的部分看到数据的变化方便查错,但是需要读者自己有仿真器才可以(需要添加变量监控)。在下边的右图中可以看到测得冷节温度19℃和热电偶温度22.7265625℃。

                                       

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GenterSun

手头还有更多干货,谢谢打赏!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值