赞
踩
对于控制数控刀具或机器人末端工具运动轨迹来说,插补功能至关重要。插补的任务就是根据给定的运动速度,正在轮廓起点和终点之间计算出若干个中间点的坐标值。由于每个中间点计算所需的时间直接影响系统的控制速度,而插补中间点坐标值的计算精度有影响到NC系统的控制精度,所以插补算法是NC系统控制的核心。
数控技术发展过程中出现了脉冲增量插补、数字增量插补、时间分割插补、拓展DDA方法、双DDA法等,这些方法在文献[1]中有详细的论述,这里就不赘述了。其中时间分割插补、拓展DDA方法、双DDA法都可以归纳为数据采样插补,数据采样插补是现代运动控制系统普遍采用的方法,其中最经典的是时间分割法,后面章节我们介绍的插补算法都属于时间分割法。
数据采样插补是根据用户程序的给定速度,将给定轮廓曲线分割为每一插补周期的进给段,即轮廓步长。每一个插补周期,执行一次插补运算,计算出下一个插补点(动点)的坐标。从而计算出下一个周期各个坐标的进给量,如 Δ x 、 Δ y \Delta x、\Delta y Δx、Δy等,从而得出下一个插补点的指令位置。
时间分割法是典型的数据采样插补方法。它首先根据加工指令中的进给速度 v v v,计算出每个周期的轮廓步长 l l l,即用插补周期为时间单位,将整个加工过程分割成许多单位时间内的进给过程。以插补周期为时间单位,则单位时间内的移动的路程等于速度,即轮廓步长与轮廓速度 f f f相等。插补计算的主要任务是计算出下一个插补点的坐标,从而计算出轮廓速度在各个坐标轴的分速度,即下一个插补周期内的各坐标进给量 Δ x 、 Δ y \Delta x、\Delta y Δx、Δy。控制X,Y坐标分别以 Δ x 、 Δ y \Delta x、\Delta y Δx、Δy为速度协调进给,即可走出逼近直线段,到达下一个插补点。需要注意的是,插补前需要进行加减速规划,常用的梯形加减速、指数加减速和S形加减速在前面的章节有详细的介绍。根据加减速曲线可以计算出第i周期的位移,根据路径(直线、圆弧、样条等)的几何参数,计算出对应的坐标。如下图是梯形加减速控制的直线插补的示意图。
基本流程是:计算直线的长度→加减速规划→计算每个周期的位移→计算该周期的插补点坐标。
对应的位移、速度和插补坐标变化如图所示。
示例代码如下。
其中指数加减速相关的函数expProfile,expProfile_dis,可以参考上一个章节《2.3 指数加减速》(https://blog.csdn.net/Galaxy_Robot/article/details/132255426?spm=1001.2014.3001.5502)。
clc clear close("all") %% %给定直线起点和终点,以及运动参数 ps=[10;20;0]; pe=[20;30;0]; vs=10;vmax=50;ve=5;amax=1000;dmax=1200; %% %加减速规划 L=sqrt((pe(1)-ps(1))^2+(pe(2)-ps(2))^2+(pe(3)-ps(3))^2); param=expProfile(L,vs,vmax,ve,amax,dmax); ts=param.t1+param.t2+param.t3; Ts=0.001;%插补周期 k=1; s0=0; %绘图环境 fig=figure; set(gcf,'Color','w') f1=subplot(3,1,1); xlabel("time") ylabel("si") hold on plot(f1,ts,L,'or-'); f2=subplot(3,1,2); xlabel("time") ylabel("vi") hold on plot(f2,ts,ve,'or-'); plot(f2,[0,ts],[vmax vmax],'b--'); f3=subplot(3,1,3); xlabel("x") ylabel("y") %axis equal hold on plot(f3,ps(1),ps(2),'or-') plot(f3,pe(1),pe(2),'or-') %插补输出 for ti=0:Ts:ts time(k,1)=ti; %数据采样。根据加减速轮廓,计算给定时刻对应的位移 si(k,1)=expProfile_dis(param,ti); %插补计算。根据累计位移计算坐标点 pi(k,:)=ps+si(k,1)/param.s*(pe-ps); %速度计算。只是用来画图用 vi(k,1)=(si(k,1)-s0)/Ts; %绘图演示 plot(f1,time(k),si(k),'.r-') plot(f2,time(k),vi(k),'.r-') plot(f3,pi(k,1),pi(k,2),'.r-') pause(0.01); %制作动画 frame = getframe(fig); im{k} = frame2im(frame); [A,map] = rgb2ind(im{k},256); %将 RGB 图像转换为索引图像 A。map 最多包含 n 个颜色。 if k == 1 imwrite(A,map,'test.gif','gif','LoopCount',Inf,'DelayTime',0.01);%'DelayTime'为每帧图像播放时间 else imwrite(A,map,'test.gif','gif','WriteMode','append','DelayTime',0.01); end s0=si(k,1); k=k+1; end
[1]王爱玲.现代数控原理及控制系统[M].国防工业出版社,2002.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。