尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

STM32L073RZ Nucleo板发热排查:从电流异常到元件定位

STM32L073RZ Nucleo板发热排查:从电流异常到元件定位 最近在搞低功耗项目手头正好用到 STM32L073RZ 这颗料。结果板子一上电手一摸直接给我烫了个激灵。Nucleo 板发热这事说大不大但真遇上了还是挺慌的——毕竟 L0 系列主打的就是低功耗正常工作时芯片本身应该只是温热甚至摸起来是凉的。一颗低功耗芯片热到烫手说明板上肯定有地方在偷偷吃大电流。这类问题我前前后后排查过好几轮从最初只会摸芯片温度到后来学会用万用表、热成像一步步定位踩了不少坑也总结出一些套路。这篇文章就把我排查 STM32L073RZ Nucleo 板异常发热的完整过程写出来。如果你是刚开始玩 STM32 的新手或者手头正好也有一块发热的 Nucleo 板这篇应该能帮你少走很多弯路。1. 发热第一现场别急着拆芯片先判断热从哪来拿到一块发热的板子第一反应不要是芯片烧了。发热本身只是现象电流异常才是根源。STM32L073RZ 作为 Cortex-M0 内核的低功耗 MCU正常运行时核心电流也就几毫安到十几毫安整板功耗如果跑到几百毫安甚至安培级别才会出现明显发热。所以第一步先搞清楚到底是哪里在热。1.1 用手摸还是用设备测判断温度的不同方式有经验的工程师靠手感就能估计个大概但新手容易误判。手背贴芯片如果感觉烫但还能忍大概在 50°C 到 60°C 左右如果手指放上去不到两秒就得弹开那基本已经超过 70°C 了。这个温度对应的电流消耗粗略估算一下以 STM32L073 的热阻TJA 约 80°C/W 左右来算芯片表面比环境温度高 40°C对应的热耗散功率大概就在 0.5W。如果 3.3V 供电电流就是 0.5W / 3.3V ≈ 150mA。这还没考虑板载 LDO 自身的发热。所以一块热到烫手的板子整板电流至少百毫安往上跑这绝对不是正常状态。当然更靠谱的做法是用红外测温枪或者热成像仪。热成像仪在定位发热源时特别好用能一眼看出到底是芯片、LDO、电阻还是某个电容在发热。没有热成像仪也没关系可以用酒精棉球逐个点碰可疑元件——酒精挥发快的那个就是温度高的。这个方法虽然土但在没有专业工具的时候非常实用。1.2 主芯片热还是 LDO 热决定排查方向完全不同这是第一个关键分叉点。用手一摸如果烫的是板子左上角那个 SOT-23 封装的 3.3V LDONucleo 板用的是 LD39050 或类似型号那问题大概率不在 MCU而在于 LDO 后端挂载的负载太大。如果烫的是 STM32L073RZ 芯片本体那就要重点检查芯片供电、IO 口和内部模块配置。有个常见误区很多新手看到芯片热就认为是芯片坏了急着换芯片。实际上芯片本身发烫很多时候是外部电路导致的。比如某个 GPIO 被配置成推挽输出高电平然后外部直接接地——这个引脚就会变成一个小型发热器。STM32 的单个 IO 最大能灌 25mA 左右几个 IO 同时短路芯片就会明显发热。反过来如果是 LDO 发热那就先量一下 3.3V 网络的对地阻抗排除后级短路。注意Nucleo 板的 3.3V 和 5V 是有跳线SB控制的排查前先确认跳线帽的状态。2. 整板电流测量最快速定位问题区间的方法判断发热位置之后第二步就是用万用表测电流。这是所有排查手段里信息量最大的一步一条电流数据就能把问题范围缩小一大半。2.1 用万用表电流档还是串电阻测量技巧与注意事项Nucleo 板有多个供电路径。最直接的方法把板子上的 E5V外部 5V跳线断开用万用表串在 USB 5V 输入端和板子之间测总电流。但注意Nucleo 板上有 ST-Link 部分和 Target 部分ST-Link 本身也会消耗电流如果只想测 Target 部分的电流需要断开 SB12如果这个型号有这个跳线的话或对应的目标板供电跳线。具体步骤万用表拨到电流档先选最大量程比如 10A 档避免烧保险丝断开待测回路的跳线帽或短路电阻红表笔插入电流测量孔黑表笔接 COM表笔串联接入断开点上电读取电流值如果测出来整板电流 300mA 以上那问题很明确——有短路或大负载。如果只有几十毫安那发热源可能不是电流而是电压比如某个引脚被外部电压反灌。这里有个实操细节不要直接用万用表电流档去量 USB 的 VBUS 和 GND 之间那样等于把万用表当导线瞬间大电流会烧保险丝。电流测量必须串联在回路里不是并联在电源两端。2.2 正常电流应该是多少L0 芯片功耗参考基线搞清楚正常才能判断异常。STM32L073RZ 在 32MHz 主频、全速运行且外设全开的情况下芯片核心电流大概 5-15mA。Nucleo 板上还有 ST-Link 调试器、LED 指示灯、电平转换芯片等整板电流通常在 50-80mA 左右取决于工作状态。如果只是上电、不烧录程序整板电流应该在 30-60mA 之间。加上调试器供电的静态消耗。如果你的板子通电后电流直接飙到 200mA 以上那肯定是哪里不对。值得留意的是有的板子刚上电时电流会短暂冲高因为去耦电容充电、LDO 上电过程几秒后回落。这是正常现象。持续稳定在异常高位才是故障信号。3. 排查外部连接很多时候问题根本不在板子上发热问题里外部连接错误占了相当大比例。ST 的 Nucleo 板为了兼容 Arduino 引脚布局把很多 GPIO 引到了排针上这就埋下了隐患。3.1 检查排针上是否有意外短路或接反拿到发热板子先把所有外接的杜邦线、扩展板拆掉恢复到板子裸奔状态再上电。这个操作能直接排除掉八成的外部连接问题。我遇到过不止一次用户说板子发热结果发现是扩展板上某个引脚短路和 Nucleo 板本身一点关系都没有。如果裸板不发热了那就是外部电路的问题。这时不要急着重新插回去先用万用表导通档量一下扩展板上 VDD 和 GND 之间的阻抗。如果是 0 欧姆或者接近 0 欧姆那说明扩展板内部短路。很多廉价扩展板在焊接工艺上存在瑕疵焊锡珠残留会导致相邻引脚桥接这种情况最坑人。如果裸板依然发热那就继续往下查。注意检查排针座本身有没有焊锡桥接特别是比较密集的排针区域。我见过一块板子因为助焊剂残留导致相邻排针之间存在微弱漏电流通路虽然阻抗不是 0但足以让芯片温度异常升高。3.2 杜邦线接法最常见的几种坑杜邦线的坑主要体现在三个方面第一线序搞反。很多传感器模块的引脚顺序并不统一VCC 和 GND 的位置可能和你预期的不一样。插之前一定要看丝印不要凭感觉。我就插反过一块 OLED 屏5V 直接灌到了 GND 上板子和屏幕一起发热差点烧掉。第二夹错引脚。Nucleo 排针上的丝印有时候容易被遮挡特别是叠了扩展板之后。建议用万用表导通档验证一下排针对应关系再上电。第三杜邦线本身破损短路。劣质杜邦线内部的铜丝可能从塑料外壳里露出来插在面包板上时碰到相邻引脚。排查方法用万用表量一下所有杜邦线两端的导通关系排除这一可能。3.3 外接传感器或模块时注意电源与 IO 电平STM32L073RZ 是 3.3V 逻辑器件IO 口不能直接承受 5V。如果外接的传感器模块是 5V 供电它的 IO 输出可能直接是 5V 电平这些 5V 电平灌入 3.3V 的 GPIO会通过芯片内部的保护二极管形成漏电通路。这个漏电通路有多严重单个引脚漏电可能只有几毫安但如果外接的模块有多个 IO 连到 MCU累加起来就是几十毫安的电流。这些电流从外部流入芯片的 VDD通过保护二极管会明显造成芯片发热却不一定立即烧毁芯片。所以外接模块时尽量选择 3.3V 供电的型号或者加电平转换芯片比如 TXS0108E。如果模块自带板载稳压很多 5V 供电的模块上有 AMS1117-3.3那它的逻辑电平就取决于内部稳压之后的电压这个要查模块的规格书确认不能想当然。4. 芯片局部发热的深层原因从电源域到内部模块排除了外部因素如果还是发热那就是板子本身的问题了。这时候要把注意力收回到 STM32L073RZ 芯片本身重点检查几个容易被忽略的元凶。4.1 VDD 与 VDDA 等电源引脚的供电异常STM32L073 是 LQFP64 封装如果你用的是 LQFP64 封装的话引脚不少。PCB 上如果电源引脚滤波不良或者 VDDA 引脚悬空会导致内部模拟电路工作异常产生额外的功耗。Nucleo 板是官方设计理论上不会犯这种低级错误但如果板子是二手或者被改装过就要留意。用万用表量一下芯片每个 VDD 引脚和 VDDA 引脚的电压是否都是 3.3VVSS 引脚是否都是 0V。有些板子在某个角落的 VDD 引脚上有虚焊看起来是连着的实际上接触不良。这种情况在显微镜下才能看清不过多数时候用万用表量也能发现——电压值会偏低或者跳动。此外VBAT 引脚也很关键。如果板上没有接备份电池VBAT 应该直接接到 VDD 或 GND具体看数据手册的推荐电路。如果 VBAT 悬空芯片内部 RTC 和备份寄存器区域的供电状态不确定也可能引起漏电。Nucleo 板默认把 VBAT 接到了 VDD如果你飞线改过这个引脚注意检查。4.2 芯片内部模块未关断导致功耗异常这个问题在低功耗项目中尤其常见。STM32L073RZ 低功耗出名但前提是代码里正确配置了低功耗模式。如果代码一直让芯片跑在 Run 模式所有外设时钟全开那么即便没有外部短路电流也会比正常情况高不少。举一个典型例子ADC 的时钟没有关闭。ADC 模块在 STM32L0 系列上有一个独立时钟使能位如果代码里初始化了 ADC 但没有在停止模式下关闭它ADC 的模拟部分会持续消耗电流可能拉到毫安级别。这虽然不足以让芯片热到烫手但会显著拉高整板功耗。要全面摸清功耗底数可以用 ST 的功耗计算工具STM32CubeMonPwr配合板子上的 IDD 测量引脚Nucleo 板的 CN7 排针上有 IDD 引脚断开跳线可以串电流表测量 MCU 电流。如果你把 MCU 电流单独测出来确认只有几毫安那发热就另有来源。4.3 芯片本身损坏的情况什么时候才需要怀疑如果以上所有检查都做了芯片依然发热那才需要怀疑芯片本身损坏。芯片损坏的常见原因包括IO 口长期过流烧毁内部驱动管、ESD 静电击穿、电源过压击穿。L0 系列虽然是低功耗芯片但它的 IO 驱动能力和普通 STM32 一样短路时间长了同样会烧。怎么判断芯片是否损坏可以用 ST-Link 尝试连接芯片如果能读到 IDCODE说明芯片的内核还活着Flash 也能读取那芯片就还没完全报废。如果连接不上或者读 ID 报错那基本上是硬件损坏了。注意ST-Link 连接不上也有可能是引脚配置导致 SWD 引脚被禁用不一定是芯片坏。可以先按住复位引脚再点连接或者把 BOOT0 拉高再连排除代码干扰。芯片损坏这种概率实际上不高。多数芯片发热最后查出来都是外围电路的问题。所以排查时不用过度恐慌按顺序来就行。5. 板载调试器与电源电路Nucleo 特有的发热源Nucleo 板和其他最小系统板不太一样的地方是它自带 ST-Link 调试器和完整的电源管理电路。这些额外的东西有时候就是发热的元凶。5.1 ST-Link 部分的电流消耗正常阈值与异常判断Nucleo 板上的 ST-Link 调试器通常是 STM32F103 系列芯片负责 USB 通信和 SWD 调试。它的电流消耗大概 20-50mA。如果你用的是板载 ST-Link 给目标 MCU 供电默认跳线连接那 ST-Link 的电流和 MCU 的电流是叠在一起的。判断 ST-Link 是否异常发热可以对比一下拔掉目标板的供电跳线断开目标 MCU 的 VDD 供电只保留 ST-Link 工作然后摸 ST-Link 芯片的温度。如果 ST-Link 芯片单独工作依然烫手说明问题在调试器部分——可能是 USB 接口的 ESD 保护器件损坏或者 ST-Link 的固件跑飞。顺带说一句ST-Link 固件是可以通过 STM32CubeProgrammer 升级的。如果 ST-Link 工作异常先试试升级固件到最新版。我遇到过 ST-Link 识别不稳定导致整板电流偏高的情况升级固件后恢复正常。5.2 板载 5V 转 3.3V 电路上电瞬间的浪涌电流Nucleo 板的电源拓扑是USB 5V → 跳线 → 5V 网络 → LDO → 3.3V 网络。上电瞬间3.3V 网络上的去耦电容Nucleo 板上至少有 4-5 个 100nF 电容和几个 10µF 钽电容需要充电这个瞬间电流可能达到几百毫安甚至几安培。这个浪涌电流持续时间很短微秒到毫秒级不会造成持续性发热但如果你的电源适配器本身功率不足或者 USB 线太细电阻太大就可能在 LDO 上产生较大的压降和功耗。比如 USB 线内阻 0.5 欧姆板子持续 200mA 电流线上就掉 0.1V这个损耗以热量形式散发在 USB 线上——你会感觉线是温的。如果线内部短路那就更麻烦了。如果你用的是台式机前置 USB 口供电注意前置口的供电能力通常比后置口差。我遇到过一块板子在台式机后置 USB 口上正常工作换到前置口就发热重启最后发现是前置口的 USB 供电电流不够导致电压跌落板载 LDO 为了维持输出电压而工作在极限状态发热剧增。5.3 跳线帽状态与供电选择一个被忽略的排查项Nucleo 板的供电跳线通常标记为 E5V、5V 等有多种接法E5V 短接使用外部 5V 电源供电5V 短接使用 USB 的 5V 供电3.3V 短接使用外部 3.3V 直接供电如果跳线帽插错了位置比如把外部 5V 接到了 3.3V 网络上那 3.3V 网络上的芯片全都会过压发热是必然的。排查方法很简单目视检查跳线帽位置是否和丝印标注一致再用万用表量一下 3.3V 引脚和 GND 之间的电压确认是 3.3V 而不是 5V。如果量出来是 5V第一时间断电把跳线恢复正确。还有一个常见情况跳线帽的金属弹片老化接触电阻变大。虽然接触电阻通常只有零点几欧姆但如果在高电流回路里比如 ST-Link 的 5V 供电也会产生明显热量。这时候用手摸跳线帽你会发现跳线帽本身是热的。这种情况换个跳线帽或者直接用飞线短接就行。6. 实操排查链路从“烫手”到“定位”的完整流程综合以上所有分析我把这次 STM32L073RZ Nucleo 板发热的排查过程梳理成一套可复用的排查流程。按这个顺序走一遍绝大多数发热问题都能定位到具体元件。6.1 第一部静态检查排除低级问题拿到发热板子先别急着上电。肉眼检查 PCB 表面是否有异物焊锡珠、螺丝、铜丝是否有元件位置异常是否有烧焦痕迹。用万用表电阻档量 3.3V 网络对 GND 的阻抗再量 5V 网络对 GND 的阻抗。注意如果阻抗为 0 或者接近 0不要反复通电测试先把短路找到了再说。这个阶段的目标是用最少的操作排除最常见的低级错误为后续动态测试提供安全条件。6.2 第二部最小系统法剥离干扰把所有外设、扩展板、杜邦线全部移除让板子处于最小系统状态。断开板载 ST-Link 供电跳线如果不需要调试只用外部可调电源给 3.3V 网络供电预设电流限制在 100mA然后缓慢上调电压到 3.3V。这个方法特别适合定位电流问题。外部电源通常会显示实时电流如果电流仍然很大问题锁定在板子本身。如果电流恢复正常几毫安到几十毫安说明问题是外围电路可以逐步加回外设每加一个测一次电流找到拉高电流的那一个。我强烈建议手头常备一个带电流显示的可调电源或者 DC 电源分析仪这对嵌入式调试的帮助比任何调试器都大。没有的话用 USB 电流测试仪也可以精度略差但够用。6.3 第三部热成像或酒精法缩小范围如果电流异常的方向锁定在板子上下一步就是确定具体发热元件。有热成像仪最好一目了然。没有的话用酒精棉球逐个点可疑元件。酒精在发热元件上会迅速蒸发而且会发出呲呲声这个反馈非常直观。这个阶段重点关注LDO、MCU、电平转换芯片、LED 限流电阻、以及你怀疑的短路位置附近的元件。6.4 第四部针对性测试定位到具体引脚或元件热成像确认了发热元件之后针对性地做测试。比如发热的是 MCU就量它的每一个 VDD 引脚的电流如果可能或者用强制电流法给某个引脚加限流电压看是否有异常漏电。如果发热的是某个电容最可能是电容本身击穿短路或漏液。用万用表电容档量一下实际容量和丝印标称值对比偏差太大就换掉。电容漏电的典型特征是通电一段时间后会自己变热然后电流缓慢上升。如果发热的是某个电阻那多半是流过它的电流太大。检查这条回路上挂载了什么是否出现了不应该存在的负载。用欧姆定律估算一下已知电阻阻值和电压就能算出预期电流如果实际电流远超预期那就顺着回路查。6.5 第五部代码侧检查确认硬件无误后如果硬件检查做了一圈发热没有明显改善那就需要考虑代码的影响。有些配置会让芯片无谓地消耗更多电流全速运行且所有外设时钟开启SystemClock 配置里把所有 RCC 时钟都使能了没有进入任何睡眠模式GPIO 被配置为高驱动模式但不需要内部 LDO 调节器电压设置为高范围但实际工作频率不需要这么高你可以写一个最简 LED 闪烁程序只初始化必要的时钟和 GPIO烧录后测量电流。如果这个最简程序的电流明显比之前低那问题就在代码的功耗管理上。如果最简程序的电流依然高那就是硬件问题继续排查硬件。有一个小技巧STM32CubeMX 生成的代码默认会把所有外设时钟都打开这在开发阶段问题不大但如果你在这个基础上叠加了低功耗逻辑可能因为某个外设没关导致低功耗模式失效。检查一下所有外设的 __HAL_RCC_xxx_CLK_ENABLE 和对应的 DISABLE 是否成对。7. 修复经验与后续建议这块板子后来怎么样了我那块发热的 STM32L073RZ Nucleo 板最后的结局有一点戏剧化。排查了一圈外部连接没问题最小系统电流正常但只要接上某个型号的温湿度传感器电流就会跳到 150mA。最后发现是传感器模块本身的焊盘设计有问题它的 SCL 和 GND 之间有微短路导致模块上电后 SCL 被拉低MCU 的 I2C 引脚通过内部上拉电阻持续输出电流。把传感器模块换了一个批次之后问题彻底解决。整个排查过程花了大概两个晚上用的工具就是万用表、可调电源和一个放大镜。基于这次经历给正在用 Nucleo 板做开发的朋友几条建议第一拿到一块新板子先测一下空板电流记录基线数据。这样以后再遇到发热问题就有对比参照。不同批次的板子可能有细微差异但数量级不会差太多。第二焊东西之前养成用万用表导通档检查的习惯。特别是焊排针、插扩展板这种操作提前发现短路比事后排查节省几小时时间。第三遇到发热问题不要慌按先外后内、先静后动、先粗后细的顺序来。先拆外设再测静态阻抗再动态上电。每一步都做好记录避免反复横跳。第四有条件的话备一个热成像仪哪怕是手机外接的那种。它对定位发热源的效率提升是数倍级别的。尤其是板子面积小、元件密集的时候没有热成像只能靠猜有了热成像直接精准定位。最后再分享一个经验STM32L0 系列的低功耗特性真的很好用但前提是正确配置。如果你的项目不需要特别低的功耗或者开发阶段还在调试功能暂时不用太纠结功耗问题。先把功能跑通再回头优化功耗也不迟——但前提是板子不能热到烫手正常功能调试时的温度不会超过 50°C。如果你感觉温度明显超出这个范围一定是哪里出了问题值得花时间查清楚再继续往下开发。
返回列表