514 lines
10 KiB
C
514 lines
10 KiB
C
|
|
|
|||
|
|
#include "curves.h"
|
|||
|
|
|
|||
|
|
//--------------------------------------------------
|
|||
|
|
#include "trigger.h"
|
|||
|
|
#include <math.h>
|
|||
|
|
|
|||
|
|
//--------------------------------------------------
|
|||
|
|
|
|||
|
|
#if (1) // T<><54><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>Ӽ<DFBC><D3BC>٣<EFBFBD><D9A3>ĵ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD>
|
|||
|
|
|
|||
|
|
//--------------------------------------------------
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>λ<EFBFBD><CEBB>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>: pps1 <20>ٶ<EFBFBD>1
|
|||
|
|
// pps2 <20>ٶ<EFBFBD>2
|
|||
|
|
// ppss <20><><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>:
|
|||
|
|
// λ<><CEBB>ֵ
|
|||
|
|
u32 TTypeCalcDisplacement(float pps1, float pps2, float ppss)
|
|||
|
|
{
|
|||
|
|
// <20><>ʽ: d=(v2+v1)*(v2-v1)/(2a)
|
|||
|
|
// v1 = pps1
|
|||
|
|
// v2 = pps2
|
|||
|
|
// a = ppss
|
|||
|
|
float temp;
|
|||
|
|
|
|||
|
|
if (ppss == 0) // <20><><EFBFBD>ٶ<EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>˶<EFBFBD>
|
|||
|
|
{
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (pps1 < pps2)
|
|||
|
|
{
|
|||
|
|
temp = (pps2-pps1);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
temp = (pps1-pps2);
|
|||
|
|
}
|
|||
|
|
temp *= (pps1+pps2);
|
|||
|
|
temp /= ppss;
|
|||
|
|
temp /= 2;
|
|||
|
|
return (temp+0.5f);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>ijλ<C4B3><CEBB><EFBFBD><EFBFBD><EFBFBD>ٶȱ仯<C8B1><E4BBAF>Ҫ<EFBFBD><D2AA><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// disp λ<><CEBB>
|
|||
|
|
// pps1 <20>ٶ<EFBFBD>1
|
|||
|
|
// pps2 <20>ٶ<EFBFBD>2
|
|||
|
|
// <20><><EFBFBD><EFBFBD>: <20><><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
|
|||
|
|
float TTypeCalcAddPPSS(u32 disp, float pps1, float pps2)
|
|||
|
|
{
|
|||
|
|
float temp;
|
|||
|
|
// <20><>ʽ: a=(v2+v1)*(v2-v1)/(2*d)
|
|||
|
|
// v1 = pps1
|
|||
|
|
// v2 = pps2
|
|||
|
|
// d = disp
|
|||
|
|
|
|||
|
|
if (disp == 0 || pps1 == pps2)
|
|||
|
|
{
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
if (pps1 < pps2)
|
|||
|
|
{
|
|||
|
|
temp = (pps2-pps1);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
temp = (pps1-pps2);
|
|||
|
|
}
|
|||
|
|
temp *= (pps1+pps2);
|
|||
|
|
temp /= disp;
|
|||
|
|
temp /= 2;
|
|||
|
|
return (temp);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ijλ<C4B3>ƺ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>ٶ<EFBFBD><D9B6>£<EFBFBD><C2A3><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>ٶ<EFBFBD>ֵ
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// disp λ<><CEBB>
|
|||
|
|
// pps1 <20>ٶ<EFBFBD>1
|
|||
|
|
// ppss <20><><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
//
|
|||
|
|
// <20><><EFBFBD><EFBFBD>:
|
|||
|
|
// <20>ٶ<EFBFBD>ֵ
|
|||
|
|
|
|||
|
|
float TTypeCalcEndSpd(u32 disp, float pps1, float ppss)
|
|||
|
|
{
|
|||
|
|
float temp;
|
|||
|
|
// <20><>ʽ: a=(v2+v1)*(v2-v1)/(2*d)
|
|||
|
|
// v1 = pps1
|
|||
|
|
// d = disp
|
|||
|
|
// <09><><EFBFBD><EFBFBD> pps2 = sqrt(2*disp*ppss + pps1*pps1)
|
|||
|
|
|
|||
|
|
temp = 2.0f*disp;
|
|||
|
|
temp *= ppss;
|
|||
|
|
temp += pps1*pps1;
|
|||
|
|
if (temp > 0)
|
|||
|
|
{
|
|||
|
|
temp = sqrt(temp);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
temp = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return (temp);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
float TTypeCalcRunTime(u32 disp, u32 startpps, u32 stoppps, u32 runpps, u32 addppss)
|
|||
|
|
{
|
|||
|
|
TTypeCtrl tctrl;
|
|||
|
|
float runtime = 0;
|
|||
|
|
float time = 0;
|
|||
|
|
|
|||
|
|
memset(&tctrl, 0, sizeof(TTypeCtrl));
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
|
|||
|
|
tctrl.movement = disp;
|
|||
|
|
tctrl.begPPS = startpps; // <20><><EFBFBD>γ<EFBFBD>ʼ<EFBFBD>ٶ<EFBFBD>
|
|||
|
|
tctrl.endPPS = stoppps; // <20><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
tctrl.runPPS = runpps; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
tctrl.maxPPSS = addppss; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ٶ<EFBFBD>
|
|||
|
|
TTypeCalcRunParas(&tctrl); // <20><><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC>ٲ<EFBFBD><D9B2><EFBFBD>
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
s32 newPPSS1, newPPSS2;
|
|||
|
|
|
|||
|
|
newPPSS1 = tctrl.newAddPPSS;
|
|||
|
|
newPPSS2 = tctrl.newAddPPSS;
|
|||
|
|
|
|||
|
|
if (tctrl.begPPS > tctrl.newRunPPS)
|
|||
|
|
{
|
|||
|
|
newPPSS1 *= -1;
|
|||
|
|
}
|
|||
|
|
if (tctrl.endPPS > tctrl.newRunPPS)
|
|||
|
|
{
|
|||
|
|
newPPSS2 *= -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
runtime = 0;
|
|||
|
|
if (tctrl.mvmtseg[0] != 0 && newPPSS1 != 0)
|
|||
|
|
{
|
|||
|
|
time = (int)tctrl.newRunPPS - (int)tctrl.begPPS;
|
|||
|
|
time /= newPPSS1;
|
|||
|
|
runtime += time;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (tctrl.mvmtseg[1] != 0 && tctrl.newRunPPS != 0)
|
|||
|
|
{
|
|||
|
|
time = tctrl.mvmtseg[1];
|
|||
|
|
time /= (int)tctrl.newRunPPS;
|
|||
|
|
runtime += time;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (tctrl.mvmtseg[2] != 0 && newPPSS2 != 0)
|
|||
|
|
{
|
|||
|
|
time = (int)tctrl.newRunPPS - (int)tctrl.endPPS;
|
|||
|
|
time /= newPPSS2;
|
|||
|
|
runtime += time;
|
|||
|
|
}
|
|||
|
|
// printf("run time = %.6f\r\n", runtime);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return runtime;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD>
|
|||
|
|
int TTypeCalcRunParas(TTypeCtrl * pTTypeCtrl)
|
|||
|
|
{
|
|||
|
|
#define TCDEBUG_OUT 0 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
|
|||
|
|
int rslt;
|
|||
|
|
// <20><>֪<EFBFBD><D6AA>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰλ<C7B0>ƶε<C6B6><CEB5>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣩
|
|||
|
|
|
|||
|
|
// <20>õ<EFBFBD><C3B5>ı<EFBFBD><C4B1><EFBFBD>
|
|||
|
|
u32 movement; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
|||
|
|
u32 begPPS, endPPS, runPPS;
|
|||
|
|
u32 addPPSS; // <20><><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
|
|||
|
|
movement = pTTypeCtrl->movement;
|
|||
|
|
begPPS = pTTypeCtrl->begPPS;
|
|||
|
|
endPPS = pTTypeCtrl->endPPS;
|
|||
|
|
runPPS = pTTypeCtrl->runPPS;
|
|||
|
|
addPPSS = pTTypeCtrl->maxPPSS;
|
|||
|
|
|
|||
|
|
// <20><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD>ٶȴ<D9B6><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
if (runPPS < begPPS || runPPS < endPPS)
|
|||
|
|
{
|
|||
|
|
runPPS = begPPS > endPPS ? begPPS:endPPS;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
rslt = 0;
|
|||
|
|
// 1. <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ﵽ<EFBFBD><EFB5BD><EFBFBD><EFBFBD><EFBFBD>ٶȣ<D9B6><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
{
|
|||
|
|
u32 mvmt1, mvmt2, mvmt3;
|
|||
|
|
|
|||
|
|
mvmt1 = TTypeCalcDisplacement(begPPS, runPPS, addPPSS);
|
|||
|
|
mvmt3 = TTypeCalcDisplacement(endPPS, runPPS, addPPSS);
|
|||
|
|
|
|||
|
|
if (mvmt1 + mvmt3 >= movement) // <20><><EFBFBD>ܴﵽ<DCB4><EFB5BD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
float tmpv;
|
|||
|
|
tmpv = movement * 2;
|
|||
|
|
tmpv = sqrt((tmpv*addPPSS + begPPS*begPPS + endPPS*endPPS)/2.0); // <20>ܹ<EFBFBD><DCB9>ﵽ<EFBFBD>ķ<EFBFBD>ֵ<EFBFBD>ٶ<EFBFBD>
|
|||
|
|
runPPS = (tmpv);
|
|||
|
|
#if (TCDEBUG_OUT == 1)
|
|||
|
|
printf("TTypeCalcRunParas runPPS=%d\r\n", runPPS);
|
|||
|
|
#endif
|
|||
|
|
if (runPPS < begPPS || runPPS < endPPS) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3>ٶ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
u32 tpmvmt;
|
|||
|
|
tpmvmt = TTypeCalcDisplacement(begPPS, endPPS, addPPSS); // ֱ<>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD><EFBFBD>Сλ<D0A1><CEBB>
|
|||
|
|
if (tpmvmt > movement) // <20><><EFBFBD><EFBFBD>Ҫλ<D2AA><CEBB>̫<EFBFBD><EFBFBD><F3A3ACB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼӼ<C9BC><D3BC>٣<EFBFBD><D9A3>滮ʧ<E6BBAE><CAA7>
|
|||
|
|
{
|
|||
|
|
addPPSS = TTypeCalcAddPPSS(movement, begPPS, endPPS); // <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
#if (TCDEBUG_OUT == 1)
|
|||
|
|
printf("TTypeCalcRunParas addPPSS=%d\r\n", addPPSS);
|
|||
|
|
#endif
|
|||
|
|
if (begPPS <= endPPS)
|
|||
|
|
{
|
|||
|
|
mvmt1 = movement;
|
|||
|
|
mvmt2 = 0;
|
|||
|
|
mvmt3 = 0;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
mvmt1 = 0;
|
|||
|
|
mvmt2 = 0;
|
|||
|
|
mvmt3 = movement;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (begPPS <= endPPS)
|
|||
|
|
{
|
|||
|
|
mvmt1 = tpmvmt;
|
|||
|
|
mvmt2 = movement - tpmvmt;
|
|||
|
|
mvmt3 = 0;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
mvmt1 = 0;
|
|||
|
|
mvmt2 = movement - tpmvmt;
|
|||
|
|
mvmt3 = tpmvmt;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
mvmt1 = TTypeCalcDisplacement(begPPS, runPPS, addPPSS);
|
|||
|
|
mvmt3 = TTypeCalcDisplacement(endPPS, runPPS, addPPSS); // <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
|
|||
|
|
if (mvmt1 + mvmt3 > movement)
|
|||
|
|
{
|
|||
|
|
mvmt2 = 0;
|
|||
|
|
mvmt3 = movement - mvmt1;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
mvmt2 = movement - mvmt1 - mvmt3;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else // <20><><EFBFBD>Դﵽ<D4B4><EFB5BD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
mvmt2 = movement - mvmt1 - mvmt3;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pTTypeCtrl->mvmtseg[0] = mvmt1; // <20><>һ<EFBFBD><D2BB>
|
|||
|
|
pTTypeCtrl->mvmtseg[1] = mvmt2; // <20>ڶ<EFBFBD><DAB6><EFBFBD>
|
|||
|
|
pTTypeCtrl->mvmtseg[2] = mvmt3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pTTypeCtrl->newRunPPS = runPPS;
|
|||
|
|
pTTypeCtrl->newAddPPSS = addPPSS;
|
|||
|
|
}
|
|||
|
|
#if (TCDEBUG_OUT == 1)
|
|||
|
|
printf("TTypeCalcRunParas: seg[0]=%d, seg[2]=%d, seg[1]=%d, newRunPPS[1]=%.1f, newAddPPSS=%.1f\r\n",
|
|||
|
|
pTTypeCtrl->mvmtseg[0], pTTypeCtrl->mvmtseg[2], pTTypeCtrl->mvmtseg[1], pTTypeCtrl->newRunPPS, pTTypeCtrl->newAddPPSS);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return rslt;
|
|||
|
|
}
|
|||
|
|
//--------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD>
|
|||
|
|
int TTypeCalcDivTab(u32 fin, TTypeCtrl * pTTypeCtrl, u32 * pFidvTab, u32 * pTablen)
|
|||
|
|
{
|
|||
|
|
#define TDEBUG_OUT 0 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
|
|||
|
|
#if (TDEBUG_OUT == 1)
|
|||
|
|
u32 time, tptm, lstm;
|
|||
|
|
#endif
|
|||
|
|
int rslt;
|
|||
|
|
int totalclk = 0; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨<EFBFBD><E4A3A8>λ<EFBFBD><CEBB>1<EFBFBD><31>ʱ<EFBFBD><CAB1>Ƭ<EFBFBD><C6AC>
|
|||
|
|
u32 movement;
|
|||
|
|
|
|||
|
|
if (fin <= 0 || pTTypeCtrl == NULL || pFidvTab == NULL || pTablen == NULL)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if (TDEBUG_OUT == 1)
|
|||
|
|
time = GetUsSoftTimer();
|
|||
|
|
lstm = time;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
TTypeCalcRunParas(pTTypeCtrl);
|
|||
|
|
|
|||
|
|
*pTablen = 0;
|
|||
|
|
rslt = 0;
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
u32 i;
|
|||
|
|
float begPPS; // <20><><EFBFBD>γ<EFBFBD>ʼ<EFBFBD>ٶ<EFBFBD>
|
|||
|
|
float endPPS; // <20><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
float runPPS; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
float newPPSS1, newPPSS2;
|
|||
|
|
|
|||
|
|
float pps; // <20>ٶ<EFBFBD>ֵ
|
|||
|
|
float add;
|
|||
|
|
float rpps1, rpps2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
int runclk;
|
|||
|
|
int coef;
|
|||
|
|
u32 * pBuf;
|
|||
|
|
|
|||
|
|
movement = pTTypeCtrl->movement;
|
|||
|
|
begPPS = pTTypeCtrl->begPPS;
|
|||
|
|
endPPS = pTTypeCtrl->endPPS;
|
|||
|
|
runPPS = pTTypeCtrl->newRunPPS;
|
|||
|
|
newPPSS1 = pTTypeCtrl->newAddPPSS;
|
|||
|
|
newPPSS2 = pTTypeCtrl->newAddPPSS;
|
|||
|
|
|
|||
|
|
if (begPPS > runPPS)
|
|||
|
|
{
|
|||
|
|
newPPSS1 *= -1;
|
|||
|
|
}
|
|||
|
|
if (endPPS > runPPS)
|
|||
|
|
{
|
|||
|
|
newPPSS2 *= -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if (TDEBUG_OUT == 1)
|
|||
|
|
lstm = GetUsSoftTimer();
|
|||
|
|
#endif
|
|||
|
|
pps = begPPS;
|
|||
|
|
rpps1 = pps;
|
|||
|
|
runclk = 0;
|
|||
|
|
add = newPPSS1;
|
|||
|
|
add /= fin;
|
|||
|
|
pBuf = &(pFidvTab[0]);
|
|||
|
|
for (i = 0; i < pTTypeCtrl->mvmtseg[0]; i++) // <20><>һ<EFBFBD><D2BB>
|
|||
|
|
{
|
|||
|
|
if (pps > runPPS)
|
|||
|
|
{
|
|||
|
|
pps = runPPS;
|
|||
|
|
}
|
|||
|
|
if (newPPSS1 < 0 && pps < endPPS)
|
|||
|
|
{
|
|||
|
|
pps = endPPS;
|
|||
|
|
}
|
|||
|
|
coef = fin / pps; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>ֵ<EFBFBD>õ<EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
|
*pBuf++ = coef; // <20><>¼<EFBFBD><C2BC>Ƶϵ<C6B5><CFB5>
|
|||
|
|
runclk += coef; // <20><><EFBFBD>ݷ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
pps = begPPS + runclk * add; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶȹ滮<C8B9><E6BBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>̵<EFBFBD><CCB5>ٶ<EFBFBD>ֵ
|
|||
|
|
}
|
|||
|
|
rpps1 = pps;
|
|||
|
|
totalclk += runclk;
|
|||
|
|
|
|||
|
|
#if (TDEBUG_OUT == 1)
|
|||
|
|
tptm = GetUsSoftTimer();
|
|||
|
|
printf("TCDiv seg1 tm=%uus\r\n", tptm-lstm);
|
|||
|
|
lstm = tptm;
|
|||
|
|
#endif
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pps = endPPS;
|
|||
|
|
rpps2 = pps;
|
|||
|
|
runclk = 0;
|
|||
|
|
add = newPPSS2;
|
|||
|
|
add /= fin;
|
|||
|
|
pBuf = &(pFidvTab[movement - 1]);
|
|||
|
|
for (i = 0; i < pTTypeCtrl->mvmtseg[2]; i++)
|
|||
|
|
{
|
|||
|
|
if (pps > runPPS)
|
|||
|
|
{
|
|||
|
|
pps = runPPS;
|
|||
|
|
}
|
|||
|
|
if (newPPSS2 < 0 && pps < endPPS)
|
|||
|
|
{
|
|||
|
|
pps = endPPS;
|
|||
|
|
}
|
|||
|
|
coef = fin / pps; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>ֵ<EFBFBD>õ<EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
|
*pBuf-- = coef; // <20><>¼<EFBFBD><C2BC>Ƶϵ<C6B5><CFB5>
|
|||
|
|
runclk += coef; // <20><><EFBFBD>ݷ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
pps = endPPS + runclk * add; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶȹ滮<C8B9><E6BBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>̵<EFBFBD><CCB5>ٶ<EFBFBD>ֵ
|
|||
|
|
}
|
|||
|
|
rpps2 = pps;
|
|||
|
|
totalclk += runclk;
|
|||
|
|
#if (TDEBUG_OUT == 1)
|
|||
|
|
tptm = GetUsSoftTimer();
|
|||
|
|
printf("TCDiv seg3 tm=%uus\r\n", tptm-lstm);
|
|||
|
|
lstm = tptm;
|
|||
|
|
#endif
|
|||
|
|
// <20><><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
pps = (rpps1 + rpps2) / 2;
|
|||
|
|
if (pps > runPPS)
|
|||
|
|
{
|
|||
|
|
pps = runPPS;
|
|||
|
|
}
|
|||
|
|
if (newPPSS2 < 0 && pps < endPPS)
|
|||
|
|
{
|
|||
|
|
pps = endPPS;
|
|||
|
|
}
|
|||
|
|
runclk = 0;
|
|||
|
|
pBuf = &(pFidvTab[pTTypeCtrl->mvmtseg[0]]);
|
|||
|
|
coef = fin / pps; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>ֵ<EFBFBD>õ<EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
|
for (i = 0; i < pTTypeCtrl->mvmtseg[1]; i++)
|
|||
|
|
{
|
|||
|
|
*pBuf++ = coef; // <20><>¼<EFBFBD><C2BC>Ƶϵ<C6B5><CFB5>
|
|||
|
|
}
|
|||
|
|
runclk = pTTypeCtrl->mvmtseg[1] * coef;
|
|||
|
|
totalclk += runclk;
|
|||
|
|
#if (TDEBUG_OUT == 1)
|
|||
|
|
tptm = GetUsSoftTimer();
|
|||
|
|
printf("TCDiv seg2 tm=%uus\r\n", tptm-lstm);
|
|||
|
|
lstm = tptm;
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (rslt < 0)
|
|||
|
|
{
|
|||
|
|
rslt++;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
*pTablen = movement;
|
|||
|
|
rslt = totalclk;
|
|||
|
|
}
|
|||
|
|
#if (TDEBUG_OUT == 1)
|
|||
|
|
tptm = GetUsSoftTimer();
|
|||
|
|
printf("TCDiv tm=%uus\r\n", tptm-time);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return rslt;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//----------------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
//----------------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
#if (0) // S<><53><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>Ӽ<DFBC><D3BC>٣<EFBFBD><D9A3>߶Σ<DFB6>
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u32 movement; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
float begPPS; // <20><><EFBFBD>γ<EFBFBD>ʼ<EFBFBD>ٶ<EFBFBD>
|
|||
|
|
float endPPS; // <20><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
float runPPS; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȣ<D9B6>v<EFBFBD><76>
|
|||
|
|
float maxPPSS; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ٶȣ<D9B6>a<EFBFBD><61>
|
|||
|
|
float maxPPSSS; // <20><><EFBFBD><EFBFBD><EFBFBD>ļӼ<C4BC><D3BC>ٶȣ<D9B6>j<EFBFBD><6A>
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
|
|||
|
|
u32 timeseg[7]; // <20>߶<EFBFBD>ʱ<EFBFBD>䳤<EFBFBD><E4B3A4>, <20><>λΪ1<CEAA><31>ʱ<EFBFBD><CAB1>Ƭ
|
|||
|
|
u32 mvmtseg[7]; // <20>߶<EFBFBD>λ<EFBFBD><CEBB>, <20>ֶε<D6B6>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>, ˵<><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
|
float newRunPPS; // <20>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
|
|||
|
|
}STypeCtrl;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
|||
|
|
u32 STypeCalcDisplacement(float pps1, float pps2, float ppss);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
float STypeCalcAddPPSS(u32 disp, float pps1, float pps2);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
float STypeCalcEndSpd(u32 disp, float pps1, float ppss);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
float STypeCalcRunTime(u32 disp, u32 startpps, u32 stoppps, u32 runpps, u32 addppss);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>
|
|||
|
|
int STypeCalcRunParas(STypeCtrl * pSTypeCtrl);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD>
|
|||
|
|
int STypeCalcDivTab(u32 fin, STypeCtrl * pSTypeCtrl, u32 * pFidvTab, u32 * pTablen);
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif
|