如何用PWM方式实现步进电机的升频-恒速-降频过程?
如何用PWM方式实现步进电机的升频-恒速-降频过程?我们用ATmega162的定时器T1!
急用!谢谢! 帮你顶一下.
关注中............ 222 unsigned long move_axis1(unsigned long pulse,unsigned int start_speed,unsigned int add_speed)
{
unsigned int check_status;
unsigned int pulse_w,pulse_adjust=0;
unsigned long temp_pulse,i;
i=0;
check_status = 0;
pulse_w = start_speed;
temp_pulse = pulse/3;
while(1)
{
switch(check_status)
{
case 0:
for(i=0;i<temp_pulse;i++)
{
if(pulse_w < 100)
{
check_status++;
break;
}
else if(pulse_w < 102)
{
pulse_adjust++;
if(pulse_adjust++ > 99)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 105)
{
pulse_adjust++;
if(pulse_adjust++ > 97)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 108)
{
pulse_adjust++;
if(pulse_adjust++ > 95)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 111)
{
pulse_adjust++;
if(pulse_adjust++ > 93)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 114)
{
pulse_adjust++;
if(pulse_adjust++ > 91)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 117)
{
pulse_adjust++;
if(pulse_adjust++ > 88)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 120)
{
pulse_adjust++;
if(pulse_adjust++ > 85)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 124)
{
pulse_adjust++;
if(pulse_adjust++ > 82)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 128)
{
pulse_adjust++;
if(pulse_adjust++ > 78)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 132)
{
pulse_adjust++;
if(pulse_adjust++ > 74)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 136)
{
pulse_adjust++;
if(pulse_adjust++ > 70)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 140)
{
pulse_adjust++;
if(pulse_adjust++ > 65)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 145)
{
pulse_adjust++;
if(pulse_adjust++ > 60)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 150)
{
pulse_adjust++;
if(pulse_adjust++ > 55)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 155)
{
pulse_adjust++;
if(pulse_adjust++ > 50)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 160)
{
pulse_adjust++;
if(pulse_adjust++ > 45)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 166)
{
pulse_adjust++;
if(pulse_adjust++ > 35)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 172)
{
pulse_adjust++;
if(pulse_adjust++ > 25)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 180)
{
pulse_adjust++;
if(pulse_adjust++ > 22)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 188)
{
pulse_adjust++;
if(pulse_adjust++ > 21)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 196)
{
pulse_adjust++;
if(pulse_adjust++ > 20)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 205)
{
pulse_adjust++;
if(pulse_adjust++ > 19)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 215)
{
pulse_adjust++;
if(pulse_adjust++ > 18)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 225)
{
pulse_adjust++;
if(pulse_adjust++ > 17)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 235)
{
pulse_adjust++;
if(pulse_adjust++ > 16)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 245)
{
pulse_adjust++;
if(pulse_adjust++ > 16)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 255)
{
pulse_adjust++;
if(pulse_adjust++ > 15)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 265)
{
pulse_adjust++;
if(pulse_adjust++ > 14)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 275)
{
pulse_adjust++;
if(pulse_adjust++ > 13)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 285)
{
pulse_adjust++;
if(pulse_adjust++ > 13)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 295)
{
pulse_adjust++;
if(pulse_adjust++ > 12)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 305)
{
pulse_adjust++;
if(pulse_adjust++ > 11)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 315)
{
pulse_adjust++;
if(pulse_adjust++ > 10)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 335)
{
pulse_adjust++;
if(pulse_adjust++ > 9)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 355)
{
pulse_adjust++;
if(pulse_adjust++ > 8)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 375)
{
pulse_adjust++;
if(pulse_adjust++ > 7)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 395)
{
pulse_adjust++;
if(pulse_adjust++ > 6)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 415)
{
pulse_adjust++;
if(pulse_adjust++ > 6)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 435)
{
pulse_adjust++;
if(pulse_adjust++ > 6)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 450)
{
pulse_adjust++;
if(pulse_adjust++ > 3)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 550)
{
pulse_adjust++;
if(pulse_adjust++ > 1)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 650)
{
pulse_w -= (add_speed);
}
else if(pulse_w < 750)
{
pulse_w -= (add_speed+1);
}
else if(pulse_w < 850)
{
pulse_w -= (add_speed+2);
}
else if(pulse_w < 950)
{
pulse_w -= (add_speed+3);
}
else if(pulse_w < 1050)
{
pulse_w -= (add_speed+4);
}
else if(pulse_w < 1150)
{
pulse_w -= (add_speed+5);
}
else if(pulse_w < 1250)
{
pulse_w -= (add_speed+6);
}
else if(pulse_w < 1350)
{
pulse_w -= (add_speed+7);
}
else if(pulse_w < 1450)
{
pulse_w -= (add_speed+8);
}
else if(pulse_w < 1550)
{
pulse_w -= (add_speed+9);
}
else if(pulse_w < 1650)
{
pulse_w -= (add_speed+10);
}
else if(pulse_w < 1750)
{
pulse_w -= (add_speed+11);
}
else if(pulse_w < 1850)
{
pulse_w -= (add_speed+12);
}
else if(pulse_w < 1950)
{
pulse_w -= (add_speed+13);
}
else if(pulse_w < 2050)
{
pulse_w -= (add_speed+14);
}
else if(pulse_w < 2150)
{
pulse_w -= (add_speed+15);
}
else if(pulse_w < 2250)
{
pulse_w -= (add_speed+16);
}
else
{
pulse_w -= (add_speed+17);
}
}
break;
case 1:
for(i=0;i<temp_pulse;i++)
{
if(pulse_w < 95)
{
pulse_adjust++;
if(pulse_adjust++ > 100)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 102)
{
pulse_adjust++;
if(pulse_adjust++ > 99)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 105)
{
pulse_adjust++;
if(pulse_adjust++ > 97)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 108)
{
pulse_adjust++;
if(pulse_adjust++ > 95)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 111)
{
pulse_adjust++;
if(pulse_adjust++ > 93)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 114)
{
pulse_adjust++;
if(pulse_adjust++ > 91)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 117)
{
pulse_adjust++;
if(pulse_adjust++ > 88)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 120)
{
pulse_adjust++;
if(pulse_adjust++ > 85)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 124)
{
pulse_adjust++;
if(pulse_adjust++ > 82)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 128)
{
pulse_adjust++;
if(pulse_adjust++ > 78)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 132)
{
pulse_adjust++;
if(pulse_adjust++ > 74)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 136)
{
pulse_adjust++;
if(pulse_adjust++ > 70)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 140)
{
pulse_adjust++;
if(pulse_adjust++ > 65)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 145)
{
pulse_adjust++;
if(pulse_adjust++ > 60)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 150)
{
pulse_adjust++;
if(pulse_adjust++ > 55)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 155)
{
pulse_adjust++;
if(pulse_adjust++ > 50)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 160)
{
pulse_adjust++;
if(pulse_adjust++ > 45)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 166)
{
pulse_adjust++;
if(pulse_adjust++ > 35)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 172)
{
pulse_adjust++;
if(pulse_adjust++ > 25)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 180)
{
pulse_adjust++;
if(pulse_adjust++ > 22)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 188)
{
pulse_adjust++;
if(pulse_adjust++ > 21)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 196)
{
pulse_adjust++;
if(pulse_adjust++ > 20)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 205)
{
pulse_adjust++;
if(pulse_adjust++ > 19)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 215)
{
pulse_adjust++;
if(pulse_adjust++ > 18)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 225)
{
pulse_adjust++;
if(pulse_adjust++ > 17)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 235)
{
pulse_adjust++;
if(pulse_adjust++ > 16)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 245)
{
pulse_adjust++;
if(pulse_adjust++ > 16)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 255)
{
pulse_adjust++;
if(pulse_adjust++ > 15)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 265)
{
pulse_adjust++;
if(pulse_adjust++ > 14)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 275)
{
pulse_adjust++;
if(pulse_adjust++ > 13)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 285)
{
pulse_adjust++;
if(pulse_adjust++ > 13)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 295)
{
pulse_adjust++;
if(pulse_adjust++ > 12)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 305)
{
pulse_adjust++;
if(pulse_adjust++ > 11)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 315)
{
pulse_adjust++;
if(pulse_adjust++ > 10)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 335)
{
pulse_adjust++;
if(pulse_adjust++ > 9)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 355)
{
pulse_adjust++;
if(pulse_adjust++ > 8)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 375)
{
pulse_adjust++;
if(pulse_adjust++ > 7)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 395)
{
pulse_adjust++;
if(pulse_adjust++ > 6)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 415)
{
pulse_adjust++;
if(pulse_adjust++ > 6)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 435)
{
pulse_adjust++;
if(pulse_adjust++ > 6)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 450)
{
pulse_adjust++;
if(pulse_adjust++ > 3)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 550)
{
pulse_adjust++;
if(pulse_adjust++ > 1)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 650)
{
pulse_w += (add_speed+1);
}
else if(pulse_w < 750)
{
pulse_w += (add_speed+5);
}
else if(pulse_w < 850)
{
pulse_w += (add_speed+8);
}
else if(pulse_w < 950)
{
pulse_w += (add_speed+11);
}
else if(pulse_w < 1050)
{
pulse_w += (add_speed+21);
}
else if(pulse_w < 1150)
{
pulse_w += (add_speed+31);
}
else if(pulse_w < 1250)
{
pulse_w += (add_speed+41);
}
/*
else if(pulse_w < 1350)
{
pulse_w += (add_speed+51);
}
else if(pulse_w < 1450)
{
pulse_w += (add_speed+61);
}
else if(pulse_w < 1550)
{
pulse_w += (add_speed+61);
}
else if(pulse_w < 1650)
{
pulse_w += (add_speed+61);
}
else if(pulse_w < 1750)
{
pulse_w += (add_speed+71);
}
else if(pulse_w < 1850)
{
pulse_w += (add_speed+71);
}
else if(pulse_w < 1950)
{
pulse_w += (add_speed+71);
}
else if(pulse_w < 2050)
{
pulse_w += (add_speed+81);
}
else if(pulse_w < 2150)
{
pulse_w += (add_speed+81);
}
else if(pulse_w < 2250)
{
pulse_w += (add_speed+91);
}
else if(pulse_w < 3050)
{
pulse_w += (add_speed+91);
}*/
else
{
return i;
}
}
break;
default:
break;
}
}
}
//=======================================================
//功能描述: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 long sub_pulse)
{
unsigned long i,j,k;
unsigned int pulse_w,pulse_adjust=0;
unsigned long temp_pulse,temp_pulse1,add_pulse,temp_pulse2, temp_pulse3;
temp_pulse = pulse/3;
temp_pulse2 = pulse;
add_pulse = 0;
temp_pulse3 = 0;
pulse_w = start_speed;
if(axis == 1)
{
if(dir == 1)
{
SET_X_DIR();
}
else if(dir == 0)
{
CLR_X_DIR();
}
}
else if(axis == 2)
{
if(dir == 1)
{
SET_Y_DIR();
}
else if(dir == 0)
{
CLR_Y_DIR();
}
}
i=0;
pulse_w = start_speed;
for(i=0;i<pulse;i++)
{
if(i < temp_pulse)
{
if(pulse_w < 115)
{
}
/*else if(pulse_w < 102)
{
pulse_adjust++;
if(pulse_adjust++ > 99)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 105)
{
pulse_adjust++;
if(pulse_adjust++ > 97)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 108)
{
pulse_adjust++;
if(pulse_adjust++ > 95)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 111)
{
pulse_adjust++;
if(pulse_adjust++ > 93)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 114)
{
pulse_adjust++;
if(pulse_adjust++ > 91)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}*/
else if(pulse_w < 117)
{
pulse_adjust++;
if(pulse_adjust++ > 88)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 120)
{
pulse_adjust++;
if(pulse_adjust++ > 85)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 124)
{
pulse_adjust++;
if(pulse_adjust++ > 82)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 128)
{
pulse_adjust++;
if(pulse_adjust++ > 78)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 132)
{
pulse_adjust++;
if(pulse_adjust++ > 74)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 136)
{
pulse_adjust++;
if(pulse_adjust++ > 70)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 140)
{
pulse_adjust++;
if(pulse_adjust++ > 65)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 145)
{
pulse_adjust++;
if(pulse_adjust++ > 60)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 150)
{
pulse_adjust++;
if(pulse_adjust++ > 55)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 155)
{
pulse_adjust++;
if(pulse_adjust++ > 50)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 160)
{
pulse_adjust++;
if(pulse_adjust++ > 45)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 166)
{
pulse_adjust++;
if(pulse_adjust++ > 35)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 172)
{
pulse_adjust++;
if(pulse_adjust++ > 25)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 180)
{
pulse_adjust++;
if(pulse_adjust++ > 22)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 188)
{
pulse_adjust++;
if(pulse_adjust++ > 21)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 196)
{
pulse_adjust++;
if(pulse_adjust++ > 20)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 205)
{
pulse_adjust++;
if(pulse_adjust++ > 19)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 215)
{
pulse_adjust++;
if(pulse_adjust++ > 18)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 225)
{
pulse_adjust++;
if(pulse_adjust++ > 17)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 235)
{
pulse_adjust++;
if(pulse_adjust++ > 16)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 245)
{
pulse_adjust++;
if(pulse_adjust++ > 16)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 255)
{
pulse_adjust++;
if(pulse_adjust++ > 15)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 265)
{
pulse_adjust++;
if(pulse_adjust++ > 14)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 275)
{
pulse_adjust++;
if(pulse_adjust++ > 13)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 285)
{
pulse_adjust++;
if(pulse_adjust++ > 13)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 295)
{
pulse_adjust++;
if(pulse_adjust++ > 12)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 305)
{
pulse_adjust++;
if(pulse_adjust++ > 11)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 315)
{
pulse_adjust++;
if(pulse_adjust++ > 10)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 335)
{
pulse_adjust++;
if(pulse_adjust++ > 9)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 355)
{
pulse_adjust++;
if(pulse_adjust++ > 8)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 375)
{
pulse_adjust++;
if(pulse_adjust++ > 7)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 395)
{
pulse_adjust++;
if(pulse_adjust++ > 6)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 415)
{
pulse_adjust++;
if(pulse_adjust++ > 6)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 435)
{
pulse_adjust++;
if(pulse_adjust++ > 6)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 450)
{
pulse_adjust++;
if(pulse_adjust++ > 3)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 550)
{
pulse_adjust++;
if(pulse_adjust++ > 1)
{
pulse_w -= add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 650)
{
pulse_w -= (add_speed);
}
else if(pulse_w < 750)
{
pulse_w -= (add_speed+1);
}
else if(pulse_w < 850)
{
pulse_w -= (add_speed+2);
}
else if(pulse_w < 950)
{
pulse_w -= (add_speed+3);
}
else if(pulse_w < 1050)
{
pulse_w -= (add_speed+4);
}
else if(pulse_w < 1150)
{
pulse_w -= (add_speed+5);
}
else if(pulse_w < 1250)
{
pulse_w -= (add_speed+6);
}
else if(pulse_w < 1350)
{
pulse_w -= (add_speed+7);
}
else if(pulse_w < 1450)
{
pulse_w -= (add_speed+8);
}
else if(pulse_w < 1550)
{
pulse_w -= (add_speed+9);
}
else if(pulse_w < 1650)
{
pulse_w -= (add_speed+10);
}
else if(pulse_w < 1750)
{
pulse_w -= (add_speed+11);
}
else if(pulse_w < 1850)
{
pulse_w -= (add_speed+12);
}
else if(pulse_w < 1950)
{
pulse_w -= (add_speed+13);
}
else if(pulse_w < 2050)
{
pulse_w -= (add_speed+14);
}
else if(pulse_w < 2150)
{
pulse_w -= (add_speed+15);
}
else if(pulse_w < 2250)
{
pulse_w -= (add_speed+16);
}
else
{
pulse_w -= (add_speed+17);
}
wait_pulse(pulse_w);
SET_X_AXIS();
wait_pulse(pulse_w);
CLR_X_AXIS();
temp_pulse3++;
}
//else if(i> (temp_pulse2 - temp_pulse3+25000)/*30700*/)unsigned long sub_pulse
else if(i> (temp_pulse2 - sub_pulse))
{
if(pulse_w < 98)
{
pulse_adjust++;
if(pulse_adjust++ > 100)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 102)
{
pulse_adjust++;
if(pulse_adjust++ > 99)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 105)
{
pulse_adjust++;
if(pulse_adjust++ > 97)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 108)
{
pulse_adjust++;
if(pulse_adjust++ > 95)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 111)
{
pulse_adjust++;
if(pulse_adjust++ > 93)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 114)
{
pulse_adjust++;
if(pulse_adjust++ > 91)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 117)
{
pulse_adjust++;
if(pulse_adjust++ > 88)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 120)
{
pulse_adjust++;
if(pulse_adjust++ > 85)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 124)
{
pulse_adjust++;
if(pulse_adjust++ > 82)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 128)
{
pulse_adjust++;
if(pulse_adjust++ > 78)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 132)
{
pulse_adjust++;
if(pulse_adjust++ > 74)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 136)
{
pulse_adjust++;
if(pulse_adjust++ > 70)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 140)
{
pulse_adjust++;
if(pulse_adjust++ > 65)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 145)
{
pulse_adjust++;
if(pulse_adjust++ > 60)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 150)
{
pulse_adjust++;
if(pulse_adjust++ > 55)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 155)
{
pulse_adjust++;
if(pulse_adjust++ > 50)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 160)
{
pulse_adjust++;
if(pulse_adjust++ > 45)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 166)
{
pulse_adjust++;
if(pulse_adjust++ > 35)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 172)
{
pulse_adjust++;
if(pulse_adjust++ > 25)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 180)
{
pulse_adjust++;
if(pulse_adjust++ > 22)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 188)
{
pulse_adjust++;
if(pulse_adjust++ > 21)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 196)
{
pulse_adjust++;
if(pulse_adjust++ > 20)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 205)
{
pulse_adjust++;
if(pulse_adjust++ > 19)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 215)
{
pulse_adjust++;
if(pulse_adjust++ > 18)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 225)
{
pulse_adjust++;
if(pulse_adjust++ > 17)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 235)
{
pulse_adjust++;
if(pulse_adjust++ > 16)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 245)
{
pulse_adjust++;
if(pulse_adjust++ > 16)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 255)
{
pulse_adjust++;
if(pulse_adjust++ > 15)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 265)
{
pulse_adjust++;
if(pulse_adjust++ > 14)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 275)
{
pulse_adjust++;
if(pulse_adjust++ > 13)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 285)
{
pulse_adjust++;
if(pulse_adjust++ > 13)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 295)
{
pulse_adjust++;
if(pulse_adjust++ > 12)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 305)
{
pulse_adjust++;
if(pulse_adjust++ > 11)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 315)
{
pulse_adjust++;
if(pulse_adjust++ > 10)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 335)
{
pulse_adjust++;
if(pulse_adjust++ > 9)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 355)
{
pulse_adjust++;
if(pulse_adjust++ > 8)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 375)
{
pulse_adjust++;
if(pulse_adjust++ > 7)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 395)
{
pulse_adjust++;
if(pulse_adjust++ > 6)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 415)
{
pulse_adjust++;
if(pulse_adjust++ > 6)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 435)
{
pulse_adjust++;
if(pulse_adjust++ > 6)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 450)
{
pulse_adjust++;
if(pulse_adjust++ > 3)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 550)
{
pulse_adjust++;
if(pulse_adjust++ > 1)
{
pulse_w += add_speed;
pulse_adjust = 0;
}
}
else if(pulse_w < 650)
{
pulse_w += (add_speed+1);
}
else if(pulse_w < 750)
{
pulse_w += (add_speed+5);
}
else if(pulse_w < 850)
{
pulse_w += (add_speed+8);
}
else if(pulse_w < 950)
{
pulse_w += (add_speed+11);
}
else if(pulse_w < 1050)
{
pulse_w += (add_speed+21);
}
else if(pulse_w < 1150)
{
pulse_w += (add_speed+31);
}
else if(pulse_w < 1250)
{
pulse_w += (add_speed+41);
}
else if(pulse_w < 1350)
{
pulse_w += (add_speed+51);
}
else if(pulse_w < 1450)
{
pulse_w += (add_speed+61);
}
else if(pulse_w < 1550)
{
pulse_w += (add_speed+61);
}
/*
else if(pulse_w < 1650)
{
pulse_w += (add_speed+61);
}
else if(pulse_w < 1750)
{
pulse_w += (add_speed+71);
}
else if(pulse_w < 1850)
{
pulse_w += (add_speed+71);
}
else if(pulse_w < 1950)
{
pulse_w += (add_speed+71);
}
else if(pulse_w < 2050)
{
pulse_w += (add_speed+81);
}
else if(pulse_w < 2150)
{
pulse_w += (add_speed+81);
}
else if(pulse_w < 2250)
{
pulse_w += (add_speed+91);
}
else if(pulse_w < 3050)
{
pulse_w += (add_speed+91);
}
*/
else
{
}
wait_pulse(pulse_w);
SET_X_AXIS();
wait_pulse(pulse_w);
CLR_X_AXIS();
}
else
{
wait_pulse(pulse_w);
SET_X_AXIS();
wait_pulse(pulse_w);
CLR_X_AXIS();
}
}
}
void wait_pulse(unsigned int t)
{
while(t--);
// while(T2CNT < t);
} 晕死,这么长!佩服佩服!
收藏起来 我靠,这是什么程序,干嘛不用查表 简单 看上去挺吓人的 看上去挺吓人的 相当吓人,收藏 使用ATmega+TMC428来做吧TMC428是专用运动控制芯片,运动控制可由TMC428来完成,加速,减速都集成在TMC428里面了
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_483087.gif
(原文件名:2.gif) 雷人 MARK 线性加速,确定好步进频率、每个频率运行步数,然后从最低起跳频率开始,根据相应频率算出octn做个加速表,程序中调用皆可,加速控制方向相反。 你要做步进电机驱动是不,没你想得那么简单,首先你要的是梯形曲线还是“S”曲线,在就是你电机每次走的距离都相同吗?
如果要做,你要做个函数,而不是简单的在某个时刻去加减速。
类似于工控中运动控制卡。 用xmega很容易解决
把定时器的周期改一下就可以
每个周期都可以更新
溢出中断累计脉冲数
升频减小计数周期
恒频固定计数周期
降频增大计数周期
搞个50%的pwm
没用过步进电机
做个标记,学习一下 程序也太长了吧,简化点。。。 没看懂!
TRINAMIC 发表于 2009-9-20 18:47 static/image/common/back.gif
使用ATmega+TMC428来做吧TMC428是专用运动控制芯片,运动控制可由TMC428来完成,加速,减速都集成在TMC428里 ...
请问这个芯片怎么用的? 学习一下..... 留个记号 long long speech!! 这个我做个,步进电机加减速的东东,我用STM32做的,调起来还是有些复杂的,容易出错 redtom 发表于 2013-2-22 23:21 static/image/common/back.gif
这个我做个,步进电机加减速的东东,我用STM32做的,调起来还是有些复杂的,容易出错 ...
你好,可否聊聊STM32控制步进电机呢?我的的仿真都对了,但是电机就不转。想向你学习。QQ272082892 关注,学习.貌似开环不靠谱吧,需要电流闭环进行负载动态调整加速曲线! lovencj001 发表于 2012-5-2 23:31 static/image/common/back.gif
你要做步进电机驱动是不,没你想得那么简单,首先你要的是梯形曲线还是“S”曲线,在就是你电机每次走的距 ...
对的,从起始坐标x y到目的坐标x y,两轴应同时到达,x y速度是不一样的,随着坐标改变,速度也改变,如果走的是z 或s型路线,运动体就会给人发抖的感觉。要两轴联动才有用
geiter001 发表于 2013-2-28 02:49 static/image/common/back.gif
你好,可否聊聊STM32控制步进电机呢?我的的仿真都对了,但是电机就不转。想向你学习。QQ272082892 ...
我用stm32做的步进电机加减速和16楼的思路是一样的。你电机不转可能是步进电机的接线不对,或驱动模块不好 要是程序能够简单点就好了 有没有人知道,加速度的时候每个频率走多少步之后再切换到别的频率比较好?步进电机的 这个看到我没信心了,先copy下来 好长的程序
页:
[1]