打印

干扰害死人-单片机抗干扰问题(不知为啥结不了贴)

[复制链接]
191270|642
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cjseng|  楼主 | 2012-1-9 22:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 cjseng 于 2012-8-6 21:50 编辑

重现画了线路板,问题已解决。

做了一个产品,在家里测试一切正常,到客户那里测试一开始也完全正常,开始小批量供货,第一批没问题,从第二批开始,故障不断,症状就是:单片机程序跑飞。
本来一直自诩为单片机老鸟,做过的产品也有几十种了,没想到在这个问题上栽了跟头。

简单描述一下产品:
输入:有三路外接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

315.26 KB

评分
参与人数 1威望 +1 收起 理由
蜂蜜大王 + 1 赞一个!

相关帖子

沙发
mcuisp| | 2012-1-9 22:09 | 只看该作者
示波器显示的,并不是楼主以为观测到的。

使用特权

评论回复
评分
参与人数 2威望 +2 收起 理由
shujie418 + 1 赞一个!
cjseng + 1
板凳
cjseng|  楼主 | 2012-1-9 22:15 | 只看该作者
本帖最后由 cjseng 于 2012-1-9 22:22 编辑

我这样尝试过:
在控制电磁阀动作前,将定时器周期改到最大,再执行喂狗,然后控制继电器动作(改变控制继电器的IO电平)随后退出中断,立即进入空闲状态,此时PC计数器停止,定时器仍在运行,但由于定时器周期被延长,有60几毫秒的时间,单片机就处于空闲状态,而继电器、电磁阀的触点抖动也在此时间之内发生,这样一来基本不再发生程序跑飞。
但是,这样改的结果就是:数码管刷新有停顿,用户也接受不了。看样子要改成液晶显示的才行。

使用特权

评论回复
评论
李晓倩 2014-4-8 22:24 回复TA
www.91mh.cc/comic/12834/ 斗破苍穹漫画 
地板
cjseng|  楼主 | 2012-1-9 22:20 | 只看该作者
示波器显示的,并不是楼主以为观测到的。
mcuisp 发表于 2012-1-9 22:09

是的,我也怀疑这个问题,因为是一个带存储功能的手持示波器,用普通示波器还发现不了。
有可能是示波器本身的抗干扰性能也不咋的,干扰以无线电波的方式串入示波器了,但起码证明,现场确实存在较大的干扰。

使用特权

评论回复
5
dengm| | 2012-1-9 22:32 | 只看该作者
本帖最后由 dengm 于 2012-1-10 09:58 编辑

建议用 P89v51rd2,  看一下情况。

使用特权

评论回复
6
cjseng|  楼主 | 2012-1-9 22:43 | 只看该作者
建议用 P80v51rd2,  看一下情况。
dengm 发表于 2012-1-9 22:32

手头没这个芯片呢。
不过我想就算这个芯片能解决问题,不过是把问题掩盖起来了。

使用特权

评论回复
7
bd7qwmcu| | 2012-1-9 23:50 | 只看该作者
把地线搞好,防止浮电在身(对地测试下设备带电情况)

使用特权

评论回复
8
Ball1234| | 2012-1-10 00:02 | 只看该作者
还是看下最初的小批量和后续生产的差异,有哪些区别。

使用特权

评论回复
9
Wayner| | 2012-1-10 08:33 | 只看该作者
液晶显示应该好不了的,液晶模块也会受干扰的。干扰确实是头痛的问题,用开关电源试试看

使用特权

评论回复
10
xxdcq| | 2012-1-10 08:46 | 只看该作者
单片机都跑飞了还不复位
这叫什么狗啊!
估计是喂狗的时机不对
跳入了另一个死循环

使用特权

评论回复
11
ShakaLeo| | 2012-1-10 09:03 | 只看该作者
根据楼主描述的现象,不像是由于电磁阀动作引起交流电源波动而引入的干扰,有可能是电磁阀动作导致电磁阀的引线上有大幅度电流变化,产生较强的电磁干扰,单片机的5V电源引线受到串扰。楼主可以试试尽量缩短24V电磁阀的电源引线,尽量缩短单片机的5V电源引线,并让电磁阀的引线远离5V电源引线。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
lyfly_away + 1 很给力!
12
受不了了| | 2012-1-10 09:19 | 只看该作者
现场有什么其他干扰厉害的东西吧,几个继电器电磁阀不至于把单片机干扰死的

使用特权

评论回复
13
zhsymy| | 2012-1-10 09:35 | 只看该作者
从楼主的叙述看,应该是传导干扰,建议楼主加“EMI滤波器”并不是楼主所说加“防浪涌滤波器”,如果问题依旧,建议楼主再修改单片机外围电路或PCB布局(特别是单片机的电源回路处理)

使用特权

评论回复
14
123654789| | 2012-1-10 09:40 | 只看该作者
你的电磁阀是什么参数的啊 ????

使用特权

评论回复
15
lhx522729| | 2012-1-10 10:44 | 只看该作者
是不是PCB板上IC电源引脚的去耦电容离IC电源引脚远,没起到作用

使用特权

评论回复
16
icecut| | 2012-1-10 10:59 | 只看该作者
老大误入歧途了吧.

不要老怀疑电源.小心你的地线.....

建议找个人考虑帮你布线一下......
供电上考虑一下.2v太大了...

是不是你电源功率太小啊....

唉.我也是胡猜,见谅

使用特权

评论回复
17
hyhmh| | 2012-1-10 11:17 | 只看该作者
“单片机5V电源上产生一小串毛刺,幅度有正负2V以上,持续时间在数十微秒”——这个 是用 电容很难 滤去的。
考虑, 将 变压器 的 金属屏蔽罩 接 “大地”。

使用特权

评论回复
18
shizaigaole| | 2012-1-10 11:18 | 只看该作者
怎么会这么脆弱呢?
我以前实验一个产品,用就220V直流接触器的控制线圈和产品的电源进线,缠绕在一起N圈,
并且直流接触器的线圈不并反向二极管,反复开关直流接触器都没关系。

不知楼主是否只有一块板,要是设备有几块板子,要注意板子之间的连接线。

期待楼主最终给出问题解决答案。

使用特权

评论回复
19
hyhmh| | 2012-1-10 11:20 | 只看该作者
MCU软件“定时器0产生一4毫秒中断,每隔4毫秒将看门狗清0” 也不合理。
Watchdog 一般应该在 主程序中 “动作”,而不应该是 某个 中断服务程序。

使用特权

评论回复
20
shizaigaole| | 2012-1-10 11:21 | 只看该作者
应该不用看门狗,把这个问题解决掉,才是应该有的态度。

使用特权

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

本版积分规则

63

主题

4243

帖子

46

粉丝