打印

用ARM7做工控板的血泪史...同时向大家求助...

[复制链接]
11614|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zq1987731|  楼主 | 2008-12-25 00:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    毕业后半年了才搞出这么个项目——ARM7工控板作为PLC用在公司的电柜中,其中走了不少弯路...主要因为全程没师傅带,全公司就我一人搞弱电,而单位里这块的重视程度较低,总之就是保险丝烧了心疼,电感0.3元一个嫌贵的情况,以至于买个示波器我都求了老半天...然后经过一块PCB加工近2月的乌龟速度后,第一稿终于搞定了,效果还算可以,隔离式PWM/数字/模拟量输入输出,隔离式通讯等等还算有模有样的。
    美中不足的是MCU片内只有8K的SRAM,偏要用来实现三菱的那些软元件,用到位变量的地方数不胜数...早知道就上Cortex_M3也不会选ARM7TDMI的方案了...这下可好,玩起8192个成员的位段结构体那就是一个恶心...最终导致驱动写完还没加梯形图程序,C代码+注释就有1.5M大小...编译后50多K的样子...
    然后...好不容易能让梯形图跑起来了,运行时如果按正常工作情况拖动大功率负载只要动作不是很频繁就没问题,但通过人为的摧残就很容易发生问题..
    例如同一个插座上接了个电焊机然后不间断疯狂工作,一段时间后工控板就会有看门狗动作记录(24V, 5V, ±15V, 3.3V互相隔离式多组供电),同时接个类似于大电流开关之类,只要开了就有很响声音的东西,我是不太清楚那是什么,据说开关瞬间电压会跌落得很厉害然后就升到很高的这么个东西,人为的狂拨它,就这么循环得开-关-开-关...几百次后也会有看门狗复位记录...够郁闷的...
    电源部分考虑到抗干扰的要求,上了隔离式DC-DC,1000V的隔离电压,现在看来用处不大,应该是隔离电压不够所致的吧?
    为此我现在是准备上个2000V隔离的AC-DC,连变压器都省了,然后加些保护措施:
    220VAC -> 共模扼流圈 -> (压敏电阻+TSS) -> 安规电容XY -> AC-DC模块 -> 对应直流电压 -> 共模扼流圈 -> 单向TVS -> 系统
    或者是后级再加一级5V To 5V,6000V隔离的DC-DC专为MCU系统供电...
    不知道这样是否可行?目前来说干扰还是以传导为主,虽然可以用10ms周期的无限看门狗复位抗干扰法忽悠过去,但这只是掩盖问题而不是解决问题,所以只好决定把电源部分推倒重来......

===========================================================
追加的内容(2009年1月13日):
    最近又有了些进展,还是母校设备好,脉冲群/雷击/静电等等的实验都做得了,然后~~没想到3个压敏电阻1个TVS的组合就能抗住1500V/1MHz的尖峰干扰,浪涌还没试(放电管没加...)
    目前准备先从主板上下手了~~加入一系列措施,使其在使用之前那个初稿电源供电时能挡住4000V/1MHz的干扰,然后再将电源彻底完善下,双保险..
    然后再参照三菱,欧姆龙,西门子等PLC厂商的设计在能通过相关抗干扰标准的情况下进一步削减削减再削减(这一步是老板要求的- -)...
    话说...那个干扰源仪器组合还真够强的,示波器的探头没夹上,仅仅放在旁边都能完整显示干扰波形...可见辐射的能量不容忽视...为此高祖抗输入端的处理就要额外小心了...继续努力去,希望这稿能完美些(需要重新画板了...因为要换外壳)。

相关帖子

沙发
vwwj| | 2008-12-25 09:44 | 只看该作者

这样搞

  AC转成DC24V,这个时候继电器啥的高用电器件就可以用24V驱动,
  同时一个好处就是外部可以直接输入24V电压

  然后再用2405隔离电源模块转成5V,供给一般器件
  最后用1117LDO转成3.3V低纹波供给MCU
  3.3V滤波后再供给模拟部分

  布板的时候尽量使用顶层,底层全铺铜作为屏蔽
  板子上打上一圈安装孔,装上直立铜柱后上面再平行安装一块屏蔽板
  这样构成一个法拉第鼠笼,有干扰才鬼了

使用特权

评论回复
板凳
wswh2o| | 2008-12-25 09:53 | 只看该作者

法拉第

使用特权

评论回复
地板
古道热肠| | 2008-12-25 10:09 | 只看该作者

工控类的产品工艺相当重要

使用特权

评论回复
5
HWM| | 2008-12-25 10:14 | 只看该作者

只要是产品,工艺都重要,否则连一致性都难保。

使用特权

评论回复
6
zq1987731|  楼主 | 2008-12-25 19:44 | 只看该作者

多谢Mr.vwwj的指点!

    法拉第鼠笼......原来还有这么个东西啊...- -
    我现在的供电,是LM2596搭的两路开关电源,然后上路的24V一组供给开关量输入点(输出点则是使用外部电源,我的系统只提供晶体管输出),下面的另一路是5V就是最重要的了...
    用到的DC-DC均接在是5V的下路...未隔离的5V仅仅供应光耦隔离的串口外部,然后通过两个DC-DC(顺源的1000V隔离——5V转5V以及5V转±15V,前者供给ARM系统,后者供给ARM系统的模拟部分)
    系统部分则是有DC-DC的输出5V供电,这里有5V及3.3V供电的器件共存,3.3V是由1117-3.3转换而来的,5V与3.3V之间的电平转换上我采用了74LVC4245...干扰的话应该主要是集中在这里了..
    然后模拟部分...由于我用的ARM是ADI的ADuC7026,自带12路12位AD输入以及4路12位DA输出,由线性光耦隔离的方案被老板否定了...说是没必要(其实是成本高)- -...这部分要求4路0.00V~10.00V的电压或是4~20mA的电流输入,2路0.00V~10.00V电压或是4~20mA电流输出,考虑到接单电源的话即使采用rail-to-rail的运放也无法做到0.00V,所以没办法上了±15V的双电源以及对应的OP,才达到要求,当然一切基于向“省”看齐,所以为输出电流垫高4mA的方案直接被否定...AD输入也仅仅通过分压、采样电阻的方法(ARM自带的AD,DA其基准源为2.5V)而最失败的是这部分既然也采用了隔离式DC-DC,那本该和数字部分分开的,但由于±15V输出的电流过小,转成3.3V的模拟部分供电必然出现问题,只好从系统供电那头通过100M/600欧磁珠及小电阻隔离一下数字供电后接入模拟供电部分,无奈下只能将模拟与数字部分分开布局但最终的地通过一磁珠连接到一起.......
    
    先简单介绍下装配情况:这个产品外壳用的是单位里现有的塑料壳,CPU板下方直接就是电源板和变压器,很可能是导致干扰存在的源头,CPU板上方为IO板,实际上光耦等等是装在CPU板上的,所谓的IO板上仅仅就只有相关的LED以及2个DB-9接口。全手工装配四轴飞行器器介入(这句话反过来说该多好)
    下面我介绍下今天捣鼓了一天所发生的情况:
    (1)按昨天那样接,装入电柜,狂按交流接触器,很快就有复位记录。考虑到传导的方式,决定看看是传导干扰还是辐射干扰。
    (2)将下方电源板独立接到柜子外面,情况比之前有所好转,但交流接触器平均动作4X次复位仍然会产生,于是采用干扰抑制手段:在220V输入变压器的电源入口按XY方式接了3个471的压敏电阻吸收浪涌,同时在电源板上两路AC整流输出部分都并了双向TVS抗尖峰脉冲,情况消除,交流接触器一直动作近千次无复位记录输出,然后又试了好久,一切正常,开心无比,幼稚得认为干扰已消除...
    (3)将电源板重新装回CPU板下面固定好后再次运行,下方的交流接触器动作100多次后再次出现看门狗复位记录...不信邪再试了好几次后确定,最后在交流接触器动作的1000次中有9次复位记录,看样子仍然不行......
    (4)最终确认不仅有传导干扰还有辐射干扰,晕倒...没有相关设备,干扰频谱不得而知,只好走一步算一步,用了正反绝缘但中间有导电层的屏蔽贴纸盖住变压器及开关电源板,问题再度消除,交流接触器超快速度动作N千次无复位记录,暂时松口气...准备试试接下去同一电源插座上烧电焊时的抗干扰程度了...
    
    接下去考虑到应该是电源部分的问题,于是准备采用AC-DC模块了,这样变压器都省了还可以节约成本,85V~265V输入,24V-0.2mA,5V-1A双隔离输出2000V隔离电压的,报价是40元一个,考虑到现在用的这个R型铁芯的变压器都快这价格了......正好换了一了百了...然后准备试试Mr.vwwj的“法拉第鼠笼”...看看抗干扰能力如何...
    软件方面虽然属于被动保护,但有总比没有强...具体实现就是软硬看门狗结合使用,具体的就是PLC梯形图每执行一个循环都复位一次软看门狗,软看门狗被设置为不产生复位信号而是跳入最高优先级的特殊中断程序中,也就是20ms没喂狗就认为程序跑飞(三级流水线下梯形图翻译的C指令编译后虽然要大量使用位段浪费效率但一次700行的梯形图扫描仍在100μS内),直接进入特殊中断处理程序做过相关处理后直接软复位,接着跳过相关初始化(防止无意义的重复初始化)以最快速度接替上次的操作继续运行,由于数据都未丢失,相关的软计数器甚至软定时器仍能继续运行,对应的输出也由相关算法控制以保证不输出全0状态,不然有的外部设备在接收到0信号后会停止运转,即使重新发出1也无济于事从而导致错误...硬件看门狗设为1S,由一个同属于高优先级的定时器每隔100ms就启动中断服务程序去喂,这样可以在连中断都无响应的最糟糕状态下得以借助硬件看门狗直接重启...
    

使用特权

评论回复
7
E007| | 2008-12-25 19:55 | 只看该作者

在中断里喂狗???

    当程序跑飞时来了中断,中断是不是还会从正确入口进入?跑飞的主程序难道能因为这样跑回来吗?

使用特权

评论回复
8
zq1987731|  楼主 | 2008-12-25 20:41 | 只看该作者

猛然发现帖子前有个“酷”...受宠若惊中

    其实之所以采用交流接触器,大功率电机,电焊机等等干扰源设备是因为没有干扰源产生装置,价格昂贵老板接受不了- -...于是只好像现在这样采用工业现场最坏环境的模拟了,同时PCB因为造价问题,老板是铁了心要用双层板,而我则**四层板...最后........谁叫人家是老板呢...只好从双层板上考虑抗干扰了...所以就有了这么些问题...当然也不是说四层板就一定能杜绝干扰,但公司里现有的PLC,其内部的CPU板几乎都是四层甚至更多的,从某种程度上来说也是种暗示吧...
    而软件部分因为考虑到PLC编程需要将梯形图转换为C语言再加入RealView MDK编译的办法,所以仍需使用例如三菱梯形图,通过解析其文件结构取出相关梯形图对应语句,直接使用词法/语法分析工具并通过设定的规则将其转换为C语句,也就是小型编译器...又是棘手的类型,哎~~真是多灾多难的项目啊...

    下面废话一下个人经历以及工作半年的感受:
    简单概括一下自己就是...“差一点”类型...
    小学考初中快班,差一点...初中考高中因为迷上网游,没上重点是预料中的,没想到连普高都差一点...进了技校,然后开始研究计算机,玩起了VB和C,同时由于帮一玩游戏的朋友一起架私服莫名其妙得获得了Linux下一些服务器,数据库等等的知识...第三年终于不再颓废参加了三校高考,目标计算机专业本科...又是...竟然又是差一点...进了应用电子的大专,深受打击...然后借助计算机的基础考了全国计算机四级,同时常驻实验室跟着老师做项目,参加了一次全国大学生电子设计竞赛,赛区二等奖草草收尾...感觉功力不够仍需锻炼,猛然发现英语四级只有最后一次机会了,又猛然发现想专升本必须要英语四级,晕倒...专业课玩过头了,于是拼命努力英语,最后...差一点就考出来了(郁闷)...然后就只好毕业了,事后由老师介绍了家单位,2200的工资+三金(没公积金- -),虽然和那些英语好的同学们没得比,但也凑合凑合了...
    开始工作了才知道,向往中设备齐全的公司没戏了...想用个可调稳压电源那要自制,示波器只有模拟的,万用表只有指针式(公用)的,电阻只有E-24规格表中的系列阻值(还不全...),以及一个8051仿真器...简直就是...惨不忍睹...然后被告知,老板本人几十年前搞过弱电,其余一个搞弱电的都没有...再次晕倒...可以请教问题的老师傅也成了幻想...
    老板的目的是开发一个新的工控板取代某些进口PLC....之后好不容易盼来了2000RMB的数字示波器(60M),160RMB的万用表(仍然是公用),然后边学边做,由于PCB加工,元器件采购等等因素拖延了至少3个月,以至于搞到现在产品才刚有个轮廓...总算是谢天谢地...
    当然长久呆下去也不是办法...毕竟这个企业是以搞强电和机械为主的,虽然可以培养独立能力,但现在看来已经不是独立了,而是孤立...
    所以我就继续边学习边工作,准备2010年直接考研(专科生毕业后2年可以获得考研资格),不知道我的想法怎样...希望大家给点意见...


     

使用特权

评论回复
9
zq1987731|  楼主 | 2008-12-25 20:45 | 只看该作者

To Mr.E007

主要起作用的其实是软件看门狗,我将其设置为20ms的周期,只要这个周期不去喂,那么会由该软件狗的中断服务程序将跑飞的程序拉回起点(而不是直接产生复位信号),定时器中断中喂狗只是喂硬件狗,目的在于死机死到连中断都进不了的情况下进行硬件复位,也就是所谓的“软硬狗结合使用”

使用特权

评论回复
10
huangqi412| | 2008-12-25 21:07 | 只看该作者

LZ很厉害...

使用特权

评论回复
11
zq1987731|  楼主 | 2008-12-25 21:22 | 只看该作者

补充:软硬狗结合使用的好处在于...

    如果我的系统产生异常了,同时一个负载需要运转20秒,特点是驱动晶体管导通及另一些外因就运转,只要驱动晶体管断开,恢复三极管的导通该设备也不会运转,也就是必须要将开始那个接通状态维持20秒不间断,那么如果系统正好死机了,通过硬件看门狗,复位+重启+初始化等等时间有足足150ms,而且初始化中为安全考虑晶体管输出都会断开,那么不就满足不了要求了么?
    所以我启用了一个软件看门狗,并禁止其产生复位信号,不然无异于一个不太可靠的硬件看门狗,但启用其最高优先级服务程序触发的功能,在该中断程序中有现场的保护以及输出的合法性(特别是当前输入点状态)分析确保没有非法输出,由于整个程序中加了不少软件陷阱,程序乱飞也无法造成破坏性结果,所以在维持输出的同时不必再次进行初始化,在保持内部所有单元数据的同时启用软复位命令,系统的软定时器就会继续走下去,由于ARM的运算速度超快,所以假设PLC的梯形图一个循环需要100μs,软定时器处理,输入输出更新等等最多800μs,中断时间损失(按所有中断同时运行一遍时间计算)整个周期最多1.2ms,也就是说我可将软看门狗的复位周期设定为3ms,并在主循环中循环清软看门狗,只要复位则能在最多5ms中恢复到之前工作状态,硬件狗的话可没这速度...调用另一定时器中断去清硬件看门狗只是为了确保万无一失..这几天的抗干扰实验中,系统复位无数次,但只有非易失事件计数器记录复位次数增加没有卡住及误动作的情况(即使在疯狂死机的情况下)说明还是基本满足要求的...
    由于软定时器的时基为10ms,所以造成的最坏结果就是负载运转了:
    (1) 20秒, 这个是需要运转的时间
    (2) -9.99毫秒~+9.99毫秒,这个是系统软定时器时基误差,例如刚申请个100毫秒的定时器时基就+1,那么实际得到的定时时间是90.1毫秒这样情况,我想大家在用定时器复用时应该都碰上过这情况,由于我的工控板控制的系统几乎都是“秒”级动作时间,所以这个影响就不大了。
    (3) 5毫秒,这个是软件看门狗的复位并重新跳转进主循环需要时间的最大值。
    以上三个因素加在一起就是负载实际运转时间,几乎对“20秒”本身毫无影响...

使用特权

评论回复
12
E007| | 2008-12-25 21:48 | 只看该作者

不错,支持下~

    象你这样考虑非常周全的电子工程师们,我想现在真的不多,从各种大大小小,形形色色的产品当中就可以看得出来,没有几个是细心认真做出来的,要么外观不好,要么板卡做的低劣,要么就是软件毛病太多人性化/安全稳定性不够,有的更是给你意想不到的操作方法,真够头疼的!
    我大力支持你~~~希望成为工程师的揩模~~~

使用特权

评论回复
13
linqing171| | 2008-12-25 22:11 | 只看该作者

半年做出这样来不容易。

这个喂狗是够复杂的。还有程序拉回起点的,以前也见过一个。
看来楼主被逼的快上梁山了。梁山上的人都是用的非正规的做法。

使用特权

评论回复
14
zq1987731|  楼主 | 2008-12-25 22:15 | 只看该作者

过奖了...

    其实这个系统中目前而言有许多的不足,例如PCB布局上只考虑了二维封装无冲突,没想到三维封装冲突了...只好学人家园艺师用剪刀修剪接插件.....-_-!
    当然这个系统还没这么容易就算完工了,还有个带GUI的上位机等着做呢...现在底板上之所以不用操作系统,主要因为:
    (1)即使UCOS,商用也是要版权费的...全公司所有软件均为盗版及免费版的情况下,老板绝对不会答应...用Linux的话,目前所用的ARM7不够格...
    (2)用了RTOS势必带来资源占用过多的情况...目前资源已经捉襟见肘(不仅是SRAM,FLASH也快不够了)
    (3)我写的这个软件中所有实时事件都是基于中断的,像是SPI,I2C,串口等等传送,而且有目前的软硬件狗的复位机制,已类似于RTOS中要死只死一个任务的情况,连通过检测仍然可以将死了的任务恢复的功能也一并包括了...
     
    然后就是带GUI的上位机了,这个平时都在发呆,只是用来设定参数等等的,对抗干扰程度要求不及工控板那么高,所以准备采用Linux+GUI+文件系统的做法,做成支持USB,可以使用优盘对工控板内的程序进行改写的模式,对现场维护能够带来极大的方便,和工控板的通信目前准备用ADI的磁耦来隔离,主要是体积小以及方便,由于是近距离使用(≤1m)感觉RS232足以...

使用特权

评论回复
15
xwj| | 2008-12-26 00:54 | 只看该作者

呵呵,LZ不错! 这个话题值得好好讨论:-)

使用特权

评论回复
16
vwwj| | 2008-12-26 13:17 | 只看该作者

谈下看法

  1.线性光耦成本不高,深圳森霸的才2.5元,关键是这东西一致性比较差,需要校准
  2.输出可以调成开漏输出的话,是不用交叉逻辑器件转换电压的
  3.低成本的话可以不用运放,直接RC滤波然后AD,因为你的AD分辨率也比较低,12位,而且输入信号也比较大,20mA,10V
  4.DAC输出的话,没办法做到隔离.可以用PWM-光耦-滤波-放大解决,有条件的加上XTR117,专用4-20mA输出芯片.低于4mA是用来检测故障的,不能直接垫高
  5.广州金升阳的AC-DC是30元,我也是不喜欢变压器,

使用特权

评论回复
17
vwwj| | 2008-12-26 13:24 | 只看该作者

另外还有些问题

  看到你说的跑飞要维持电平多少秒啊
  这些要用硬件解决,因为你程序整得太复杂,以后维护成本就太高了
  你现在能看懂,三个月后能看懂不?别人能接手么?

使用特权

评论回复
18
dengm| | 2008-12-26 13:30 | 只看该作者

LZ不错

使用特权

评论回复
19
zheng79| | 2008-12-26 14:21 | 只看该作者

楼主能力还不错,但实际经验不足,

有点像大学里的教授在做研究.
楼主你的电源:
   220VAC -> 共模扼流圈 -> (压敏电阻+TSS) -> 安规电容XY -> AC-DC模块 -> 对应直流电压 -> 共模扼流圈 -> 单向TVS -> 系统
    或者是后级再加一级5V To 5V,6000V隔离的DC-DC专为MCU系统供电...

怎么没有看到电解电容?你加多大的电解电容,在什么地方?
单片机复位,用示波器能不能捕获到干扰信号?
光加那么多DC-DC不一定有用!
另外顺源的隔离模块也容易坏,我现在都不敢用他的了.

使用特权

评论回复
20
gaohq| | 2008-12-26 15:26 | 只看该作者

做工控还这么省?

使用特权

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

本版积分规则

95

主题

759

帖子

3

粉丝