打印
[51单片机]

急急!!STC单片机芯片内部短路和管教损坏问题

[复制链接]
9135|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xwm0007|  楼主 | 2014-7-21 23:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
各位大侠,小弟的一款STC11F60XE做的工控产品,今年在一个客户手上出现单片机短路和I\O损坏的情况,但是这个问题去年几乎没有,现在我电路也没有更改,单片机供电电压是4.8V,I\O最高电压在5.2V以内,都在允许范围内,坏掉的I\O都是键盘的I\O,本人用HC595和3个单片机输入叫来扩展键盘,单片机输出通过ULN2003来控制继电器,继电器控制电磁阀和接触器,
 现在个人怀疑要么是干扰打坏了芯片,要么有静电,但是线路板都封装的比较好啊,我机器是24V的开关电源供电,输入的24V经过EMC滤波后由34063A变成5V給单片机系统供电,键盘输入的3个管教接了10K的上拉电阻,各位大侠帮我分析下,到底是什么原因,急啊!!!

相关帖子

沙发
xwm0007|  楼主 | 2014-7-21 23:09 | 只看该作者
补充下,34063输出电压最高是5.18V左右,然后因为要掉电保存,该电压经过SS14后給单片机供电,其他的5V芯片用5.18这个电压,所以单片机的最大电压不会高与4.9V,I\O的最高电压正常不会高与5.18,但是就这样今年都烧了10多块了,基本就是换上单片机就有好了,我不知道是否我的电路设计有隐患还是单片机质量问题啊

使用特权

评论回复
板凳
l4157| | 2014-7-22 00:40 | 只看该作者
通常I/O电压不要超过GND-VCC,你这是设计隐患。单凭你的描述不上图,不好分析你的设计...

使用特权

评论回复
地板
peter_wjp| | 2014-7-22 09:05 | 只看该作者
HC595到STC IO中间加限流电阻了么?我记得STC说明书上写如果电压不匹配,需要加限流电阻,大概为330欧,IO为输入模式时候,属于开漏状态,不加限流电阻容易把IO内部的管子烧坏的。对于单片机本身而言,外部上拉10K仅仅对提高输出驱动有帮助。最关键的还是要看HC595,如果这个芯片输出时候为强推挽输出,或者强上拉,那么依然会导致STC做为输入时候管脚电流过大。如果是属于需要靠外部上拉(内部为开漏模式)来提高驱动能力,那么你的电路应该没问题。但是我感觉这种情况应该不存在,这种片子原厂没有要求一定要带外部上拉提高驱动能力的。

使用特权

评论回复
5
xwm0007|  楼主 | 2014-7-22 12:31 | 只看该作者
l4157 发表于 2014-7-22 00:40
通常I/O电压不要超过GND-VCC,你这是设计隐患。单凭你的描述不上图,不好分析你的设计... ...

我马上上图,请前辈务必指导,小弟写谢谢了

使用特权

评论回复
6
xwm0007|  楼主 | 2014-7-22 12:35 | 只看该作者
peter_wjp 发表于 2014-7-22 09:05
HC595到STC IO中间加限流电阻了么?我记得STC说明书上写如果电压不匹配,需要加限流电阻,大概为330欧,IO ...

您的意思也就是说我的I/O电压比单片机电压高了0.3V左右,所以需要限流电阻对么?还有您看这样的损坏是否有静电打坏的可能性,因为这个问题是今年发现的,我机器出了2年左右,所以刚开始我还以为是单片机批次的问题,现在看来应该是设计上有BUG

使用特权

评论回复
7
xwm0007|  楼主 | 2014-7-22 12:43 | 只看该作者
peter_wjp 发表于 2014-7-22 09:05
HC595到STC IO中间加限流电阻了么?我记得STC说明书上写如果电压不匹配,需要加限流电阻,大概为330欧,IO ...

原理图1.pdf (54.97 KB)








使用特权

评论回复
8
peter_wjp| | 2014-7-22 13:22 | 只看该作者
xwm0007 发表于 2014-7-22 12:35
您的意思也就是说我的I/O电压比单片机电压高了0.3V左右,所以需要限流电阻对么?还有您看这样的损坏是否 ...

如果你之前损坏的大部分集中在按键的端口上,应该是设计上有bug。 即便是键盘那一侧在认为操作时存在静电,但是中间应该间隔一个595吧。单片机IO口不是直接参与键盘扫描的对吧

使用特权

评论回复
9
xwm0007|  楼主 | 2014-7-22 13:31 | 只看该作者
peter_wjp 发表于 2014-7-22 13:22
如果你之前损坏的大部分集中在按键的端口上,应该是设计上有bug。 即便是键盘那一侧在认为操作时存在静电 ...

您看我的原理图,单片机有3个管脚直接参与按键的扫描,595输出端逐一输出低电平,然后单片机的3个输入管脚来判断那列有低电平,结合软件和定时器,就可以扫描按键

使用特权

评论回复
10
wh6ic| | 2014-7-22 13:57 | 只看该作者
估计是键盘引入静电干扰导致。验证:连好机,上电运行。打8KV空气放电,键盘有外露的金属部件时还需要打4~6KV接触放电。看打个5~8次,MCU 的 IO 会不会完蛋。
整改措施:三个输入各串22R电阻及磁珠电感,然后并472电容到地,再进 MCU IO,也许到键盘板的电源、地也要串电阻和磁珠。

使用特权

评论回复
11
peter_wjp| | 2014-7-22 14:02 | 只看该作者
xwm0007 发表于 2014-7-22 12:43

keyscan程序里是高电平有效还是低电平有效?
假设当KEY_IN0输出为高的时候,检测KEY_OUT0-3的输入?是不是这种扫描方式?
如果单片机针对KEY_OUT0-3输入口在上电初始化后没有进行端口工作方式进行配置,那么默认情况下为准双向极弱上拉,当定义为输入时候需要先写1,关闭引脚内部所有上拉,此时输入的电平才有效,否则端口上的无论低电平还是高电平,都会直接被内部直接拉低,都为0,不错只要向端口写1关闭内部场效应管,这个时候输入数据是直接连到内部触发器的,此时理论上是不会损坏端口的,
所以关键在于
1. 595输出的电平假设为高,这个时候直接进入直接进入芯片引脚,如果电流过大,可能会损坏内置的器件
2. KEY_OUT0-3的定义为输入是在程序初始化时候写1的 还是进行键盘扫描时候操作的

我查了下595的输出端口内部结构,使用了一个NMOS和PMOS组合的方式实现输出1或者0,也就是说如果输出1相当于端口直接与电源相连。其实就相当于单片机端口直接接了电源,电流应该很大吧。

使用特权

评论回复
12
xwm0007|  楼主 | 2014-7-22 14:13 | 只看该作者
本帖最后由 xwm0007 于 2014-7-22 14:19 编辑
peter_wjp 发表于 2014-7-22 14:02
keyscan程序里是高电平有效还是低电平有效?
假设当KEY_IN0输出为高的时候,检测KEY_OUT0-3的输入?是不 ...

HC595输出低电平时候,如果有按键按下,那么检测那三个管脚,那个是低电平,从而来确定按键,也就是说低电平有效,实际上HC595的输出是keydata[]={0x7f, 0xef, 0xdf, 0xbf, 0xf7, 0xfb, 0xfd};,这几个数据轮回扫描的,也就是说同一时刻每次只有一个输出低电平,其余都是高电平

使用特权

评论回复
13
xwm0007|  楼主 | 2014-7-22 14:23 | 只看该作者
wh6ic 发表于 2014-7-22 13:57
估计是键盘引入静电干扰导致。验证:连好机,上电运行。打8KV空气放电,键盘有外露的金属部件时还需要打4~6 ...

我的键盘和单片机是同一个板子,键盘在正面,单片机在反面,按键是12*12的贴片轻触开关,真个板子是塑料封装,然后按键面再贴上PVC的贴膜,再安装的机箱里面,如果是静电问题,您看我吧这3个输入串接100欧的电阻,然后再结3个SMAJ5.0CA这个型号的TVS管到地,然后再连到单片机,这样是否有效

使用特权

评论回复
14
wh6ic| | 2014-7-22 14:27 | 只看该作者
xwm0007 发表于 2014-7-22 14:23
我的键盘和单片机是同一个板子,键盘在正面,单片机在反面,按键是12*12的贴片轻触开关,真个板子是塑料 ...

可以试一试。
如果接TVS,建议放前面好点。5V的TVS动作电压一般在6.xV以上了,IO不一定能顶得住。

使用特权

评论回复
15
xwm0007|  楼主 | 2014-7-22 14:38 | 只看该作者
wh6ic 发表于 2014-7-22 13:57
估计是键盘引入静电干扰导致。验证:连好机,上电运行。打8KV空气放电,键盘有外露的金属部件时还需要打4~6 ...

如果选磁珠那个规格的合适,我没有用过这个东西啊,真是惭愧

使用特权

评论回复
16
wh6ic| | 2014-7-22 14:52 | 只看该作者
xwm0007 发表于 2014-7-22 14:38
如果选磁珠那个规格的合适,我没有用过这个东西啊,真是惭愧

100R@100MHz或更大的吧,这里不要求大电流的。选阻抗高些的。

使用特权

评论回复
17
xwm0007|  楼主 | 2014-7-22 15:00 | 只看该作者
wh6ic 发表于 2014-7-22 14:52
100R@100MHz或更大的吧,这里不要求大电流的。选阻抗高些的。

多谢您的指教

使用特权

评论回复
18
peter_wjp| | 2014-7-22 15:25 | 只看该作者
xwm0007 发表于 2014-7-22 14:13
HC595输出低电平时候,如果有按键按下,那么检测那三个管脚,那个是低电平,从而来确定按键,也就是说低电 ...

会不存在这么一种可能 当2个键同时被按下时候,存在KEY_OUT0-2上的输入口直接相连。如果三个按键同时按下呢,那就是三个输入端口同时相连?  比如说J3, J4, J5同时按下。

STC说明书里写,尤其是键盘扫描时候,如果定义端口为输入,需要先在向端口写1,在此之后存在2个周期的推挽输出,此时输出电流很大的,然后才变为输入,而另外一个引脚如果还没有被定义输入(还没写1) 那么在推挽输出一段时间内会存在CMOS电路两个输出引脚直接相连,会导致端口损坏的。

公司网络没办法上传截图,我是在STC的官方手册里看到的。
不知道端口输入状态初始化在哪里执行的,是在keyscan里还是上电后就执行,如果在keyscan里 就有问题了。使用者很有可能同时按动2个并排的按键。

使用特权

评论回复
19
xwm0007|  楼主 | 2014-7-22 15:51 | 只看该作者
peter_wjp 发表于 2014-7-22 15:25
会不存在这么一种可能 当2个键同时被按下时候,存在KEY_OUT0-2上的输入口直接相连。如果三个按键同时按下 ...

程序在开机的时候确实没有初始化这几个I/O,都是在扫描的时候直接判断是否有信号输入,
case KEY_WAIT:
                if(KeyTimeout())
                {
                        KeyToStep(KEY_SCAN, 0);
                }
                if(IO_KEY_IN0==1 && IO_KEY_IN1==1 && IO_KEY_IN2==1)
                        KeyToStep(KEY_FREE, 0);
                break;
    case KEY_SCAN:
        for(i=0; i<7; i++)
        {
            keyscan(keydata);
            if(IO_KEY_IN0 == 0)
            {
                if((i*3+KEY0) == K_6)
                {
                    KeyToStep(KEY_6, 3000);     //     按下6号键3秒钟
                    break;
                }
                else
                {                    
                    KeyToStep(KEY_UP, 0);
                    return i*3+KEY0;
                }
            }

使用特权

评论回复
20
peter_wjp| | 2014-7-22 16:33 | 只看该作者
xwm0007 发表于 2014-7-22 15:51
程序在开机的时候确实没有初始化这几个I/O,都是在扫描的时候直接判断是否有信号输入,
case KEY_WAIT:
   ...

1.三个端口做为输入口,程序里并没有进行端口输入配置,此时端口实际上为弱上拉准双向。
2.按键检测的是低电平有效,如果检测的是高电平 那么有可能程序就不起作用了,因为此时必须要配置为输入才可以。(我回去自己也测试下,呵呵)
3. 至于是不是因为端口短路 我仔细看了下STC的文件,是在一个为输出 另外一个为输入的状态下才会发生(并且是在配置输入的过程中)  你的程序里没有对端口进行配置,所以 理论上不会出现这个问题,而且你没有针对端口输出进行任何操作。仅仅是读取状态而已。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

37

帖子

1

粉丝