发作品
专业版

【常亮24天】 低功耗-迷你桌面时钟(降本版)

3.0k
0
0
19
简介:本项目是基于传说中的32位51单片机STC32G12K128芯片作为主控的低功耗桌面时钟,在5V 255亮度下在TV模式(出厂默认设置)平均功耗为1.7378mA(6.8593mW),可运行大约24天
星火计划2024
开源协议:CC BY-NC-SA 4.0(未经作者授权,禁止转载)
创建时间:2024-06-27 01:17:02更新时间:2024-07-03 14:32:35

描述

 

闪屏和拖影为压缩了视频和摄影的问题,实际看不会这样

实际效果可以参考初代的GIF图(下图)或者视频

 ▎更新计划

        √2024.06.27 发布工程 开源PCB 【控制板4.0.4降本】【电源板2.8.5降本】

            上传开源工程+源码(不带闹钟)

            发布版固件20240627A  升级程序

            开源外壳STL、STP文件

        √2024.07.03 上传淘宝BOM、立创商城BOM

       ⚫2024.07.010 上传SOP作业手册

 

成本

     立创商城下单:¥200+ = 150+10(邮费)+30(淘宝买电池、OLED、RTC电池、震动开关、FFC线)+12(3D外壳+运费)

     淘宝下单:¥120+ =109+12(3D外壳+运费)

     找怨种作者拿料:¥70 = 52(均摊了个数和运费)+ 9(均摊运费3D外壳) + 10运费

项目展示视频

    降本版功能演示及运行功耗展示:https://www.bilibili.com/video/BV1hZ421g7mz   

项目说明

     本项目是基于【常亮24天】 低功耗-迷你桌面时钟  https://oshwhub.com/yq-qvq/low-power-consumption-for-24-days-desktop-clock 工程的降本大改改进型,降低成本,目前批量成本大概在¥50+,单个制作成本会在因为邮费无法分摊而上升

     本项目是基于传说中的32位51单片机STC32G12K128芯片作为主控的低功耗桌面时钟,在5V 255亮度下在TV模式(出厂默认设置)平均功耗为1.7378mA(6.8593mW),可运行大约24天,搭载RTC、温湿度、磁强、加速度、气压、光强传感器可供开发

 

注意

     本项目供电为软包锂电池,使用时切记请注意安全,充电时人员不要离开,避免对电池造成物理性损伤,避免过充过放短路,避免置于高温或低温等恶劣环境

项目变更点

  1. OLED屏幕通信由原来的SPI改为I8080总线
  2. 逻辑供电从2.8V下调至2.7V
  3. 贴片电阻电容从0402换成0603、轻触开关、FFC座子、RTC电池、均进行了跟换,电容统一使用MLCC,PCB重新布局,引脚进行了调整,复位按钮放到屏幕下面,底层驱动全部对应修改
  4. 降压芯片从TPS62740DSSR改成了ETA3425S2F
  5. 去掉了熔断保险丝、锂电池保护芯片ME4211AM6、完全依赖软包电池的保护板进行保护
  6. 去掉4K方波产生电路,改为单片机PWM口直驱,实现音调和音量的调整
  7. CH340去掉,改为USB直接下载
  8. RTC增加封装预留,兼容DS3231MZ
  9. 光强计由原来的BH1745换成OPT3001
  10. 外壳重新设计
  11. MCU从STC32F12K54换成STC32G12K128,速度虽然降低,但flash大了一倍,解决32F写满的问题
  12. 取消OLED对比度电流基准电阻,使用内部基准,但焊盘保留
  13. 修复程序框架中申请长时间等待任务会导致堵塞的问题

项目硬件资源

●主控:STC32G12K128

●1.3寸OLED:SSD1315

●温湿度计:SHT40

●气压计:SPL-06

●RTC:INS5699(预留DS3231MZ封装)

●光强计:OPT3001

●磁强计+加速度计:BMC050

●蜂鸣器

●震动开关

●按键X5:+、-、确定键、退出键、复位键

 

项目历史

2020-9月

  • 开始项目构思

2020-11-18

  • 打样2.0版本的电源管理板,并焊接、测试

2020-12-16

  • 打样2.0版本核心板,并焊接、测试
  • 打样迭代2.0版本的电源管理板,并焊接、测试

2020-12-25

  • 打样2.0版本传感器板,并焊接、测试

2021-01-02

  • 打样迭代2.0版本的核心板,并焊接、测试
  • 完成代码编写

2021-01-14

  • 打样迭代2.0版本的核心板,并焊接、测试

2021-01-17

  • 打样迭代2.0版本的核心板,并焊接、测试

2022-6月

  • 开始构思低功耗UI框架,并使用开发版进行程序基础框架验证(梦开始的地方)

2022-10-18

  • 打样4.0电源板(全新设计),并焊接、测试

2022-12-06

  • 打样迭代4.0电源板,并焊接、测试
  • 打样4.0控制板(融合2.0核心板+2.0传感器板),并焊接、程序编写、测试
  • 开始设计、验证、完事。优化任号务栈入栈出栈、快速批量装填、主菜单、二级菜单、三级菜单等程序的编写
  • 开始啃英文手册,写传感器驱动
  • 和朋友沉迷MC

2023-10-10

  • 打样迭代4.0电源板,并焊接、测试

2023-10-19

  • 打样迭代4.0电源板,并焊接、测试

2023-10-23

  • 打样迭代4.0电源板(钰泰方案),并焊接、测试

2023-10-27

  • 打样迭代4.0电源板(德州仪器方案),并焊接、测试

2023-12-25

  • 打样迭代4.0电源板(德州仪器方案2),并焊接、测试

2024-01-16

  • 打样迭代4.0电源板V2.8.4(德州仪器方案),并焊接、测试

2024-01-25 

  • 发布于立创开源社区

2024-01-26

  • 打样迭代4.0控制板(I8080总线方案),并焊接、程序编写、测试

2024-03-06

  • 打样迭代4.0电源板V2.8.5,并焊接、测试

2024-03-14

  • 打样迭代4.0控制板V4.04(SPI方案),并焊接、程序编写、测试

2024-04-29

  • 打样迭代4.0控制板(I8080总线方案2),并焊接、程序编写、测试

2024-05-05

  • 全新设计4.0电源板V2.8.5(降本),并焊接、测试

2024-06-01

  • 迭代设计4.0电源板V2.8.5(降本2),并焊接、测试
  • 全新设计4.0控制板V4.0.4(降本I8080总线方案),并焊接、程序编写、测试

2024-06-23

  • 试图修复程序框架中申请长时间等待任务会导致堵塞的问题,正在测试,目前未出现异常

功耗

     使用合宙CC表进行测试,测试条件为出厂初始设置(OLED 5V  255亮度、电池供电3.84V,降本版电池供电为3.94V,但自动调光关闭)

     5V满亮度可以坚持22天,如果打开自动调光的话能坚持更久,可达24天以上

UI展示

    主菜单(滚动3.94V 2.5mA):

    二级菜单(滚动3.94V 4.3mA):

    三级菜单:

    TV模式(时钟显示界面):

    TV模式(环境显示界面):

    TV模式(电源显示界面):

    休眠屏显模式:

    指南针UI:

 

 

    UI操作逻辑:

 

 

低功耗思路

     熟悉PC设备的朋友应该都知道,我们的电脑在闲置的时候,功耗一般比较低,这是因为CPU降频了,处于一种“怠速”的状态。同样,在降低设备功耗的时候,大多数人会采用降频的策略。很多朋友看到我用30M的主频时都会发出疑问:为什么不降频?

     不分情况的一味降频,反而会增加设备的功耗。下图测试了STC32G12K128单片机在各个主频下的运行电流

 

     这里我测试了各个主频下单片机运行65535次while(i--)所需的时间,这个是想证明,单片机在处理固定任务量的任务时,所需时间和主频成固定反比,35M主频是5M主频的7倍,那么5M主频处理任务需要的时间也应该是35M主频处理任务需要的时间的7倍,事实上也是如此:79200/11340 = 6.984

     但5M主频下消耗的电流却不是35M主频下消耗电流的1/7(0.1428),而是2.287/10.88 = 0.21,这就说明低频执行同样任务量的任务反而会更耗电,也就是uA/MHz更大。

     像本项目需要执行的UI刷新,UI刷新的点阵计算就是固定的任务量,uA/MHz越低,就越省电,所以需要高主频去执行这些任务或者计算,完成后无任务,这个时候就进入休眠模式。

软件介绍

     软件部分,一些底层的配置采用了STC厂家范例代码,OLED初始化参考了淘宝附赠代码,反三角函数Atan的CORDIC算法参考了红石电路吧的代码,其余部分均为本人自行开发,程序框图如下,使用任务号栈+任务等待时间栈进行任务的预约与执行,中间的等待时间进入掉电模式进行过渡

     之所以可以这么省电的缘故是因为MCU不会干多余的事情,有任务的时候才会运行,其他时间都在休眠。因为之前做第一代第二代时钟的时候,就发现一个事情,就是MCU在执行任务的时候,很多时候都在delay,例如滚动数字的时候,平移32格像素,需要平移32次,每次平移后间隔6毫秒才能执行下一次的平移,这个时候,空跑的的时间就是31x6=186ms,这是非常致命的,如果一秒刷新一次,就有18.6%的时间浪费在等待上。再例如给传感器发送测量指令后,需要等待一段时间才能读取测量后的值,这一段时间也是需要等待的。

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

        但这样又不得不面临一个新的问题,就是MCU怎么知道自己什么时候醒过来?因为MCU在进入掉电模式之后主时钟停震,就真的睡死了,怎么知道自己下一次什么时候起来上班就成为一个问题

        针对这个问题,像打工人可以预定一个闹钟一样,可以使用掉电唤醒定时器,通过设置掉电唤醒定时器的时间,控制MCU休眠后在我们指定的时间醒过来,然后我们可以再进一步,例如平移32格像素,就定下31个闹钟

        为此,我引入两个数组,一个是“休眠时间数组”,一个是“任务号数组”(每个bit代表一个任务),两个数组的值一一对应。例如执行一个32格像素的平移,要执行32次,我就先在“休眠时间数组”和“任务号数组”中预约32个任务,如下图所示。

        每次MCU检测数组“休眠时间数组”[0]和“任务号数组”[0]中的数值,如果不等于0,则将“休眠时间数组”[0]的值装入掉电唤醒寄存器,进行休眠,唤醒后再根据“任务号数组”[0]的值匹配相应的任务。任务完成后整个数组的值向左移动一位。当检测到“休眠时间数组”[0]和“任务号数组”[0]中的数值为0时,说明UI刷新任务已经完成,掉电唤醒寄存器关闭,彻底进入休眠,等待外部按键中断任务的唤醒。

        但项目中并非只有一个OLED屏幕刷新的任务,对于传感器测量等待的任务,为了尽可能保证时效性,不可能排在UI刷新完成之后再测量,我们当然希望能两不误,这时就需要写插入算法将任务插入任务队列中,例如在队列中插入一个气压测量的任务(“任务号数组”bit1 =1),需要等待15ms(6+6+3),插入上图的队列中,如下图。可以看到当数值不可以重合时,需要打断队列插入数值,3为bit0和bit1都为1

 

     通过上文的描述,我们知道单片机在刷新UI动画的时候,并不会一直刷新,像素每一次移动之间,一定是有一定的间隔时间的,否则就会运动过快。例如主菜单模式中,会显示3个32X32尺寸的图标,屏幕长128,图标之间间隔16,所以要完成一次滚动就需要平移48个像素,也就是平移48次,按照每次移动之间等待6ms,完成一次平移需要282ms(不算其他执行的时间),那这282ms的时间,如果单片机没有其他工作的话,那就是在空转。那么我们将等待空转的时间,用休眠代替,就可以把功耗降低了。这个时候就需要将48个间隔的UI刷新任务(任务号0x0001)和 6ms的间隔时间分布压进任务号栈、任务等待时间栈中,由任务休眠等待模块处理,那么单片机就会在接下来的时间里,按照6ms的间隔,从休眠中唤醒48次,每次执行一次UI刷新任务。

     下列图片为测试PCB采集到的数据,测试环境为电源板+测试主板(只焊接FFC座子、MCU、按键),测试接入点为电池输出两端:

     由于MCU供电是降压2.7V提供,实际2.7V电流最好*1.4换算,当然,最终是电池在供电,使用原始数据也是没什么毛病的

     while(1)测试,模拟单片机全运行,可以看到电流大概在7mA左右

     主菜单滚动测试,每隔1~2秒让主菜单UI移动一次,可以看到,电流均值在1mA左右,放大可以看到,电流为48个有间隔的尖峰,说明单片机间歇工作48次,完成48次像素移动,然后继续休眠

     二级菜单滚动测试,每隔1~2秒让主菜单UI移动一次,可以看到,电流均值在2.9mA左右,放大可以看到,电流为24个有间隔的尖峰,说明单片机间歇工作24次,完成24次像素移动,然后继续休眠,由于需要计算的东西比主菜单移动多,所以看到电流尖峰的脉宽较大,所以耗电较多

 

     由此可以证明,设计的低功耗UI架构已经满足设计的初衷,只有在有任务的时候才干活,而且整个程序中,几乎没有delay,避免了单片机空转,提高了效率。

     之前的代码中,该框架存在一个比较严重的bug,就是插队算法,插了,但任务等待休眠的子模块不买账,并不会终止当前任务的休眠,会堵塞到当前任务结束为止。这就导致在等待一些预约时间较长的任务时,整个系统的阻塞会被察觉。例如开启光控后需要每秒获取环境光数据,每次测量后200mS后读数,如果此时位于菜单界面,而且正在进行读取传感器数据的等待中,按下按键,需要等待当前预约的等待时间完成后才能进行UI的滚动,宏观表现上就是按下按键之后会时不时有卡顿感。正确的效果应该是,按键按下后,如果任务等待休眠的子模块正在进行其他任务的休眠,则需要中止,将剩余时间读回并填入任务等待时间栈栈顶,然后再根据中断来源进行任务的插队。之前发现这个bug之后怎么改都不正常,结果2024年6月24号凌晨不死心随便改了一下,竟然改好了,目前测试没发现异常

 

主要硬件介绍

  MCU

     本设计使用的MCU为传说中的32位51  STC32G12K128,由于其他系列的单片机不会用,故只能选取该型号,最大主频35M,本项目最大稳定主频为30M,超过就会随机莫名其妙重启,这个问题曾困扰我两个星期

     功耗大概在310uA/MHz,,休眠实测在2个uA左右,IO口中断在掉电模式下边缘触发有点硬件上的问题,触发一个可能联动另一个,很难绷得住

     供电使用3.7V 1000mA 软包锂电池进行供电

  主回路供电

     MCU、传感器、蜂鸣器、OLED逻辑供电由ETA3425 DC-DC同步整流降压提供,供电电压设置为2.7V,该电压受限于还要给RTC电池充电,所以不能降的太低

 

  OLED显示供电

     OLED自带的电荷泵效率极其拉胯,推荐使用DC-DC升压,并且不推荐同步整流升压,因为效率少有超过80%的

     OLED显示供电由MT3608L DC-DC异步整流升压提供,供电电压为5V、6V、7V、8V可选,由MCU控制OLEDV1(开漏)、OLEDV2(开漏)引脚切换

     MT9700为限流芯片,防止输出短路

     OLEDV1   1    OLEDV2   1      5V

     OLEDV1   0    OLEDV2   1      6V

     OLEDV1   1    OLEDV2   0      7V

     OLEDV1   0    OLEDV2   0      8V

     OLEDV1(准双向)   1    OLEDV2 (准双向)  1      13V+   禁止,原本有隔离mos的,后来降本去掉了

MT3608L(纹波72mV)10uf
输出电压(V) 输出电流(mA) 输出功率(mW) 输入电压(V) 输入电流(mA) 输入功率(mW) 效率
5.018 1.521  7.630  3.873  2.230  8.637  88.35%
4.986 3.030  15.108  3.873  4.360  16.886  89.47%
5.037 156.250  787.031  3.740  247.000  923.780  85.20%

  锂电池充电

     锂电池充电由ME4059ASPG-N负责,使用DC-DC同步整流降压进行充电,充电电流约为550mA,可大幅度降低线性充电带来的温升,预留控制脚位EN_2和GHRG

     EN_2为ME4059ASPG-N使能脚,可以在充电中测量电池电源的时候,短暂关闭使能,获取真实电池电压

     GHRG为充电状态指示端口,可以判断电池状态、有无电池

  锂电池保护

     完全依赖电池自带的保护板,未预留保护器件焊盘,降本降掉了

 

  锂电池充电电流检测

     由INA181A2IDBVT芯片提供50倍差分放大,采样电阻放在低侧,防止漏电(放在高侧会产生11uA左右的漏电流)

     其余查看开源原理图即可

 

目前功能介绍

标准模式

  1. 烧屏保护
  2. 时间显示
  3. 温湿气压
  4. 电源状态
  5. 整点报时
  6. 设置

休眠模式

  1. 时间显示
  2. 温湿气压
  3. 电源状态
  4. 整点报时
  5. 深度休眠
  6. 休眠屏显
  7. 设置

环境信息

  1. 温度
  2. 湿度
  3. 气压
  4. 光强

亮度设置

  1. 屏幕亮度
  2. 电压档位
  3. 自动调节
  4. UI动态
  5. UI静态
  6. TV动态
  7. TV静态
  8. 联动电压
  9. 亮度倍率

指南针

水平尺

时间设置

  1. 星期
  2. 设置

闹钟(10个闹钟)






  1. 周六休
  2. 周天休
  3. 闹钟时长
  4. 开关

增量闹钟

秒表

声音设置

  1. 按键声音
  2. 声音长度
  3. 总开关
  4. 音调调整
  5. 音量调整

手电筒

电源管理

  1. 外部供电
  2. 内部供电
  3. 供电电压
  4.  充电电流
  5. 剩余电量
  6. 寿命保护(暂无功能)

系统设置

  1. 保存参数
  2. 防误触(暂无功能)
  3. 12时制(暂无功能)
  4. 屏幕翻转(暂无功能)
  5. 休眠计划(暂无功能)
  6. 开始休眠 (暂无功能)
  7. 结束休眠(暂无功能)

系统信息

  1. 主控型号
  2. 温湿度计
  3. 气压计
  4. 光强计
  5. 加速度计
  6. 磁强计
  7. 时钟芯片
  8. 屏幕主控
  9. 按键数
  10. 版本号
  11. 机器型号
  12. 作者

工厂模式

  1. 传感器
  2. 温度补偿
  3. 湿度补偿
  4. 气压补偿 
  5. ADC调整

 

结构介绍

     重新建模外壳,复位按键改到屏幕下面,按下屏幕复位,装配稍微有些难度,后面会出作业手册供参考

     3D打印使用嘉立创的光固化,半透明树脂

 

 

 

 

 

 

 

 

 

 

 

 

 

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
降本4-后.stp
45
2
降本5-前.stp
40
3
STC32G-降本版-20240701A(发布版本).exe
58
4
STC32G_LowPowerClock-2024.06.17-开源.zip
108
5
【BOM】(电池、OLED、震动开关、RTC电池、FFC线需要淘宝买)降本版2024-07-03-立创商城报价.xls
46
6
【淘宝BOM】桌面时钟_2024-07-01.xlsx
39
克隆工程
添加到专辑
0
0
分享
侵权投诉
全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程