固高运动卡的使用 <3> 运动之Jog运动

  • Post author:
  • Post category:其他


理论篇:


Jog运动是机器运动中的一种运动模式,它具备操作简单、独立性、没有目的性,常常被用于机器的测试和调试。


关于Jog运动的变速过程:


另外在Jog运动模式下,初始目标速度为 100pulse/ms。动态改变目标速度时,当规划位置超过 100000pulse 时,修改目标速度为 50 pulse/ms


关于脉冲与步进电机之间的关系:


步进电机脉冲频率与输出转速换算关系;


步进电机在整步是,1圈需要200个脉冲,即200Hz时,电机速度1rps,8000Hz时,转40rps。


半步时,1圈需要400个脉冲,即400Hz时,电机转速1rps,8000Hz时,转速20rps,


4细分时,1圈需要800个脉冲,即800Hz时,电机转速1rps,8000Hz时,转速10rps。


由上可知,电机运行速度=控制脉冲频率/(200*细分值)rp。


影响步进电机转速的条件有两个,脉冲频率和延时子程序的延时时间。脉冲频率越高,步进电机转速越快。延时子程序的延时时间越长,步进电机转速越快。


关于电机转动与实际机器轴位移关系:


丝杆转速与丝杆导程:

没有变速器的情况下丝杆转速 = 电机转子转速。

丝杆导程就是丝杆转一 圈螺母行走的直线距离,一般这个系数丝杆说明书上有,比如10mm和15mm等。

实战篇:


关于固高运动控制卡的Jog运动:


在构建固高的Jog运动基本上只需要运用以下固高gts提供的方法


操作步骤即是:


1、打开伺服驱动


2、设置轴为Jog模式


3、设置Jog参数(加速度、减速度、平滑系数)


4、设置轴速度


5、启动Jog运动

实战代码篇:


前台样式:


代码:

public partial class Form1 : Form
    {
        //控制卡卡号
        static short _cardNum = 0;
        //当前轴
        short _axis;
        //速度
        double _vel;
        //加速度
        double _acc;
        //减速度
        double _dec;
        //平滑系数
        double _smooth;
        //导程
        protected double _Pitch = 40;
        //齿轮比/细分
        protected double _Divide = 40000; 
        public Form1()
        {
            InitializeComponent();
            //启动固高运动控制卡
            new GT.GTS_Start(0, Application.StartupPath + "\\GTS800_1.cfg", -1, false, Application.StartupPath + "\\ExtModule.cfg");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //添加默认值
            this.textBox1.Text = "1";
            this.textBox2.Text = "5";
            this.textBox3.Text = "0.5";
            this.textBox4.Text = "0.5";

            //smooth 平滑系数范围 [ 0, 1)
            this.comboBox1.Items.Add("0");
            this.comboBox1.Items.Add("0.1");
            this.comboBox1.Items.Add("0.2");
            this.comboBox1.Items.Add("0.3");
            this.comboBox1.Items.Add("0.4");
            this.comboBox1.Items.Add("0.5");
            this.comboBox1.Items.Add("0.6");
            this.comboBox1.Items.Add("0.7");
            this.comboBox1.Items.Add("0.8");
            this.comboBox1.Items.Add("0.9");
            this.comboBox1.Text = "0.9";

            //添加but事件
            this.button1.Click += button_Click;
            this.button2.Click += button_Click;
            this.button3.Click += button_Click;
        }

        private void button_Click(object sender, EventArgs e)
        {
            string text = (sender as Button).Text;
            if (text == "stop")
            {
                GTS.GT_Stop(_cardNum, (1 << (_axis - 1)), (Convert.ToInt32(false) << (_axis - 1)));
                return;
            }
            //轴号
            _axis = short.Parse(this.textBox1.Text);
            //脉冲速度
             _vel = double.Parse(this.textBox2.Text);
            //加速度
             _acc = double.Parse(this.textBox3.Text);
            //减速度
             _dec = double.Parse(this.textBox4.Text);
            //平滑系数
             _smooth = double.Parse(this.comboBox1.Text);
            if (text == "后退")
            {
                _vel = -_vel;
            }
            Jog(_axis, _vel, _acc, _dec, _smooth);
        }
        //jog运动
        public void Jog(short _axis, double _vel, double _acc, double _dec, double _smooth) {
            //实际速度与脉冲转换
            //_vel = VelToPulse(_vel);
            //_acc = AccToPulse(_acc);
            //_dec = AccToPulse(_dec);

            //清除伺服状态
            GTS.GT_ClrSts(1, _axis, _axis);
            //打开使能
            GTS.GT_AxisOn(_cardNum, _axis);
            Thread.Sleep(50);//需要延时等待伺服使能完成
            //位置归零
            GTS.GT_ZeroPos(_cardNum, _axis, _axis);
            //设置为jog模式
            GTS.GT_PrfJog(_cardNum, _axis);
            //声明参数参数
            GTS.TJogPrm _jogPrm;
            //获取参数
            GTS.GT_GetJogPrm(_cardNum, _axis, out _jogPrm);
            //设置参数
            _jogPrm.acc = _acc;
            _jogPrm.dec = _dec;
            _jogPrm.smooth = _smooth;
            //设置参数
            GTS.GT_SetJogPrm(_cardNum, _axis, ref _jogPrm);
            //设置目标速度,这个速度需要进行齿轮比换算的
            GTS.GT_SetVel(_cardNum, _axis, _vel);
            //开启运动
            GTS.GT_Update(_cardNum, (1 << (_axis - 1)));
        }

        public long MmToPulse(double mm)
        {//距离转脉冲
            try
            {
                return Convert.ToInt64((mm * _Divide) / _Pitch);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(ex.Message);
                return 0;
            }
        }
        public double VelToPulse(double vel)
        {
            return MmToPulse(vel) * 0.001;    //mm/s 转换为pulse/ms 
        }
        public double AccToPulse(double acc)
        {
            return MmToPulse(acc) * 0.000001; //mm/s2 转换为 pulse/ms2
        }
    }

ps:运行所需环境参见:

https://blog.csdn.net/weixin_44490080/article/details/101468746



版权声明:本文为weixin_44490080原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。