尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

VBAT电压范围与供电方案深度解析:从电池直连到低功耗设计

VBAT电压范围与供电方案深度解析:从电池直连到低功耗设计 1. VBAT到底是什么先把它从“玄学”里拉出来做嵌入式或者硬件设计的朋友一定见过芯片数据手册里那个叫VBAT的引脚。有些工程师做了好几年硬件对这个引脚的理解还停留在“接电池就完事”的阶段直到产品量产之后发现RTC时间老是不准、掉电之后备份寄存器里的校准数据莫名其妙丢、甚至整机静态功耗高得离谱才回过头来重新翻数据手册。说实话VBAT这个引脚看起来只是“一个接电池的电源脚”但它的电压范围、供电机制、外围电路设计水比想象中深得多。VBAT的全称是Battery Backup Supply Voltage也就是电池备份供电引脚。它在系统主电源VDD掉电或者断电的时候专门负责给芯片内部的RTC实时时钟、备份SRAM、备份寄存器以及一部分唤醒逻辑供电。换句话说这一小片电路就是设备在“睡着”甚至“断电”状态下仍然维持最低限度生命体征的地方。这个引脚的设计初衷就是为了让设备在不插外部电源的情况下凭借一颗纽扣电池或者一个超级电容继续保持时钟走时和关键数据不丢失。那为什么我说VBAT很容易让人觉得“玄学”因为很多数据手册不会把VBAT的完整电压范围用一行大字写在最显眼的位置而是分散在绝对最大额定值、建议工作条件、电气特性表格等多个章节里。如果不逐项对照看很容易忽略一个关键事实VBAT引脚能承受的电压范围通常和主电源VDD不一样而且它有一个“绝对不能超过”的界限也有一个“低于这个值数据可能丢”的警戒线。这个电压边界的理解直接决定了你的产品在用户手里是老老实实走个三五年还是经常莫名其妙出毛病。这篇文章就是把VBAT的电压范围这件事彻底讲透。我会从典型参数开始讲到不同供电方案的取舍再到低功耗监测和掉电处理最后把我在实际项目中踩过的坑和排查思路一并整理出来。无论你是刚入行的硬件新人还是被RTC闹钟折磨到没脾气的嵌入式老手这篇文章里的内容应该都能派上用场。2. VBAT电压范围的深度拆解三个关键数字要分清2.1 绝对最大额定值不是让你用的先看数据手册里最容易被误读的一个表格绝对最大额定值Absolute Maximum Ratings。这一栏里通常写VBAT的电压范围比如-0.3V到4.0V或者-0.3V到3.9V具体数值每颗芯片不一样。很多工程师看到这个范围第一反应是“哎呀那我3.6V供电没问题3.7V锂电池也可以嘛”。这个理解是错的而且可能把芯片搞报废。绝对最大额定值的准确含义是超过这个范围哪怕只超过一点点芯片的可靠性就无法保证甚至会造成永久性损坏。它不是一个工作区间而是一条“红线”。比如VBAT绝对最大额定值是4.0V你给它接一个满电的3.7V锂电池电压接近4.2V这种情况下芯片不一定立刻烧掉但长期来看会有击穿风险内部ESD保护二极管可能发生闩锁效应甚至导致IO口电流倒灌。所以在VBAT引脚上做任何设计第一原则就是绝对最大额定值只是用来确认余量的不是用来规划工作电压的。正常工作的电压一定要落在建议工作条件Recommended Operating Conditions区间内。2.2 建议工作条件才是真正的“日常区间”建议工作条件这一栏就是工程师平时最需要盯着的数字。以市面上常见的MCU为例VBAT的建议工作范围通常写在1.8V到3.6V或者1.65V到3.6V之间也有一部分低功耗芯片把下限压到了1.2V甚至1.0V。这里有一个容易踩的认知误区VBAT的下限很多时候不是看数字能不能维持RTC振荡器起振而是看备份SRAM里面的数据能不能保持住。我实测过一颗MCU数据手册上写VBAT范围是1.65V到3.6V但当我用可调电源把电压慢慢降到1.55V左右时RTC还在走但是备份寄存器里的一个标志位偶尔会被清零。这说明什么说明备份存储单元的保持电压比RTC振荡器的起振电压更苛刻。如果你只是在VBAT上挂了RTC用电压低一点可能没啥感觉但如果你的产品需要掉电之后保存校准值、加密密钥、设备唯一ID这类关键数据那VBAT的下限必须参考数据手册里“备份域数据保持”对应的电压而不仅仅是“RTC工作”的电压。设计的时候还要留出余量。我个人的习惯是如果数据手册写VBAT下限是1.65V那我设计的触发阈值不会等到1.65V才报警而是会在2.0V左右就给出低压警告。因为电池电压在负载瞬间会有一个明显的跌落尤其是时钟芯片或者RTC模块在读取数据的那一瞬间电流尖峰可达毫安级如果电压恰好卡在临界点上很容易出现数据错误。2.3 VBAT和VDD到底什么关系电源切换逻辑要知道VBAT还有一个让很多工程师困惑的点它和VDD怎么配合为什么有的芯片插上主电源之后VBAT上的电池电流就几乎为零这就要说到芯片内部的电源切换逻辑了。绝大多数MCU内部都集成了一个电源切换开关Power Switch结构类似于一个双路选择器。当VDD存在且电压高于某个阈值一般是VBAT电压或者一个固定阈值例如2.7V左右时内部开关把RTC、备份SRAM等模块切换到VDD供电当VDD掉到阈值以下或者完全断开时再切回VBAT供电。这个设计的好处很明显设备正常工作时消耗电池的电流几乎为0电池只在系统断电时放电所以纽扣电池可以用好几年。但这个内部切换逻辑也带来一个问题如果VDD和VBAT之间的电压差太小切换电路可能无法可靠判断。比如VDD标称是3.3VVBAT也是3.3V都在正常范围但主电源纹波大、跌落快切换电路可能会在临界点反复抖动导致备份域供电短暂中断。这个问题在电池供电的手持设备上尤其明显因为电池电压本身就是缓慢下降的最后可能出现VDD和VBAT几乎相等的情况。后面我会在供电方案那部分专门说怎么处理这种情况。2.4 查看数据手册时你真正要找的四个数值既然聊到这里顺便分享一个高效看数据手册的方法。很多人打开手册就去看VBAT那一行看完就关了结果漏掉一堆重要信息。做VBAT相关的设计至少要在数据手册里找到以下四个数值并记下来建议工作条件下VBAT的最小值和最大值。这是你设计电源方案的基本依据。备份域数据保持电压。这个参数可能单独列在“Battery Backup Domain”或者“低功耗模式”章节里。它才是真正的死亡线低于它数据就会丢。VBAT引脚的输入电流。包括了RTC走时电流、备份SRAM保持电流、以及在VDD存在时的漏电流。这几个数值决定你用多大容量的电池、能用多久。VDD切换到VBAT的阈值电压或者切换条件。有时候手册不直接给具体电压而是给“VDD VBAT”这类的条件描述搞清楚之后才能设计好上电时序和掉电检测电路。把这四个数值抄到你的设计笔记里VBAT相关的设计至少不会犯方向性错误。3. 供电方案设计实操从最简单的电池直连说起3.1 纽扣电池直连简单但要防倒灌现阶段最传统的做法就是拿一颗CR2032纽扣电池正极接VBAT负极接地完事。这个方案的优点不用多说电路简单、成本低、静态功耗小到可以忽略。但它有几个隐藏问题。第一个是倒灌问题。如果VBAT电池电压高于VDD而芯片内部的电源切换电路又没有完全断开电池通路那么电池电流会倒灌进VDD网络导致系统明明已经“断电”了VDD上却还有电压外设没准还能亮个灯、转个风扇。这不是芯片设计缺陷而是电源切换电路的漏电流路径导致的。解决的办法是在VBAT和电池之间加一个低压降肖特基二极管方向是电池正极指向VBAT。这样正常情况下电流从电池流向VBATVDD存在时因为VBAT电压被二极管钳位在低于VDD的电位内部切换电路自然会选择VDD供电。第二个坑是电池座的选择。CR2032电池座有贴片和插件两种贴片座在回流焊时容易因为高温导致塑料变形接触不良的情况比插件座多很多。如果你的产品需要过回流焊强烈建议选那种带定位柱的翻盖式贴片座或者干脆用插件座人工焊接。我碰到过一个批量生产的项目几百台设备里有十几台RTC不走的最后排查下来就是电池座虚焊过炉之后电池放进去电池负极接触不到弹片电压完全没进去。第三个坑是电池本身的一致性。CR2032虽然规格统一但不同厂家的放电曲线差异还挺大的。有些便宜的电池出厂电压只有3.0V左右放一段时间甚至掉到2.8V如果产品的存储周期长比如仓库里放半年才卖掉那用户拿到手的时候RTC大概率已经停了。设计上如果要兼顾成本至少要选有品牌、有批次追溯的电池并且在出厂测试时加入VBAT电压检查项目。3.2 LDO降压方案当系统里有3.3V但VBAT想要更稳如果你的主系统是锂电池供电电池电压范围在3.0V到4.2V之间那VBAT不能直接接电池必须经过一级LDO降压稳定在3.0V或者3.3V。这个方案在带蓝牙、带WiFi模块的便携设备里很常见因为系统本身就有一颗高精度LDO给主控供电顺手分一路给VBAT也不难。但这里有个细节LDO的输出如果直接给VBAT需要确认LDO在空载或者微载状态下能否稳定输出。有些LDO在负载小于几百微安时输出会有轻微的振铃或者纹波虽然不影响MCU主电源但对于RTC这种对电源噪声相对敏感、又工作在低功耗模式的模块来说反而会产生额外电流消耗。我建议选择静态电流Iq在微安级的LDO比如Torex的XC6220系列、TI的TPS7A02系列这类LDO专门为常供电场景设计轻载效率高输出稳定。还有一点LDO方案下VDD和VBAT可能都来自同一个电源轨也就是LDO输出同时给主电源和备份电源供电。这种情况下内部电源切换电路会一直选择VDD供电VBAT在正常工作状态下根本不耗电。但问题出现在系统“关机”时——如果关机只是MCU进入停机模式但LDO还在工作那VBAT电池的意义就不大了等于是用LDO的静态电流在维持备份域的供电。真正需要发挥VBAT作用的产品通常会在关机逻辑里把LDO也关掉让整机的待机电流降到只剩电池直供的那几微安。3.3 二极管隔离与RC滤波锂电池设备最常见的组合锂电池设备最常用的VBAT供电方案其实是“电池经二极管隔离之后接VBAT”。这里说的“电池”通常就是设备的主电池比如手机、蓝牙耳机、智能手表里那种锂电池。设计逻辑是先用一个肖特基二极管把锂电池正极连接到VBAT然后在VBAT引脚附近放一个大电容和对地的高阻电阻组成一个简单的RC低通滤波器。这个方案的可行之处在于锂电池的标称电压是3.7V满电4.2V经过肖特基二极管之后大约降低0.3V到0.4V也就是VBAT引脚实际得到的是3.3V到3.9V左右。如果你的芯片VBAT上限是3.6V这个方案就很危险因为满电时4.2V减去0.3V也还有3.9V超过上限了。所以这种方案对VBAT上限有要求要么芯片本身能扛到4.2V有一些工业级MCU的VBAT范围到4.0V或者4.2V要么就要把二极管的压降利用到极致甚至用两个二极管串联。RC滤波器的作用是隔离高频噪声和瞬态电压跌落。电阻选100欧姆到1K欧姆之间电容选0.1uF到1uF的陶瓷电容放在靠近VBAT引脚的位置。这个小电路成本不高但对RTC稳定性的提升很明显。我遇到过一例设备在蓝牙发射瞬间主电源电压跌落了0.2V导致VBAT也被拉低RTC秒中断偶尔被漏掉时间每个月差个十几秒。后来在VBAT前面加了一个100欧姆电阻和1uF电容问题就消失了。原因就是RTC走时对电源瞬间跌落的敏感度要比你想象的高得多。3.4 超级电容方案不需要电池也能保持数据在某些不允许使用电池的场景比如医疗设备、高温环境、或者安规要求不能有一次性电池的产品里可以用超级电容替代电池给VBAT供电。超级电容的最大优势是寿命长、不怕过放、能够在设备主电源断开后提供几分钟到几天的备份供电具体时长取决于电容容量和负载电流。计算超级电容容量的公式很简单C I × t / ΔV。其中I是备份域总电流RTC电流加漏电流t是需要的保持时间ΔV是允许的电压跌落范围。举个例子RTC电流为1.5uA希望断电后保持10个小时VBAT允许从3.3V跌到1.8V那ΔV是1.5V。C 1.5uA × 36000秒 / 1.5V 36000uF也就是36mF选一个47mF的超级电容就有余量了。这个计算过程很简单但很多人会漏掉超级电容的自放电电流自放电特性差的电容实际保持时间会大幅缩水所以选型时最好选低漏电流型号。超级电容的充电也不能直接接VDD硬充需要限流。常见做法是用一个1K欧姆左右的电阻串联充电或者用专门的充电管理芯片。充电路径如果设计不好一上电的瞬间充电电流可能达到几百毫安把电源轨拉崩。这就是为什么很多带超级电容的设备上电时MCU会莫名其妙复位或者启动失败。4. 低功耗与电压监测设计别让VBAT悄悄拖垮整机待机4.1 待机功耗的预算微安级别都要算清楚很多产品的整机待机电流要求是10uA以内甚至5uA以内。这时候VBAT路径上任何一颗电容的漏电流、任何一颗二极管的漏电流都不能视而不见。我之前调试一个低功耗产品整机待机电流一直稳在12uA怎么优化都下不去后来用万用表微安档逐个断开负载排查发现罪魁祸首是VBAT引脚上并联的一颗防静电TVS管它的反向漏电流在常温下就有5uA左右。换了一颗漏电流低于0.1uA的型号之后整机待机电流直接降到7uA。从这个案例得到的经验是VBAT路径上的元器件的漏电流指标和主电源路径一样重要。二极管要用低漏电流的肖特基TVS要选低反向漏电流的电容要选X7R或者C0G材质的X5R在额定电压下的漏电流偏大。阻容分压网络能不用就不用因为分压电阻的电流是持续消耗的哪怕1M欧姆的电阻在3V下也有3uA的电流直接干掉你30%的待机预算。4.2 电压监测在数据丢失之前把该做的动作做完VBAT电压监测不是一个可选项而是一个必选项。你永远不知道用户会在什么时候把设备扔在抽屉里半年也不知道电池会不会漏液或者接触不良。如果VBAT电压跌到数据保持阈值以下系统必须提前完成一系列“善后动作”。常用的做法有两种。第一种是用芯片内置的低电压检测器LVD/LVR比如STM32就有PVDProgrammable Voltage Detector你可以把电压阈值设成2.4V当VBAT低于2.4V时触发中断代码里立刻把关键数据写入EEPROM或者Flash。第二种是外部比较器方案用一颗微功耗比较器接VBAT分压阈值由电阻设定触发信号接到MCU的一个GPIO上。外部方案灵活度高但要额外消耗待机电流所以如果不是对精度要求特别高优先用芯片内置功能。这里有一个实操细节检测电压不要直接对VBAT引脚用ADC采样。很多MCU的VBAT引脚虽然是模拟输入可用的比如ADC_IN18但它内部电路复杂分压电阻网络的阻值很大采样时需要很长的采样时间不然读数偏得离谱。而且ADC采样会拉低VBAT电压一瞬间如果电池内阻大这个跌落会被内部RTC感知到导致瞬间走时误差。真要用ADC采也要在软件里关闭ADC通道和IO口的其他功能并且把采样时间设到最大采样完之后立刻关掉。4.3 掉电检测别让MCU死在写Flash写到一半的路上VBAT相关的掉电处理最关键的是在“VDD完全消失之前”把中断处理完。很多人设计掉电检测电路时只在MCU的VDD上做了个简单的电阻分压接ADC但因为ADC采样速度慢、软件轮询周期长从电压跌落到MCU真正反应过来可能已经过去了上百毫秒。对于写EEPROM或者Flash的操作来说这个时间远远不够。正确做法是用一个带迟滞的比较器阈值设在主电源正常值的85%左右。当VDD跌落到阈值以下比较器输出一个下降沿MCU通过外部中断引脚立刻捕捉到这个事件然后执行紧急数据保存。这里强调“带迟滞”是因为如果比较器没有迟滞电源上电和掉电过程中会产生多次抖动MCU可能会在启动过程中反复触发掉电中断造成异常。另外一个老掉牙但依然有效的技巧是在VDD和GND之间挂一个大电容比如100uF到470uF把掉电时间拉长几十毫秒给MCU争取写Flash的时间。加上这个电容之后VDD从3.3V跌到2.0V的时间可以从几毫秒延长到几十毫秒足够写入几页Flash和设置一个掉电标志。这个电容的容量选择要算假设掉电时系统负载电流是20mA要维持50毫秒的时间电容容量至少是C 20mA × 50ms / 1.3V ≈ 770uF。实际选择470uF到1000uF都合理但同时要考虑上电瞬间的浪涌电流必要时串一个0.5到1欧姆的电阻做缓启动。5. 常见问题与排查技巧实录5.1 问题速查表结合我自己的调试经历和一些朋友那边交流到的案例把VBAT相关问题整理成一个速查表方便后续直接对照排查。异常现象可能原因排查方向与解决方案RTC时间每次掉电后再开机都要重新设置VBAT电压低于RTC保持电压或者根本没供上先量VBAT引脚电压是否在建议范围内再查电池座是否有虚焊最后查RTC初始化代码是否在每次启动时都强制写时间备份寄存器数据偶尔丢失但RTC还在走VBAT电压接近保持电压下限或者电源切换瞬间抖动示波器抓VBAT上电/掉电波形提高VBAT电压增加RC滤波确认代码在临界电压下是否误写了备份寄存器整机待机电流明显偏大VBAT路径上的器件漏电或者备份域进入了异常模式逐个断开VBAT路径上的二极管、TVS、电容排查测量VBAT引脚实际流入电流是否与数据手册一致上电瞬间MCU复位多次VBAT充电电流过大或者备份域电源建立时序不对检查VBAT是否挂了超大电容在VBAT充电路径上串联限流电阻调整主电源和备份电源的上电顺序同一批次产品中部分RTC不准晶振匹配电容问题或者VBAT噪声过大检查RTC晶振的负载电容是否匹配VBAT引脚是否远离高频开关节点尝试增加滤波电容5.2 问题一RTC时间复位但硬是量不到哪个地方断这个案例我想详细说因为它花了我将近两天。一块板子RTC走时正常但每次断电重启之后时间就回到默认值。用万用表量VBAT电压有3.2V完全正常。后来用示波器钩在VBAT引脚上做了一百次上电断电实验终于在某一帧波形里看到断电瞬间VBAT电压掉到0V然后又恢复。原因是PCB走线布局问题VBAT走线经过了一段靠近板边且覆盖过孔密集的区域在生产线上波峰焊的时候有锡珠残留造成了一种“半短路”状态平时看起来正常剧烈震动或者热胀冷缩时就会瞬间短路到地。这个教训给我的启示VBAT这种直接连电池的引脚PCB布局时一定要加宽走线尽量短不要在中间打过孔换层更不要平行走很长一段过去旁边就是地平面。如果是多层板VBAT走线所在的层最好有完整的参考地平面包裹减少耦合干扰。5.3 问题二用二极管防倒灌结果把自己坑了前面说过防倒灌的办法是加二极管。但二极管的位置如果放错了后果很严重。我见过一个设计工程师把二极管放在了VBAT和芯片内部电源切换电路之间的主供电路径上也就是二极管的阴极接到了VDD上。这个设计本意是想用二极管做VDD和VBAT的自动切换结果因为二极管压降MCU的VDD电压比预期低了0.3V外部Flash在低频时写入不稳定数据偶尔损坏。排查了很久最后发现就是这一颗二极管造成的压降。正确的做法是二极管只在电池到VBAT的路径上防倒灌不是放在VDD到备份域的路径上。VDD和VBAT之间的切换完全交给芯片内部的电源切换逻辑不要尝试用离散器件去模拟。你唯一需要确保的是VBAT在正常工作状态下不被VDD反向充电以及VDD掉电时电池能可靠顶上来。5.4 问题三低温环境下RTC停了回到室温又恢复还有一个很典型的问题带出去做低温测试-20℃设备的RTC停了拿回常温环境又恢复正常。这个现象很多人第一反应是晶振不起振但实际上大概率是电池在低温下电压跌落导致的。纽扣电池在低温下的放电能力会明显下降实际输出电压也会比常温时低0.2V到0.5V。如果你的VBAT电压本来就在2.8V这种偏低水平低温下一掉可能就跌破芯片的复位阈值RTC自然就停了。这类问题的检查思路很简单把VBAT的电压抬高一点比如把电池经过一个微功耗升压电路稳定在3.3V或者选用低温性能更好的电池型号。另外在软件上可以加一个机制每次系统上电时检查RTC是否还在走如果发现时间无效可以读取RTC的“电源复位标志”来决定是恢复出厂默认时间还是从另一个非易失存储区读取最近一次的有效时间。实际上很多产品这么处理后即使RTC真停了用户体验的损失也小很多。6. 最后的实际建议VBAT的工作电压范围看起来只是数据手册里一个不起眼的参数但它串联起了电池选型、电源切换、低功耗设计、数据保护、异常处理等多个环节。我见过不少项目前期没有认真对待VBAT的设计到了量产阶段才被RTC问题折腾得焦头烂额。返工换电池座、加电容、改软件每一件事都比一开始多花几倍的成本。在实际操作中我个人的体会是第一次画板子时就把VBAT周围的电路当作一个独立的小电源域来设计明确它的工作电压区间、最低告警阈值、掉电处理流程不要想着“反正有个引脚接上就完事了”。电池座选型、二极管漏电流、电容材质、走线宽度每一个细节都值得花十分钟确认一下。另外出厂测试里一定加一项VBAT电压检查哪怕只是产测程序里读一下ADC都能拦截掉很大一部分工艺不良和电池漏液问题。最后再分享一个小技巧很多MCU的VBAT引脚附近设计上默认会有一个几百K欧姆的内部下拉电阻或者一些内部结构所以如果你量到VBAT电压偏低先不要怀疑芯片坏了拿数据手册对照一下芯片在“无电池”状态下的典型漏电流和引脚特性。如果你选了一颗VBAT引脚自带内部电阻的芯片外部又挂了一颗大电容充电时间会变得很长上电瞬间MCU可能已经把备份域初始化过一遍了但你设置的校准数据还没来得及写入。这个坑我记得特别深因为那次排查花了一个下午最后发现是芯片手册第94页的一行小字说明的事。
返回列表