干扰害死人-单片机抗干扰问题(不知为啥结不了贴)
本帖最后由 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、源程序(简化版)以及实物图 示波器显示的,并不是楼主以为观测到的。 本帖最后由 cjseng 于 2012-1-9 22:22 编辑
我这样尝试过:
在控制电磁阀动作前,将定时器周期改到最大,再执行喂狗,然后控制继电器动作(改变控制继电器的IO电平)随后退出中断,立即进入空闲状态,此时PC计数器停止,定时器仍在运行,但由于定时器周期被延长,有60几毫秒的时间,单片机就处于空闲状态,而继电器、电磁阀的触点抖动也在此时间之内发生,这样一来基本不再发生程序跑飞。
但是,这样改的结果就是:数码管刷新有停顿,用户也接受不了。看样子要改成液晶显示的才行。 示波器显示的,并不是楼主以为观测到的。
mcuisp 发表于 2012-1-9 22:09 https://bbs.21ic.com/images/common/back.gif
是的,我也怀疑这个问题,因为是一个带存储功能的手持示波器,用普通示波器还发现不了。
有可能是示波器本身的抗干扰性能也不咋的,干扰以无线电波的方式串入示波器了,但起码证明,现场确实存在较大的干扰。 本帖最后由 dengm 于 2012-1-10 09:58 编辑
建议用 P89v51rd2,看一下情况。 建议用 P80v51rd2,看一下情况。
dengm 发表于 2012-1-9 22:32 https://bbs.21ic.com/images/common/back.gif
手头没这个芯片呢。
不过我想就算这个芯片能解决问题,不过是把问题掩盖起来了。 把地线搞好,防止浮电在身(对地测试下设备带电情况) 还是看下最初的小批量和后续生产的差异,有哪些区别。 液晶显示应该好不了的,液晶模块也会受干扰的。干扰确实是头痛的问题,用开关电源试试看 单片机都跑飞了还不复位
这叫什么狗啊!
估计是喂狗的时机不对
跳入了另一个死循环 根据楼主描述的现象,不像是由于电磁阀动作引起交流电源波动而引入的干扰,有可能是电磁阀动作导致电磁阀的引线上有大幅度电流变化,产生较强的电磁干扰,单片机的5V电源引线受到串扰。楼主可以试试尽量缩短24V电磁阀的电源引线,尽量缩短单片机的5V电源引线,并让电磁阀的引线远离5V电源引线。 现场有什么其他干扰厉害的东西吧,几个继电器电磁阀不至于把单片机干扰死的 从楼主的叙述看,应该是传导干扰,建议楼主加“EMI滤波器”并不是楼主所说加“防浪涌滤波器”,如果问题依旧,建议楼主再修改单片机外围电路或PCB布局(特别是单片机的电源回路处理) 你的电磁阀是什么参数的啊 ???? 是不是PCB板上IC电源引脚的去耦电容离IC电源引脚远,没起到作用 老大误入歧途了吧.
不要老怀疑电源.小心你的地线.....
建议找个人考虑帮你布线一下......
供电上考虑一下.2v太大了...
是不是你电源功率太小啊....
唉.我也是胡猜,见谅 “单片机5V电源上产生一小串毛刺,幅度有正负2V以上,持续时间在数十微秒”——这个 是用 电容很难 滤去的。
考虑, 将 变压器 的 金属屏蔽罩 接 “大地”。 怎么会这么脆弱呢?
我以前实验一个产品,用就220V直流接触器的控制线圈和产品的电源进线,缠绕在一起N圈,
并且直流接触器的线圈不并反向二极管,反复开关直流接触器都没关系。
不知楼主是否只有一块板,要是设备有几块板子,要注意板子之间的连接线。
期待楼主最终给出问题解决答案。 MCU软件“定时器0产生一4毫秒中断,每隔4毫秒将看门狗清0” 也不合理。
Watchdog 一般应该在 主程序中 “动作”,而不应该是 某个 中断服务程序。 应该不用看门狗,把这个问题解决掉,才是应该有的态度。