#define xspeed50 2728
#define xspeed75 2046
#define xspeed100 1364
#define xspeed125 1136
#define xspeed150 909
#define xspeed175 796
#define xspeed200 682
#define xspeed225 614
#define xspeed250 546
#define xspeed275 500
#define xspeed300 455
#define xspeed325 423
#define xspeed350 390
#define xspeed375 366
#define xspeed400 341
#define xspeed425 322
#define xspeed450 303
#define xspeed475 288
#define xspeed500 273
#define xspeed525 261
#define xspeed550 248
#define xspeed575 238
#define xspeed600 228
#define yspeed50 1875
#define yspeed75 1250
#define yspeed100 937
#define yspeed125 781
#define yspeed150 625
#define yspeed175 547
#define yspeed200 469
#define yspeed225 422
#define yspeed250 375
#define yspeed275 343
#define yspeed300 312
#define yspeed325 290
#define yspeed350 268
#define yspeed375 251
#define yspeed400 234
#define yspeed425 221
#define yspeed450 208
#define yspeed475 198
#define yspeed500 188
#define yspeed525 179
#define yspeed550 170
#define yspeed575 163
#define yspeed600 156
const unsigned short xCurve[23][2]=
{
xspeed50,4,
xspeed75,5,
xspeed100,7,
xspeed125,9,
xspeed150,11,
xspeed175,13,
xspeed200,15,
xspeed225,16,
xspeed250,18,
xspeed275,20,
xspeed300,22,
xspeed325,24,
xspeed350,26,
xspeed375,28,
xspeed400,29,
xspeed425,31,
xspeed450,33,
xspeed475,35,
xspeed500,37,
xspeed525,39,
xspeed550,40,
xspeed575,42,
xspeed600,44,
};
unsigned short yCurve[23][2]=
{
yspeed50,5,
yspeed75,8,
yspeed100,11,
yspeed125,13,
yspeed150,16,
yspeed175,18,
yspeed200,21,
yspeed225,24,
yspeed250,27,
yspeed275,29,
yspeed300,32,
yspeed325,34,
yspeed350,37,
yspeed375,40,
yspeed400,43,
yspeed425,45,
yspeed450,48,
yspeed475,51,
yspeed500,53,
yspeed525,56,
yspeed550,59,
yspeed575,61,
yspeed600,64,
};
unsigned short xIndexNum;
unsigned short xMoveCurve[41][2];
void xTCurveCal(unsigned char speedLevel,unsigned short pulseNum)
{
unsigned char i;
unsigned short pulseNumTemp;
unsigned short pulseNumTempLast;
unsigned short pulseNumHalf;
unsigned char accelPulseIndexNum;
unsigned char uniformPulseIndexNum;
unsigned char decelPulseIndexNum;
unsigned char totalPulseIndexNum;
pulseNumHalf = pulseNum/2;
pulseNumTemp = 0;
pulseNumTempLast = 0;
for(i=0;i<41;i++)
{
xMoveCurve[i][0] = 0;
xMoveCurve[i][1] = 0;
}
if(speedLevel > 22)
{
xIndexNum = 0;
return ;
}
if(pulseNum == 0)
{
xIndexNum = 0;
return ;
}
else if(pulseNum == 1)
{
xMoveCurve[0][0] = xCurve[0][0];
xMoveCurve[0][1] = pulseNum;
xIndexNum = 1;
return;
}
for(i=0;i<(speedLevel+1);i++)
{
pulseNumTemp += xCurve[i][1];
if(pulseNumTemp < pulseNumHalf)
{
xMoveCurve[i][0] = xCurve[i][0];
xMoveCurve[i][1] = xCurve[i][1];
}
else
{
xMoveCurve[i][0] = xCurve[i][0];
xMoveCurve[i][1] = pulseNumHalf - pulseNumTempLast;
pulseNumTemp = pulseNumHalf;
i++;
break;
}
pulseNumTempLast = pulseNumTemp;
}
accelPulseIndexNum = i;
xMoveCurve[i][0] = xCurve[i-1][0];
xMoveCurve[i][1] = pulseNum - pulseNumTemp - pulseNumTemp;
if(xMoveCurve[i][1] != 0)
{
i++;
uniformPulseIndexNum = 1;
}
else
{
uniformPulseIndexNum = 0;
}
decelPulseIndexNum = accelPulseIndexNum;
totalPulseIndexNum = accelPulseIndexNum + uniformPulseIndexNum + decelPulseIndexNum;
for(;i<totalPulseIndexNum;i++)
{
xMoveCurve[i][0] = xMoveCurve[totalPulseIndexNum-i-1][0];
xMoveCurve[i][1] = xMoveCurve[totalPulseIndexNum-i-1][1];
}
xIndexNum = totalPulseIndexNum;
for (i = 0; i < 41; i++) {
printf("xMoveCurve[%d][0] = %d, xMoveCurve[%d][1] = %d\n", i, xMoveCurve[i][0], i, xMoveCurve[i][1]);
}
printf("xIndexNum = %d\n", xIndexNum);
}
unsigned short yIndexNum;
unsigned short yMoveCurve[41][2];
void yTCurveCal(unsigned char speedLevel, unsigned short pulseNum)
{
unsigned char i;
unsigned short pulseNumTemp;
unsigned short pulseNumTempLast;
unsigned short pulseNumHalf;
unsigned char accelPulseIndexNum;
unsigned char uniformPulseIndexNum;
unsigned char decelPulseIndexNum;
unsigned char totalPulseIndexNum;
pulseNumHalf = pulseNum / 2;
pulseNumTemp = 0;
pulseNumTempLast = 0;
for(i=0;i<41;i++)
{
yMoveCurve[i][0] = 0;
yMoveCurve[i][1] = 0;
}
if (speedLevel > 22)
{
yIndexNum = 0;
return;
}
if (pulseNum == 0)
{
yIndexNum = 0;
return;
}
else if (pulseNum == 1)
{
yMoveCurve[0][0] = yCurve[0][0];
yMoveCurve[0][1] = pulseNum;
yIndexNum = 1;
return;
}
for (i = 0; i < (speedLevel + 1); i++)
{
pulseNumTemp += yCurve[i][1];
if (pulseNumTemp < pulseNumHalf)
{
yMoveCurve[i][0] = yCurve[i][0];
yMoveCurve[i][1] = yCurve[i][1];
}
else
{
yMoveCurve[i][0] = yCurve[i][0];
yMoveCurve[i][1] = pulseNumHalf - pulseNumTempLast;
pulseNumTemp = pulseNumHalf;
i++;
break;
}
pulseNumTempLast = pulseNumTemp;
}
accelPulseIndexNum = i;
yMoveCurve[i][0] = yCurve[i - 1][0];
yMoveCurve[i][1] = pulseNum - pulseNumTemp - pulseNumTemp;
if (yMoveCurve[i][1] != 0)
{
i++;
uniformPulseIndexNum = 1;
}
else
{
uniformPulseIndexNum = 0;
}
decelPulseIndexNum = accelPulseIndexNum;
totalPulseIndexNum = accelPulseIndexNum + uniformPulseIndexNum + decelPulseIndexNum;
for (; i < totalPulseIndexNum; i++)
{
yMoveCurve[i][0] = yMoveCurve[totalPulseIndexNum - i - 1][0];
yMoveCurve[i][1] = yMoveCurve[totalPulseIndexNum - i - 1][1];
}
yIndexNum = totalPulseIndexNum;
for (i = 0; i < 41; i++) {
printf("yMoveCurve[%d][0] = %d, yMoveCurve[%d][1] = %d\n", i, yMoveCurve[i][0], i, yMoveCurve[i][1]);
}
printf("yIndexNum = %d\n", yIndexNum);
}
#include <stdio.h>
int main() {
unsigned char xspeedLevel = 19;
unsigned short xpulseNum = 800;
unsigned char yspeedLevel = 19;
unsigned short ypulseNum = 800;
xTCurveCal(xspeedLevel, xpulseNum);
yTCurveCal(yspeedLevel, ypulseNum);
return 0;
}