FLASH写入的确寿命有限,传感器存储需要采取措施。一般单片机有浅一点的休眠模式。
话说美国本土真的混到连个快板厂都没有了吗,嘉立创发北美多少钱…
最近在做学校的东西时,有些剩下来的材料刚好可以做一个简单的温度记录仪。于是便在立创上打板,试一试这个设计。
主控用的是STM32L031,是对微功耗优化过的单片机。在待机模式下能做到约800nA的电流,并可以用内置的RTC唤醒。温(湿)度传感器用的是SHTC3,也有同样封装的国产替代品。板子上还有一个照度传感器(LTR-303)和一个加速度传感器(KXTJ3-1057),可以实现更多数据的测量。
为了实验聚氨酯灌封胶,因此照度传感器和湿度传感器就没有用了。加速度传感器忘记下单,所以板子上没有焊接,代码里也没实现。PCB上目前暂未发现硬件bug。
软件设计思路:
由于STM32进入待机模式后SRAM会掉电,相当于每次睡眠——唤醒都等同于一次重启,所有的变量也会被重新初始化。而传感器的数据都储存在FLASH中,FLASH上一次写数据的地址则需要常常擦写,于是便放在RTC的后备寄存器中。
由RTC唤醒后,主控单片机逐次轮询外部传感器,然后写入FLASH,进入待机。RTC的唤醒间隔是保持一致的。
读取数据的方法是由LOG按钮唤醒。在该模式中,主控从头开始读取FLASH,然后通过串口输出。用户可以通过输入简单指令来清空FLASH内容。
软件的BUG不少,比如若是扣掉电池再装上,FLASH内已有的数据就会被写坏。当然这也可以作为一个掉电检测装置。
这个DIY的实际用途也没想好。可能可以监测冰箱温度什么的,还可以通过加速度传感器记录冰箱开门事件。
例图:室内温度记录,X轴为分钟,Y轴为温度(摄氏度,除以100)。
实际功耗测试:待机时3.6uA,测量-储存时最大9mA。
开源硬件,KiCad文档。
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。