基于ARM的嵌入式PLC直线插补运动控制方法及指令实现
2023-02-13刘青林王庭有
刘青林 王庭有
(昆明理工大学机电工程学院)
PLC在运动控制系统中, 脉冲信号的输出方法主要有以下两种[1]:
a.脉冲输出功能集成在PLC中,这是目前大部分PLC采用的方式,例如三菱FX3U系列PLC、西门子S7-1200系列PLC等。此类PLC自带高速脉冲输出功能,但与单独的运动控制模块相比速度较慢。
b.添加脉冲输出模块。 这种模块能够实现较简单的运动控制,但脉冲输出的速度很高,适合在对速度和精度有较高要求的场合使用。
在定位控制中,一路脉冲信号只能控制一台步进电机的运动,一个单轴的运动轨迹只能是直线运动或者圆周运动。 但有时在工业控制中,又必须实现多个轴的相互联动运动。 例如在数控机床的加工过程中,在理论上刀具必须非常精确地沿着被加工工件的轮廓运动,同时满足对加工对象的精度要求[2]。 但是真正加工的工件轮廓可能是各种形状,有一些是简单的曲线,如直线段和圆弧,还有一些是复杂曲线。 直接生成复杂曲线的运动轨迹会耗费大量的计算资源,因此在实际应用中通常使用简单的线型去拟合复杂曲线,同时采用一系列微小的直线段去逼近直线或圆弧,以满足对控制精度的要求。 直线插补算法可根据加工速度的要求, 在给定的数据点坐标之间,连续计算出若干中间点的坐标值,从而拟合出预设的曲线。
1 直线插补算法
笔者主要利用逐点比较法实现插补算法控制。 逐点比较法的基本原理为:在被控对象(被控工件)运动过程中,不断地使被控对象与插补直线进行相对位置比较,并依据结果使被控对象沿着运动误差逐渐缩小的方向, 做平行于x轴或y轴方向的阶梯式直线运动,直到到达直线运动的终点为止[3~5]。逐点比较法的直线插补过程示意图如图1所示。
图1 逐点比较法的直线插补过程示意图
以直线插补算法的第一象限(图2)为例。
图2 第一象限直线插补偏差位置判断
设第一象限的运动轨迹为直线oN,终点坐标N(XN,YN),动点的位置有3种情况:位于点A、B或C。 设动点P从o点开始通过直线插补的方式最后到达N点,完成oN的位移。首先需要判断动点的位置,假设动点坐标为B(X,Y),位于oN下方,此时oB的斜率tan θB小于oN的斜率tan θN,整理得:
同样,也可以得到动点位于A点、C点时的公式:
a.动点位于A点时,YXN-YNX=0;
b.动点位于C点时,YXN-YNX>0。
设判断公式F=YXN-YNX,则有:
a. 当F=0时,工件可以向x轴或y轴移动,但通常规定向x轴方向移动;
b.当F<0时,工件向y轴方向移动;
c.当F>0时,工件向x轴方向移动。
工件每移动一步后都需要进行判定,确定下一步的运行方向,如此反复,直到到达终点N。
(3)效益估算。①节水效益本项目总干渠节水量Q计算见(3-1),控制灌溉面积57.92万亩,得出共节水1185.51万m3,按照当地成本水价0.10元/m3计算,年节水金额为118.55万元。
由于计算过程中需要用到乘法,会直接影响嵌入式PLC的运算速度, 因此为了简化算法进行以下变换:
a. 当F≥0时, 动点向x轴方向运动一步到达点(X+1,Y),令新的偏差值为F′,代入判断公式并整理得F′=F-YN;
b. 当F<0时,动点向y轴方向运动一步到达点(X,Y+1),代入判断公式并整理得F′=F+XN。
工件到达曲线终点时必须自动停止运行,需要一个计数器统计运行的步数,并且在每一步后进行终点判断,当计数值为0时,表示工件已经到达终点,停止运动。
2 脉冲信号输出端硬件设计
嵌入式PLC的脉冲输出硬件电路如图3所示。该电路通过高速光电耦合器6N137将PLC内外进行电气隔离,该光耦的最大传输速度可以达到10 Mbit/s, 并采用PNP三极管2SA954对外部设备进行驱动。OUT0和OUT1连接STM32单片机的PE9和PE10 引 脚, 与 单 片 机 内 部 的TIM8_CH1 和TIM8_CH2相匹配,Q0和Q1接外部负载,COM_Q0和COM_Q1为Q0、Q1的公共端。
图3 嵌入式PLC的脉冲输出硬件电路
3 STM32单片机脉冲输出方式
嵌入式PLC的硬件平台采用STM32单片机作为中央处理器, 该单片机输出脉冲的方法有很多,包括PWM输出、强制输出、电平翻转输出及单脉冲输出等[6]。
本系统中嵌入式PLC选择定时器的PWM输出作为运动控制指令脉冲信号的输出方法。 运动控制指令需要输出指定数量的脉冲,其控制方法是使用STM32单片机中的定时器主从模式, 其结构示意图如图4所示。
图4 定时器主从模式结构示意图
4 直线插补指令实现
直线插补指令的作用是让两个轴的联动沿着一条直线轨迹运动。 在直线插补指令中,一般起点为两轴当前所在位置,而终点需要在指令中进行设置,分别是x轴和y轴的增量值。 直线插补运动指令梯形图如图5所示。 其中,IN1为脉冲频率,IN2为直线插补的步长,IN3为x轴终点坐标,IN4为y轴终点坐标,OUT1为x轴输出端口,OUT2为y轴输出端口。
图5 直线插补运动指令梯形图
直线插补程序流程如图6所示。
图6 直线插补程序流程
直线插补指令执行步骤如下:
a. 开始直线插补指令后,首先对运动进行规划,将需要的参数进行初始化,计算出插补的总步数,确定直线插补的象限,并将直线插补指令的标志位置1;
b. 判断轴所在的象限,并根据其位置进行插补;
c. 根据步骤b计算出的输出轴、脉冲数量、运动方向调用脉冲输出程序,进行脉冲输出;
d. 判断是否已经抵达曲线的终点,若还没抵达曲线的终点则重复执行步骤b,若已完成,则跳出程序。
5 结束语
笔者分析了直线插补算法的原理,依托于嵌入式PLC硬件平台,设计并实现了直线插补指令,使PLC可以进行双轴运动控制。 笔者设计的基于ARM的嵌入式PLC直线插补运动控制方法, 通过拟合预设曲线,在满足加工速度要求的同时可以满足对控制精度的要求。