ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

单片机不工作排查指南:供电、复位、时钟与焊接布局

单片机不工作排查指南:供电、复位、时钟与焊接布局 1. 一块“死掉”的单片机板子到底卡在哪几个环节搞单片机开发的人几乎都遇到过这种场景板子焊好了代码烧进去了上电一看毫无反应。没有串口输出没有LED闪烁连晶振都不起振。你盯着那块板子怀疑人生怀疑芯片是假的怀疑编译器有bug甚至开始怀疑自己是不是不适合干这行。我做了十多年硬件和嵌入式开发带过不少新人也接手过大量“别人调不通”的板子。说实话单片机不工作的原因90%以上集中在四个环节供电LDO选型与电路设计、复位电路、时钟电路、焊接与PCB布局。这四个环节里任何一个出问题单片机都不会给你任何“友好提示”它就是安安静静地躺着让你自己去猜。这篇文章就是写给那些被“玄学故障”折磨过的朋友。不管你是刚入门的电子爱好者还是做了几年硬件但一直没系统梳理过排查思路的工程师我都会把每个环节的底层逻辑、常见坑点、排查手法讲清楚。你看完之后至少能做到拿到一块不工作的板子知道从哪里下手而不是盲目换芯片、盲目改代码。先给一个核心结论单片机不工作先查电再查复位再查时钟最后查焊接和布局。这个顺序不是随便定的而是按照故障概率从高到低排列的。下面我逐层拆开讲。2. 供电环节LDO选型与电路设计的隐藏陷阱2.1 LDO不是“随便选一个就行”的器件很多人画单片机最小系统的时候电源部分就是随手放一个AMS1117-3.3输入输出各加一个电容觉得完事了。但实际上LDO的选型直接决定了单片机能不能稳定运行。LDO的核心参数有几个必须关注压差Dropout Voltage、静态电流、输出噪声、负载瞬态响应、PSRR电源抑制比。这些参数不是拿来凑规格书的每一个都对应实际电路中的表现。先说压差。AMS1117在满载1A的时候压差大约是1.3V。也就是说如果你用5V输入输出3.3V压差只有1.7V勉强够用。但如果你用的是3.7V锂电池供电想要3.3V输出压差只有0.4VAMS1117根本稳不住输出会跟着输入往下掉。这时候单片机可能处于反复上电复位的状态表现出来就是“偶尔能跑偶尔死机”。我实测过一块用锂电池供电的板子客户反映“有时候能工作有时候完全没反应”。拿示波器一测LDO输出发现电压在2.8V到3.3V之间来回跳。换了低压差的LDO之后问题直接消失。所以选LDO的第一步是确认你的输入电压范围和输出电流需求然后算压差。2.2 输出电容的ESR不是小事LDO的稳定性高度依赖输出电容的ESR等效串联电阻。很多LDO的数据手册会明确标注“稳定所需的最小ESR范围”比如要求ESR在0.1Ω到5Ω之间。如果你用的是陶瓷电容ESR通常只有几毫欧反而可能导致LDO振荡。AMS1117就是一个典型例子。它的数据手册里写了输出电容需要钽电容或者电解电容ESR在0.1Ω到10Ω之间。但很多人手边只有MLCC多层陶瓷电容直接焊上去结果LDO输出纹波巨大单片机跑着跑着就复位。注意如果你非要用MLCC建议在输出端串联一个0.1Ω到0.5Ω的电阻人为增加ESR。或者直接换用支持陶瓷电容的LDO型号比如TPS7A系列、RT9013等。2.3 LDO纹波对单片机的影响单片机本身对电源纹波有一定的容忍度但ADC采样、晶振起振、Flash写入这些操作对电源质量很敏感。LDO的纹波主要来自两个方面输入端的开关噪声比如前级是DCDC和LDO自身的噪声。我遇到过一块板子单片机跑ADC的时候数据跳得厉害换了基准源也没用。后来用示波器交流耦合测LDO输出发现纹波峰峰值有80mV频率正好是前级DCDC的开关频率。在LDO输入端加了一个LC滤波之后纹波降到5mV以内ADC数据立刻稳定。所以如果你的单片机涉及模拟采样或者高精度时序LDO的PSRR和输出噪声一定要看。通常PSRR在1kHz下要大于60dB输出噪声要小于50μVrms。2.4 供电排查的实操步骤拿到一块不工作的板子供电排查按这个顺序来万用表测LDO输入电压确认输入是否在LDO的工作范围内。万用表测LDO输出电压确认输出是否达到预期值偏差是否超过±5%。示波器测输出纹波交流耦合带宽限制到20MHz看峰峰值。一般单片机供电纹波应小于50mV。带载测试给LDO输出加一个假负载比如100Ω电阻看电压是否明显下降。如果下降超过100mV说明LDO带载能力不足或者压差不够。摸温度上电几分钟后摸LDO表面如果烫手可能是自激振荡或者负载短路。这套流程走下来供电问题基本无处遁形。3. 复位电路最容易被忽视的“命门”3.1 复位电路到底在做什么复位电路的作用是在上电瞬间给单片机一个足够长的低电平或高电平信号让内部寄存器、PC指针、外设状态全部回到初始值。等电源稳定之后复位信号释放单片机才开始从Flash的起始地址执行代码。听起来很简单但复位电路出问题的方式非常隐蔽。最常见的情况是复位引脚一直处于复位状态单片机根本不启动。你测电源正常测晶振也起振了但单片机就是不跑因为复位引脚被拉住了。3.2 阻容复位电路的参数计算经典的51单片机复位电路是一个10k电阻加10μF电容。原理是上电瞬间电容两端电压不能突变复位引脚通过电容接地保持低电平。随着电容充电复位引脚电压逐渐升高当达到高电平阈值时复位释放。复位时间由RC时间常数决定τ R × C。对于10k和10μFτ 0.1秒。实际复位时间大约是3到5个τ也就是0.3到0.5秒。这个时间足够电源稳定和晶振起振。但如果你用的是STM32或者STC单片机复位引脚的电平要求可能不同。STM32的NRST是低电平复位内部有上拉电阻外部只需要接一个100nF电容到地即可。如果你照搬51的10μF电容复位时间会过长虽然不一定导致不工作但会影响调试体验。提示STM32的NRST外部电容推荐100nF不要用10μF。STC单片机的复位引脚通常是高电平复位需要接下拉电阻具体看数据手册。3.3 复位引脚被外设“拖住”的情况有一种非常隐蔽的故障复位引脚本身电路没问题但它连接到了其他外设芯片的复位输出端。如果那个外设芯片没有正常供电它的复位输出引脚可能处于低电平把单片机的复位引脚也拉低了。我接手过一块板子单片机复位引脚上挂了一个以太网芯片的复位输出。以太网芯片的供电是1.8V但LDO坏了输出只有0.6V。结果以太网芯片的复位输出一直为低单片机被死死按住完全不工作。排查了半天最后断开以太网芯片的复位连接单片机立刻跑起来了。所以排查复位电路的时候一定要确认复位引脚上挂了多少个器件每个器件在上电时的输出状态是什么。3.4 复位电路排查清单检查项正常表现异常表现处理方式复位引脚电压上电后稳定在高电平低电平复位一直为低或一直为高检查RC参数、外设连接复位脉冲宽度足够覆盖电源上升时间太短或太长调整RC值复位引脚对地电阻无穷大或很大很小检查是否有短路或外设拉低手动复位按钮按下时电平翻转无变化检查按钮焊接和连线4. 时钟电路晶振不起振的N种原因4.1 晶振电路的基本原理单片机的外部时钟电路通常由一个晶振和两个负载电容组成。晶振负责产生稳定的振荡频率负载电容负责调整振荡频率和维持振荡。对于STM32F103这类芯片外部高速晶振通常是8MHz负载电容在10pF到22pF之间。晶振不起振的原因非常多我按概率从高到低列一下负载电容不匹配、晶振焊接不良、晶振质量差、PCB布局不合理、单片机时钟配置错误。4.2 负载电容的计算与选择负载电容的计算公式是CL (C1 × C2) / (C1 C2) Cstray。其中Cstray是PCB走线的寄生电容通常在2pF到5pF之间。假设晶振规格书要求负载电容为12pFCstray取3pF那么C1和C2应该选18pF左右。因为(C1 × C2) / (C1 C2) 9pF加上3pF的寄生电容正好12pF。但很多人直接拿两个22pF的电容焊上去结果负载电容偏大晶振频率偏低起振困难。尤其是在低温或者高湿度环境下晶振可能完全不起振。注意如果你不确定晶振的负载电容要求先用两个10pF到15pF的电容试然后用频率计测实际频率再微调。4.3 晶振焊接与PCB布局的坑晶振是机械振动器件对焊接应力和PCB布局非常敏感。我见过不少板子晶振焊是焊上了但焊盘上有残留的助焊剂导致晶振引脚之间漏电起振不稳定。还有的板子晶振走线太长引入了太多寄生电容和干扰晶振直接不起振。正确的做法是晶振尽量靠近单片机引脚走线短而粗下方铺地但不走其他信号线。晶振外壳接地可以屏蔽外部干扰。焊接时用少量助焊剂焊完后用酒精清洗干净。4.4 如何判断晶振是否起振最直接的方法是用示波器测晶振引脚。但要注意示波器探头的输入电容会影响晶振振荡可能导致本来能起振的电路不起振。所以建议用高阻抗、低电容的探头或者用频率计在单片机时钟输出引脚上测。如果没有示波器可以写一段最简单的代码让一个GPIO引脚翻转然后用LED或者万用表测频率。如果GPIO没有翻转说明时钟没起来。还有一种情况晶振起振了但单片机时钟配置错误。比如STM32的外部晶振是8MHz但代码里配置成了12MHz结果系统时钟不对串口波特率全错看起来就像单片机没工作。所以排查时钟的时候一定要确认代码里的时钟配置和实际晶振频率一致。5. 焊接与PCB布局那些“看起来没问题”的故障5.1 虚焊和冷焊的隐蔽性虚焊是单片机不工作的常见原因之一但它的隐蔽性极强。有时候你用万用表测通断显示是通的但实际接触电阻很大单片机工作时电流一上来电压就掉下去了。我遇到过一块板子单片机电源引脚的焊点看起来饱满光亮但用镊子轻轻一拨引脚就在焊盘上转动。这种就是典型的冷焊焊锡没有真正浸润引脚和焊盘。重新补焊之后单片机立刻工作。排查虚焊的方法用镊子逐个轻拨元器件引脚看是否有松动。对于QFP封装的单片机用放大镜或者显微镜检查引脚是否有连锡或者虚焊。必要时用热风枪重新回流一遍。5.2 PCB布局对单片机稳定性的影响PCB布局不是“能连通就行”。对于单片机系统有几个布局原则必须遵守电源走线要粗单片机电源引脚到LDO的走线宽度至少20mil最好铺铜。去耦电容要靠近引脚每个电源引脚旁边放一个100nF电容距离不超过5mm。晶振远离干扰源晶振和负载电容远离DCDC、继电器、电机驱动等噪声源。复位引脚走线要短复位引脚容易受干扰走线尽量短必要时包地。地平面要完整不要随意切割地平面尤其是模拟地和数字地要单点连接。我见过一块板子单片机偶尔复位查了很久没找到原因。后来发现是继电器驱动走线从晶振下方穿过继电器动作时产生的干扰耦合到晶振上导致时钟抖动。把继电器走线移开之后问题解决。5.3 焊接不良的排查手法焊接问题排查我总结了一个“一看二拨三测四补”的流程看用放大镜看焊点是否光亮、饱满、浸润良好。拨用镊子轻拨引脚看是否有松动。测用万用表测关键节点的通断和电压。补对可疑焊点重新补焊补焊后清洗板面。这套流程看起来笨但非常有效。很多“玄学故障”最后都是靠补焊解决的。6. 常见问题速查表与独家避坑经验6.1 单片机不工作故障速查表现象可能原因排查方法解决方案完全无反应供电缺失测LDO输入输出修复供电完全无反应复位引脚被拉低测复位引脚电压断开外设或调整RC完全无反应晶振不起振测晶振引脚或时钟输出换晶振或调负载电容偶尔工作偶尔死机LDO压差不够带载测LDO输出换低压差LDO偶尔工作偶尔死机复位电路干扰示波器看复位引脚加滤波电容或包地串口无输出时钟配置错误检查代码时钟设置修正时钟配置串口乱码晶振频率不对测实际频率换晶振或改波特率程序跑飞电源纹波大测LDO纹波加LC滤波程序跑飞去耦电容缺失检查PCB补焊100nF电容6.2 独家避坑经验经验一先测电压再动代码。很多人一遇到单片机不工作第一反应是改代码、换编译器、重装IDE。但实际上硬件问题占绝大多数。养成习惯上电先测电压再测复位再测时钟最后才怀疑代码。经验二备一块“已知良好”的板子做对照。如果你手边有一块确认能工作的同型号板子排查故障会快很多。把故障板的电压、波形和好板子对比差异点往往就是问题所在。经验三不要迷信“看起来没问题”的焊点。我吃过太多亏了。现在我的习惯是新焊的板子先补焊一遍单片机和LDO再上电。补焊花五分钟能省下几个小时的排查时间。经验四LDO输出电容优先用钽电容。虽然钽电容贵一点但ESR合适稳定性好。MLCC虽然便宜但容易导致LDO振荡。如果你非要用MLCC记得串联一个小电阻。经验五晶振负载电容不要照搬参考设计。不同厂家的晶振负载电容要求不同PCB的寄生电容也不同。最好的方法是看晶振规格书然后实测频率微调。6.3 关于STC单片机和STM32的复位差异STC单片机的复位电路和STM32完全不同。STC通常是高电平复位复位引脚需要接下拉电阻上电时通过RC电路产生一个高电平脉冲。而STM32是低电平复位复位引脚内部有上拉外部只需要一个小电容。我见过有人把STC的复位电路直接搬到STM32上结果STM32一直处于复位状态。所以换单片机型号的时候一定要重新看复位电路的要求。7. 从故障排查到设计预防把问题扼杀在原理图阶段排查故障固然重要但更高明的做法是在设计阶段就避免这些问题。我现在的习惯是画完原理图之后专门花半个小时做一次“电源和复位审查”。审查内容包括LDO的压差是否足够、输出电容的ESR是否匹配、复位电路的RC参数是否正确、晶振的负载电容是否计算过、每个电源引脚是否有去耦电容、复位引脚上挂了哪些外设。这半个小时能避免后面大量的调试时间。PCB布局阶段我会把晶振、复位、电源这三个区域单独圈出来优先布局确保走线短、地平面完整、远离干扰源。焊接阶段我会先焊电源和单片机测好电压之后再焊其他外设。这样即使出问题也能快速定位到是哪个环节。说到底单片机不工作的“玄学故障”本质上都是工程问题。只要你按照供电、复位、时钟、焊接这个顺序去排查90%以上的问题都能找到原因。剩下的10%可能需要示波器、频谱仪甚至X光机但那些已经是极端情况了。我个人在实际操作中的体会是越基础的电路越容易出问题越简单的参数越容易被忽视。LDO的压差、复位电容的容量、晶振的负载电容这些看起来不起眼的小事往往就是单片机不工作的真正原因。
返回列表