资讯动态

基于PCA9422与PIC18LF45K40的便携设备电源管理方案

发布时间:2026/10/24 6:06:49 来源:尧图企业网站定制
1. 项目缘起与整体设计思路便携式设备做多了你会发现一个规律真正让人头疼的往往不是主控跑不跑得动算法而是电源那一摊子事。锂电池电压从4.2V掉到3.0V的过程中MCU、传感器、显示屏、无线模块各自要的电压都不一样还得考虑充电管理、电量计、低功耗休眠唤醒。我手上这个项目就是一个典型的低功耗数据采集终端主控选了PIC18LF45K40电源管理芯片用了PCA9422两颗芯片搭在一起做一套完整的电源管理方案。先说清楚这套组合是干什么的。PCA9422是NXP的一款高度集成的电源管理IC内部集成了线性充电器、多个可配置的LDO输出、I2C接口控制、以及看门狗和复位功能。PIC18LF45K40是Microchip的一款低功耗8位MCU自带I2C外设、多个定时器和比较器工作电压范围宽休眠电流极低。把这两颗芯片组合起来能实现从锂电池充电、多路电压输出、到MCU低功耗调度的一整套电源管理闭环。这套方案适合谁参考如果你正在做便携式仪器、无线传感器节点、手持数据记录仪这类产品需要锂电池供电、多路电压域、并且对静态功耗有要求那这个组合值得仔细看看。它不追求极致性能但胜在集成度高、外围元件少、软件可控性强对于中小批量产品来说BOM成本和开发周期都比较友好。为什么选这个组合而不是分立方案分立方案用充电IC加若干LDO也能实现但元件数量多、PCB面积大、各路使能时序需要额外逻辑控制。PCA9422把这些都集成到一颗芯片里通过I2C总线就能动态调整输出电压和开关各路电源MCU可以根据工作状态实时切换功耗模式。这种灵活性在分立方案里需要大量GPIO和外部电路才能实现而在这里只需要几条I2C命令。整体设计思路是这样的锂电池接入PCA9422的充电输入端PCA9422负责充电管理和电量监测其LDO输出分别供给MCU、传感器和无线模块PIC18LF45K40通过I2C总线配置PCA9422的工作参数并根据系统状态动态调整各路输出的开关和电压MCU自身利用休眠模式和外部中断实现低功耗调度。整个系统的功耗管理策略由MCU固件统一调度PCA9422作为执行单元。这个架构的核心优势在于“软件定义电源”。传统方案里电源输出的电压和开关状态在硬件设计阶段就固定了后期想改就得动PCB。而PCA9422的LDO输出电压可以通过I2C寄存器动态调整开关也可以软件控制。这意味着同一套硬件可以适配不同的传感器组合和工作模式产品迭代时只需要改固件不用重新投板。对于需求经常变动的项目来说这个特性省下的时间和成本相当可观。2. PCA9422与PIC18LF45K40核心特性解析2.1 PCA9422的关键能力与引脚配置PCA9422的封装很小QFN244mm×4mm但内部集成的功能相当丰富。它支持最高1A的线性充电电流充电电压可配置为4.2V、4.35V、4.4V等锂电池标准截止电压。充电过程分为预充、恒流、恒压三个阶段每个阶段的电流和阈值都可以通过I2C寄存器调整。芯片内部有温度监测充电时如果结温超过设定值会自动降低充电电流这个功能在紧凑型产品里非常实用因为充电时芯片发热是难免的没有温度调节的话容易触发过热保护导致充电中断。LDO部分PCA9422提供了多路输出。以我用的这颗为例它有Buck和LDO混合输出其中Buck输出可以到1.2ALDO输出有若干路每路最大电流在200mA到400mA之间。输出电压通过I2C寄存器配置步进通常是25mV或50mV具体看型号。这个步进精度对于大多数数字电路和模拟传感器来说足够了。每路输出都可以独立使能或关闭关闭时静态电流极低适合给不常工作的外设供电。I2C接口是PCA9422的控制核心。它支持标准模式100kHz和快速模式400kHz地址可以通过ADDR引脚配置避免总线上多个器件地址冲突。寄存器映射比较规整大致分为充电控制区、LDO配置区、中断状态区、系统控制区。中断引脚可以上报充电完成、过温、过流、欠压等事件MCU通过中断引脚响应这些事件不需要轮询进一步降低功耗。引脚配置上有几个地方需要特别注意。充电电流设定引脚ISET外接电阻决定恒流充电电流大小计算公式在数据手册里有一般是I_CHG K / R_ISETK值由芯片内部基准决定。这个电阻要用精度1%的否则充电电流偏差会比较大。输入电容和输出电容的选型也很关键PCA9422对输出电容的ESR有要求用错了可能导致环路不稳定输出振荡。我一般用X5R或X7R材质的陶瓷电容ESR低且温度特性稳定。2.2 PIC18LF45K40的低功耗特性与I2C外设PIC18LF45K40是Microchip的PIC18系列里比较新的一款带XLP超低功耗技术。它的工作电压范围是1.8V到5.5V这意味着它可以直接由PCA9422的LDO输出供电不需要额外的电平转换。休眠电流在典型条件下可以低到几十纳安级别看门狗定时器运行时的电流也只有几百纳安。这个功耗水平对于电池供电设备来说非常关键因为设备大部分时间在休眠休眠电流直接决定了待机时间。它的I2C外设支持主模式和从模式作为主模式时可以直接驱动PCA9422。I2C的时钟频率可以配置标准100kHz和快速400kHz都支持。在低功耗场景下我一般用100kHz因为速率对配置寄存器来说够用了而且速率低意味着总线上的动态功耗更小。I2C引脚有内部弱上拉但为了信号完整性外部还是建议加上拉电阻典型值4.7kΩ到10kΩ具体看总线电容。PIC18LF45K40还有一个比较实用的功能是外设引脚选择PPS可以把I2C、UART、定时器等外设映射到不同的物理引脚上。这在PCB布线时非常方便不用为了外设功能去调整引脚分配而是根据布线需要把外设映射过去。我在这个项目里就把I2C映射到了靠近PCA9422的引脚上缩短了走线长度减少了干扰。MCU的休眠模式有几种普通休眠、深度休眠、超低功耗休眠。超低功耗休眠下大部分外设关闭只有少数几个唤醒源有效比如外部中断、看门狗超时、RTCC闹钟。在这个项目里我让MCU大部分时间处于超低功耗休眠PCA9422的中断引脚接到MCU的外部中断唤醒引脚上。当充电状态变化或者有按键按下时PCA9422拉低中断引脚MCU被唤醒通过I2C读取PCA9422的状态寄存器判断事件类型并做出响应。2.3 两颗芯片的协同工作机制PCA9422和PIC18LF45K40之间的协同核心是“MCU做主PMIC做从”。MCU掌握系统的整体状态知道当前该给哪些外设供电、该输出什么电压PCA9422负责执行MCU下发的配置同时把电源相关的状态反馈给MCU。这种主从关系通过I2C总线实现MCU是I2C主机PCA9422是从机。具体的工作流程是这样的系统上电后PCA9422先输出默认电压由硬件引脚配置的默认值决定MCU开始运行初始化I2C外设然后读取PCA9422的器件ID和状态寄存器确认通信正常。接着MCU根据当前的工作模式通过I2C配置各路LDO的输出电压和使能状态。比如在采集模式下传感器LDO使能并输出3.3V在休眠模式下传感器LDO关闭只保留MCU自身的供电。中断机制是协同工作的关键。PCA9422的中断引脚是开漏输出需要外部上拉。当充电完成、输入电压跌落、过温等事件发生时中断引脚拉低MCU的外部中断被触发从休眠中唤醒。MCU唤醒后先读取PCA9422的中断状态寄存器判断是哪个事件然后执行相应的处理。处理完后清除中断标志PCA9422释放中断引脚MCU重新进入休眠。整个过程MCU的活跃时间很短大部分时间都在休眠平均功耗很低。这里有一个细节需要注意PCA9422的中断是电平触发还是脉冲触发取决于寄存器配置。我一般配置成电平触发因为脉冲触发在MCU唤醒延迟较大的情况下可能丢失。电平触发的话MCU处理完事件后必须通过I2C清除中断源否则中断引脚会一直保持低电平MCU无法再次休眠。这个清除操作不能忘我在调试初期就因为忘了清除中断标志导致MCU反复唤醒功耗一直降不下来。3. 硬件设计与实操要点3.1 原理图设计与关键元件选型原理图设计阶段PCA9422的外围电路有几个关键点。充电输入部分VBUS和GND之间要加一个1μF到4.7μF的陶瓷电容靠近芯片引脚放置。这个电容的作用是滤除输入端的瞬态波动特别是在热插拔适配器的时候没有这个电容输入电压的振铃可能超过芯片的绝对最大额定值。充电电流设定电阻R_ISET要选1%精度的温度系数低的薄膜电阻放在靠近ISET引脚的位置走线尽量短避免引入噪声。LDO输出部分每路输出都要加输出电容。数据手册推荐的值一般是1μF到4.7μF具体看输出电流和瞬态响应要求。我一般用2.2μF的X5R陶瓷电容体积小、ESR低。输出电容的位置要靠近负载而不是靠近PCA9422这样负载端的瞬态响应更好。如果负载是动态变化的比如无线模块发射时电流突变输出电容不够的话电压会跌落可能导致模块复位。这种情况下可以适当加大输出电容或者在负载端再加一个小电容。I2C总线的上拉电阻我用了4.7kΩ。这个值在100kHz速率下配合总线电容一般PCB走线加引脚电容在50pF到200pF之间上升沿时间大约在1μs左右满足I2C规范要求。如果总线电容更大比如走线很长或者挂了多个从机上拉电阻要相应减小但最小不能低于1kΩ否则灌电流太大从机可能拉不低。这个需要根据实际布线情况用示波器看一下波形再定。电池连接部分BAT引脚和GND之间要加一个10μF的电容用于稳定电池电压和提供瞬态电流。电池温度检测引脚NTC如果不用的话要接一个固定电阻到GND模拟一个常温状态否则芯片可能认为电池温度异常而拒绝充电。这个细节容易忽略我在第一版板子上就忘了接NTC模拟电阻结果插上电池后充电指示灯不亮查了半天才发现是温度检测引脚悬空导致的。3.2 PCB布局与走线注意事项PCB布局对电源管理电路的性能影响很大尤其是开关电源部分。PCA9422内部有Buck转换器开关节点SW的走线要尽量短、尽量粗减少寄生电感和电阻。SW节点是高频开关信号走线长了会辐射噪声干扰旁边的模拟电路。我一般把电感和输出电容放在SW引脚旁边形成最小的环路面积。电感选型上饱和电流要大于最大负载电流的1.5倍直流电阻要小减少导通损耗。接地处理是另一个重点。PCA9422的GND引脚和MCU的GND引脚要接到同一个地平面但模拟地和数字地要分开走最后在芯片下方单点连接。充电电流和Buck开关电流都比较大这些大电流路径的地线要单独走不要和MCU的模拟地混在一起。我在布局时把PCA9422放在板子的一侧MCU放在另一侧中间用地平面隔开大电流路径远离MCU的晶振和模拟输入引脚。I2C走线要尽量短并且远离SW节点和电感。如果实在避不开可以在I2C走线两侧包地减少耦合。上拉电阻放在MCU端还是PCA9422端我一般放在MCU端因为MCU是主机上拉电阻靠近主机端可以让从机看到的上升沿更干净。走线宽度上I2C信号线不需要很粗常规的6mil到8mil就够了但如果是长距离走线可以适当加粗减少电阻。散热方面PCA9422在充电电流较大时会发热QFN封装底部的散热焊盘必须焊接到PCB的铜皮上并且铜皮上要打足够的过孔连接到内部地平面帮助散热。我一般会在散热焊盘下方打9个过孔孔径0.3mm间距1mm这样热阻比较低。如果充电电流超过500mA铜皮面积要尽量大必要时可以在PCB背面也铺铜通过过孔连接。3.3 上电时序与默认输出配置PCA9422上电后各路输出的默认状态由硬件引脚配置决定。有些型号有配置引脚通过上下拉电阻设定默认输出电压和使能状态有些型号的默认值固化在内部OTP里。我用的这颗是通过引脚配置的具体引脚定义看数据手册。上电时VBUS或BAT有电后PCA9422内部逻辑启动按照引脚配置输出默认电压。MCU的供电LDO必须默认使能否则MCU无法启动整个系统就死机了。MCU启动后第一件事是通过I2C读取PCA9422的状态寄存器确认各路输出的实际状态。然后根据系统需求重新配置。这里有一个顺序问题如果MCU的供电LDO和传感器的供电LDO是同一路那MCU启动后不能关闭这一路否则自己就断电了。所以设计时要把MCU的供电单独放在一路LDO上其他外设放在另外的LDO上这样MCU可以自由控制外设电源而不影响自己。上电时序还有一个细节如果MCU的供电电压和I2C总线的上拉电压不一致比如MCU用1.8V供电但I2C上拉到3.3V那MCU的I2C引脚可能承受不了3.3V。PIC18LF45K40的I/O引脚耐压是VDD0.3V如果VDD是1.8V那3.3V的上拉就超规格了。这种情况下要么把I2C上拉到1.8V要么加电平转换。我一般让MCU和PCA9422的I2C供电在同一电压域避免这个问题。4. 固件实现与功耗调度策略4.1 I2C通信层与PCA9422寄存器操作固件的第一层是I2C通信。PIC18LF45K40的I2C外设用起来比较直接配置好时钟频率、使能外设然后就可以收发数据了。PCA9422的I2C从机地址是7位的具体值看数据手册一般是0x60左右ADDR引脚可以改变最低位。写寄存器时先发从机地址加写标志然后发寄存器地址再发数据。读寄存器时先发从机地址加写标志发寄存器地址然后重启发从机地址加读标志读取数据。我封装了几个基本函数PCA9422_WriteReg、PCA9422_ReadReg、PCA9422_UpdateBits。UpdateBits用于修改寄存器中的某几位而不影响其他位因为PCA9422的很多寄存器是位域定义的直接写整个字节可能会误改其他配置。UpdateBits的实现是先读回原值用掩码清除要改的位再或上新的值最后写回。这个函数在配置LDO电压和使能位时特别有用。I2C通信的可靠性需要一些保护措施。我在每次读写后检查ACK状态如果从机没有应答重试三次三次都失败就报错。PCA9422在休眠时I2C接口仍然工作所以MCU随时可以访问它。但如果PCA9422处于关断模式I2C可能不响应这时候需要先唤醒它。唤醒方式看具体配置一般是通过使能引脚或者I2C的特定命令。寄存器配置的顺序也有讲究。配置LDO输出电压时要先关闭该路LDO改电压再打开。如果LDO在使能状态下直接改电压输出可能会有毛刺导致负载复位。我在调试时就遇到过这个问题传感器LDO在使能状态下改电压传感器直接死机了后来改成先关再开问题解决。这个顺序在数据手册里可能没有明确写但是实际调试中发现的。4.2 充电管理与状态监测实现充电管理这部分PCA9422硬件上已经做了大部分工作MCU要做的是配置充电参数和监测充电状态。充电电流通过I2C寄存器配置有多个档位可选。我一般根据电池容量来设充电电流设为0.5C左右比如1000mAh的电池充电电流设500mA。设太大电池发热严重设太小充电时间太长。充电截止电压根据电池类型设标准锂离子电池是4.2V高压电池是4.35V或4.4V这个不能设错否则电池可能过充。充电状态监测通过读取PCA9422的状态寄存器实现。状态寄存器里有充电进行中、充电完成、预充中、故障等标志位。MCU定期读取这些标志判断充电阶段。如果检测到故障标志比如过温或超时MCU可以采取相应措施比如降低充电电流或者停止充电。PCA9422的中断引脚也可以配置成充电状态变化时触发这样MCU不用轮询进一步降低功耗。电量计这块PCA9422本身没有库仑计功能只能通过读取电池电压来估算电量。对于精度要求不高的应用电压法够用了。MCU通过PCA9422的ADC读取电池电压然后查表或者用公式换算成电量百分比。锂电池的电压和电量关系不是线性的3.7V大概对应50%电量4.2V是100%3.3V以下就快没电了。我一般做一个分段线性的查找表精度比单段线性好一些。充电时的系统行为也需要考虑。如果设备在充电时还要工作那充电电流和系统负载电流会叠加PCA9422的输入电流可能超过适配器的能力。这种情况下要配置输入电流限制让PCA9422优先保证系统供电剩余电流才用于充电。这个输入电流限制寄存器在PCA9422里是有的配置成适配器额定电流的80%左右比较安全。4.3 低功耗模式调度与唤醒源管理低功耗调度是这个项目的核心。PIC18LF45K40的休眠模式配合PCA9422的中断输出可以实现很低的平均功耗。我的策略是这样的系统大部分时间处于休眠MCU关闭不必要的外设PCA9422关闭不用的LDO输出。只有RTC定时器在运行定时唤醒MCU进行数据采集。采集完成后MCU处理数据如果需要无线发送就打开无线模块的LDO发送完再关闭然后重新进入休眠。唤醒源有几个RTC定时唤醒、PCA9422中断唤醒、外部按键唤醒。RTC定时唤醒用于周期性采集比如每10分钟采集一次。PCA9422中断唤醒用于充电状态变化、输入电压跌落等事件。外部按键唤醒用于用户交互。这些唤醒源在休眠前都要配置好确保需要的时候能唤醒不需要的时候不会误唤醒。休眠前的准备工作很关键。首先要确保所有正在进行的I2C通信已经完成否则休眠后I2C总线可能处于不确定状态。然后要配置PCA9422进入低功耗模式关闭不用的LDO降低静态电流。最后配置MCU的休眠模式使能需要的唤醒源执行SLEEP指令。这一套流程要按顺序来顺序错了可能导致休眠失败或者功耗偏高。唤醒后的处理也有讲究。MCU被唤醒后首先要判断唤醒源然后读取PCA9422的状态寄存器确认电源状态是否正常。如果是因为输入电压跌落唤醒的要尽快保存重要数据然后决定是继续运行还是进入低电量模式。如果是因为充电完成唤醒的可以更新显示或者记录充电事件。处理完事件后清除中断标志重新配置休眠再次进入低功耗状态。实测下来这套调度策略下系统在休眠时的电流可以做到50μA左右其中MCU休眠电流约1μAPCA9422静态电流约40μA剩下的是LDO的静态电流和漏电流。这个功耗水平对于电池容量1000mAh的设备来说理论待机时间可以到两年以上实际因为电池自放电和电路漏电大概能到一年左右。对于大多数应用场景来说这个待机时间已经足够了。5. 常见问题与排查技巧实录5.1 充电异常问题排查充电相关的问题在调试中出现频率最高。最常见的是插上适配器后充电指示灯不亮或者充电电流远小于设定值。排查思路是这样的先用万用表测VBUS引脚的电压确认适配器电压正常到达芯片。然后测BAT引脚电压如果BAT电压接近0V可能是电池没接好或者电池过放保护了。如果BAT电压正常但充电电流很小检查ISET电阻是否焊错或者虚焊这个电阻决定充电电流阻值不对充电电流就不对。另一个常见问题是充电时芯片发热严重。线性充电器在输入电压和电池电压差较大时多余的功率全部变成热量。比如输入5V电池3.7V充电电流500mA那芯片上的功耗就是(5-3.7)×0.50.65WQFN24封装的热阻大概40°C/W温升就是26°C加上环境温度芯片结温可能到60°C以上。如果输入电压更高比如9V那功耗就是(9-3.7)×0.52.65W温升超过100°C芯片肯定会过热保护。这种情况下要么降低充电电流要么用开关充电器线性充电器不适合大压差大电流的场景。充电状态寄存器读不到正确值可能是I2C通信有问题。先用示波器看I2C波形确认时钟和数据线的电平是否正常上升沿是否太慢。如果上升沿太慢减小上拉电阻试试。如果波形正常但读不到数据检查从机地址是否正确PCA9422的地址可能和手册上写的不一样具体看ADDR引脚的接法。还有一点PCA9422的寄存器地址是7位的还是8位的不同厂商的定义方式不同这个要仔细看手册。5.2 I2C通信故障排查I2C通信故障的表现形式很多读不到数据、数据错误、通信时好时坏。排查时先用示波器看SCL和SDA的波形确认时钟频率是否正确数据建立时间和保持时间是否满足要求。如果时钟频率偏差太大检查MCU的I2C时钟配置寄存器计算一下实际频率和理论值是否一致。PIC18LF45K40的I2C时钟由系统时钟分频得到分频系数设错了频率就不对。数据错误可能是总线电容太大导致上升沿变缓或者上拉电阻太大导致驱动能力不足。用示波器测量上升沿时间如果超过I2C规范要求的值100kHz速率下是1000ns就要减小上拉电阻或者减小总线电容。总线电容包括PCB走线电容、引脚电容和器件输入电容走线越长电容越大。如果总线上挂了多个从机每个从机的引脚电容都会累加这时候上拉电阻要相应减小。通信时好时坏可能是电源噪声导致的。PCA9422的Buck开关噪声可能耦合到I2C线上导致误码。这种情况下可以在I2C线靠近MCU端加小电容滤波比如100pF但电容不能太大否则上升沿会变缓。另外I2C走线要远离电感和SW节点如果实在避不开中间加地线隔离。我在一个项目里就遇到过Buck噪声干扰I2C的问题后来把I2C走线改到板子另一层中间隔了地平面问题就解决了。5.3 功耗偏高问题排查功耗偏高是低功耗设备的大敌。排查功耗问题首先要分段测量。把MCU的供电和PCA9422的供电分开测看哪部分电流大。如果MCU休眠电流大检查是否有引脚悬空或者配置成了输出高电平驱动了外部电路。PIC18LF45K40的未使用引脚建议配置成输出低或者输入带上拉不要悬空悬空引脚可能因为输入级振荡而增加功耗。PCA9422的静态电流如果偏大检查是否有LDO没关闭。PCA9422的每路LDO都有使能位不用的LDO一定要在固件里关闭。另外PCA9422的I2C接口在休眠时如果总线上有活动也可能增加功耗。如果MCU休眠了但I2C总线上拉电阻还在耗电那部分电流也要算进去。上拉电阻在总线空闲时会有电流流过4.7kΩ上拉到3.3V电流约0.7mA这个电流在低功耗场景下相当可观。如果系统对功耗要求极高可以考虑在休眠时断开上拉电阻的供电或者用更大的上拉电阻。还有一个容易被忽略的功耗来源是LDO的静态电流。PCA9422的每路LDO即使不接负载自身也有静态电流一般在几十微安。如果多路LDO都使能静态电流累加起来就大了。所以不用的LDO一定要关闭只保留必须的。我在一个项目里一开始没注意这个四路LDO全开着静态电流加起来200多微安后来关掉不用的两路电流直接降到80微安。5.4 常见问题速查表问题现象可能原因排查方法解决措施充电指示灯不亮电池未接好、NTC悬空、ISET电阻错误测BAT电压、检查NTC模拟电阻、测ISET电阻值接好电池、加NTC模拟电阻、更换正确阻值充电电流偏小ISET电阻偏大、输入电流限制设置过低测ISET电阻、读输入限流寄存器更换ISET电阻、调高输入限流值芯片发热严重输入输出压差大、充电电流大测输入电压和电池电压、算功耗降低充电电流、改用开关充电方案I2C读不到数据地址错误、上拉电阻缺失、总线电容大示波器看波形、确认地址修正地址、加上拉电阻、减小总线电容I2C数据错误噪声干扰、上升沿太慢看波形、测上升沿时间远离噪声源、减小上拉电阻休眠电流偏大引脚悬空、LDO未关、上拉电阻耗电分段测电流、检查寄存器配置配置引脚状态、关闭不用LDO、增大上拉电阻唤醒后死机中断未清除、电源不稳读中断状态寄存器、测电源电压清除中断标志、加输出电容充电状态误报温度检测异常、寄存器配置错误读温度寄存器、检查配置修正NTC电路、重新配置寄存器这个表格里的问题都是我实际调试中遇到过的有些问题花了不少时间才定位到。比如NTC悬空导致不充电这个问题一开始没想到是温度检测的原因后来用示波器看充电使能信号发现芯片根本没启动充电才去查温度检测引脚。所以调试电源管理电路一定要把芯片的每个功能引脚都检查一遍不能想当然。6. 实测数据与优化经验分享6.1 功耗实测数据与对比我在实验室里用高精度电流表测了这套方案的功耗数据如下MCU在超低功耗休眠模式下电流约0.8μAPCA9422在仅保留MCU供电LDO使能的情况下静态电流约35μA传感器LDO关闭时漏电流小于1μA整个系统在休眠状态下的总电流约40μA。这个数据是在室温25°C下测的电压为电池标称3.7V。作为对比我之前用分立方案做的类似项目休眠电流在150μA左右主要差距在LDO的静态电流和MCU的休眠电流上。分立方案用的LDO静态电流普遍在50μA以上而且没有动态关闭功能不用的外设电源也一直开着。PCA9422的LDO静态电流更低而且可以软件关闭这是功耗降低的主要原因。工作状态下的功耗取决于具体任务。数据采集时MCU运行在16MHz电流约3mA传感器工作时电流约5mA无线模块发射时电流约30mA但发射时间很短占空比很低。平均下来如果每10分钟采集一次每次采集加处理加发射总共耗时2秒那平均电流就是(40μA×598s 38mA×2s)/600s ≈ 166μA。这个平均电流下1000mAh的电池可以工作约250天接近8个月。6.2 充电效率与温升实测充电效率方面线性充电器的效率等于电池电压除以输入电压。输入5V电池3.7V时效率约74%剩下的26%变成热量。充电电流500mA时芯片功耗约0.65W实测芯片表面温升约25°C环境温度25°C时芯片表面温度约50°C手摸上去有点烫但不会烫伤。如果充电电流加到800mA功耗约1.04W温升约40°C芯片表面温度到65°C这时候就有点危险了长时间充电可能触发过热保护。充电时间方面1000mAh电池从3.0V充到4.2V充电电流500mA理论时间约2小时。实测下来预充阶段约10分钟恒流阶段约1.5小时恒压阶段约40分钟总共约2小时20分钟。恒压阶段时间比较长是因为电流逐渐减小最后阶段电流很小但为了充满必须等。如果对充电时间要求高可以适当提高恒流充电电流但要注意温升。6.3 优化经验与实用技巧第一个优化经验是关于LDO配置的。PCA9422的LDO输出电压步进是25mV配置时尽量选标准电压值比如3.3V、2.8V、1.8V这些值对应的寄存器代码是整数写起来方便而且精度也够。如果设一个非标准值比如3.15V虽然也能设但没必要标准值对大多数器件都兼容。第二个经验是关于I2C通信的。PCA9422的寄存器比较多配置时最好做一个配置表把每个寄存器的地址、默认值、配置值都列出来写固件时照着表来不容易出错。我在项目里用了一个结构体数组来存配置初始化时遍历数组批量写入代码简洁而且不容易漏配。这个做法在寄存器多的芯片上特别有用。第三个经验是关于休眠唤醒的。MCU从休眠唤醒后I2C外设需要重新初始化因为休眠时外设时钟可能停了。我一开始没重新初始化I2C唤醒后直接读PCA9422结果读不到数据后来加了I2C重新初始化的代码就好了。这个细节在数据手册里可能没有明确写但是实际调试中发现的分享出来让大家少走弯路。第四个经验是关于PCB布局的。PCA9422的散热焊盘一定要打好过孔我第一版板子过孔打少了充电时芯片温度明显偏高后来改成9个过孔温度降了差不多10°C。另外电感的选择也很重要饱和电流要留足余量我一开始选了个饱和电流刚好等于最大负载电流的电感结果负载突变时电感饱和输出电压跌落后来换了饱和电流大50%的电感问题解决。最后分享一个调试小技巧在PCA9422的I2C总线上挂一个逻辑分析仪可以实时看到MCU和PCA9422之间的通信数据配置寄存器的时候特别有用。逻辑分析仪可以解码I2C协议直接显示寄存器地址和数据比用示波器看波形再手动解码方便多了。这个工具在调试电源管理芯片时能省很多时间强烈推荐。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑