关键词:步进电机、XY平台、视觉反馈
用途:工业自动化
文章类型:原理介绍、随笔纪念
@Author:VShawn(singlex@foxmail.com)
@Date:2017-05-01
@Lab: CvLab202@CSU
1.序言
半年没写过博客了,不过这对于我的博客来说似乎是常态?这半年来忙着做毕业论文,没弄什么自己的研究,而实验室的东西实在是不好泄露出来,所以我也是“虽欲言无可进者”了。
上星期趁着论文提交的空挡,把一直拖着的一个小项目开了个头,其实是朋友有个外快小项目要做,具体内容不说,项目的基础是XY平台的视觉控制,因此在前期研究中主要要做平台选型、控制购买、接线研究、模拟实验等工作,这里记述下来以防忘记,顺便也给其他人做个参考。
本次控制通过相机采集图像,以此为反馈信号做控制,使平台上的某个点位移到指定的位置。然后本文写得更像随笔形式,内容可能有点杂乱,见谅了。
2.平台选型与硬件接线
2.1 XY平台选型
项目中需要做到精度较高的位移控制,且承重要求3kg以上,因此XY平台选型时主要考虑步进电机的XY平台,淘宝上一搜就是一大片。
从中挑选了一台二手日本平台,由于价钱便宜店家不提供技术支持,接线什么的得自己搞。
2.2 步进电机驱动
步进电机驱动不需要购买,我手上有一块前辈留下来的,正好可以用,同样没有任何资料。从其电路板上发现驱动芯片是TA8435H,于是查到其引脚功能表。
根据这个功能表可以确定驱动上几个引脚的功能,并用一个四相步进电机测试,发现驱动板功能完好。
在电机供电上,考虑到要驱动两台步进电机,并获得足够的驱动力,因此我试用了一个12V 4.5A的开关电源。
2.3采集卡
为了使计算机能够控制电机驱动,这里还需要一个电脑IO卡,我用的依然是以前留下来mc100 USB Card,方便好用还便宜,淘宝上一搜一大把。这个东西IO口波纹比较大,而且没做好隔离容易烧,不过既然是实验用,那就将就一下了,实际产品中是肯定不能用这个的。
2.4平台接线
平台到货后检查发现电机型号查不到,只知道是三洋1.5A的步进电机,没办法只好电机的线给拨了,用物理方法来测极性。拨开线后发现步进电机是8相的,于是要测出四组通路,通过万用表测通,发现相通的几根线是这样的:
红-绿
蓝-白
黄-棕
黑-灰
为了测出四组线的相性,需要进行多次接线测试,并汇总结果得到下表(只保留了几组数据,实际中我为了完全确认相性,各种接线组合都测了):
B- |
B+ |
A- |
A+ |
状态 |
绿 |
红 |
白 |
蓝 |
逆时针转 |
绿 |
红 |
黑 |
灰 |
顺时针转 |
绿 |
红 |
黄 |
棕 |
不转 |
黄 |
棕 |
白 |
蓝 |
逆时针转 |
根据这个表,可以确定最终的接线方法,此处使用的是并联接法,连线如下表。
B- |
B+ |
A- |
A+ |
绿、黄 |
红、棕 |
白、灰 |
蓝、黑 |
8相步进电机还有另外一种串联接法如下图:
2.5硬件组装结果
最后把两个电机都接到步进电机驱动上,USB采集卡插好,XY平台锁死,相机固定。
得到了个凌乱的实验现场,图中上面那坨黑的是工业相机。
3.平台控制算法
控制这一块我已经丢了差不多三年了,现在再捡起来发现PID都不会写了,再加上步进电机的控制我也没做过,总之是不好弄啊。
首先极力回忆一下本科时微机原理课程设计里做步进电机控制那题是什么做控制的,想起有两种控制方式,一是控制步进电机的步长,二是控制其步数。那么这里既然要控制的是位移量,那么控制步数应该是比较好的选择。但对步进电机来说,每秒走1000步几乎已经是极限了,再快的话电机扭矩会不够,而1000步转换到XY平台上实际也就位移了1cm,所以当位移量较大时,控制的滞后环节可能会较大。但走几步就再控制一下也不现实,毕竟相机的采样时间摆在那,几步就采样控制一下那么控制花费的时间可能会较长……
想来想去也没想到一个最佳的控制方案,总之先用PID控制试试看。
于是搜索增量式PID公式,花十几分钟把C++版本的PID控制器写出来:
然后设计控制周期为100ms,死区5个像素,胡乱设置一下PID参数,只做x方向的平台控制。结果…好嘛,不管怎么样调试系统震荡都很严重,大概是这样子的:
最后我实在是懒得整定PID参数了,于是重新设计控制算法。
-
当误差大于50像素,用PD控制快速移动平台。
-
当误差在50像素以内时,根据事先做好的标定[注1],查表获得位移的步长进行一次移动。
-
移动完成后再次检查还有多少误差,以1的步长慢慢消除该误差。
-
[注1]这里目标点的位置是固定的,因此可以实现进行多次标定,确定图像上各个坐标上的点要位移目标点处需要走多少步,但考虑到相机畸变这个标定是无法完全准确的,因此为尽量减少畸变造成的误差,位移的目标点应放在相机视野中心,且只做该点半径50像素内的点的位移步数标定。
根据上述控制流程,能够较为快速地完成控制,控制精度可在0.5像素以内,具体可以达到多少由于现在相机的安装位置角度都没定下来,所以我暂时也没仔细测了。
4.程序结构设计
XY平台涉及到X方向与Y方向的控制,两个控制是相互独立的,因此我采用了两个线程对它们分别控制,下面是随手乱画的结构图:
程序运行后开辟三个线程,其中两个分别负责驱动两台电机,主线程则负责计算控制量,该控制量也就是另外两个控制线程的步数。
在架构上尚未做设计,但为了提高程序的可拓展性(毕竟实用化后相机、采集卡都得换),项目内的几个操作类都通过基类设计好了统一的接口,以方便今后更换硬件。
5.图像处理算法
这里图像处理算法偷懒了,采用的是《相机位姿估计2:[应用]实时位姿估计与三维重建相机姿态》中跟踪红点的方法,原理是差不多的,只是这里改成了追踪黑点而已,就不详细写了。
实际项目里图像算法当然不会那么简单,不过这里目前还是一片空白,是下一步的工作重点了。
6.实验截图
最后随便给两张程序运行时的截图,控制台坐标是当前黑点坐标,控制目标是[500,500],u1是x平台的控制量,u2是y平台的控制量。
运行过程中
两秒后完成位移,黑点被移动到设定位置。
完成控制