首页 » 科学 » 做了个多功能时钟只因我解决了这4个问题续航24天超轻松!_数组_功耗

做了个多功能时钟只因我解决了这4个问题续航24天超轻松!_数组_功耗

少女玫瑰心 2025-01-05 23:39:55 0

扫一扫用手机浏览

文章目录 [+]

为什么它能续航这么久?我做对了什么?(见第3章)

其有哪些功能?(见第1章)

做了个多功能时钟只因我解决了这4个问题续航24天超轻松!_数组_功耗 做了个多功能时钟只因我解决了这4个问题续航24天超轻松!_数组_功耗 科学

硬件设计把稳事变?(见第2章)

做了个多功能时钟只因我解决了这4个问题续航24天超轻松!_数组_功耗 做了个多功能时钟只因我解决了这4个问题续航24天超轻松!_数组_功耗 科学
(图片来自网络侵删)

下面就逐一为你解答!

一、时钟的功能/亮点展示

1.指南针功能

利用时先原地逐步转一圈即可校准。

此模式下功耗:1.3mA

2.TV模式(时钟等根本显示)

40秒显示韶光,电池电量。

此模式下功耗:1.7~1.9mA

10秒显示温度、湿度、气压

10秒显示电池状态循环(持续韶光可按喜好调度)

3.菜单设置

设置了三级菜单。

主菜单:见图,这里预设了16个二级菜单。

滚动时总功耗:2mA

二级菜单:见图,按确定进行设置

滚动时总功耗:4mA

三级菜单:见图,按确定进行设置

页面总功耗:1.4mA

支持开拓:水平尺、增量闹钟、秒表、手电筒、系统设置、工厂模式

未来加入亮度自动调节机制,可坚持超过一个月

二、硬件解释

利用STC32F12K54芯片作为主控,在TV模式可运行大约24天,以下是干系电路图。

掌握板事理图

掌握板PCB图

电源板事理图

电源板PCB图

1.掌握板参数先容

主控:STC32F12K541.3寸OLED:SSD1315(利用SPI)温湿度计:SHT40气压计:SPL-06RTC:INS5699光强计:BH1745磁强计+加速度计:BMC050无源蜂鸣器(但有独立4K方波产生电路,不占用MCU资源)震撼开关按键X5:+、-、确定键、退出键、复位键

2.电源板参数先容

电源板2.8V空载,5V OFF的情形下,待机电流1.6uA(电池3.83V)

DC-DC锂电池充电:ME4059ASPG-N)锂电池保护:ME4211AM6GDC-DC降压(主板供电):TPS62740DSSRDC-DC升压(OLED供电):MT9700+MT3608L,可以通过主板的两个IO口掌握反馈电阻,从而得到5V、6V、7V、8V充电电流检测:INA181A2IDBVT+50mΩ电阻

三、续航24天,我做对了什么?

本项目之以是可以这么省电,是由于MCU不会干多余的事情,有任务的时候才会运行,其他韶光都在休眠。

但,事情怎么会这么大略呢?

1.创造的第一个问题

之前做第一代第二代时钟的时候,就创造一个事情:

MCU在实行任务的时候,很多时候都在delay

例如滚动数字的时候,平移32格像素,须要平移32次,每次平移后间隔6毫秒才能实行下一次的平移,这个时候,空跑的的韶光便是31x6=186ms。

这是非常致命的。

如果一秒刷新一次,就有18.6%的韶光摧残浪费蹂躏在等待上。

再例如给传感器发送丈量指令后,须要等待一段韶光才能读取丈量后的值……

这一段韶光也是须要等待的。

办理思路

为理解决MCU在等待时摸鱼的情形,可以让MCU在等待的时候进入掉电模式,从而降落功耗。

2.第二个问题

但这样又不得不面临一个新的问题,便是

MCU怎么知道自己什么时候醒过来?

办理思路

针对这个问题,可以利用:

掉电唤醒定时器

通过设置掉电唤醒定时器的韶光,掌握MCU休眠后在我们指定的韶光醒过来

3.第三个问题

但这样又有一个问题,那便是:

MCU怎么知道下次什么时候醒过来?

例如实行一个32格像素的平移,要实行32次,MCU实行了第一次,它怎么知道还要实行32次间隔6ms的任务?

办理思路

为理解决这个问题,我想了个办法:

引入两个数组

一个是“休眠韶光数组”,一个是“任务号数组”(每个bit代表一个任务),两个数组的值逐一对应。

例如实行一个32格像素的平移,要实行32次,我就先在“休眠韶光数组”和“任务号数组”中预约32个任务,如下图所示。

每次MCU检测数组“休眠韶光数组”[0]和“任务号数组”[0]中的数值,如果不即是0,则将“休眠韶光数组”[0]的值装入掉电唤醒寄存器,进行休眠,唤醒后再根据“任务号数组”[0]的值匹配相应的任务。

任务完成后全体数组的值向左移动一位。

当检测到“休眠韶光数组”[0]和“任务号数组”[0]中的数值为0时,解释UI刷新任务已经完成,掉电唤醒寄存器关闭,彻底进入休眠,等待外部按键中断任务的唤醒。

但项目中并非只有一个OLED屏幕刷新的任务

对付传感器丈量等待的任务,为了尽可能担保时效性,不可能排在UI刷新完成之后再丈量。

我们当然希望能两不误。

这时就须要写插入算法将任务插入任务行列步队中。

例如在行列步队中插入一个气压丈量的任务(“任务号数组”bit1 =1),须要等待15ms(6+6+3),插入上图的行列步队中,如下图。

可以看到当数值不可以重合时,须要打断行列步队插入数值。

再例如在行列步队中插入一个气压丈量的任务,须要等待12ms,插入上图的行列步队中,如下图。

可以看到当数值重合时,不须要打断行列步队插入数值。

只须要添加任务号所对应的bit位。

4.第四个问题

到目前为止,低功耗任务预约的算法算是弄完了,但还有一个问题,便是:

在休眠的过程中,如果有外部中断输入,就会让MCU提前结束休眠。

这样可能会导致传感器采样非常,影响用户体验。

办理思路

这个时候,就须要:

优化就寝的算法

检测醒来的时候,如果掉电唤醒寄存器内的韶光还没有走完,就把值装填回去再次休眠,直到定时器内的值是0为止

5.末了一步,将MCU性能榨干

事情还没有结束,我们还可以进一步降落功耗,争取榨干MCU性能!

MCU最耗电的任务实在是在刷屏的时候——这时候利用SPI发送数据,须要MCU参与个中,不能去干别的事情。

这个时候我们可以利用DMA功能,利用双缓冲区,先装填1区,DMA发送1区的数据,在1区发送的时候,装填2区,轮流发送,循环往来来往,提高MCU的事情效率。

但纯挚DMA发送数据的话,实在还是会更耗电。

由于须要将数据从flash搬到XRAM里面,再通过DMA发出去是须要韶光的,效率上不如把flash的数据直接发送出去。

这个时候可以利用MCU进入停IDLE模式时,MCU停滞事情,但外设还在可以事情的特点。

如果在2区添补完成,但1区还没发完的情形下,还可以让MCU进入停IDLE模式,这个时候MCU停滞事情,但外设还在可以事情,在IDLE模式等待SPI DMA 发送完成后再唤醒实行别的程序。

这样功耗就可以进一步降落。

除此之外,还有各种优化局部刷新,一点点抠功耗,直至榨干最大性能代价……

参考资料:

[1]开源资料https://oshwhub.com/yq-qvq/low-power-consumption-for-24-days-desktop-clock

— 完 —

嘉立创EDA·头条号

关注我,看一手优质开源项目

标签:

相关文章

大数据时代下的组局创新,挑战与机遇并存

随着互联网技术的飞速发展,大数据已经成为当今世界的重要资源。在大数据时代背景下,组局活动也面临着前所未有的挑战和机遇。如何利用大数...

科学 2025-01-07 阅读0 评论0

大数据时代的崛起,趋势、挑战与未来展望

随着信息技术的飞速发展,大数据已成为全球范围内的重要战略资源。它不仅改变了人们的生活,更推动了各行各业的发展。本文将围绕大数据的趋...

科学 2025-01-07 阅读0 评论0

双11站内头戴式耳机购买意见_耳机_蓝牙

双十一立时就要到了,我的推送里每天都有很多款活动的打折扣的耳机,相信大家也看得眼花缭乱了 。2019年我玩了不少耳机,有些是自己购...

科学 2025-01-07 阅读0 评论0

大无极代码,介绍宇宙奥秘的钥匙

在浩瀚的宇宙中,人类对未知的好奇心从未停止。自古以来,哲学家、科学家们都在探索宇宙的奥秘。如今,随着科技的飞速发展,人们有了更多的...

科学 2025-01-07 阅读0 评论0

FM091A 电子点烟器控制 IC_电压_芯片

FM091A 事情状态稳定,并带有发热丝短路保护功能,在负载电阻小于 0.8 Ohm 时输出截止;省电模式下静态电流小于 5uA,...

科学 2025-01-07 阅读0 评论0