两轴步进电机插补运动的实现
运用插补运动原因:步进电机画圆并不是画的曲线而是通过一段一段小的直线将直线密集化最后得到圆形。
前期:首先我在网上查资料了解了一下插补运动具体是怎么实现的,以及其中的知识点。然后我去图书馆借了一本《数控系统的插补原理通论》里面详细讲解了二维三维空间直线插补与圆弧的插补的原理,插补方式的分类(逐点比较法插补、最小偏差法插补、数字积分法插补、目标点跟踪法插补原理、单步跟踪法)然后进阶到高次曲线插补,差不多就是演变成二轴、三轴、多轴的插补
我学习了其中的逐点比较法(直线与圆弧) 但编写的程序只有绘制完整的圆形的代码与直线插补的 后期需要进行优化
插补的理论知识较容易理解
比如直线外有一点N,通过计算NO直线斜率与原直线的斜率大小来得知该点是处于原直线的上方或者是上方。
将得到的比值(偏差函数)进行简化,我们只要知道分母上方的符号即可得知方向。
插补运动分为四分部:首先进行①“偏差判别”(大于零或者小于零)然后根据符号的大小来②“控制进给”的方向(x轴或者y轴 二轴插补) 进给完后的坐标再进行一次③“偏差计算”为下一步插补运动提供符号 最后判断进行到哪一步 与总步数进行比较(④“停止判断”) 总的来说插补运动分为这四步来进行程序编写
由于是密集化的过程,所以我只需要将一个单位的圆形程序编写成功 在进行缩小和放大就可以实现任意尺寸的控制
程序的实现,程序的编写 大致为上面四步理论知识的代码再现
正好我在学习Python 所以我先用python语言进行了运动的实现
算法的基本思想为:先进行圆形各个点位的坐标进行计算并记录,然后通过Python语言的切片功能进行一个再排序过程,从而实现插补
我利用了数据可视化的知识将圆形进行了再现
该圆形为圆心在(1,1)起点为(4,5)半径为5的圆
以上为Python代码的实现,通过Python代码的实现我已经大致对插补运动有了较为深刻的认知以及理解,随后利用博图16.0与Plcsim advandce 3.0 与UG 12.0进行模型仿真
大致就是对我Python代码的复制编写
利用循环中断OB块,间隔为1ms一个脉冲信号
将PLC的Ip地址设置与PLcsim “一致”否则无法进行仿真再现
仿真步骤,打开PLc的连接机制 选取允许远程的控制,然后在PLCSIM上建立对应IP地址的连接,待连接成功后即可在博图软件上面下载到设备,选择可访问的接口进行连接
这时即将博图与PLCSIM进行了互联,随后再对UG进行互联
先将模型的物理性质进行定义 刚体,运动副等
使用“机电概念设计模块”进行信号的衍射
再点击确定刷新即可得到外部信号
将开关线圈的bool量、速度或者位移的输出块衍射到UG里面
再进行外部信号MCD信号的建立
Bool信号连接方向的矢量,速度输出信号连接物体质心或者线速度、角速度
Bool机电对象选择运动的方向,因为是从外部输入进来的信号,选择IO类型为输入
速度连接 机电对象选择物体IO类型也是通过外部信号的输入。
本次任务使用了 VScode UG 博图 PLCSIM 3.0 SPyder等软件
总结:在学习理论知识的时候要学扎实学懂学透,不然在编写代码的时候容易出现很容易的错误,例如在编写Python代码的时候,将各个点计算出来时需要用点判断此时处在的象限,最初我利用每个象限应该有几个点来判断每个象限计算的步数,但是对循环的结束判断出现错误导致结果不对,在寻找bug的过程中,由于不知道是从哪里出现的BUG 所以花费了几天的时间来寻找这个问题,还好借助Spyder软件进行分析,最终找到了问题的地方,就是循环判断等号的取舍。 但随后编写至圆心不处于原点处的圆弧插补时更换了判断的条件,改变成对坐标储存数组的最后一个点的符号进行象限的判断,在开始的时候直接将与原点在同一水平轴的点加入了判断,导致在第二象限结束的时候就不再进行运行,因为交点没有考虑在判断范围内。
圆心在任意点的圆弧插补的代码任然待完成。