zbcaich的个人空间 https://bbs.21ic.com/?1892818 [收藏] [复制] [RSS]

日志

一次做烟箱的经历---对PID的理解

已有 552 次阅读2016-11-10 22:26 |系统分类:兴趣爱好| 生产用烟箱, PID控制算法

  我们公司是做烟雾报警器的,为了检测烟雾报警器的灵敏度,特别设计制作了流水线烟箱,用于批量检测产品的灵敏度。当初的想法很简单,做一个能循环流通的箱子,置于生产线上,给箱体内一定浓度的烟,用风扇让其在箱体内循环,产品从流水线经烟箱底部流过,灵敏度在箱内烟雾浓度之下的就会报警,反之,如果产品的灵敏度偏笨,在烟雾浓度之上,则不会报警,人为挑出不报警的产品,不良品就检测出来了。
  想法是好,并且箱体、产烟等硬件设备都做好了,如何控制箱体内的烟雾浓度就有点难度了。说控制有难度,是由于箱体的结构引起,为了要保证烟雾报警器在流过箱体时有足够的反应时间,结合流水线的速度,箱体的长度做到了1.6M,分上下2层。浓度检测的光敏计放大下层中间偏右一点,进烟的孔设计在箱体上层的右边。这样烟送进箱体后,需要10秒左右才能达到检测点。正由于有这么一个较长的时间迟滞,给控烟带来的挑战。
  最先开始的时候,用普通方法,没到设定时加烟,到了设定时停止加烟,如此反复,由于时间的迟滞,到了该停止加烟的时候再停,已经来不及了,浓度还会继续上升,反之也一样,造成箱内烟雾浓度根本就不稳,会有设置的±20,有时甚至到±30的偏差,实在是不能使用。
  在网上找了一大堆PID控制算法,依样画瓢地开始改良控制方式。开始走了很多弯路,由于对PID没有理解,始终不得其法。PID算法如下:
  输出=比列系数×误差+积分系数×误差的累积+微分系数×误差的差
  具体到我的烟箱控制上的时候,误差就是实时浓度与设置浓度的差,误差的累积就是所有误差的累加和,误差的差就是2次误差的差值。一开始的时候,由于各个系数不知道怎样去定,纯碎用试的方法,试了2次就不想再去试了,简直是乱来,完全乱了。
  后来仔细思考前面各个系数的取值方式。首先,假定系统稳定了,误差和误差的差就没有了,仅有误差的累积这一项了。而在我的系统中,最大加烟浓度是400,最大加烟时间也是400。当设值浓度是200的时候,浓度从0上升到200之间的误差累积和起码都快1000了,最先试的时候积分系数取2,显然,2×1000远大于400,所以乱套了。想到这里,积分系数是一个很小的数才对啊!于是,改小了积分系数,改成0.25,经测试,嗯,可以了,快了。然后再适当取比列系数和微分系数,整个控制才显得是那么回事。
  现在的控制方法完全可以控制浓度到设置值的±2左右,只是有点小过冲,基本达到当时设计烟箱的要求。经过这次制作,对PID的控制又稍微深了一步。后续还要继续努力,以使控制更为标准,尽量减少过冲现像。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)