1. 项目思路:给智能电子锁装一个“眼睛”般的低功耗雷达感应
前阵子一直在做一款智能电子锁的整机方案,折腾最多的不是识别算法,也不是机械结构,而是“唤醒”这件事。智能电子锁不像手机那样有随时能点的屏幕,它的待机功耗直接决定电池能用几个月还是一年。传统做法里,唤醒方式五花八门,但放到真实楼道环境里,全都会露馅:触摸唤醒要摸准位置,红外人感怕高温和干扰,常供电又扛不住电池焦虑。最后我落地采用的是低功耗雷达感应方案——雷达感应人来唤醒、人走熄灭。说白了,就是把“感知有没有人走近”这件小事,从主控和识别模组手里拆出来,交给一个微安级的雷达传感器去管。人来了,锁才醒;人走了,锁继续睡。
这套方案解决的第一个核心问题,是“识别模组待机功耗”和“用户体验”之间的矛盾。指纹头、人脸识别模组、Wi-Fi/BLE通信模块,这些部件一旦通电,电流至少几十毫安,不可能常开。但用户走到门前,又希望锁立刻响应,不能等个两三秒才亮屏。所以需要的是一个“看门人”角色:平时几乎不耗电,却能稳定感知人体靠近,并快速把主控叫醒。雷达感应干的就是这个活。这篇文章我按照实际做产品的思路,从方案选型、原理、硬件电源设计、软件状态机到功耗核算和排坑,把整套低功耗雷达感应方案完整拆开来讲。适合正在做智能锁、门禁、感应夜灯一类低功耗产品的工程师,也适合产品经理用来判断技术选型。看懂之后,你可以直接参考这套逻辑去做自己的低功耗唤醒设计。
1.1 传统唤醒方案为什么不够用
先说说我最早踩过的几个坑。
第一种方案是触摸唤醒。原理很简单,电容触摸芯片检测手指接触金属面板或触摸区,产生信号唤醒主控。问题在于,这个“唤醒”必须依赖用户主动操作。楼道灯光昏暗或者老人小孩手部位置不准的时候,经常摸两三下都没摸到感应区。更麻烦的是,如果用户手里拎着东西、抱着孩子,根本没手去摸,那锁就一直睡着,体验非常糟糕。触摸唤醒本质上不是“感应人来”,而是“等人来摸”,它把便利性压在了用户行为上。
第二种方案是红外人体感应(PIR)。PIR传感器确实能做到人来唤醒,但它在电子锁场景里有两个硬伤。一是受环境温度影响大,夏天楼道温度接近人体体温时,红外温差变小,灵敏度明显下降,人站在门前一两秒都不触发;冬天又反过来,暖气片、热水管路过都可能造成误触发。二是PIR检测的是“红外辐射变化”,对横向移动敏感,对正面缓慢接近的人反而不敏感。电子锁恰好是安装在门上的,用户基本都是正面走近,这就很尴尬。走廊里有人路过它倒是反应迅速,结果就是频繁误唤醒,把识别模组白白叫醒几十次,功耗反而上去了。
第三种方案是让主控和通信模块常供电。有些低功耗Wi-Fi模组能做到几十微安的睡眠电流,于是有人直接把主控、蓝牙、RF电路全挂在电池上,保持随时可响应状态。理论可行,实际上问题也不少。通信模块的睡眠电流看着低,但唤醒初期的电源毛刺、周期性广播唤醒、系统实时时钟,都会让真正的平均电流突破百微安级别。配合电池自放电,实际续航往往只有宣传值的一半都不到。这对电子锁这种必须“几个月不充电还要可靠”的设备来说,是不太能接受的。
1.2 雷达方案的设计目标
如果你也遇到类似问题,可以试试我后来用的思路:把“感应”和“识别”拆成两个独立子系统。感应层用微波雷达,工作在微安级;识别层包括指纹、人脸、触摸、通信,平时完全断电,只有雷达通知“有人来了”才供电启动。
我给自己定的技术指标是这样的:
- 整机睡眠状态电流不超过15µA;
- 雷达有效感应距离2~3米,可调;
- 人从走近到触发唤醒的时间控制在1秒内;
- 人离开后,3~5秒熄灭指示灯和屏幕,10秒内关闭识别模组电源;
- 误触发率在普通住宅楼道场景下低于每天3次。
这套设计完成后,我再也没用过触摸唤醒作为主唤醒源。触摸功能保留,但只作为雷达失效时的备用手段。从产品层面看,用户感知是“我走近门它就亮了”,而不是“我要去摸它才亮”。体验差距非常大。
2. 方案选型:微波雷达、毫米波雷达、PIR和超声波的取舍
感应方案听起来都能做,但选型这步最考验经验。我对比了市面上常见的几种“存在检测”方案:微波多普勒雷达、毫米波雷达、PIR红外、超声波传感器。每种都有它的脾气。
| 方案类型 | 典型频段 | 检测距离 | 工作电流 | 能否检测静止人 | 抗环境干扰 | 成本 |
|---|---|---|---|---|---|---|
| PIR红外 | - | 3~8米 | 10~50µA | 不能 | 差,怕热源和阳光 | 很低 |
| 超声波 | 40kHz | 2~5米 | 1~3mA | 能 | 怕风、怕多径反射 | 低 |
| 微波多普勒 | 5.8GHz / 10.525GHz | 3~10米 | 1~5mA(连续工作) | 不能 | 好,穿透塑料、玻璃 | 低 |
| 毫米波雷达 | 24GHz / 60GHz | 3~8米 | 30~300mA | 能(微动检测) | 好,抗干扰强 | 中高 |
从表格能看出来,PIR便宜省电,但环境适应性最差;超声波能测静止物体,但功耗和风干扰不划算;微波多普勒灵敏且能穿外壳,但先天无法区分静止人体;毫米波最全能,可惜成本高、电流大,还要配合天线设计和算法,一般用在高端人脸锁上。
我最终把方案分成两档。普通指纹锁、密码锁,用10.525GHz微波多普勒雷达模块,配合超低功耗MCU和占空比工作方式,把平均电流压到微安级。高端人脸锁,用24GHz毫米波雷达,因为它能通过微动检测和点云信息判断“人是否静止站在门前”,适合人脸识别这种需要人靠近后停留的场景。至于超声波,我个人不太建议用在门上,超声波的机械振动在金属门板上容易产生共振干扰,抗风能力也差。
2.1 为什么普通锁优先选微波多普勒雷达
微波多普勒雷达模块的结构并不复杂:一个微波振荡源产生固定频率的射频信号,经过天线向空间辐射;信号遇到人体反射回来,由于人体移动造成多普勒频移,回波和发射波混频后得到低频信号,再经过放大和比较器输出一个触发信号。它本质上探测的是“运动”,不是“存在”。所以选它做唤醒雷达,就是因为它对这个任务匹配度最高——人走近必然产生相对运动。
选10.525GHz频段也有讲究。这个频段是工业、科研、医疗开放频段,模块成本低,供应链成熟,随便一家方案商都能给出几种封装。5.8GHz方案穿透力和灵敏度略有不同,但10.525GHz在短距离人体检测上经验值最稳,行业内用得最多,调试资料也最好找。另一个原因是天线形式。微波模块可以外接PCB天线或弹簧天线,方向性可以调,方便在金属门板里找安装位。PIR那种半球透镜在门板里的指向性反而不容易控制。
我在实际选型时还会让模块供应商提供三个参数:工作电压范围、待机电流、触发输出电压极性。很多微波雷达模块写着工作电流3mA,听起来不高,但如果直接挂电池,一年就是26mAh,占比不小。所以后面必须靠“占空比供电”把这个电流摊薄。关于这一点,我会在硬件设计部分细说。
2.2 毫米波雷达的优势:静止人体检测
高端设备上选毫米波,关键原因是它能检测静止人体。微波多普勒的原理决定了它只对运动敏感,当人站在门前不动时,多普勒频移消失,输出信号会回落,这时系统可能误判“人走了”,提前熄灭屏幕。人脸识别恰恰要求人先站在固定位置,面部对准镜头,静止几秒钟完成识别。所以高端人脸锁选用毫米波雷达是合理的。
24GHz和60GHz的选择上,60GHz的波长更短,精度更高,能检测到胸腔呼吸引起的毫米级表面位移,也更适合近距离存在检测。缺点是功耗和成本都高,算法调试复杂。24GHz相对成熟,多数方案的“微动检测”是通过I/Q相位差判断微小动作,能做到检测呼吸级别,但算法要吃算力,一般得搭配带DSP的雷达SoC。如果只做指纹锁,我会明确建议不要去碰毫米波,杀鸡用牛刀还费电。
3. 低功耗雷达感应的核心原理:多普勒频移与“呼吸级”微动检测
不管选哪种雷达,底层都是电磁波反射和多普勒效应。理解了原理,调试才不会瞎调。
3.1 多普勒频移与混频信号
当雷达模块发射频率为f₀的电磁波,遇到以速度v径向运动的人体表面时,反射波频率会发生偏移。假设电磁波传播速度为c,则多普勒频移Δf ≈ 2v f₀ / c。比如10.525GHz雷达,人走近速度1m/s,算出的Δf大约70Hz,属于低频信号。雷达模块内部通过混频器把发射信号和回波信号混频,输出频率等于Δf的低频信号,即“多普勒信号”。人在雷达前方走动时,这个信号幅度和频率都会变化,后级比较器把该信号和设定阈值比较,高出阈值就输出高电平。
这里有一个常见的调试误区:不要用万用表去测触发脚电压判断灵敏度,因为触发信号是“运动相关”的,人不动就没有稳定电平。正确做法是用示波器看OUT脚波形,或者直接接一个LED观察闪烁情况。安装后的灵敏度标定,也是让人在距离3米外走动,逐步调高增益直到稳定触发为止,再退回来留出20%余量。
3.2 从“运动感知”到“低功耗监听”
雷达模块本身其实是小功耗器件,但要让它在电池供电下长期工作,必须做“间歇供电”。我说的低功耗雷达感应,不是让雷达7×24小时连续工作,而是让雷达以极低占空比反复“睁开眼睛”扫描:每20ms醒来一次,工作500µs就关闭,平均电流大约只有峰值电流的2.5%。以模块峰值3mA计算,平均电流就是75µA左右,再配合MCU的休眠,整体才能压到理想值。
低占空比带来的问题就是可能错过“人走”瞬间的判断。比如人一掠而过,刚好落在雷达休眠窗口里,就会漏报。所以实际做产品时,我会把雷达的感知逻辑设计成“双保险”——雷达模块自身保持一个超低功耗的监测状态,只有当检测到信号才给MCU发中断;MCU收到中断后,立刻把雷达切换到全功率监听模式,用于确认“人还在不在”。这个过程在软件状态机里展开。
3.3 触发与熄灭的判定逻辑
“人来唤醒”简单,“人走熄灭”却需要多想想。雷达的误触发和漏报都跟判定逻辑有关,不能只看一次信号。我用的判定方法是:
- 雷达OUT第一次拉高后,MCU打开一个2秒的计时窗口;
- 如果在窗口内再次检测到雷达信号,则认为“有人确认”,系统执行完整唤醒流程;
- 如果窗口内没有第二次信号,认为是干扰或路过,系统回到睡眠;
- 系统亮起后,雷达信号消失连续超过1.2秒,才认定人已离开,开始关屏;
- 关屏后再等10秒无信号,关闭识别模组电源,彻底回到睡眠态。
这样做的目的是用时间冗余过滤瞬时干扰。门缝里漏进来的风、邻居家宠物跑过、楼道照明灯的电磁干扰,大多以短暂脉冲形式出现,很难在连续两个窗口都命中。实际测试下来,这套逻辑能把误触发降到每天两三次以内,多数是门口有快递停留之类的情况。
4. 硬件电路与电源管理设计:把每一微安算清楚
低功耗不是靠软件抠出来的,硬件没设计好,软件再省也是白搭。整个电源管理链路是这套方案的地基。
4.1 硬件组成与供电拓扑
整个系统的供电拓扑我画成了一张图在项目文档里,简单描述就是这样:电池输出VBAT,经过一级LDO降压到3.3V,作为 MCU 和雷达模块的常供电轨。识别模组(指纹头、人脸模组、通信模块)则接在一个由MOS管控制的二级电源轨上,这个轨道的开关由MCU的GPIO控制,默认是断开状态。
选LDO而不是DCDC,原因是唤醒场景下的负载是微安到毫安跳变,LDO的静态电流可以做得很低(比如1µA以内),DCDC虽然效率高,但很多开关电源芯片的静态电流要几十微安,反而把睡眠电流抬高了。当然如果用超低功耗DCDC也行,只是LDO在成本和小电流表现上更有优势。
雷达模块本身有两个可选控制方式:一是直接用EN脚控制,二是电源串MOS管控制。更稳妥的做法是电源串了一个小MOS,既省电又避免模块在关闭时从IO口漏电。别小看漏电问题,雷达的OUT脚如果一直接在MCU的GPIO上,当模块断电时,IO口可能通过内部保护二极管反向灌电流,一次就是几微安,几路叠加起来就把睡眠电流毁了。
4.2 唤醒电路与中断设计
雷达OUT脚接到MCU的一个外部中断引脚上,设为上升沿触发。MCU在睡眠模式(Stop模式)下,IO中断可以立刻唤醒。这里是整个系统的核心响应路径:雷达感知到人体→OUT脚拉到高电平→MCU被中断唤醒→拉高MOS管给识别模组供电→系统开始工作。
这个链路里最坑的一点是MCU唤醒初始化期间的供电毛刺。MCU从Stop模式唤醒到执行第一行代码,时间约几十微秒,在此期间如果立刻打开MOS管给识别模组供电,电源上可能会有压降跌落,导致后级模组上电不稳。我的做法是:唤醒后先延时20ms,等MCU内部时钟稳定,再打开二级电源,再延时50ms模组自检,最后才开始识别流程。虽然后级模组启动多花了几十毫秒,但可靠性明显提升。对用户来说也就是亮屏稍微慢半拍,感知不强烈。
另外PCB走线时,要特别注意雷达模块天线区域正下方和周围不能铺地或走高频线。微波天线被金属平面一挡,检测距离立刻缩水一半以上。我最早打的一块板子,天线正下方铺了完整地平面,结果人在1米外都不触发,后来把天线区挖空铜,检测距离才恢复到3米。这一点在硬件评审时一定要写进检查清单。
4.3 实测功耗数据
下面是套件实测的一组数据,使用高精度电流表串联电池测量:
| 工作状态 | 工作电流 | 持续时间 | 说明 |
|---|---|---|---|
| 整机深睡 | 13.8µA | 常态 | MCU Stop + 雷达占空比 + LDO漏电流总和 |
| 雷达触发确认 | 2.5mA | 2~5秒 | 雷达全功率监听 + MCU运行 |
| 识别模组识别中 | 35mA | 3秒(指纹) | 因人脸模组待机可能更高 |
| 通信上报 | 80mA | 1秒 | 仅当有远程控制或事件上报时发生 |
以一天开门20次计算,识别模组工作约60秒,通信上报很少,日常平均功耗大约在 13.8µA × 24h × 365天 ≈ 121mAh/年。再加上识别模组的短时工作、系统自放电和冬夏电池容量衰减,给一颗2500mAh的锂电池用三四年没有压力。对比传统常供电方案,同样2500mAh电池可能一年就要充一次电。
5. 软件状态机:定义“谁在什么时间醒来”
硬件决定功耗下限,软件决定功耗稳定性。状态机设计是低功耗方案的核心逻辑,比想象中更容易翻车。
5.1 五个状态的定义与流动
我用的是一个五状态有限状态机:
- SLEEP(睡眠态):MCU进入Stop模式,雷达低占空比监听,所有外设断电,仅保留外部中断唤醒能力;
- DETECT(探测态):雷达OUT被拉高,MCU被唤醒,进入正常工作模式,保持雷达全功率,准备确认人体存在;
- WAKE(唤醒态):确认有人后,打开二级电源给识别模组供电,等待识别模组启动完成,点亮屏幕或指示灯;
- IDLE(空闲态):识别完成、门锁动作或用户离开,系统进入计时等待,同时雷达持续监听人体是否仍在;
- BACK_TO_SLEEP(回归态):人已离开确认后,关闭识别模组电源,关闭屏幕,保存关键数据,然后重新进入SLEEP。
这个状态机最关键的地方,是“任何状态都不是只能单向流动”。比如在IDLE态如果雷达又检测到人体,说明用户折返,系统必须立刻回到WAKE态而不是机械地继续倒计时熄灭。我在初版固件里犯过这个错:识别完锁门后,不管人走没走,固定30秒后直接熄屏断电,结果用户在门口换鞋超过半分钟,屏幕直接灭了,体验很差。后来改成“雷达还在,IDLE态刷新超时时间”,问题才解决。
5.2 状态机核心代码逻辑
这里给一个简化版的示意代码,用于说明状态流转:
typedef enum { SLEEP, DETECT, WAKE, IDLE, BACK_TO_SLEEP } system_state_t; system_state_t state = SLEEP; uint32_t idle_timer = 0; void radar_isr(void) { // 任何非SLEEP态下的雷达触发都标记事件 g_radar_event = 1; } void main_loop(void) { switch (state) { case SLEEP: // 进入Stop模式,等待雷达中断唤醒 enter_stop_mode(); state = DETECT; break; case DETECT: // 连续两次雷达触发才确认有人 if (g_radar_event == 1) { confirm_presence(); power_on_peripherals(); // 打开识别模组电源 state = WAKE; } else { state = SLEEP; } break; case WAKE: // 等待识别完成或超时 if (identify_success()) { unlock_door(); state = IDLE; } else if (timeout()) { state = BACK_TO_SLEEP; } break; case IDLE: // 人离开则熄灭 if (g_radar_event == 0) { idle_timer++; if (idle_timer > EXIT_CONFIRM_MS / LOOP_PERIOD_MS) { state = BACK_TO_SLEEP; } } else { idle_timer = 0; // 人还在,保持 refresh_display(); } break; case BACK_TO_SLEEP: power_off_peripherals(); save_runtime_data(); state = SLEEP; break; } }上面是能跑通的简化逻辑,真实项目里还要加看门狗喂狗、低电量警告、防休眠时GPIO漏电的配置等。注意一个细节:MCU在进入Stop模式前,要把所有未使用的GPIO配置成模拟输入或预设电平,避免悬空引脚通过内部上拉电阻产生额外电流。我见过有人整机睡眠电流本该15µA,结果实测80µA,排查半天发现就是三个GPIO悬空灌入的漏电流。
5.3 “人走熄灭”的时序与体验调校
“人走熄灭”不是信号没了立刻熄灭,那样体验其实很差。至少要给人留出转身、拿东西的余量。我调试的最终参数是这样的:
- 检测到人走近:立即亮指示灯光;
- 识别成功后开门:屏幕保持常亮3分钟,方便用户看清门锁状态;
- 关门后检测到人离开:3秒后熄灭背光,7秒后关闭屏幕,10秒后关闭识别模组电源;
- 如果识别失败(比如指纹不匹配),进入短暂锁定状态,期间雷达仍然在工作,一旦人离开立刻熄灭,但锁定计时不受影响。
这套时序调完以后,很多用户反馈的“锁太省电导致操作节奏快”的问题就没有了。
6. 常见问题与排查实录:把坑提前填平
做完这个方案,也踩了不少坑。下面几个问题是实验室和现场测试中反复出现的,提前知道能省很多调试时间。
6.1 雷达被金属门板屏蔽,触发距离骤减
这是我最先遇到也是最容易忽略的问题。雷达天线辐射面必须朝向门外,且周围不能被金属包围。有些智能锁面板为了美观,内部用了整块金属支架,雷达模块塞进去以后,信号被金属反射和吸收,人在一臂距离内才能触发。
解决办法有两种:一是选外置天线或者带有延长天线的雷达模块,把天线延伸到金属支架开窗位置附近;二是调整PCB布局,将雷达放在塑胶面板区域,尽量远离金属结构。实测下来,天线边缘距离金属框架至少保持10mm,检测距离才能达到标称值。
6.2 楼道里有人路过引起的误唤醒
雷达检测范围如果调得太大,楼道里别人家出入、电梯口人员活动都会触发唤醒。这种误唤醒对功耗影响很大,因为系统一旦被唤醒,雷达要全功率工作好几秒,识别模组也要启动一轮。
解决方法是缩短检测距离和降低灵敏度。把雷达模块的增益电阻调大,同时调节比较器阈值,让2.5米以外的人不触发,只在门口附近一个扇区内触发。严格来说,微波模块是锥形波束,不存在精确的边界,必须靠阈值设定一个“经验边界”。调试时可以在最终安装环境里反复走位测试,找到合适的阈值。
6.3 静态人检测不准,人脸锁把人“跟丢”
微波多普勒雷达只能检测动态人体,如果用户站在门口不动,信号会掉。高端人脸锁如果坚持用微波,会导致识别到一半屏幕熄灭。我处理这个问题的方式是:在雷达触发之后,系统一旦进入WAKE态,就不再依赖雷达保持亮屏,而是靠人脸模组的“人脸在框内”信号来维持亮屏。雷达只负责第一级唤醒,后续维持交给识别模组自己。这样既保留低功耗唤醒,又避免静止误判。如果一定要检测静止人,就得上毫米波雷达,那是一套更高成本的设计。
6.4 电源噪声导致雷达自触发
还有一种很隐蔽的问题:LED驱动或通信模块工作时,电源纹波会通过雷达的电源引脚耦合到内部放大器,导致OUT脚持续输出高电平,系统永远醒着。排查方法是在雷达模块供电引脚加一个10µF电解电容和100nF瓷片电容并联去耦,同时让雷达模块的地线单独走线,不要与通信模块大电流回路共用。如果发现去掉通信天线后误触发消失,基本可以判断是地回路噪声的问题。
6.5 实测问题速查表
| 现象 | 可能原因 | 解决方向 |
|---|---|---|
| 人走近无反应 | 天线被金属屏蔽 | 天线移出金属遮挡区,距离金属至少10mm |
| 误触发频繁 | 灵敏度阈值过低 | 调高阈值,缩短检测距离 |
| 灯光亮起后持续不灭 | 雷达被电源噪声干扰 | 电源加电容滤波,地线分开 |
| 识别中屏幕熄灭 | 雷达无法测静止人体 | 识别期间由识别模组维持亮屏信号 |
| 睡眠电流偏高 | GPIO悬空漏电或LDO静态电流大 | 配置未用引脚,换成超低静态电流LDO |
| 安装后检测距离变短 | 面板结构或天线方向不匹配 | 旋转天线方向,重新打样开窗位置 |
7. 一些个人体会
这套低功耗雷达感应方案做下来,我最深的感触是:低功耗设计不只是一个数字游戏,而是一整套“抠细节”的习惯。从LDO的静态电流、GPIO的悬空配置,到雷达模块的摆放位置、判定状态机的时间常数,每一环都在贡献那几微安的差距。很多工程师优化睡眠电流时只看MCU的数据手册,结果实测总被漏电打脸。真正的低功耗,是硬件选型、电路布局和软件状态机三者较劲、互相验证的结果。
如果你正在做智能电子锁或者类似的电池供电唤醒设备,我建议你从这三点下手:第一,先确定你的“感应层”用什么方案,微波适合做唤醒级,毫米波适合做存在级,别混用;第二,把电源拓扑画清楚,哪些器件常供电、哪些器件必须可控断电,一张图就能看出问题;第三,给软件状态机留足“确认时间窗”,不要看到雷达触发就全系统启动,多点耐心过滤干扰。
雷达感应“人来唤醒、人走熄灭”这个方向,后续还可以继续向后延伸,比如把雷达的灵敏度策略做成自动学习:根据用户回家时间、门口活动频率动态调整检测范围和触发时间,进一步压低误触发。不过那是更后期的事了,先把基础方案吃透,比什么都强。