求分析讨论:AVR工控板稳定性分析
本帖最后由 roken2000 于 2013-7-17 11:26 编辑Hi,All,
我们做的项目用的是CPU板+底板的方式,一台设备用5块板,首台样机中,其中一个机械模块约几个小时会出现一次输出异常动作,分析不是程序的原因(CPU通过串口打印调试信息,确实没有输出此信号,但是录像监控底板的输出灯确实亮了),真心求助,这个问题已经分析三天了,设备出货压力大呀,觉都睡不好......
我们做了以下工作:
1.更换整套控制板(怀疑控制板问题,换了三次)
2.将CPU板直接焊接在底板上(怀疑CPU板和底板接触不良)
3.控制板供电从设备中拉出,单独开关电源供电(怀疑供电)----其中底板24V输入,加入DC/DC模块5V隔离输出给CPU板
4.将输出直流马达、传感器、伺服电机重新走线(怀疑接触不良或干扰)
5.将设备内所有接插件重新接插排查
但是现象依旧出现,且出故障的控制板和其他模块的控制板交换,仍旧是该模块出故障,而其他模块(不过其他模块结构和动作与此模块不同,不能类比)不出......
现在跟踪问题怀疑到是CPU输出总线(数据线、地址线、WR/RD)受到干扰,导致输出受到一次错误的锁存数据(输出异常时,再输出一轮新的数据可以矫正回来),各位看看CPU板的原理图设计或者器件选型有无问题,谢谢呀......
昨晚老化跑机,跑了一晚上,没出现问题,结果今天早上又出现了一次异动作......
人都快疯了{:mad:}......
希望大家发表意见,集思广益才能解决问题呀... 是灯还是继电器误动作?既然是CPU没有输出,那就是直接干扰了执行电路。特别是有长线的情况下。查查这里吧,实在不行给这一路加上硬件滤波 wajlh 发表于 2013-7-17 11:29 static/image/common/back.gif
是灯还是继电器误动作?既然是CPU没有输出,那就是直接干扰了执行电路。特别是有长线的情况下。查查这里吧 ...
CPU板的74AHC573出来信号到底板,底板将此信号加上光耦隔离去驱动MOSFET,MOSFET去驱动直流电机......
从录像监控观察应该是异常信号被锁存到了74AHC573,因为输出异常不是脉冲信号,是持续信号,一直等到下一次新的数据刷新到74AHC573才能矫正回来。 怀疑LZ的程序中共享资源没有处理好 只在一个特定的位出现异常? Flyback 发表于 2013-7-17 11:52 static/image/common/back.gif
只在一个特定的位出现异常?
不是在特定的位...... marshallemon 发表于 2013-7-17 11:36 static/image/common/back.gif
怀疑LZ的程序中共享资源没有处理好
marshallemon,您的意思是中断或者其他地方改变了这个输出?
24路输出确实是long型的全局变量,但是绝对没有在中断中去操作过这个变量......
我们在输出函数的接口那里加了串口调试信息,在监控录像出现异常点时,串口调试信息确实没有让输出执行这个输出动作的。
所以,应该不是软件的问题,硬件的问题可能性稍微大一些...... 哦,这样啊,如果外接锁存就要注意了,注意空闲状态了锁存信号的电平,防止干扰意外的造成锁存信号从而形成误动作,另外试着给这个锁存信号线增加下驱动能力 另外还要仔细考虑芯片之间接口电平之间的匹配。另外再搜索“总线竞争”看看 估计是你的电路受到EMI的干扰导致形成的。你在你的马达和电机这些要处理好干扰的屏蔽处理, 传感器信号线你必须要包屏蔽层,电机的电源线你需要接磁环做滤波处理,电机的电源端子需要用电容接外壳滤波处理,你板子的电源部分最好用磁珠或者多孔砖做滤波处理。 用的什么编程,可能程序有问题 要求高可靠性的设备上,一般不会用到总线开放的片子的,总线开放会带来很多意想不到的问题。 如果是CPU板上的问题,74HC573应该是被CPU操作了 —— 只不过此操作并非程序有意为之,估计还是程序什么地方有 BUG ! xjmlfm1 发表于 2013-7-17 12:37 static/image/common/back.gif
要求高可靠性的设备上,一般不会用到总线开放的片子的,总线开放会带来很多意想不到的问题。 ...
不能同意你的观点,PLC能驱动那么多点,没有总线难道都靠CPU的IO去控制?也没见有什么问题么 会不会问题出在PCB上面? 大概看了一下你的电路在附件的电路上你最好做下处理你做的LC滤波器在达到你的lc谐振点时你的这里会出现峰化现象,然而这个锋化尖峰干扰是个致命的干扰,你可以用示波器或者频谱仪观察得到这个点的锋化现象。串一个几欧的电阻后就能抑制锋化现象。
大多的干扰肯定来自你的电机部分。 AVR本身抗干扰能力还是很强大的,曾经用到高干扰场合。没出过问题。
CPU的Datasheet上要求不要用74HC573,推荐用74AHC573,那配套的74hc138和74hc00是不是也要上个高速性能的IC呢?下午去趟华强北,搞点74AHC138和74AHC00回来换上,死马当活马医了,哎,试一下...... Wxy8030 发表于 2013-7-17 12:40 static/image/common/back.gif
如果是CPU板上的问题,74HC573应该是被CPU操作了 —— 只不过此操作并非程序有意为之,估计还是程序什么地 ...
这个不好说,真的不好说,因为程序是另外一个小伙子写的,但是整体的底层框架是我提供的,应该还好,我再查查!我怀疑的还是硬件问题居多...... 用排除法,你说的出错没说清楚,去掉强干扰源的设备实验看看会有无问题 wbq_88@126.com 发表于 2013-7-17 12:30 static/image/common/back.gif
估计是你的电路受到EMI的干扰导致形成的。你在你的马达和电机这些要处理好干扰的屏蔽处理, 传感器信号线你 ...
wbq_88@126.com 说的是,不过设备中这个模块只有一个伺服和一个步进,8个直流电机,比其他模块伺服和步进还少,单就是这个模块出问题......
之前这边的直流马达输出都是两芯线直接拉过去的,还没有搞屏蔽线,看来要找点屏蔽线试试了...
对看不见的EMI没什么经验呀,郁闷,向前辈学习! 本帖最后由 alias 于 2013-7-17 13:27 编辑
要真正明白原因,就要使用逻辑分析仪,设定为输出异常触发,把触发点设在缓冲记存的 90%。 怀疑程序是不是有bug,比如原子操作,逻辑临界状态?
串口打印调试信息或许监控不到呢,用外部的监控方式监控输出看看。。。 wbq_88@126.com 发表于 2013-7-17 12:30 static/image/common/back.gif
估计是你的电路受到EMI的干扰导致形成的。你在你的马达和电机这些要处理好干扰的屏蔽处理, 传感器信号线你 ...
让小伙子拿着手电钻和砂轮机,和设备供一个排插,在控制板前猛转,没事{:sweat:} ,我倒是希望这个异常现象能频发一下,可惜经常一搞就是几个小时才出现一次,太耗时间捕捉了,哎~~~ 关于M128总线上挂的数字器件 ,我说说以前做的一个板子,
1.总线输出开关信号,用的74HC273,WR和地址线连接到74HC02输入上,74HC02的输出作为273的输出时钟;
2.读取器件的是74HC245,地址线接OE,RD接DIR引脚。
没有用138来作为地址译码,直接PC0~PC7作为片选引脚使用,所以器件地址和138的就不一样了。
单片机时钟是14.7456MHz,设备已经出货几百台了,前后也三年了,没有出现个总线部分问题。
建议楼主在M128的总线操作上,读 / 写操作插入两个等待周期。输出新地址之前还要插入一个等待周期。反正是开关量操作,一点点的时间延迟也无所谓。
楼主加强一下控制器的硬件设计,在抗干扰性上多下下功夫。 marshallemon 发表于 2013-7-17 12:19 static/image/common/back.gif
哦,这样啊,如果外接锁存就要注意了,注意空闲状态了锁存信号的电平,防止干扰意外的造成锁存信号从而形成 ...
数据线、地址线和RD/WR等线是否有必要加上拉电阻增强驱动能力呢?我们做技术的总监建议加上拉电阻。加上拉电阻要加20来个,需要重新布一版PCB了,但是还怕有其他的问题... erxun 发表于 2013-7-17 14:58 static/image/common/back.gif
关于M128总线上挂的数字器件 ,我说说以前做的一个板子,
1.总线输出开关信号,用的74HC273,WR和地址线连 ...
刚查了下程序,SRWn1和SRWn0均配置成了1,确实是读/写操作插入两个等待周期,输出新地址之前还要插入一个等待周期。
这个慢一点不会影响程序控制的,但是多一些时序余量,对电路要求稍微低一些。
刚仔细分析了一下逻辑,貌似还是能走得通,看来还是好好好算一下时序余量够不够。
erxun 发表于 2013-7-17 14:58 static/image/common/back.gif
关于M128总线上挂的数字器件 ,我说说以前做的一个板子,
1.总线输出开关信号,用的74HC273,WR和地址线连 ...
erxun,你用的74HC273,这个是上升沿锁存,锁存的信号是地址和WR通过74HC02(或非门)出来,那么应该是地址线为低且WR为低时,数据线被锁存进74HC273。看楼上的AVR单片机外部总线时序图,应该在WR的下降沿,AVR的数据线被锁存到指定的74HC273了。
而我用的是74HC573,这个是高电平直通,低电平不通,也可以74HC573是下降沿锁存,74HC573的锁存信号是138译码(低有效)输出取反(自己和自己进74HC00与非)输出。经分析应该是在WR的上升沿,AVR的数据线被锁存到指定的74HC573,理论上来说,我这个时序余量比你的应该更多才对......
哎,不知道为什么你的稳定性这么好,我也要查一下PCB的问题了...... 本帖最后由 marshallemon 于 2013-7-17 17:09 编辑
roken2000 发表于 2013-7-17 15:10 static/image/common/back.gif
数据线、地址线和RD/WR等线是否有必要加上拉电阻增强驱动能力呢?我们做技术的总监建议加上拉电阻。加上 ...
值得一试,数据地址线先不加,只把控制信号线先加上上拉测试,我看你用的是HC系列的片子,你考虑扇出系数了吗?如果你操作的速度不是太快,有没有考虑过使用LS系列的试试 marshallemon 发表于 2013-7-17 17:06 static/image/common/back.gif
值得一试,数据地址线先不加,只把控制信号线先加上上拉测试,我看你用的是HC系列的片子,你考虑扇出系数 ...
总线上只挂接了3路74AHC573,5路74HC245,其中74HC245是输入到CPU总线的,会算作CPU的扇出吗?如果不算的话,只扇出3路74AHC573,应该能力够吧? 本帖最后由 roken2000 于 2013-7-17 18:12 编辑
另外一个前辈建议不要用WR和RD引入74HC138,用CPU的ALE来代替这两个信号进74HC138,然后RD和WR来去接245和574......
但是我只用了高8位地址线中的3位来做译码,请问各位,我有必要用ALE信号吗? roken2000 发表于 2013-7-17 17:25 static/image/common/back.gif
总线上只挂接了3路74AHC573,5路74HC245,其中74HC245是输入到CPU总线的,会算作CPU的扇出吗?如果不算的 ...
这样来说貌似也没啥问题,先把控制线加上拉试试再说吧
页:
[1]