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