• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

神烦的单片机干扰问题

做了一个产品,在家里测试一切正常,到客户那里测试一开始也完全正常,开始小批量供货,第一批没问题,从第二批开始,故障不断,症状就是:单片机程序跑飞。

本来一直自诩为单片机老鸟,做过的产品也有几十种了,没想到在这个问题上栽了跟头。

简单描述一下产品:

输入:有三路外接IO信号,一个由光电开关产生,用于计数,一个急停开关,还有一个按钮用于手动控制,这三路信号全部经光耦隔离后输入;

输出:三个继电器,继电器输出控制设备上的中继继电器,由中继继电器再去控制三个24V电磁阀的通断,我线路板上的继电器是单独供电,与单片机电源不共地,用光耦隔离后再驱动继电器的。

其它就是几个数码管、按键以及蜂鸣器,没什么特别的。

PCB布局上,输入、输出在线路板边缘,与单片机距离较远,单片机周围覆铜屏蔽。

电源采用双组输出的变压器(带屏蔽),有硬件看门狗,每个芯片电源端有0.1uf瓷片电容。

不带负载时,一切功能正常,用白炽灯做负载也完全正常,可到了用户那儿就不正常。数次前往用户现场,均无功而返。

程序结构是:主程序负责将看门狗信号置1,之后就进入空闲方式,等待定时中断唤醒,除此啥也不干,定时器0产生一4毫秒中断,每隔4毫秒将看门狗清0,刷新一次显示输出,读取一下按键以及外部输入,根据输入状态确定输出信号。

故障发生时:数码管乱闪,但仍可相应外部IO信号以及按键信号,大约2秒后,看门狗动作,单片机复位,处于待机状态。我判断就是程序跑到我的程序空间外面去了。

我更换了各种单片机,原来用的是AT89C52,换成AT89S52之后,跑飞的几率几乎加大了10倍,换华邦的52,比S52好,但是比C52差,STC的表现和S52差不多,换新茂的也不行。

我用示波器观察单片机电源,每当外部电磁阀动作时,单片机5V电源上产生一小串毛刺,幅度有正负2V以上,持续时间在数十微秒。当时我认为只要将电源上的毛刺解决掉就可以了。

但是,接下来我傻眼了,无论我用什么办法,5V电源上的毛刺无法消除,包括在产品的电源输入端加防浪涌滤波器,在5V电源上串电感,并10uf钽电容,在5V电源上并5.1V稳压管,甚至我单独再做一个5V电源,只要此电源和设备共用一组交流电,毛刺就是没办法消除。

后来我发现,将这个产品用的双组输出的变压器移到壳子外部,程序跑飞明显减少,但是客户不允许外置电源。我将变压器用锡箔纸包裹起来,故障还是一样,将单片机用金属屏蔽罩罩住,还是不行。

无意中发现,我的示波器探头根本不需要接触到线路板,只要将探头与接地夹短接,放在设备附近,每次电磁阀动作时,示波器上就能出现一幅度正负2V以上的毛刺信号。

自此,对于这个产品的问题我实在是无能为力了。

烦请各位有什么高招尽管支招吧。

附件含原理图、pcb、源程序(简化版)以及实物图

抗干扰.zip

 

全部回复(68)
正序查看
倒序查看
daylight
LV.4
2
2014-02-12 16:34
建议用 P89v51rd2,  看看是什么情况
0
回复
btclass
LV.7
3
2014-02-12 22:59

1:根据症状来看,不是电源问题。因为数码管闪时候,还会响应按键。

2:推断是判断按键状态时用了太多轮询。按键受干扰时候,造成代码在此处停留太久。造成狗动作,由于MCU复位,数码管闪烁,按键动作是很慢的,所以感觉操作还会响应。

3:或许IO口受了较强脉冲,使得IO口锁定。尤其是MCLR脚,会造成复位。

4:建议:每个按键IO口并上0.01U贴片电容,靠近MCU。

5:所有输入IO口串上100欧电阻。

0
回复
glzhao
LV.6
4
2014-02-13 08:48
根据你的描述你的单片机应该是受到干扰导致的,主要的干扰来自于供电,你可以改为使用模块电源作为供电试一下应该可以解决问题。
0
回复
cltwolf
LV.5
5
2014-02-13 09:45

看了您的电路板好晕,看不清楚哪和哪。

一、您是否有把+12V和+5V的电源线路完全的隔开了?

二、两个电源的电源布线是否过长导致了回路在电磁环境中形成了天线接收(就无线充电那样子)?

三、哥们,你的电源后面好歹加个电感吧,电磁环干扰大,抗干扰电路起码给它个基本的配置啊。这个干扰你在示波器看起来是2V,那是无负载,无滤波的情况下产生的。那么内部是什么样子大家都不知道。

0
回复
dapeng
LV.5
6
2014-02-13 18:36
@cltwolf
看了您的电路板好晕,看不清楚哪和哪。一、您是否有把+12V和+5V的电源线路完全的隔开了?二、两个电源的电源布线是否过长导致了回路在电磁环境中形成了天线接收(就无线充电那样子)?三、哥们,你的电源后面好歹加个电感吧,电磁环干扰大,抗干扰电路起码给它个基本的配置啊。这个干扰你在示波器看起来是2V,那是无负载,无滤波的情况下产生的。那么内部是什么样子大家都不知道。

我看估计也是布板的问题

0
回复
glzhao
LV.6
7
2014-02-14 09:11

你的整体的板子布局比较混乱,没有明确的区分数字地、模拟地。数字信号与模拟信号的区分没有造成干扰导致单片机受到干扰造成错误。

0
回复
2014-02-15 16:53
@glzhao
你的整体的板子布局比较混乱,没有明确的区分数字地、模拟地。数字信号与模拟信号的区分没有造成干扰导致单片机受到干扰造成错误。
是啊,PCB 布局很重要,但PCB LAYOUT最重要的就是GND处理,如地没走好,这产品就什么问题都可能发生。
0
回复
2014-02-15 16:55
@btclass
1:根据症状来看,不是电源问题。因为数码管闪时候,还会响应按键。2:推断是判断按键状态时用了太多轮询。按键受干扰时候,造成代码在此处停留太久。造成狗动作,由于MCU复位,数码管闪烁,按键动作是很慢的,所以感觉操作还会响应。3:或许IO口受了较强脉冲,使得IO口锁定。尤其是MCLR脚,会造成复位。4:建议:每个按键IO口并上0.01U贴片电容,靠近MCU。5:所有输入IO口串上100欧电阻。
上面是PCB高手啊,説很有道理。
0
回复
backin
LV.4
10
2014-02-22 20:39
把地线搞好,防止浮电在身
0
回复
daylight
LV.4
11
2014-02-22 20:42
液晶显示应该好不了的,液晶模块也会受干扰的。干扰确实是头痛的问题,用开关电源试试看
0
回复
backin
LV.4
12
2014-02-22 20:43
现场有什么其他干扰厉害的东西吧,几个继电器电磁阀不至于把单片机干扰死的
0
回复
金鱼1
LV.3
13
2014-02-22 20:45
从楼主的叙述看,应该是传导干扰,建议楼主加“EMI滤波器”并不是楼主所说加“防浪涌滤波器”,如果问题依旧,建议楼主再修改单片机外围电路或PCB布局(特别是单片机的电源回路处理)
0
回复
cloud7890
LV.2
14
2014-02-22 20:47
你的电磁阀是什么参数的啊 ?
0
回复
heal
LV.3
15
2014-02-22 20:49
是不是PCB板上IC电源引脚的去耦电容离IC电源引脚远,没起到作用?
0
回复
01夏至
LV.2
16
2014-02-22 20:53
不要老怀疑电源.小心你的地线.....建议找个人考虑帮你布线一下......供电上考虑一下.2v太大了...是不是你电源功率太小啊....唉.我也是胡猜,见谅
0
回复
stony_s
LV.3
17
2014-02-22 20:54
“单片机5V电源上产生一小串毛刺,幅度有正负2V以上,持续时间在数十微秒”——这个 是用 电容很难 滤去的。考虑, 将 变压器 的 金属屏蔽罩 接 “大地”。
0
回复
elio
LV.2
18
2014-02-22 20:55
怎么会这么脆弱呢?我以前实验一个产品,用就220V直流接触器的控制线圈和产品的电源进线,缠绕在一起N圈,并且直流接触器的线圈不并反向二极管,反复开关直流接触器都没关系。不知楼主是否只有一块板,要是设备有几块板子,要注意板子之间的连接线。
0
回复
vidas
LV.2
19
2014-02-22 20:57
@elio
怎么会这么脆弱呢?我以前实验一个产品,用就220V直流接触器的控制线圈和产品的电源进线,缠绕在一起N圈,并且直流接触器的线圈不并反向二极管,反复开关直流接触器都没关系。不知楼主是否只有一块板,要是设备有几块板子,要注意板子之间的连接线。
建议楼主用个最简单的闪灯程序,做实验看看是否一定是硬件问题
0
回复
candyman
LV.2
20
2014-02-22 20:58
@elio
怎么会这么脆弱呢?我以前实验一个产品,用就220V直流接触器的控制线圈和产品的电源进线,缠绕在一起N圈,并且直流接触器的线圈不并反向二极管,反复开关直流接触器都没关系。不知楼主是否只有一块板,要是设备有几块板子,要注意板子之间的连接线。
电磁阀处理一下看看。二极管什么的。一定要在无看门狗的情况下,把问题解决了,才是正确的思路。电感不行,可以换电阻啊。反正大电容加了。另外,测量电源的时候,示波器的探头地,应该接同一个最大的电容的两端。不要到处找地接。
0
回复
pirate
LV.4
21
2014-02-22 21:03
@elio
怎么会这么脆弱呢?我以前实验一个产品,用就220V直流接触器的控制线圈和产品的电源进线,缠绕在一起N圈,并且直流接触器的线圈不并反向二极管,反复开关直流接触器都没关系。不知楼主是否只有一块板,要是设备有几块板子,要注意板子之间的连接线。
楼主的可能是电磁波串入,可以在继电器的驱动电源上想想法,比如降低驱动前后沿坡度。
0
回复
heal
LV.3
22
2014-02-22 21:05
@candyman
电磁阀处理一下看看。二极管什么的。一定要在无看门狗的情况下,把问题解决了,才是正确的思路。电感不行,可以换电阻啊。反正大电容加了。另外,测量电源的时候,示波器的探头地,应该接同一个最大的电容的两端。不要到处找地接。
跟第一批比一下看区别,有时候就一点小细节问题,没发现
0
回复
god_father
LV.3
23
2014-02-22 21:07
@pirate
楼主的可能是电磁波串入,可以在继电器的驱动电源上想想法,比如降低驱动前后沿坡度。

LZ说过MCU用铜皮屏蔽了.若此屏蔽完善,那么干扰是从管脚进入的.即传导进入MCU.对于此问题,用最简单的办法就应该行吧:1

1)电源线上磁珠+0.01u电容;

2)复位线上用0.01u并上.

3)各引出脚.....

0
回复
god_father
LV.3
24
2014-02-22 21:07
@god_father
LZ说过MCU用铜皮屏蔽了.若此屏蔽完善,那么干扰是从管脚进入的.即传导进入MCU.对于此问题,用最简单的办法就应该行吧:11)电源线上磁珠+0.01u电容;2)复位线上用0.01u并上.3)各引出脚.....
当然78XX的输入端也要接CLC,再到地并二极管.
0
回复
soap泡泡
LV.4
25
2014-02-22 21:09
@heal
跟第一批比一下看区别,有时候就一点小细节问题,没发现
元器件批次不同,其它完全一样。
0
回复
soap泡泡
LV.4
26
2014-02-22 21:10
@daylight
液晶显示应该好不了的,液晶模块也会受干扰的。干扰确实是头痛的问题,用开关电源试试看
我是考虑液晶不用一直刷新,但受干扰确实也有问题,开关电源装不下的,体积受限。
0
回复
matou
LV.3
27
2014-02-22 21:12
@god_father
LZ说过MCU用铜皮屏蔽了.若此屏蔽完善,那么干扰是从管脚进入的.即传导进入MCU.对于此问题,用最简单的办法就应该行吧:11)电源线上磁珠+0.01u电容;2)复位线上用0.01u并上.3)各引出脚.....
看门狗会起作用的,复位周期是2秒,用的硬件看门狗MAX813L。跑飞后2秒左右必定会重启,没有看门狗就一直飞着了。
0
回复
soap泡泡
LV.4
28
2014-02-22 21:15
@cltwolf
看了您的电路板好晕,看不清楚哪和哪。一、您是否有把+12V和+5V的电源线路完全的隔开了?二、两个电源的电源布线是否过长导致了回路在电磁环境中形成了天线接收(就无线充电那样子)?三、哥们,你的电源后面好歹加个电感吧,电磁环干扰大,抗干扰电路起码给它个基本的配置啊。这个干扰你在示波器看起来是2V,那是无负载,无滤波的情况下产生的。那么内部是什么样子大家都不知道。
修改PCB布局可以考虑,但改动不会太大,因为整机就一块线路板,上面有数码管、按键,位置不能变。
0
回复
daylight
LV.4
29
2014-02-22 21:17
@god_father
LZ说过MCU用铜皮屏蔽了.若此屏蔽完善,那么干扰是从管脚进入的.即传导进入MCU.对于此问题,用最简单的办法就应该行吧:11)电源线上磁珠+0.01u电容;2)复位线上用0.01u并上.3)各引出脚.....

1.看门狗在中断里喂确实不好,应在主循环程序里喂。其实也不一定是看门狗动作,而是复位动作。5V电源的高频扰动时,MCU的复位脚很容易受干扰,可以加大复位PIN的电容。

2。干扰,要么是串扰,要么是空间辐射干扰。相对来说,空间辐射干扰对数字电路影响比较小。因此重点放在串扰上面分析。

3。IO已经通过光耦隔离,可以暂时排除。重点在电源变压器上面处理。串扰可以通过初次级绕组的层间分布和耦合电容形成通路。建议先用金属壳DC/DC隔离模块尝试一下。再确定下一步如何处理。

0
回复
soap泡泡
LV.4
30
2014-02-22 21:18
@elio
怎么会这么脆弱呢?我以前实验一个产品,用就220V直流接触器的控制线圈和产品的电源进线,缠绕在一起N圈,并且直流接触器的线圈不并反向二极管,反复开关直流接触器都没关系。不知楼主是否只有一块板,要是设备有几块板子,要注意板子之间的连接线。
只有一块线路板,全部是插件,没有贴片元器件。我现在买了三个老式的交流接触器作为负载在家里测试,基本上动作1000次,会有5次跑飞。我把接触器与我的控制器拉开距离到1米以上,差不多1000次跑飞一次。我的控制器外壳是铁壳子,全封闭的。
0
回复
金鱼1
LV.3
31
2014-02-22 21:19
@soap泡泡
只有一块线路板,全部是插件,没有贴片元器件。我现在买了三个老式的交流接触器作为负载在家里测试,基本上动作1000次,会有5次跑飞。我把接触器与我的控制器拉开距离到1米以上,差不多1000次跑飞一次。我的控制器外壳是铁壳子,全封闭的。
电磁阀和单片机控制电路是一个电源么?怀疑是电源瞬时功率不够·····电磁阀供电端加个大电容试试
0
回复