数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 3774|回复: 42

[ARM] 基于“HC32L136J8TA+SHT35+BMP280”的温度/湿度/大气压测量记录器

[复制链接]
发表于 2023-1-27 12:18:59 | 显示全部楼层 |阅读模式
本帖最后由 mmxx2015 于 2023-1-30 01:12 编辑

早就想做一个记录温度、湿度、大气压的装置,以前来找不到合适的外壳,也找不到合适的主控芯片,多方了解后决定用顶盖透明的ABS塑料盒做外壳,用宽电压、带段码LCD驱动的华大(小华)M0+芯片HC32L136J8TA做主控,显示使用6个8段码LCD,存储使用SPI接口写SD卡。

实物图:




为了低功耗,主控直接使用18650电池供电,外设电源用PMOS管控制后稳压再使用。为了高精度,传感器尽量选标称精度高的,大气压测量本来想使用BMP581,买了2颗芯片,发现手工焊接难度太大,暂时使用中端规格的BMP280成品模块。

数据按日期、时间以文本方式以csv格式保存到SD卡,可以直接用excel做出曲线。




主控平时工作于深度休眠模式,每秒通过RTC唤醒一次更新显示,电流约35μA,每分钟测量一次温度、湿度、大气压,工作时长约1秒,电流约8mA,一小时保存一次测量数据到SD卡,工作时长约10秒(预先5秒通电,写完成后延时5秒关电),电流约12mA(顺时针可能远大于这个值,工作时间太短,万用表测不到)。

  • 原理图


    原设计通过Micro USB座对18650电池充电,充电控制使用TP4065X(设计使用太阳能电池板为电池充电),顺便通过CH340N USB-串口芯片连接电脑作后续功能扩展用,如读取数据,后来觉得既然已经近距离操作了,还不如直接拔SD卡读卡方便,改为预留一个433MHz无线串口模块接口,需要时可以远距离查询数据。

    手上还有测量VCO、CH2O的模块,本来想有用没有全挂上,可是,这些模块都是电化学原理的,需要预热,而且测量时间长,工作电流大,放弃。
  • RTC校准
    为保证测量数据尽量和实际时间对应,需要高精度计时,一般做法是使用带温度补偿的时钟芯片或加网络授时模块,以DS3231SN为例,其标称精度是2ppm,也就是每月偏差5秒左右,一年大概偏差1分钟,实测也大概是这个精度,,精度也不是太高,网络授时一必须有网络二这种模块功耗太大,不符合低功耗要求。之前用调整补偿电容方法校准走时不准的石英钟可以做到每年误差不超过1分钟,HC32L136J8TA内部RTC可以校准,虽然不是每秒校准,但是可以满足要求。通常的校准方法是:先关闭校准功能,然后走时一段时间,如1天,根据时间差计算偏差ppm,这种做法首次校准耗时太长(可能需要数次校准才能达到预期的精度),可以换一种方法实现首次校准:用32768晶振作为主振荡器,通过芯片的HCLK输出功能将32768晶振实际频率从特定引脚输出,通过测量一段时间的脉冲数计算频偏ppm。

    实测:

    6554038个周期=199.99993904秒

    标称:
    (6554038*(1/32768))=200.01336669921875秒

    ppm=((200.01336669921875-199.99993904)/200.01336669921875)*1000000=67.133809306567950933455069988914

    实测时间比标称时间短,时间正偏,根据计算得到的误差ppm计算校准值写入RTC校准寄存器,实际运行几天,再根据实测偏差在上次校准值基础上微调就可以达到较高的计时精度。
  • 温度、湿度、大气压测量
    SHT35、BMP280都可以使用I2C接口控制,且它们预留的地址引脚无论怎么接,地址都不冲突,可以使用同一个I2C通讯口控制,主机、两个从机都支持标准的I2C协议,优选硬件I2C通讯。HC32L136J8TA的硬件I2C使用方法很简单,只需要设置好寄存器并开启I2C中断,在I2C中断服务程序中根据I2C状态码和参考手册中的状态图操作即可。相比SHT21,SHT35只需启动一次测量即可完成温度和湿度测量,相比BMP180,BMP280只需启动一次测量即可完成温度和大气压测量(BMP280测得温度与SHT35测得温度差0.5℃左右,个人认为SHT35测量结果更可靠)。每次测量,只需分时控制SHT35、BMP280测量一次即可。根据数据手册,这两颗芯片启动单次测量后都可以查询测量完成状态后读取测量结果,为简化程序,使用启动测量后延时比标称最长测量时间长10mS左右再读取测量结果。
  • 数据保存到SD卡
    为长时间存储且方便通过电脑读取保存的数据,使用SPI接口写SD卡、使用FATFS管理文件。读写SD卡程序随便找一个ARM开发板的例子中都有,读写使用的是延时等待逐个字节读写方式,移植是只需移植SPI收发和CS信号控制即可。FATFS模块移植只需按需修改ffconf.h中的配置,然后修改disk_read()、disk_write()调用扇区读写函数,其它初始化、状态查询函数直接返回正常状态即可。网上的FATFS模块移植例子使用的FATFS模块版本都比较老,最新的版本是FatFs R0.15+2022.12.4补丁,建议使用最新版打最新补丁后再使用,使用方法与旧版差异不大。
  • 日期和时间设置
    虽然设计上电后就不再断电,但为了更新程序或意外断电后方便调整日期、时间,增加按键设置接口,为更精准校时,预留中国码电波钟模块接口。
  • 软硬件文件
    硬件V2(立创EDA专业版工程):


    软件V1(Keil MDK工程,需稍加修改才能匹配V2硬件):



2023.1.30:
修正电源切换MOS管Q1电路错误(SD接反),感谢40560335指正。附件已更新。



补充内容 (2023-2-1 13:03):
附件程序生成保存数据的文件夹和文件名时存在重复用malloc()分配内存问题,堆空间满后程序运行不正常,下载过附件程序的请更新程序,见帖子最新。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 2家元 +40 收起 理由
cushion + 20 優秀文章
newnet1234 + 20 優秀文章

查看全部打赏

发表于 2023-1-27 12:57:29 | 显示全部楼层
还守着8字数码显示和SD卡,一个ESP32/ESP8266不就都解决了。https://blog.csdn.net/jiangge12/article/details/127134354
回复 支持 0 反对 1

使用道具 举报

发表于 2023-1-27 16:39:05 | 显示全部楼层
不错,学习了,
回复 支持 反对

使用道具 举报

发表于 2023-1-27 16:48:13 来自手机浏览器 | 显示全部楼层
厉害了………单片机有点小众了…
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-27 17:16:35 | 显示全部楼层
kpj001 发表于 2023-1-27 12:57
还守着8字数码显示和SD卡,一个ESP32/ESP8266不就都解决了。https://blog.csdn.net/jiangge12/article/deta ...

定位不一样,我做这个是电池供电,必需省电,网络传输这种电老虎实在耗不起,还有,ESP32/ESP8266这种无法仿真的芯片不在考虑之内。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-27 17:24:35 | 显示全部楼层
触景情伤 发表于 2023-1-27 16:48
厉害了………单片机有点小众了…

宽电压、低功耗、RAM多、带段码LCD驱动、可仿真……这样一筛选,可选的不多。如果LDO稳压后再给MCU供电,可选的就比较多,不过,我查了好多LDO芯片的静态电流都在10μA以上,不划算,选的这颗芯片除了贵一点外,性能还是不错的。
回复 支持 反对

使用道具 举报

发表于 2023-1-28 09:32:40 | 显示全部楼层
kpj001 发表于 2023-1-27 12:57
还守着8字数码显示和SD卡,一个ESP32/ESP8266不就都解决了。https://blog.csdn.net/jiangge12/article/deta ...

先看清别人的需求再发表意见
回复 支持 反对

使用道具 举报

发表于 2023-1-29 08:10:04 | 显示全部楼层
谢谢分享  学习一下
回复 支持 反对

使用道具 举报

发表于 2023-1-29 08:51:16 | 显示全部楼层
我也认为esp8266不错。可以传输到服务器保存数据,手机实时查看服务器数据。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-29 10:54:30 | 显示全部楼层
kkstun 发表于 2023-1-29 08:51
我也认为esp8266不错。可以传输到服务器保存数据,手机实时查看服务器数据。 ...

这是个电老虎,而且无法仿真,出问题不好查,不适合我用,我也没用联网查询的需求,我的目标是做好后丢个角落过几个月、一年再去回收数据。
回复 支持 反对

使用道具 举报

发表于 2023-1-29 13:29:57 | 显示全部楼层
厉害,谢谢分享
回复 支持 反对

使用道具 举报

发表于 2023-1-29 14:34:39 | 显示全部楼层
kkstun 发表于 2023-1-29 08:51
我也认为esp8266不错。可以传输到服务器保存数据,手机实时查看服务器数据。 ...

做电池低功耗的不会考虑esp系列的。。相反很多低功耗8位单片机
回复 支持 反对

使用道具 举报

发表于 2023-1-29 20:11:04 | 显示全部楼层
小米蓝牙温湿度计了解一下,温湿度正负百分之一误差,一节纽扣电池用一年
回复 支持 反对

使用道具 举报

发表于 2023-1-29 22:20:12 | 显示全部楼层
外接电源供电/充电与电池供电电路会不会设计的有点问题,当外接电源时,VCC通过D1、MOS内部的二极管向锂电进行充电,假设5V供电,二极管压降0.2V,5-0.2-0.2=4.6V,最终导致锂电过冲。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-29 23:07:18 | 显示全部楼层
本帖最后由 mmxx2015 于 2023-1-30 09:01 编辑
40560335 发表于 2023-1-29 22:20
外接电源供电/充电与电池供电电路会不会设计的有点问题,当外接电源时,VCC通过D1、MOS内部的二极管向锂电 ...

这是网上抄的电路,再搜一下这个电路,是MOS管SD极抄反了,我用的电池有保护板,没过冲,所以,没发现这个问题。



回复 支持 反对

使用道具 举报

发表于 2023-1-30 13:40:05 | 显示全部楼层
kpj001 发表于 2023-1-27 12:57
还守着8字数码显示和SD卡,一个ESP32/ESP8266不就都解决了。https://blog.csdn.net/jiangge12/article/deta ...

这个看着貌似很不错,是用网页显示温湿度的折线图吗?链接点进去没看到源码,你有没有源码?
回复 支持 反对

使用道具 举报

发表于 2023-1-30 13:52:29 | 显示全部楼层
lemontreenm 发表于 2023-1-30 13:40
这个看着貌似很不错,是用网页显示温湿度的折线图吗?链接点进去没看到源码,你有没有源码? ...

文章最后 “参考:” 二字下面就是。当然原文用的BME280有些贵,用BMP280或者其他传感器也是差不多的。
回复 支持 反对

使用道具 举报

发表于 2023-1-30 13:58:26 | 显示全部楼层
本帖最后由 lemontreenm 于 2023-1-30 14:00 编辑

我也一直想弄个测量并记录温湿度的模块。由于各种困难和自己的能力有限一直没弄好。看到楼主这个感觉可以参考下。
同时有几个改进建议楼主可以参考下:
1.温湿度模块藏的太里面的,虽然盒子有开口但是还是不利于测量,建议外置或者把位置改到开口附近。
2.没必要每秒测量,变化并没有那么快,实际使用中如果不需要根据这些数据控制其他设备的话也不需要那么高密度的测量频次。我感觉每分钟甚至每5分钟测量一次就够了。
3.ppm的计算方法本身没有问题,我也弄了类似算法给8266时钟用。关于首次校准,可以缩短首次校准时长来达到相对快速的校准,比如6小时。首次校准后精度虽然还是没有特别高,但是比没校准强一些,然后再用更长时间校准来取得一个更好的校准精度。而且这个首次校准仅限于首次通电时的校准,校准后的数据可以存储到eeprom里,如果遇到断电重启的话直接从eeprom里面读取校准数据就可以达到快速校准的目的。
4.实际上排除掉时间显示的功能的话时间准确性并没有那么重要,误差个几分钟完全无所谓。但是如果要时间显示,那么误差太大确实很难受,差个几秒钟到无所谓,最难受的是误差不断积累。还是建议弄个联网模块进行NTP校时。电波校时也可以,但是确实OUT了。我的时钟是通过8266模块联网NTP校时的,每24小时自动校时一次,结合ppm误差算法,误差在每天2秒以内,即使wifi故障或者断网个几天问题也不大,网络恢复后又会自动校时修正误差。
回复 支持 反对

使用道具 举报

发表于 2023-1-30 14:02:55 | 显示全部楼层
mmxx2015 发表于 2023-1-29 10:54
这是个电老虎,而且无法仿真,出问题不好查,不适合我用,我也没用联网查询的需求,我的目标是做好后丢个 ...

联网模块都费电的,不过还是可以考虑用8266做网络NTP校时的。每天设置几天校正一次就行。每次运行个几秒钟就够了。加上8266的节能模式,实测耗电可以降低到18ma。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-6-23 21:39 , Processed in 0.187200 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表