📄 timer.c.bak
字号:
}
if(u_Y_Step_Timer > u_Y_Step_Origin)
{
if(u_Y_Acc_Fre > 4)
--u_Y_Step_Timer;
else
u_Y_Acc_Fre = 0;
}
u_Y_Count = u_Y_Step_Timer;
if(Volt.Y)
{
Y_OFF();
Volt.Y = 0;
}
else
{
Y_ON();
Volt.Y = 1;
}
if(STMT_Order.b.Y_Direct)
++s_Y_All_Step;
else
--s_Y_All_Step;
--u_Y_Step_Count;
++u_Y_Acc_Fre;
}
}
else
{
u_Y_Step_Count = 0;
STMT_FBK.b.Y = 0;
}
}*/
//================================================================================
//Sub-routine Name: void Timer_Pulse_Control(void)
//Description:
//
//
//Input:
//Output:
//Modified: 2004/03/10 OK
//=================================================================================
void Timer_Pulse_Control(void)
{
static unsigned short u_X_Count = 0;
static unsigned short u_Y_Count = 0;
static unsigned short u_X_Step_Count = 0;
static unsigned short u_Y_Step_Count = 0;
static unsigned short u_X_Step = 0;
static unsigned short u_Y_Step = 0;
static unsigned short u_X_Step_Timer = 299;
static unsigned short u_Y_Step_Timer = 299;
static unsigned short u_X_Step_Origin = 99;
static unsigned short u_Y_Step_Origin = 99;
static unsigned short u_X_Pulse_Width = 0;
static unsigned short u_Y_Pulse_Width = 0;
static union{
struct
{
unsigned X_Motor :3; //0:stop 1:auto 2:manual
unsigned X_Direct :1; //0:negative 1:positive
unsigned Y_Motor :3; //0:stop 1:auto 2:manual
unsigned Y_Direct :1; //0:negative 1:positive
unsigned Flag :1; //0:未接收 1:接收
}b;
unsigned short Word;
}STMT_Order;
if(Motor_Get_Order_Flag()&&(!(STMT_FBK.b.X ||STMT_FBK.b.Y)))
{
u_X_Step = Motor_Get_X_Step();
u_Y_Step = Motor_Get_Y_Step();
u_X_Step_Origin = Motor_Get_X_Step_Timer();
u_Y_Step_Origin = Motor_Get_Y_Step_Timer();
u_X_Step_Timer = 299;
u_Y_Step_Timer = 299;
STMT_Order.Word = Motor_Get_STMT_Order();
if(STMT_Order.b.X_Direct)
X_POS();
else
X_NEG();
if(STMT_Order.b.Y_Direct)
Y_POS();
else
Y_NEG();
if(u_X_Step == 0)
STMT_Order.b.X_Motor = 0;
if(u_Y_Step == 0)
STMT_Order.b.Y_Motor = 0;
Motor_Set_Order_Flag(0);
}
if((( STMT_Order.b.X_Motor == 1) && (n_THETA < -420))||(STMT_Order.b.X_Motor == 2))
{
u_X_Step_Count = u_X_Step - 1;
u_X_Count = u_X_Step_Timer;
X_ON();
if(STMT_Order.b.X_Direct)
++s_X_All_Step;
else
--s_X_All_Step;
STMT_Order.b.X_Motor = 0;
STMT_FBK.b.X = 1;
u_X_Pulse_Width = 16;
}
if(u_X_Pulse_Width > 0)
--u_X_Pulse_Width;
else
{
X_OFF();
}
if(u_X_Step_Count > 0)
{
if(u_X_Count > 0)
{
--u_X_Count;
}
else
{
u_X_Step_Timer = u_X_Step_Origin;
if(( 299 - u_X_Step_Origin) > (u_X_Step -u_X_Step_Count)*10)
{
if((u_X_Step -u_X_Step_Count) < u_X_Step_Count)
u_X_Step_Timer = 299 - (u_X_Step -u_X_Step_Count)*10;
}
if(( 299 - u_X_Step_Origin) > (u_X_Step_Count)*10)
{
if((u_X_Step -u_X_Step_Count) > u_X_Step_Count)
u_X_Step_Timer = 299 - (u_X_Step_Count)*10;
}
/*if(u_X_Step_Count == abs(u_X_Step -1))
{
u_X_Step_Timer = 99;
}
if(u_X_Step_Count == abs(u_X_Step -2))
{
u_X_Step_Timer = u_X_Step_Origin;
}
if(u_X_Step_Count == 1)
u_X_Step_Timer = 199;
if(u_X_Step_Count == 2)
u_X_Step_Timer = 99;*/
u_X_Count = u_X_Step_Timer;
X_ON();
u_X_Pulse_Width = 16;
--u_X_Step_Count;
if(STMT_Order.b.X_Direct)
++s_X_All_Step;
else
--s_X_All_Step;
}
}
else
{
if(u_X_Pulse_Width == 0)
STMT_FBK.b.X = 0;
}
if((( STMT_Order.b.Y_Motor == 1)&& (n_THETA < -420))||(STMT_Order.b.Y_Motor == 2))
{
u_Y_Step_Count = u_Y_Step -1;
u_Y_Count = u_Y_Step_Timer;
Y_ON();
if(STMT_Order.b.Y_Direct)
++s_Y_All_Step;
else
--s_Y_All_Step;
STMT_Order.b.Y_Motor = 0;
STMT_FBK.b.Y= 1;
u_Y_Pulse_Width = 16;
}
if(u_Y_Pulse_Width > 0)
--u_Y_Pulse_Width;
else
{
Y_OFF();
}
if(u_Y_Step_Count > 0)
{
if(u_Y_Count > 0)
{
--u_Y_Count;
}
else
{
u_Y_Step_Timer = u_Y_Step_Origin;
if(( 299 - u_Y_Step_Origin) > (u_Y_Step -u_Y_Step_Count)*10)
{
if((u_Y_Step -u_Y_Step_Count) < u_Y_Step_Count)
u_Y_Step_Timer = 299 - (u_Y_Step -u_Y_Step_Count)*10;
}
if(( 299 - u_Y_Step_Origin) > (u_Y_Step_Count)*10)
{
if((u_Y_Step -u_Y_Step_Count) > u_Y_Step_Count)
u_Y_Step_Timer = 299 - (u_Y_Step_Count)*10;
}
/*if(u_Y_Step_Count == abs(u_Y_Step -1))
u_Y_Step_Timer = 99;
if(u_Y_Step_Count == abs(u_Y_Step -2))
u_Y_Step_Timer = u_Y_Step_Origin;
if(u_Y_Step_Count == 1)
u_Y_Step_Timer = 199;
if(u_Y_Step_Count == 2)
u_Y_Step_Timer = 99;*/
u_Y_Count = u_Y_Step_Timer;
Y_ON();
u_Y_Pulse_Width = 16;
--u_Y_Step_Count;
if(STMT_Order.b.Y_Direct)
++s_Y_All_Step;
else
--s_Y_All_Step;
}
}
else
{
if(u_Y_Pulse_Width == 0)
STMT_FBK.b.Y = 0;
}
}
//================================================================================
//Sub-Routine Name:void Timer_Speed_Test(void)
//Description:
//
//Input:
//Output:
//Modified: 2004/03/10 OK
//=================================================================================
void Timer_Speed_Test(void)
{
signed long n_Com_A = 0;
unsigned short u_Cal_Flag = 0;
static unsigned short u_25ms_Count;
static unsigned short u_50ms_Count;
static unsigned short u_10ms_Count;
static signed int n_50ms_Enc = 0;
static signed int n_25ms_Enc = 0;
static signed int n_10ms_Enc =0;
static signed int n_5ms_Enc = 0;
static signed int n_Old_rIncode = 0;
static signed short n_RPM_BUF[8];
n_5ms_Enc = n_THETA - n_Old_rIncode;
if(n_5ms_Enc > 0)
{
if((n_5ms_Enc ) > 495)
{
n_5ms_Enc -=991;
u_Over_Zero = 1;
}
}
else
{
if((n_5ms_Enc) < -495 )
{
n_5ms_Enc +=991;
u_Over_Zero = 1;
}
}
n_Old_rIncode = n_THETA;
if(u_50ms_Count < 10)
{
++u_50ms_Count;
n_50ms_Enc +=n_5ms_Enc;
}
else
{
u_50ms_Count = 0;
if(abs(n_5ms_Enc)<= 20)
{
n_Com_A = n_50ms_Enc;
n_Com_A *=1211;
n_Com_A /=100;
u_Cal_Flag = 1;
}
n_50ms_Enc = 0;
}
if(u_25ms_Count < 5)
{
++u_25ms_Count;
n_25ms_Enc +=n_5ms_Enc;
}
else
{
u_25ms_Count = 0;
if((abs(n_5ms_Enc) > 20) && (abs(n_5ms_Enc) <= 50))
{
n_Com_A = n_25ms_Enc;
n_Com_A *=1211;
n_Com_A /=50;
u_Cal_Flag = 1;
}
n_25ms_Enc = 0;
}
if(u_10ms_Count < 2)
{
++u_10ms_Count;
n_10ms_Enc +=n_5ms_Enc;
}
else
{
u_10ms_Count = 0;
if((abs(n_5ms_Enc) > 50) && (abs(n_5ms_Enc) <= 80))
{
n_Com_A = n_10ms_Enc;
n_Com_A *=1211;
n_Com_A /=20;
u_Cal_Flag = 1;
}
n_10ms_Enc = 0;
}
if(abs(n_5ms_Enc) > 80)
{
n_Com_A = n_5ms_Enc;
n_Com_A *= 1211;
n_Com_A /=10;
u_Cal_Flag = 1;
}
if(u_Cal_Flag)
{
n_RPM_BUF[0] = n_RPM_BUF[1];
n_RPM_BUF[1] = n_RPM_BUF[2];
n_RPM_BUF[2] = n_RPM_BUF[3];
n_RPM_BUF[3] = n_Com_A;
n_Z_Speed = n_Com_A;//(n_RPM_BUF[0] + n_RPM_BUF[1] + n_RPM_BUF[2] + n_RPM_BUF[3])/4;
}
}
//---------------------------------------------------------------------
void __irq Timer1Done(void)
{
unsigned short u_a;
rSRCPND = BIT_TIMER1; //Clear pending bit
rINTPND = BIT_TIMER1;
u_a = rINTPND;
}
//---------------------------------------------------------------------
void __irq Timer2Done(void)
{
unsigned short u_a;
rSRCPND = BIT_TIMER2; //Clear pending bit
rINTPND = BIT_TIMER2;
u_a = rINTPND;
}
//---------------------------------------------------------------------
void __irq Timer3Done(void)
{
unsigned short u_a;
rSRCPND = BIT_TIMER3; //Clear pending bit
rINTPND = BIT_TIMER3;
u_a = rINTPND;
}
//---------------------------------------------------------------------
void __irq Timer4Done(void)
{
unsigned short u_a;
rSRCPND = BIT_TIMER4; //Clear pending bit
rINTPND = BIT_TIMER4;
u_a = rINTPND;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -