|
本帖最后由 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
打赏
-
查看全部打赏
|