1. 项目概述:当“超长续航”遇见“复古情怀”
最近几年,智能穿戴和数码产品圈有个挺有意思的现象:一边是功能越来越复杂、恨不得一天一充的“全能型”智能手表,另一边则是主打“超长续航”甚至“无需充电”的“反潮流”设备。我手上这个项目,就是把这两股看似矛盾的趋势拧在了一起——一个号称能实现“10年超长续航”的智能手表,同时它还集成了太阳能口袋收音机和电子墨水天气卡片的功能,整体设计还带着点复古怀旧的味道。
这玩意儿乍一听有点“缝合怪”的意思,但仔细琢磨,它背后瞄准的需求其实非常精准。对于很多户外爱好者、应急备灾人士,或者单纯厌倦了频繁充电的普通用户来说,一个设备如果能同时解决时间查看、信息获取(天气、新闻广播)和长久续航这几个核心痛点,那它的吸引力是巨大的。它不像传统智能手表那样追求全面的健康监测或应用生态,而是做减法,聚焦在“关键信息显示”和“极致续航”上。太阳能充电、电子墨水屏(E-Ink)这些技术都不是新东西,但把它们巧妙地组合起来,并赋予一个怀旧的设计语言,就变成了一个很有特色的产品。
我自己作为一个经常往山里跑、又对老物件有点情结的人,对这类产品特别感兴趣。所以,我打算深挖一下这个项目的实现思路,从技术选型、电路设计到软件逻辑,看看要做出这么一个“十年续航的复古信息终端”,到底需要攻克哪些难关,又有哪些可以借鉴的实操方案。
2. 核心设计思路与方案选型
要实现“10年超长续航”这个听起来有点夸张的目标,整个系统的设计必须围绕“极致低功耗”这个核心原则展开。这不仅仅是选一块大容量电池那么简单,而是需要从芯片选型、电源架构、显示技术到软件调度进行全面、深度的优化。
2.1 功耗预算分解:十年续航的数字游戏
我们首先得算一笔账,看看“十年续航”在工程上到底意味着什么。假设设备使用一颗常见的CR2032纽扣电池(容量约220mAh)。十年的总小时数是 10 * 365 * 24 = 87600 小时。
- 理想静态功耗:要达到十年续航,平均工作电流必须低于 220mAh / 87600h ≈ 2.5μA。这是一个极其苛刻的数字,意味着设备绝大部分时间必须处于深度休眠状态,电流在微安级别。
- 现实考量:实际上,设备需要定时工作(如更新天气、接收校时信号)、响应用户操作(按键、查看屏幕)。因此,我们需要一个更现实的功耗模型:99.9%的时间处于超低功耗休眠(<1μA),0.1%的时间进行短时高效工作。即使工作电流为10mA,只要每次工作时间控制在毫秒级,平均电流依然可以维持在极低水平。
这个计算决定了我们所有的技术选型:主控必须是超低功耗MCU,射频接收必须支持极低占空比的监听,显示必须是被动式且刷新功耗极低。
2.2 核心功能模块的技术选型
基于功耗预算,各个模块的选型思路就清晰了:
主控MCU:传统的ARM Cortex-M系列MCU(如STM32L系列)功耗已经很低,但为了达到nA级别的休眠电流,可能需要考虑更极端的方案,比如EFM32 Zero Gecko系列或TI的MSP430FR系列。这些MCU的深度休眠电流可以做到100nA以下,并且带有低功耗外设(如LEUART,低功耗UART),能在休眠状态下由外部事件(如RTC闹钟、GPIO中断)唤醒部分功能,实现“事件驱动”架构,CPU本身绝大部分时间不工作。
显示模块:电子墨水屏(E-Ink)是几乎唯一的选择。它的优势在于“双稳态”——只在刷新画面时消耗电能,显示静态图像时零功耗。这对于显示时间、天气卡片这种不常变化的信息完美契合。我们需要选择一款小尺寸(如1.54英寸)、低分辨率(200x200)、支持局部刷新的E-Ink屏,以进一步减少刷新时的能耗和耗时。
时间与天气信息获取:
- 收音机模块:这里的选择非常巧妙。使用一个单芯片调幅/调频收音机IC,如Si473x系列。它不仅可以收听广播,更关键的是,许多国家(如中国、日本、德国、美国等)的授时台或气象台会在特定频段(如AM 1620kHz, WWVB 60kHz)发送包含标准时间和简单气象信息的编码信号。通过解码这些信号,设备就能实现零流量、零功耗(相对网络)的自动校时和基础天气信息获取。收音机模块本身可以完全断电,仅在设定的深夜低干扰时段,由MCU定时上电、搜索和解码信号,完成后立即关闭。
- 备选网络方案:作为补充,可以集成一个超低功耗的蓝牙模块(如nRF52832),仅在用户进入手机App范围时,通过蓝牙连接同步一次更详细的网络天气和更新时间,然后立即进入休眠。这提供了灵活性,但不依赖它作为主要信息源。
能量收集与管理:
- 太阳能电池板:选择一块高效率的非晶硅或单晶硅太阳能电池板,面积可能只有手表盖大小(几平方厘米)。它的作用不是给设备“供电”,而是“续命”。在光照条件下,它产生的微弱电流(可能只有几十到几百微安)被输入到一个能量收集管理芯片(如TI的BQ25570)。
- 电源管理芯片:这颗芯片是整个续航系统的“心脏”。它负责管理太阳能板输入、锂电池/超级电容充电,并以极高的效率为后端系统提供多路可开关的电压轨。它能在输入能量极低的情况下工作,并支持“冷启动”——即从完全零能量状态,仅靠微弱光能就能启动系统。
怀旧设计与交互:物理按钮取代触摸屏,减少误触和待机功耗。表壳采用复古的金属或树脂材质,表盘设计模仿老式收音机或仪表盘风格。天气信息以简洁的“卡片”形式在E-Ink屏上显示,类似老式天气预报图。
注意:这里的“10年续航”通常是一个营销概念或实验室理想条件下的理论值。实际使用中,频繁操作屏幕、处于无光环境、收音机信号差等因素都会大幅缩短续航。但即便如此,通过上述设计,实现“数年无需主动充电”是完全可行的,这已经远超所有主流智能手表。
3. 硬件系统设计与核心电路解析
有了清晰的模块选型,接下来就是如何将它们整合成一个稳定、高效的硬件系统。电路设计是低功耗目标能否达成的关键。
3.1 电源树架构:分级供电与精细化管理
整个设备的供电不能是“一锅烩”,必须进行精细化的分级管理。
太阳能板 -> 能量收集管理IC (BQ25570) -> 可充电储能元件 (锂亚电池或超级电容) | V 主电源轨 (如3.0V) | |----[LDO/开关稳压器]---> 常电域 (RTC, 唤醒电路) |----[负载开关1]---------> 射频域 (收音机模块) *可关闭* |----[负载开关2]---------> 显示域 (E-Ink屏驱动电路) *可关闭* |----[直接供电]----------> 主控MCU核心 *可深度休眠*设计要点:
- 储能元件选择:对于“十年”目标,锂亚硫酰氯电池是比锂离子电池更好的选择。它的能量密度极高,自放电率极低(年自放电<1%),非常适合这种微功耗长期应用。缺点是功率输出较低,但我们的设备峰值电流需求很小,正好匹配。超级电容则适合配合太阳能板做缓冲,但自放电较高,不适合纯长期储能。
- 负载开关:为收音机、屏幕等“耗电大户”单独配置负载开关(如MOSFET)。MCU在需要时才通过一个GPIO引脚打开相应开关,使用完毕后立即切断其所有供电,杜绝任何静态电流泄漏。
- 电压监控:能量收集管理IC和MCU内部ADC需要监控电池电压,在电压过低时,系统应进入最低功耗的“保护模式”,仅维持RTC,并关闭所有非必要功能,等待光能补充。
3.2 收音机授时与天气解码电路
这是项目的技术亮点之一。我们以Si4735芯片为例。
- 电路连接:Si4735通过I2C总线与MCU通信。其天线接口连接一个小型磁棒天线(用于AM)和/或FM拉杆天线。芯片的供电必须由前述的负载开关控制。
- 低功耗监听策略:Si4735本身支持低功耗模式,但我们可以做得更绝。完全不依赖芯片的内部轮询,而是采用MCU绝对主导的“打盹”模式。
- 流程:MCU的RTC设定每天在信号较好的时段(如凌晨2点)产生一个闹钟中断。
- MCU唤醒,打开收音机模块的负载开关,等待电源稳定。
- MCU通过I2C初始化Si4735,将其快速调谐到目标授时台频率(如中国的BPC 68.5kHz商丘台)。
- 芯片接收信号,MCU从芯片读取音频或数字输出。对于模拟授时信号(如嘀嗒声),MCU需要简单的比较器电路将其转换为数字信号;对于数字编码信号(如WWVB),芯片可能直接输出数字流。
- MCU进行解码,获取精确到秒的时间信息和可能的气象代码(如温度、气压趋势)。
- 关键动作:解码完成后,MCU立即通过I2C发送命令让Si4735进入关机模式,然后关闭其负载开关。最后MCU自己也进入深度休眠。
- 整个活动窗口可能只有1-2分钟,平均到每天的电流消耗微乎其微。
3.3 E-Ink屏幕驱动与刷新优化
E-Ink屏的驱动芯片(如IL3820)通常集成在屏幕排线上。驱动它刷新是系统主要的瞬时功耗来源之一。
- 局部刷新:务必使用局部刷新模式。例如,只刷新“分钟”数字变化的区域,而不是整屏。这可以将刷新时间从2-3秒缩短到300-500毫秒,功耗直接降低一个数量级。
- 刷新时机管理:不要每分钟都刷新屏幕。一个聪明的做法是:在分钟变化时,仅当屏幕被点亮(如用户抬腕或按键)后才触发刷新。如果屏幕处于熄灭状态,MCU内部记录时间,但屏幕保持原样。当用户下次查看时,MCU计算时间差,一次性刷新所有变化。这避免了无数次无谓的刷新。
- 温度补偿:E-Ink的刷新波形受温度影响很大。需要在MCU中存储不同温度下的驱动波形查找表,并通过温度传感器(或根据RTC粗略估计)选择合适的波形,避免刷新残影或功耗增加。
4. 软件固件设计与低功耗调度策略
硬件搭好了台子,软件才是让设备“聪明”省电的灵魂。固件必须采用严格的“事件驱动”和“状态机”架构。
4.1 主循环与休眠调度
传统的while(1)主循环在这里是禁忌。正确的主程序结构应该像下面这样:
int main(void) { hardware_init(); // 初始化时钟、GPIO、RTC等最基础硬件 enter_deep_sleep(); // 立即进入深度休眠 // 程序理论上永远不会执行到这里 while(1) { // 这里是空的!所有工作都在中断服务例程中完成 } } // 示例:RTC闹钟中断服务例程 void RTC_IRQHandler(void) { if (是每日授时闹钟) { disable_interrupts(); power_on_radio_domain(); // 打开收音机电源 decode_time_weather(); // 解码 power_off_radio_domain(); // 关闭收音机电源 update_internal_clock(); // 更新内部RTC schedule_next_alarm(); // 设置下一个闹钟 clear_wakeup_flag(); enter_deep_sleep(); // 处理完毕,立刻回去睡觉 } else if (是定时屏幕更新闹钟 && screen_is_on) { // 局部刷新屏幕时间 partial_update_display(); enter_deep_sleep(); } }核心思想:MCU就像一只树袋熊,醒来(中断触发)后,以最快的速度完成唯一一件必要的事情(吃几片叶子),然后立刻恢复睡眠。所有外设的电源管理、任务调度,都在中断服务例程中完成。
4.2 外设驱动与电源状态管理
为每个外设模块编写驱动时,必须包含完整的电源状态机:
typedef enum { PERIPH_POWER_OFF, // 完全断电,负载开关关闭 PERIPH_POWER_SLEEP, // 芯片进入软件休眠模式(如果支持) PERIPH_POWER_ACTIVE // 全功能开启 } periph_power_state_t; // 收音机模块驱动 void radio_power_on(void) { GPIO_set(LOAD_SWITCH_RADIO, HIGH); // 打开硬件电源开关 delay_ms(10); // 等待电源稳定 si4735_init(); // 初始化芯片 radio_state = PERIPH_POWER_ACTIVE; } void radio_power_off(void) { si4735_power_down(); // 发送软件关机命令 delay_ms(5); GPIO_set(LOAD_SWITCH_RADIO, LOW); // 切断硬件电源 radio_state = PERIPH_POWER_OFF; }4.3 时间与天气信息处理逻辑
- 时间同步:解码出授时信号后,与内部RTC时间对比。如果偏差在可接受范围内(如±2秒),则采用“微调”策略,通过调整RTC校准寄存器来缓慢修正,避免时间跳变。如果偏差很大,则直接写入RTC。内部RTC应选择带温度补偿的型号,保证日常走时精度。
- 天气信息显示:从收音机解码出的天气信息通常非常基础,可能只是一个气压趋势代码(上升/下降/稳定)或风暴警报。我们需要将其映射为更直观的图标(如太阳、云、雨伞)显示在E-Ink的“天气卡片”区域。更详细的天气预报可以通过可选的蓝牙同步来补充。
- 数据存储:所有需要持久化的配置(如时区、闹钟、显示偏好)应存储在MCU的FRAM或EEPROM中,避免使用有写寿命限制的Flash。
5. 实操组装、调试与功耗优化实录
理论设计最终要落到实际制作上。这里分享一些从原型到成品的实操经验和踩过的坑。
5.1 原型制作与模块测试
建议分模块进行验证,不要一开始就做整机集成。
- 最小系统板:先用一块开发板(如EFM32ZG-STK3200)搭建最小系统,连接一个简单的LED。编写程序测试深度休眠模式和RTC闹钟唤醒,用电流表测量休眠电流,确保能达到1μA以下。这是基础,必须首先通过。
- E-Ink屏测试:单独连接E-Ink屏到开发板。重点测试局部刷新API,测量一次全刷和一次局刷的电流曲线和持续时间。你会发现,驱动芯片上电初始化本身就有不小的电流峰值,因此要尽量减少全刷次数。
- 收音机模块测试:在室外空旷处测试。授时台信号通常很弱,需要耐心调整天线方向和频率微调。可以使用PC上的声卡和音频分析软件(如Audacity)先录制一段授时信号,在电脑上编写解码算法验证逻辑,然后再移植到MCU上。这是整个项目软件部分最难的点。
- 太阳能充电测试:将太阳能板、能量收集管理IC和一个小容量超级电容连接。用台灯模拟不同光照,用示波器观察储能电容的电压爬升情况,验证“冷启动”功能是否正常。测试在无光情况下,系统的静态电流是否真的如数据手册所标称的那样低(nA级),任何设计缺陷都会在这里被放大。
5.2 整机集成与结构设计
当所有模块单独测试通过后,开始设计PCB和结构。
- PCB布局:
- 电源路径优先:将能量收集IC、储能元件、主电源滤波电容放在一起,路径尽量短粗,减少损耗。
- 数字与模拟隔离:收音机的模拟前端(天线输入)要远离MCU、数字电源等噪声源。用地缝进行隔离,并使用独立的模拟地平面。
- 天线净空:为磁棒天线或陶瓷天线在PCB上留出足够的净空区,下面各层不要走线。
- 结构设计:
- 太阳能板集成:太阳能板需要紧贴表盖玻璃下方,且玻璃的透光率和涂层需要专门选择,以最大化光能透过率。
- E-Ink屏保护:E-Ink屏非常脆弱,需要设计合适的泡棉垫和支架,防止组装时受力不均导致碎裂。
- 按键手感:复古设备讲究物理按键的“咔哒”感。需要选择合适的微动开关或锅仔片,并设计合理的键程。
5.3 功耗优化实战与测量
整机初步完成后,用高精度的源表(如Keithley 2450)或纳安计进行功耗分析。
- 静态功耗排查:
- 方法:烧录一个最简单的程序,让系统进入设计中的最深休眠状态。用源表给设备供电,测量电流。
- 常见问题:
- 电流在几十微安:大概率有GPIO配置错误。检查所有未使用GPIO的模式,应设置为“模拟输入”或“输出低”,避免浮空。检查负载开关是否真的关断了,用万用表测量模块供电引脚对地电压是否为0。
- 电流在几百纳安到几微安:可能正常,也可能有细微泄漏。逐个焊下外围芯片(如电平转换芯片、传感器),看电流是否下降。有时一个不良的电容或PCB漏电也会导致问题。
- 动态功耗优化:
- 缩短活动时间:用逻辑分析仪抓取MCU唤醒后的活动波形。优化代码,移除不必要的延时,将串口调试输出语句全部禁用(它们非常耗电)。确保收音机解码一完成就立刻断电。
- 降低活动电流:在活动时,将MCU主频降到能满足功能的最低值(如1MHz)。降低核心电压(如果MCU支持)。关闭所有不用的外设时钟。
- 建立功耗模型:最终,你应该能列出一个详细的功耗预算表:
| 状态 | 平均电流 | 每日耗时 | 每日耗电量 (mAh) |
|---|---|---|---|
| 深度休眠 | 0.8 μA | 23.9 小时 | 0.0000192 |
| RTC运行 | 0.2 μA (已包含在休眠中) | 24 小时 | (已包含) |
| 每日授时 | 15 mA | 2 分钟 | 0.005 |
| 屏幕刷新(用户操作) | 20 mA | 假设每日刷新30次,每次0.5秒 | 0.000083 |
| 每日总计 | 约 0.0051 mAh | ||
| CR2032电池理论续航 | 220 mAh / 0.0051 mAh/天 ≈ 43137 天 ≈ 118 年 |
这个计算表明,在理想的用户交互模型下,理论续航远超10年。实际使用中,频繁操作屏幕、收音机信号差导致解码时间延长等因素,会让每日耗电量增加1-2个数量级,但实现数年续航依然轻松。
6. 常见问题、排查与进阶玩法
即使设计再仔细,实际制作中还是会遇到各种问题。这里记录一些典型问题和解决方法。
6.1 信号接收与解码问题
问题:收不到授时台信号,或解码错误率极高。
- 排查:
- 天线:AM低频授时台(如68.5kHz)需要磁棒天线,且方向性很强。尝试旋转设备寻找最佳方向。在室内钢筋混凝土结构中信号极弱,必须到窗口或室外测试。
- 干扰:开关电源、电脑、LED灯都会产生巨大干扰。尝试在深夜测试,或使用电池供电整个测试环境。
- 软件解调:对于模拟授时信号(如秒脉冲嘀嗒声),MCU通过比较器输入捕获。需要仔细调整比较器阈值,并使用软件滤波(如移动平均)消除毛刺。对于数字编码,确保比特率、编码格式(如曼彻斯特编码)解析正确。
- 心得:不要指望100%的解码成功率。软件应设计为“多数判决”,即连续尝试解码5次,取3次相同的结果作为有效值。
6.2 E-Ink屏幕显示异常
问题:刷新后出现残影、鬼影,或局部刷新区域错乱。
- 排查:
- 温度:这是最常见原因。确保你使用的刷新波形参数与当前环境温度匹配。可以在MCU中集成一个温度传感器,或根据季节和RTC时间估算一个温度值。
- 供电不稳:屏幕刷新时电流需求较大(可达几十mA)。检查电源路径上的电容是否足够(建议100μF以上),并且尽量靠近屏幕驱动芯片的电源引脚。
- 时序:严格遵循驱动芯片数据手册的时序要求,特别是复位、命令和数据之间的延迟。在低主频下,这些延迟可能需要用循环计数来精确实现。
- 心得:在每次全局刷新前,先执行一次“全刷为白色”和“全刷为黑色”的初始化序列,可以很大程度上清除旧残影。
6.3 续航远不及预期
问题:实测待机电流远高于设计值,电池几个月就没电了。
- 系统性排查步骤:
- 视觉检查:用热成像仪(或简单的体温感觉)在设备休眠时快速扫描PCB,看是否有异常发热的芯片。
- 分区域断电:这是最有效的方法。设计PCB时,可以用0欧姆电阻或磁珠为不同电源区域供电。测试时,逐个移除这些电阻,观察总电流变化,定位漏电区域。
- 代码检查:确认所有外设在初始化后都进入了正确的低功耗模式。检查中断配置,是否有不必要的中断源被使能,导致频繁唤醒。
- 测量工具:确保你的电流表精度足够。测量nA级电流需要专门的皮安计/源表,普通万用表的分辨率不够,且内阻会影响测量。
6.4 进阶优化与功能扩展
当基础功能稳定后,可以考虑一些增强玩法:
- 混合储能系统:使用“超级电容 + 锂亚电池”组合。太阳能板优先给超级电容充电,超级电容为日常高频、小电流的唤醒操作(如屏幕刷新)供电。锂亚电池作为“战略储备”,仅在长期无光、超级电容耗尽时启用。这可以进一步延长锂亚电池的寿命,真正逼近“永久续航”。
- 蓝牙智能同步:集成一颗像nRF52810这样的超低功耗蓝牙MCU,它本身可以替代主控。当手机App靠近时,通过蓝牙广播唤醒设备,同步网络时间、精细化天气预报、甚至更新固件。同步后立即深度休眠,对整体续航影响极小。
- 传感器集成:添加一个低功耗的温度、气压传感器(如BMP280)。设备可以显示本地实测的气压趋势图,与收音机收到的天气预警相结合,对户外活动有很高的参考价值。
- 开源与社区:将硬件设计(PCB原理图、布局)和软件固件开源。社区的力量可以帮忙优化解码算法、适配全球更多授时台频率、开发有趣的表盘,让这个“复古数字伴侣”的可玩性大大增加。
这个项目本质上是在当前这个信息过载、设备需要精心呵护的时代,对一种“简单、可靠、长久”体验的回归。它不追求最前沿的性能,而是把成熟的技术用到极致,去解决一个最基础的需求——让你随时获取关键信息,而忘记“充电”这件事的存在。从技术实现角度看,它是一场对系统级低功耗设计的深度实践,每一个微安电流的节省,都充满了工程师的巧思与坚持。