一、什么是PVT 运动
卡共提供四种 PVT 模式,分别为 PTT、PTS、PVT、PVTS 模式。
其中 PTT、PTS 运动模式用于单轴速度规划功能
,PVT、PVTS 运动则用于多轴轨迹规划功能
二、单轴任意速度规划功能的实现
PTT 运动模式
PTT 模式中第一个字母 P 表示位置(Position)、第二个字母 T 表示时间(Time),最后一 个字母 T 表示梯形(Trapezoid);PTT 模式表示在梯形速度曲线下规划点位运动。
速度

位移
加速度
函数介绍
向指定数据表传送数据,采用 PTT 模式
启动 PVT 运动
public int PTT()
{
ushort _cardNo = 0;
ushort _axisNo = 0;
ushort _count = 10;
double[] _pTime= new double[10];
int[] _pPos = new int[10];
LTDMC.dmc_PttTable(_cardNo,_axisNo, _count, _pTime,_pPos);
ushort[] _axisList = new ushort[10];
LTDMC.dmc_PvtMove(_cardNo, _axisNo, _axisList);
return 0;
}
PTS 运动模式
PTS 运动模式是 PTT 的扩展功能模式。PTS 的最后一个字母 S 表示 S 形速度曲线;PTS 模
式是在 S 形速度曲线下规划点位运动;和 PTT 模式相比,其各段速度过渡更加平滑
数据
速度
加速度
位移
函数介绍
向指定数据表传送数据,采用 PTS 模式
public int PTS()
{
ushort _cardNo = 0;
ushort _axisNo = 0;
ushort _count = 10;
double[] _pTime = new double[10];
int[] _pPos = new int[10];
double[] pPercent = new double[10]; //数据点百分比数组,百分比的取值范围:[0,100];数组长度:count
LTDMC.dmc_PtsTable(_cardNo, _axisNo, _count, _pTime, _pPos,);
ushort[] _axisList = new ushort[10];
LTDMC.dmc_PvtMove(_cardNo, _axisNo, _axisList);
return 0;
}
三、多轴运动
PVT 运动模式
PVT 模式使用一系列数据点的位置、速度、时间参数自定义运动规律。
DMC3000 系列卡采用 3 次样条插值算法对位置、速度和时间参数进行曲线拟合。即位置、
速度曲线满足 3 次多项式函数关系。
位移方程和速度方程:

如果给定轨迹上的一组“位置、速度、时间”参数,即可用 3 次样条函数逼近该轨迹。如
图 7.21 所示为采用 PVT 模式拟合平面椭圆的轨迹图。
注意:
每个点的位置与速度参数需要仔细设计,否则难以得到理想的运动轨迹
函数介绍
例程
设该椭圆的长半轴长 9000pulse,短半轴长 7000pulse;椭圆轨迹的角速度
恒定,轨迹
运动的总时间为 10s。
显然该椭圆的方程为:
PVT 模式运动上半椭圆轨迹的步骤
1、将该轨迹分成圆弧角相等的十段轨迹
2、根据各点坐标(即 P 值),计算出各点对应的速度的(V 值)和时间(T 值)。
3、使用 dmc_PvtTable 函数向数据表传递数组数据
向指定数据表传送数据,采用 PVT 模式
4、使用 dmc_PvtMove 函数执行 PVT 运动。
Dim My_AxisNum As Integer
My_AxisNum = 2
’参与 PVT 运动的轴数为 2
dmc_PvtMove MyCardNo, My_AxisNum, My_AxisList(0)
’启动两轴 PVT 运动
public int PVT()
{
ushort _cardNo = 0;
ushort _axisNo = 0;
ushort _count = 10;
double[] _pTime = new double[10];
int[] _pVel = new int[10]; //数据点速度数组,单位:pulse/s;数组长度:count
LTDMC.dmc_PvtTable(_cardNo, _axisNo, _count, _pTime, _pVel,);
ushort[] _axisList = new ushort[10];
LTDMC.dmc_PvtMove(_cardNo, _axisNo, _axisList);
return 0;
}
向指定数据表传送数据,采用 PVT 模式
public int PVT()
{
ushort _cardNo = 0;
ushort _axisNo = 0;
ushort _count = 10;
double[] _pTime = new double[10];
int[] _pPos = new int[10];
double [] _pVel = new double[10]; //数据点速度数组,单位:pulse/s;数组长度:count
LTDMC.dmc_PvtTable(_cardNo, _axisNo, _count, _pTime, _pPos, _pVel);
ushort[] _axisList = new ushort[10];
LTDMC.dmc_PvtMove(_cardNo, _axisNo, _axisList);
return 0;
}
PVTS 运动模式
PVTS 运动模式是 PVT 模式的简化模式。PVTS 运动模式只需要定义各数据点的位置、时间
参数,以及起点速度和终点速度。运动控制卡根据各数据点的位置、时间参数计算运动轨迹的
速度,确保各数据点速度连续和加速度连续。
由于对各点速度没有特殊要求,因此使用 PVTS 运动模式可以得到更平滑的运动轨迹。如
图 7.23 所示为采用 PVTS 模式拟合空间圆弧的轨迹图。
函数介绍
向指定数据表传送数据,采用 PVTS 模式
public int PVTS()
{
ushort _cardNo = 0;
ushort _axisNo = 0;
ushort _count = 10;
double[] _pTime = new double[10];
int[] _pPos = new int[10];
double _velBegin =10; //数据点速度数组,单位:pulse/s;数组长度:count
double _velEnd = 10; //数据点速度数组,单位:pulse/s;数组长度:count
LTDMC.dmc_PvtsTable(_cardNo, _axisNo, _count, _pTime, _pPos, _velBegin, _velEnd);
ushort[] _axisList = new ushort[10];
LTDMC.dmc_PvtMove(_cardNo, _axisNo, _axisList);
return 0;
}