|
发表于 2007-7-27 13:56:37
|
显示全部楼层
//=======================================================
//功能描述:X轴或Y轴运动控制函数
// dir: 运动方向
// pulse: 要发送的脉冲的个数
// start_speed: 初速度
// end_speed : 末速度
// add_speed : 加速度
// axis : 选择哪个轴运动
// 采用比较简单的间加速算法
//=======================================================
void move_axis(unsigned int dir,unsigned long pulse,unsigned int start_speed,
unsigned int end_speed,unsigned int add_speed,unsigned int axis)
{
unsigned int i,add_status;
unsigned int pulse_w;
unsigned long temp_pulse,temp_pulse1,add_pulse,temp_pulse2;
unsigned long add_time;
add_time = 0;
temp_pulse = pulse/3;
temp_pulse2 = pulse;
add_pulse = 0;
add_status = 0;
pulse_w = start_speed;
if(axis == 1)
{
if(dir == 1) SET_X_DIR();
else if(dir == 0)SET_X_DIR();
}
else if(axis == 2)
{
if(dir == 1)SET_Y_DIR();
else if(dir == 0)SET_Y_DIR();
}
if(axis == 0)
{
while(1)
{
if(add_pulse < temp_pulse) //加速,限制加速长度
{
if(pulse_w > end_speed) //限制速度上限
{
pulse_w -= add_speed;
temp_pulse1 = (temp_pulse2 - add_pulse);
}
}
else
{
if(add_pulse > temp_pulse1) //减速
if(pulse_w < start_speed) //限制速度下限
{
pulse_w += add_speed;
temp_pulse1 = temp_pulse1;
}
}
}
if(pulse)
{
//CLR_X_AXIS();
PEDATDIR = 0XFFFF;
T2CNT = 0;
wait_pulse(pulse_w);
i = T2CNT;
//SET_X_AXIS();
PEDATDIR = 0XFF00;
T2CNT = 0;
wait_pulse(pulse_w);
pulse--;
add_pulse++;
}
else
{
break;
}
}
}
else if(axis == 1)
{
while(1)
{
if(add_pulse < temp_pulse) //加速,限制加速长度
{
if(pulse_w > end_speed) //限制速度上限
{
pulse_w -= add_speed;
temp_pulse1 = (temp_pulse2 - add_pulse);
}
}
else
{
if(add_pulse > temp_pulse1) //减速 { if(pulse_w < start_speed) //限制速度下限
{
pulse_w += add_speed;
temp_pulse1 = temp_pulse1;
}
}
}
if(pulse)
{
//CLR_X_AXIS();
PEDATDIR = 0XFFFF;
T2CNT = 0;
wait_pulse(pulse_w);
i = T2CNT;
//SET_X_AXIS();
PEDATDIR = 0XFF00;
T2CNT = 0;
wait_pulse(pulse_w);
pulse--;
add_pulse++;
}
else
{
break;
}
}
}
}
void wait_pulse(unsigned int t)
{
while(T2CNT < t);
} |
|