雷赛运动控制卡编程(4)PVT 运动

一、什么是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;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值