目录
一、前言
目的:记录从初次接触MAX31865到最终测试验证其功能,重点在于会涵盖整个过程所遇到的重点注意事项,以便后续再次接触到MAX31865开发时可以游刃有余。因为我亲自使用过MAX31865来开发商用品,所以文中包涵自己对MAX31865的理解,如果需要更专业地了解MAX31865 可以结合MAX31865的datasheet来开发。
官网有十分详细的资料:
二、 MAX31865简要介绍
MAX31865实际上是一款简便的RTD铂电阻至数字转换器,高精度、成本低、设计周期短的优点。(如图所示便是最常见的一个MAX31865模块,右边的是三线的PT100温度探头)
主要有如下特征:(挑了些重要的)
特征:
1.支持100Ω至1kΩ (0°C时)铂电阻RTD (PT100至PT1000);
2.兼容2线、3线和4线传感器连接(重点,需要改变硬件线路来实现切换);
3.SPI兼容接口,15位ADC分辨率;
4.标称温度分辨率为0.03125°C (随RTD的非线性变化);
5.整个工作条件下,总精度保持在最高0.5°C (0.05%满量程)。
对于上述特征需要重点关注的是:
我们在开发时需要先明确是选择和几线制的传感器相互连接,并且是使用SPI通信。(这时还需要明确我们所用的核心芯片的SPI引脚:SCLK、MOSI、MISO、CS(可变性比较大))
三、详细开发流程(我实操过的)
第一步 将测试模块设置为3线制
在开始配置之前,我们需要先记录两个参数(直接用眼睛从模块上面看,看不清的话用手机拍照放大),记录下来之后我们会在后续编写驱动代码的时候用上它,我们在进行数据处理的过程中会需要用上,具体见下图:
// The value of the Rref resistor. Use 430.0 for PT100 and 4300.0 for PT1000
#define RREF 4300.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
#define RNOMINAL 1000.0
OK,接下来进入正题,如果我们需要配置3线制的话就可以直接如图所示:
其中写着短接的地方用锡焊接好,写了接地割断的地方一定要注意!一定要割断!!!可以用小刀划开来,用力划不要怕弄坏!!!
如果想配置为其他模式,可以参见以下链接,里面有更加详细的说明:
Overview | Adafruit MAX31865 RTD PT100 or PT1000 Amplifier | Adafruit Learning System
或者是这篇文章:
第二步 连接ESP32S3和MAX31865
在文章标题中,我强调了ESP32S3这一型号,是因为这是我实际项目开发时所使用到的型号。而因为不同的型号在引脚配置的时候会有不同,但是程序逻辑没有区别,所以如果你还是小白,且使用的也恰好不是ESP32S3,那么你可能需要去数据手册里面查一你的芯片该怎么配置SPI的引脚。
ESP32S3引脚 | MAX31865引脚 |
pin10(CS) | CS |
pin11(MOSI) | MOSI |
pin12(SCLK) | SCLK |
pin13(MISO) | MISO |
第三步 驱动代码&示例与驱动代码修改
由于我使用的是Arduino结构,所以我直接找的官方库:(如果一次进不去就多刷新几遍,没有VPN的话github一下子连不上就只能多刷新,多刷新,多刷新,总能打开)
github - Adafruit MAX31865 :
GitHub - adafruit/Adafruit_MAX31865: Arduino Library for Adafruit MAX31865 RTD Sensor
或者是你可以在Arduino IDE的库文件下载里面直接搜“MAX31865”,如图:点击安装即可
如果一切顺利的话,你就可以开始烧录示例程序(库文件夹的example里面)进行验证了,注意烧录的时候一定要选对自己芯片型号(比如我在上图中选的就是ESP32S3 Dev Module),并且在遇到bug的时候,从硬件或软件两个方面进行排错。
第四步 驱动代码修改
驱动代码修改的话,基本上就是按照datasheet里面所讲到的的SPI通信方式把整个MAX31865的驱动代码重写一遍,以达到简化代码量,提高响应速度,满足具体项目个性化要求。
第五步 MAX31865测量的精确性进行测试
到这里基本上和普通的嵌入式软件开发没有直接联系了,相当于是在设计实验进行功能检验。实验思路:我同时用一块ESP32S3对两片板载的MAX31865芯片进行通信(SPI片选),把两个探头固定在温箱内部的温度点上,之后与温箱的标准温度测量探头测到的数据进行比较,温度曲线设置的是从 -20 ~ +110 ℃,期间的变化方式为阶梯式上升,实验总时长4小时。
获得数据后对其进行处理得到了以下曲线:(这个图使用Origin画的,生成的时候还是有一点瑕疵,唉,用Excel作图有数据量限制,好像是不能超过2000个)
从图中我们可以很明显的看出CJ125在温度变化趋势上有着很不错的准确性,要知道MAX31865一整个模块+传感器最多也就二三十块钱,我的对照数据是从几万块钱一台的多路温度测试仪拷贝的,所以可以说MAX31865的性价比还是非常高的,便宜好用。(PS:其中之所以没有达到预定的-20℃,是因为温箱内的温度分布是不均匀的,虽然设定的是-20,但是我们测量的温度点大概率是达不到这个值的)
四、结语
总之,MAX31865的开发难度不大,易上手。而且精度高,价格也合适。但是,在温度变化过程中还是有一定的偏差存在,可能是需要进行初始化校准(放入冰水混合物,校正0℃),测试过程中还需要确保温度探头和MAX31865的连线是良好的,因为温度的测量的准确性往往与线路的连接是否良好有直接关系。
挖坑:后续可能会对一些芯片的物理层面原理进行深入探讨(因为最近在调试Bosch的氧传感器LSU4.9……我认识到了解一个传感器的实际工作结构还是非常重要的)。
如果本文对你有帮助的话,不妨点个赞。欢迎留言讨论问题,一起讨论问题、解决问题。