ESP32S3 + Arduino IDE + MAX31865 测试过程以及注意事项记录

一、前言

        目的:记录从初次接触MAX31865到最终测试验证其功能,重点在于会涵盖整个过程所遇到的重点注意事项,以便后续再次接触到MAX31865开发时可以游刃有余。因为我亲自使用过MAX31865来开发商用品,所以文中包涵自己对MAX31865的理解,如果需要更专业地了解MAX31865 可以结合MAX31865的datasheet来开发。

官网有十分详细的资料:

MAX31865数据手册和产品信息 | Analog Devices

二、 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

或者是这篇文章:

MAX31865和PT100 PT1000的小白避坑攻略-CSDN博客

第二步 连接ESP32S3和MAX31865

        在文章标题中,我强调了ESP32S3这一型号,是因为这是我实际项目开发时所使用到的型号。而因为不同的型号在引脚配置的时候会有不同,但是程序逻辑没有区别,所以如果你还是小白,且使用的也恰好不是ESP32S3,那么你可能需要去数据手册里面查一你的芯片该怎么配置SPI的引脚。

ESP32S3引脚MAX31865引脚
pin10(CS)CS
pin11(MOSI)MOSI
pin12(SCLK)SCLK
pin13(MISO)MISO

第三步 驱动代码&示例与驱动代码修改

        由于我使用的是Arduino结构,所以我直接找的官方库:(如果一次进不去就多刷新几遍,没有VPN的话github一下子连不上就只能多刷新,多刷新,多刷新,总能打开)

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,,,,,,,深刻认识到了了解一个传感器的实际工作结构还是非常重要的)。

        如果本文对你有帮助的话,不妨点个赞。欢迎留言讨论问题,一起讨论问题、解决问题。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值