【www.arisingsemi.com--软件制图】

烧毁
STM32烧毁的原因
自己想搞过平衡车,于是参照网上的最小系统搞了个电路图,很简单就是最小系统。控制两个步进电机,步进电机驱动芯片是A4988,就是那种3D打印机常用的电机驱动。

电路分两块,一块是最小系统,一块是步进电机驱动插板及电源模块。最小系统采用的是网上买的转接板,100脚的转接板,芯片是STM32F103VBT6。
最小系统很简单,就是加个晶振,两个电容。然后就是去耦电容。
去耦电容焊在两个杜邦插脚上。其实要更简单是晶振都可以不要。
板子背面加了滤波电容,找了两个钽电容焊上。
第一次用钽电容,本来一看以为是画线那边是负极,因为觉得跟二极管一样,还有就是普通的电解电容也标记的是负极。不过还是上网查了下,才发现钽电容画线那边是正极。差点犯错爆掉。
另外还加了个贴片二级管做指示灯。就这样上电,用ST-LINK V2,芯片很容易就读出来了。然后下载程序点灯,都OK。
下载些网上的程序做各种实验一点问题都没有。最小系统是成功了。 
然后是转接板了,用洞洞板,把网上买得1117-3.3v的电源模块焊上去。再加了电机驱动A4988的插座,以及最小系统的插座,还有网上买得MCU6050模块。然后是洞洞板飞线。
飞线感觉好麻烦,好多线。
电源采用的是普通12V开关电源。A4988驱动电机用12V。STM32用3.3V。


电源接入方式是采用5.5*2.1MM 电源座 DC-005,没有安装开关。然后下载程序。
测试。
电机转动正常。
试了下平衡,有些问题。开始调试,不过突然间,就闻到一股焦糊味道。发现1117电源芯片烧了。取下1117芯片测量电源短路,再把最小系统取下来发现就不短路了。
 测了下最小系统电源正负极短路。原来STM32正负极短路了。     
于是上网搜索,”STM32 短路”发现好多搜索结果,都是STM32容易烧成VCC和GND短路,包括意法半导体官方论坛都有这样的帖子。
 有的说要加EVD什么,有的说电源要加什么压敏电阻,或双向二极管,以及什么防静电焊接等等。网上搜索了几十篇帖子,都是电源短路,但是都没有说清楚原因。   
我想是不是因为我的 电源不好,于是在1117前面加了个7805芯片,先把电压降到5V,再降到3.3V。
 于是乎立马开始焊接,很快搞好,试机,OK。通电正常。
      
又开始测试平衡,心想这下没什么事了。可以没过多久,突然又出问题了。发现STM32又烧成电源短路。好心疼啊,上QQ群各种咨询,无果。
还遇到共鸣,有的QQ好友也有这种情况。
有的说A4988驱动需要光耦隔离等等意见,不过我发现我家的3D打印机,用的就是A4988驱动,与ARDUINO控制板IO都是直接连接并没有采用光耦隔离。想了很久都没有想出问题的所在,于是想是不是飞线太多,那里短路了。于是想自己画电路板。
于是开始了漫长的画电路板之路,没有多少时间,慢慢学习。半年多了才慢慢画出了电路板。
电源模块 
步进电机模块。
 晶振模块 启动设置及指示灯模块 
USB模块
MPU6050和蓝牙模块插座。

最小系统模块
步进电机模块设置了4个,这样以后不用平衡车后,还可以做其他用途。可以多驱动两个步进电机。

这是PCB.
OK一切搞定,找人帮忙制作了PCB双面板。
手工制作的双面板,过孔都是用电阻引线焊接的。

PCB正面。


PCB背面。

焊好原件,心里之爽啊。这下可以好好玩一下了。


这是我的平衡车,用两个35步进电机做的。平衡车支架是用3D打印机打的。网上有支架卖,但是有点小贵,还好家里有3D打印机自己DIY一个吧。
好一切 组装到位OK,平衡车终于稳稳的站起来。不过程序不是自己编的,什么PID驱动不是很懂。
只是把IO端口给改过来就OK了。
可是好景不长,没多久,STM32又短路了。还把78M05电源芯片都烧了。
感觉好困难啊,是不是不太专业的原因啊。又是上网搜索答案,QQ群里请教,还是没有找到真正原因。
QQ群里面还有的人说已经烧了100多片STM32了。很恼火。
网上搜很久都没有找到解决方案。烧了4片STM32后,我再也不敢试了,反复的想原因。
在未焊接STM32芯片的情况下用万用表测得5V,及3.3V的电源输出都很正常。
还好家里买了台示波器,还是拿示波器先看看什么原因嘛。
接上示波器一看吓一跳。原来在刚插上电源瞬间,又很高电压。
瞬间的波动一下就没有了。大喜,以为找到原因了。
是这个电源不好,另外又换了几个电源,都是这个情况。有点茫然了。

然后又到面包板电源上去实验,发现插上的瞬间也有这个情况。不过面包板电源有个开关,我关掉开关,再打开开关却没有瞬间的电源波动。按动开关和插拔插头,得到的是不同结果,于是仔细研究插头结构,发现这种DC-005插头每次插拔的时候是先接触到正极,再接触到负极。恍然大悟。一定要先接通负极再接正极。

接下来采取了三个措施防止STM32烧毁,
1.在电源正极处加一个开关。

2.在STM32与12V驱动模块连接IO口上加一个1K电阻。
3.在STM32正极电源处加一个150mA的自恢复保险。
(应为芯片规格书上说STM32最大电流150mA)。
然后把STM32芯片焊上去,开始试验。
就再也没有烧毁STM32。
也不知道上面三种方案的那种起了作用。
最后偶然看到一篇文章“闩锁效应”,才知道真正原因是闩锁效应,是CMOS工艺所特有的寄生效应,严重会导致电路的失效,甚至烧毁芯片。闩锁效应是由NMOS的有源区、P衬底、N阱、PMOS的有源区构成的n-p-n-p结构产生的,当其中一个三极管正偏时,就会构成正反馈形成闩锁。

要真正解决“闩锁效应”当系统由几个电源分别供电时,开关要按下列顺序:开启时,先开启COMS电路的电源,再开启输入信号和负载的电源;关闭时,先关闭输入信号和负载的电源,再关闭COMS电路的电源。所有以前单电源5V供电就从来没烧过芯片。但是要满足这种开关顺序也是很麻烦,要用两个开关,而且不小心开关顺序出错还得烧毁芯片。
于是自行设计了个,双电源,高电压延迟通电电路。如图,当上电时用一个PMOS开关控制电源12V关闭。等到7805稳定输出电压后,给电容C5充电,然后Q4,三极管导通,带动Q3 PMOS导通,满足了先开信号电源,后开高压动力电源的要求。
关闭时没有想到更好的办法就采用电容延迟的方法。 关闭12V电源后高压侧的电容小,低压侧采用大容量电容器。 所以就是先关闭了高压电源,低压侧由于电容储电量大,延迟一会儿再断开电源。
于是彻底解决了困扰多年的STM32烧毁问题。(注:根据网上查询资料,讨论STM32烧毁的帖子,最早是在2010年)。

本文来源:http://www.arisingsemi.com/it/56565/