STM32 I/O引脚烧坏现象,检测方法以及原因分析
(IID:从不产生代码和电路,只是代码和电路的搬运工)
背景前言:在最近的项目中遇到两次烧坏STM32 I/O引脚的情况,第一次烧坏是在机器运行了有将近一个月的时候发生的(那时候也不知道是I/O脚烧坏),感觉是其他什么不可预知的偶发原因导致的,所以没去细查,将新的芯片替换上去,发现能用;但几天后第二次烧坏发生了,就感觉肯定有某种原因在其中,当天就在查找各种资料,咨询公司大牛,后来细细想,两次烧坏前都有同一个操作在其中,就是将电机控制板的电源热插拔了一次(热插拔就是在机器没关机状态下,强硬断电再上电),也忘了但是为什么需要这么迷得操作,好像当时都是在调电机(其中一只电机轴承坏掉了)。
现象:单片机普通I/O(非电源和时钟引脚)烧坏,当时的芯片是发烫,手摸上去是停留不了十秒。但观察到我自己定义的系统指示灯还在工作(当程序运行正常时系统指示灯按照我定义的亮灭频率闪烁),就很容易判定不是程序出问题了,同时也可以确定单片机重要的部件还是正常的。这时就有可能单片机的某个I/O口引脚过流、过压、火花、浪涌等冲击给打坏了。
检测方法:虽然能大概知道是引脚烧坏了,但本着谨慎的原则还是将机器断电,用万用表测量了所有电源引脚和地有没有短路(结果当然是没有,要是有的话,电源部分电路会冒烟)。然后将时钟等重要I/O引脚对地测量电阻:经我实测,正常的引脚对地电阻阻值是以M为单位(即1M欧姆以上),若遇到万用表显示是0的时候特别要注意,它有可能是对地开路状态或者阻值超出所选用的量程,也有可能是对地短路了。这时切换万用表为短路检测档位,再次测量该引脚对地的短路状态,若果万用表蜂鸣器没有bee声响,那么该引脚是对地开路或者测量的阻值量程小于该引脚对地的电阻值;如果万用表蜂鸣器bee声响起,那么恭喜你,定位到烧坏的引脚了(***要注意量的是非地I/O引脚对地的阻值和短路状态哦!!!***)
机器上的芯片发烫,以及回忆了两次引起该现象都进行了电机控制器电源热插拔,所以对该部分特别细心的测量,各种量程测试,结果发现单片机控制左电机控制器的换向引脚对地电阻只有几欧姆到十几欧姆,用短路检测档位检测该引脚和地之间,果然万用表bee声响起。此刻世界都和平了。就排查这个问题,查找网上的资料,对比官方资料,看电路图,花了差不多一天时间。
原因分析:问题定位在调试过程中占绝大部分时间和精力,也是调试bug的最重要过程,当然定位到了问题值得高兴,但定位问题的根本目的是要分析怎么引起该问题的,以及这个问题的解决办法;在我的项目过程中热插拔电机驱动电源,导致电机驱动器和电机的电能倒灌进单片机I/O引脚,导致该引脚承受大电流而烧坏;为什么我说的是电流而不是电压呢?如下图所示:
stm32普通I/O都有上下两个钳位二极管,将输入的电压进行钳位,所以它不大可能会因为电压而打坏引脚。(以下是鄙人愚见,若是我理解得不对或者说得不对,还请各位大牛评论指正,感谢!!!)
保护二极管的钳位作用分析:
(1)当有个比芯片供电电压高的电压从I/O引脚端输入进来,那么两个保护二极管的状态是:上面的二极管导通,下面的保护二极管截止。因为二极管的最大导通压降是0.7v(硅管压降0.6-0.7v;锗管压降:0.2-0.3v),那么此时I/O引脚端的电压最高为(VDD_FT + 0.7)v
所以只要二极管不坏,就不可能是电压引起引脚烧坏的现象。
(2)当有个比芯片GND的电压还要低的电压从I/O引脚端输入进来,那么两个保护二极管的状态是:上面的二极管截止,下面的保护二极管导通。因为二极管的最大导通压降是0.7v(硅管压降0.6-0.7v;锗管压降:0.2-0.3v),那么此时I/O引脚端的电压最低为(VSS - 0.7)v
,VSS即GND,(VSS - 0.7)= - 0.7v,因而也不会是过低的电压打坏引脚。
(3)如果是VSS 到 VDD_FT 的电压从引脚输进来,那就属于我们正常使用的情况,单片机正常采集该状态,也不会打坏引脚。
因而,鄙人推断是电流打坏了我的单片机引脚。
解决方法:如果使用的是自带上下保护二极管的单片机,则在I/O引脚到控制器端之间串一个1K - 10K的电阻(如果所需要的是电压驱动)将双向的电流限流,以至于保护引脚不会被过流而打坏。
如果使用的单片机内部没有上下保护二极管,则需要自己外接两个保护二极管,再串一个1K - 10K 的电阻,从电压和电流双方面保护单片机i/o口引脚。
最终的电路图会如下图所示
花了一个多小时编写整理,以上皆是初涉电子世界的小菜鸟的小小见解,如有错误,还望各位大牛指正,同时也拓宽我的知识面,如果有所遗漏没有谈到,还望各位大牛补充,期待与大家一起进步!万分谢谢!!! |