理论篇:
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