news 2026/10/24 3:30:07

低功耗电池设备电源管理:PMIC+MCU协同方案实战解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
低功耗电池设备电源管理:PMIC+MCU协同方案实战解析

搞电池供电的小型设备好几年了,每次看到那种“充电没问题但是待机一夜掉电一半”的板子都有点头大。电源管理这东西,表面看就是一颗稳压芯片的事,真正做起来却是一个涉及充电路径、输出电压、系统状态监控、睡眠策略的完整工程。最近把手上一套基于 PCA9422 这颗 PMIC 和 PIC18LF4685 这颗低功耗 MCU 的方案梳理了一遍,从硬件设计到固件配置都踩过一遍坑,把能直接复用的思路和操作细节整理出来,给正在做低功耗物联网设备、便携仪器或者电池供电控制板的朋友一个参考。

这套方案解决的痛点是典型的:单靠 MCU 自己管电源,睡眠时外设漏电流无法隔离,充电逻辑得自己软件搭,同时做电压检测还占 CPU 口线;单靠 PMIC 又比较傻,只能按固定策略工作,没法根据系统负载动态调压,也没法做复杂的低功耗唤醒与电量估算。PCA9422 负责把输入电源和电池功率管好,PIC18LF4685 负责做“决策大脑”,两者通过 I2C 对话,就组成了一套既可以灵活控制又足够省电的完整电源管理系统。

1. 方案整体拆解:电源管理为什么要拆成“前端器件+控制芯片”

1.1 电源管理的三层需求

很多人觉得电源管理就是把电池电压当成稳定电源给单片机供电就完事了,实际上一个完整的电池设备电源系统至少包含三层。

第一层是功率转换与路径管理,也就是把各种来源的电压变成系统需要的稳定电压。来源可能有 USB 5V 输入的适配器电源,也有单节锂电池的 3.7V 到 4.2V 动态电压,系统负载在运行时需要 3.3V 甚至更高的电压,在休眠时又希望把电压调到最低来减少漏电。这些转换和切换的工作如果全让 MCU 用开关管和分立元件搭,调试量非常大,直接用专业的 PMIC 是最省事的。

第二层是状态监控,包括电池电压、充电电流、系统电流、芯片温度这些信息。这些数据是电源管理策略的基础,不知道电池剩多少电、不知道系统当前功耗多大,低功耗调度就是盲调。

第三层是策略控制,也就是根据不同的运行状态选择不同的供电模式:运行、空闲、休眠、关机,以及充电的 CC/CV 阶段切换,还有充电完成后的自动截止。

三层需求分层越清楚,方案越好做。PCA9422 把第一层绝大部分和第三层的底层保护做掉了,PIC18LF4685 负责采集第二层数据、执行第三层的高级策略。

1.2 为什么选择 PMIC+MCU 的组合

之前也做过只用 MCU + 几颗分立 LDO 的极简方案,后来发现几个问题不好解决:一是充电电路用分立元件搭建时需要精确的恒流恒压控制,温漂和器件一致性很头疼;二是系统里不同外设需要不同电压,用 LDO 扩展电压域效率太低,压差一大就发热;三是睡眠电流管控,MCU 睡眠可以做到微安级,但板上其他器件的静态电流完全失控。

换成 PMIC+MCU 组合的思路后,PMIC 用集成的开关转换器提供高效率,用集成的充电管理保证电池安全,MCU 则集中精力做状态采集与动态策略,两边各干各擅长的事。这套架构还有一个隐形好处:后续换物料时,只要 I2C 寄存器兼容,PMIC 可以直接替换,MCU 侧固件几乎不用动。

2. 两颗芯片的定位与选型逻辑

2.1 PCA9422 这颗 PMIC 能做什么

PCA9422 是一颗带 I2C 接口的电源管理芯片,整合了输入电源路径管理、单节锂电池充电管理、降压/升压转换器和系统状态监控。接上它的数据手册可以列出一串功能:支持涓流/恒流/恒压三段充电,充电截止电流可配置;系统输出支持动态电压调节,也就是可以在运行中通过 I2C 改变输出电压;还带过压、过流、过温保护,内部有状态寄存器可以查询工作模式与故障原因。

我在这个项目里最看重的两点:一是支持动态电压调节(DVS),CPU 跑高主频时输出 3.3V,进入待机时通过 I2C 把输出降下来,配合负载开关能显著降低漏电;二是充电路径管理,外部适配器接入时优先外部供电,同时给电池充电,拔出后自动切换电池供电路径,整个过程硬件层面完成,不要 MCU 干预。

PCA9422 内部还集成了专门的电源状态机,包括“无输入时芯片自身极低功耗静置”的模式,这在设备长期挂机、偶尔唤醒上报的场景里特别关键。它本身不是大功率芯片,适合系统峰值电流在几百毫安到一安培级别的设备,我这次的项目峰值负载约 800mA,选它合适。

2.2 PIC18LF4685 在系统中承担的角色

PIC18LF4685 是一颗工作电压范围较宽的低功耗 8 位 MCU,LF 后缀代表低压版本,最低可以到 2.0V 左右运行,这对电池供电很关键。它内部集成多个 ADC 通道、MSSP 外设能做 I2C 主机,还有比较器、定时器以及多种低功耗模式。

在电源管理方案里,它做了几件事:

  • 作为 I2C 主机,读写 PCA9422 的配置寄存器和状态寄存器;
  • 用 ADC 采集电池电压、系统电压与温度热敏电阻信号;
  • 跑电源管理主状态机,根据充电状态、负载情况动态调整 PMIC 输出;
  • 在系统整机休眠时进入低功耗睡眠,通过 RTC 闹钟或外中断唤醒执行周期性任务。

PIC18LF4685 的低功耗模式分几档,浅睡眠、深睡眠、休眠,切换逻辑也简单直接,很适合做那种“平时睡死,偶尔醒来干点活”的控制器。它的优势不在于性能多强,而在于低功耗状态下还能保持关键外设运行,比如定时器和部分中断源。

2.3 选型中的互补关系

选这两颗芯片放在一起,主要是看中了硬件层次上的互补。PCA9422 管功率,但不管“策略”:它不知道怎么根据剩余电量调整负载,也不知道什么时机触发充电截止检查;PIC18LF4685 有智能,但没法直接用 GPIO 模拟出高效率的充电恒流电路,用分立元件搭又占用大量 PCB 空间和软件资源。

这两颗器件配合,可以做到一个非常典型的电池设备电源域划分:

电源域器件控制方式说明
电池充电域PMIC 内置充电管理硬件自动,软件可屏蔽适配器接入自动开启充电
系统主电压域PMIC 转换输出I2C 动态调压根据负载状态切换电压
MCU 与低功耗域PMIC 独立 LDO 路径硬件上电,软件进睡眠保证 MCU 随时可唤醒
模拟采样域PMIC 输出 + 外部滤波恒压供 ADC 基准和传感器

电源域分清楚之后,PCB Layout 和固件调试都简单多了。

3. 硬件设计与电源树搭建要点

3.1 供电拓扑设计

我采用的拓扑结构很简单:外部 USB 5V 或电池输入先进入 PCA9422 的输入引脚,PMIC 内部完成电源路径选择,然后分成三路:第一路直接给电池充电;第二路通过 PMIC 的降压/升压输出给系统主负载;第三路是一颗常开的低功耗 LDO 输出,始终给 MCU 供电,让 MCU 在系统主负载关闭时也能工作。

这样的设计有一个实际好处:系统主电压域可以完全关闭,而控制部分仍然存活。比如设备进入待机时,PMIC 的系统输出直接拉到接近零,板上传感器和通信模块彻底断电,只有 MCU 和 RTC 靠 LDO 保持,睡眠功耗能压到非常低。

在拓扑设计时要注意一点:不要把所有负载挂在同一路输出上。大电流外设(无线模块、马达、显示屏)和低功耗传感器尽量分开,否则传感器很容易被大电流负载的电压毛刺带偏,导致 ADC 采集值抖动。

3.2 关键外围元件与参数选择

电感、电容、采样电阻这三类元件是决定电源方案成败的核心。

PCA9422 的开关转换器要配一个合适的功率电感,电感的额定饱和电流一定要大于系统峰值电流,否则大负载时电感饱和,输出电压直接跌落。我这边峰值 800mA,选的是 2.2uH 的绕线功率电感,直流阻抗约 80mΩ,效率比小体积的叠层电感高不少。电感选型有个经验法则:让电感上的纹波电流控制在输出电流的 20% 到 40% 之间,太小会造成环路不稳定,太大则输出纹波超标。

输入和输出的陶瓷电容要注意有效容值。这类 PMIC 对输入电容比较敏感,太小的输入电容在高频瞬态负载变化时会引起输入电压跌落。我习惯在输入处放一颗 10uF 的 X5R 陶瓷电容,输出处按数据手册要求放 22uF,并且在每路输出的引脚附近放一颗 100nF 的高频去耦电容。

电池充电电流的采样电阻不要选太大,大了发热且影响充电效率,小了采样精度不行。常规充电电流 500mA 左右时,10mΩ 级别的采样电阻是合理的,要注意 PCB 走线上采用四线开尔文接法,采样信号尽量靠近采样电阻引脚,避免走线上的压降直接变成采样误差。

3.3 硬件 Layout 避坑清单

这一部分全是汗水换来的经验。

第一,开关电源的环路走线必须尽量短和粗。PCA9422 的开关节点、电感和输出电容组成的高频环路要画在同一个面上,不要跨分割,不要用过孔绕来绕去,否则辐射干扰和地弹会让你调试 ADC 时怀疑人生。

第二,I2C 上拉电阻的位置和大小,直接影响通信可靠性。PMIC 的 I2C 引脚开漏输出,上拉电阻一般选 4.7kΩ 到 10kΩ。走线短选 10kΩ 省电,走线长选 4.7kΩ 抗干扰。实际操作中我用了 10kΩ 上拉,I2C 速率跑 400kHz,线长大约 5cm,稳定没问题。

第三,采样 ADC 需要独立的模拟地。如果板上地只有一个平面,就把 ADC 采样点旁边的走线尽量避开开关转换器的地回流路径,不然会有明显的开关噪声。用了带散热焊盘的 PMIC,其地的过孔要足够多,既散热又能降低地阻抗。

4. 固件侧的核心配置与实现

4.1 I2C 初始化与通用读写流程

PIC18LF4685 的 MSSP 模块配置成 I2C 主机模式后,读写 PMIC 的流程是固定的。需要注意每次通信前先确认总线空闲,发送起始位,发送从机地址加读写标志位,确认从机应答,然后逐字节发送或读取数据,最后发送停止位。

核心要点是读写地址和寄存器地址之间的配合。PCA9422 这类芯片一般支持多寄存器连续读写,写配置时可以一次把几乎整个寄存器表刷进去,但读状态时建议一次只读一个寄存器,避免读到不一致的数据。还有个细节:PMIC 在内部状态切换时,某些寄存器会暂时不可访问,要用重试机制而不是直接报错。

我实现时在 I2C 层加了一个超时机制,每次通信等待应答超时就释放总线并重试。实测下来,正常通信几百微秒之内就完成,而 PMIC 偶尔内部状态转换时第一次访问会超时,重试一两次基本都能成功。

// I2C 写单寄存器的通用流程,带超时保护 uint8_t pmic_write_reg(uint8_t reg_addr, uint8_t data) { // 等待总线空闲 while (I2C_BUSY) ; I2C_START(); if (I2C_SEND_ADDR(PMIC_I2C_ADDR_W) == NACK) { I2C_STOP(); return RETRY; } if (I2C_SEND_BYTE(reg_addr) == NACK) { I2C_STOP(); return RETRY; } if (I2C_SEND_BYTE(data) == NACK) { I2C_STOP(); return RETRY; } I2C_STOP(); return OK; }

4.2 上电初始化与输出配置

上电后不要立刻往 PMIC 里写一堆配置,先读一次芯片版本号和主状态寄存器,确认 I2C 通信正常,也确认 PMIC 当前处于什么状态。这个习惯帮我排查过很多“配置写进去但表现不对”的问题,其实很多时候是芯片挂了或者根本没上电。

初始化配置的先后顺序也有讲究。先把输入路径和充电参数配置好,再配置转换输出电压,最后配置中断掩码和状态监控。我之前反着来,先配置输出后配置输入,结果 PMIC 在一个未完全配置的状态下启动了输出,电压出现短暂过冲,把后级的一个传感器模块搞“钛”了。

一个典型的初始化序列:

  1. 读版本寄存器确认通信;
  2. 写输入电流限制与充电电压/充电电流参数;
  3. 配置转换器工作模式,设定启动输出电压;
  4. 写动态调压相关寄存器;
  5. 配置中断使能与状态寄存器采集周期。

输出电压的设定我用的是“查询数据手册寄存器映射表 + 计算配置值”的方式,而不是直接照抄示例代码。每个输出电压档位对应一个寄存器值,需要按目标电压算出编码。比如目标电压是 3.3V,编码表里 3.3V 对应某数值,如果只用了默认配置没有核对,很容易出现输出了 3.0V 或者 3.6V 而系统还不知道的情况。

4.3 低功耗状态切换与动态电压调节

低功耗设计的核心思路是“尽可能让系统主负载断电,而 MCU 保持可唤醒”。

PIC18LF4685 这边,进入睡眠前需要把 I2C、ADC 等不用的外设关掉,把 IO 口设为确定电平,避免悬空脚漏电,然后执行睡眠指令。唤醒源根据应用场景配了两个:一个是定时唤醒,用于周期上报场景;另一个是按键/外部信号中断,用于本地触发。

睡眠期间 PMIC 那边的工作才是省电大头。PCA9422 可以配置成低功耗模式,把系统输出关断,只保留一个很小的待机通路给 MCU。MCU 在睡眠前通过 I2C 发一条命令把输出关掉,然后把自身进入深睡眠模式,整个系统待机电流能压到几十微安级别。

动态调压的应用场景更直接:设备在处理数据时,MCU 主频跑满,这时候 I2C 写寄存器把系统电压调高到 3.3V;数据处理完进入低速循环时,调低到 2.5V,然后才进入睡眠。这样既保证了高负荷时不出错,又拉低了平均功耗。实际测试中,动态调压的生效时间大约在毫秒级,对常规传感器采集任务完全无感。

4.4 电池电量监测与温度采集

电量监测我用的是离散采样法,ADC 周期读取电池电压,然后根据放电曲线折算出大致电量。这里要特别提醒:电池电压在不同负载下差异极大,必须在相同负载条件下做电压到电量的映射表。我这里的做法是只在 MCU 启动、系统负载固定时采样一次,作为本次工作周期的起始电量,而不是一直连续采样。

ADC 采样的基准电压要用 PMIC 的稳定输出,不能用电池电压直接当 Vref,否则电池越没电 ADC 基准越漂,读数反而可能升高。温度采集使用 NTC 热敏电阻,分压电阻选 10kΩ,ADC 采样端并一颗 100nF 电容滤高频噪声。温度数据主要用来做两件事:一是如果 PMIC 温度过高,主动降低充电电流;二是如果环境温度太低,限制大电流快充,保护电池寿命。

// 电池电压与温度 ADC 通道的复用采样 uint16_t read_battery_mv(void) { set_adc_channel(BAT_VOLTAGE_CH); adc_convert_and_wait(); uint16_t raw = get_adc_result(); // 按分压电阻比例反算电池电压 return (uint32_t)raw * BAT_RATIO / ADC_FULL_SCALE; }

4.5 状态机设计

整个电源管理软件的核心是一个状态机。状态包括 RUN、IDLE、SLEEP、CHARGING、FAULT。每个状态的进入与退出都是事件驱动:外部电源接入触发 CHARGING,定时任务完成触发 IDLE,长时间无活动触发 SLEEP,故障标志触发 FAULT。

状态机的好处是让逻辑分支清晰可维护。原本用一大堆 if-else 管电源,加一个新功能就得翻无数次代码。改成状态机后,每个状态只需要关心“进入时做什么、循环中检查什么、退出时做什么”三件事,调试时可以直接打印状态切换跳转记录,非常直观。

5. 调试实录:常见问题与排查技巧

5.1 问题一:I2C 通信时好时坏

现象:上电复位后第一次读取 PMIC 状态,有时成功有时无应答,概率大约 30% 失败。

排查过程:先量了 PMIC 供电,正常;用示波器抓了 SCL 和 SDA 波形,发现上拉电阻右侧的电平上升斜率偏缓,排查到 PCB 走线上分管了较长的平行距离,线间寄生电容偏大,实测波形有严重的振铃。

解决办法:换小一点的上拉电阻,从 10kΩ 换成 4.7kΩ,再将走线走短并加宽,问题消失。经验教训是 PMIC 这类芯片的 I2C 一般带内部滤波,抗干扰能力有限,高位速率通信时上拉电阻不能照搬“推荐值”,要按实际走线长度微调。

5.2 问题二:输出电压与配置不符

现象:配置目标电压 3.3V,实际输出只有 2.8V,负载电流时电压进一步跌落。

排查过程:一开始怀疑是负载过大,但系统实际电流只有 300mA,远小于设计值。用示波器看开关节点波形,发现占空比明显不对,但关键的问题是 PMIC 的输出电压编码写进了错误的寄存器分组。

解决办法:重新梳理数据手册的寄存器映射,确认电压配置寄存器的编码方式是步进式,不是绝对电压值,需要用目标电压与基准电压的差值换算。修正编码后输出恢复正常。

我把这个教训总结成一条:任何带配置寄存器的 PMIC,固件里的“配置值”必须由数据手册的公式自己推算一遍,不要直接抄参考例程里的数字,因为芯片版本不同,寄存器编码可能完全不同。

5.3 问题三:待机电流超标

现象:理论上睡眠后整机电流应该低于 50uA,实测竟然有 300uA 左右。

排查过程:先量 MCU 电流正常,再把 PMIC 的输出全部关掉,发现电流依旧高。最后逐路断开了板上的负载,发现问题出在一颗传感器模块的电源引脚上,该模块的使能脚虽然被拉低,但是电源引脚到地之间存在一条内部上拉路径,导致整个模块仍然有额外漏电。

解决办法:在睡眠前通过负载开关彻底切断传感器模块的电源,而不是只依赖模块自身的使能脚。这个问题的本质是:模块自身使能不等于断电,而 PMIC 提供的那路可控输出就派上了用场。

5.4 问题四:电量显示跳变

现象:电池电量从 60% 突然掉到 15%,过一会又恢复。

排查过程:采样时系统正处于高负载状态,PMIC 的输出电压被调得偏低,此时 ADC 读到的电压反映的是带负载的瞬间电压,而不是电池开路电压。

解决办法:把电量采样改成“负载切换后的稳定窗口”里读取,实际上就是把采样时机迁到了系统刚进入 IDLE 并稳定几百毫秒之后。此外再对连续两次采样值做了阈值判断,如果差值超过一定范围就重新采样,滤掉异常跳点。

5.5 问题五:ADC 采样噪声

现象:电池电压读数跳动幅度达到 30 个 ADC 码,换算成电压超过 40mV。

排查过程:示波器观测到 ADC 输入引脚上有 100mV 左右的开关噪声,频率正好与 PMIC 转换器开关频率一致。地平面回流路径被一根长的信号走线隔断,导致噪声串入采样通路。

解决办法:重画了地平面,保证开关回路与模拟采样区的地充分连接,同时在 ADC 引脚就近放一颗 10nF 的旁路电容。采样程序里还把每次 ADC 转换结果多采几遍取平均,最终读数稳定在 2 个码以内。

6. 调试工具和辅助手段

6.1 用电阻负载做功耗基线测试

调试电源管理时,我习惯先用一颗可调电子负载代替真实系统,把板子的功耗基线测出来。这能排除很多“不知道功耗去哪了”的疑难杂症。具体做法是关闭所有通信和传感器功能,让 MCU 空跑,测量各档电压下的电流,然后对比数据手册估算值。

6.2 用逻辑分析仪抓 I2C 时序

我调试 I2C 通信时必用逻辑分析仪,比示波器直观得多。可以看到每个字节的 ACK/NACK 情况、起始停止位是否正确、数据顺序是否合法。有些 PMIC 对寄存器地址有严格要求,逻辑分析仪能帮助快速定位是地址错还是数据错。

6.3 预留调试串口打印电源状态

固件里一定要预留一个调试串口,打印电源状态机的跳转信息。实际工作中我把所有关键节点的代码都做了标记变量,例如“进入睡眠前”“充电截止”“动态调压完成”,然后通过串口发到上位机。排除故障时这些日志比任何分析计算都管用。

7. 实测数据和优化空间

整套方案实际跑下来,运行状态系统电流约 80mA,其中 MCU 约 20mA,传感器模块约 50mA,其余为损耗。待机状态电流压到了 35uA 左右,基本达到设计目标。动态调压功能把运行功耗降低了差不多 10%,因为高负载时间占比不高,平均收益主要来自待机时把系统电源域完全关断的这个动作。

后续优化还有不少空间。一个是可以把电量估算从查表法升级成电流积分法,也就是用库仑计芯片或者 PMIC 内部集成的计量功能,得到更精确的剩余电量。另一个是把低功耗唤醒频率进一步降低,从周期 1 秒唤醒一次改成根据传感器事件触发唤醒,日常待机电流还能再往下压。PCA9422 内部的保护功能很齐全,其实还可以接入故障自动恢复机制,让系统掉电后自动重启,提高野外部署的可靠性。

我个人在实际操作中最大的体会是:电源管理方案的调试顺序不能乱,一定是硬件电压先稳、I2C 通信再通、然后才是状态机和低功耗策略。任何一步跨过前面直接做,后面都会以奇怪的方式失败,浪费时间不说,还容易让人怀疑芯片本身有问题。如果正在做类似方案的读者遇到任何一个我在上面提到的问题,按对应小节的思路排查,大概率能少走几天弯路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/24 3:28:41

基于PCA9422与STM32的电源管理方案设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 3:25:29

明日方舟MAA自动化助手:从配置到多账号管理的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 3:25:28

PCA9422与PIC32MX470F512H的便携设备电源管理系统设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 3:23:57

极简导航页实战:用状态管理构建个人数字工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 3:22:14

Visual Studio中scanf报错C4996详解:原因与四大解决方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 3:22:14

libuv源码分析:DNS异步解析与线程池实现原理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华