📄 motor.c.bak
字号:
}
break;
case RUN_CUT_STRING:
if( u_Circle_Count >= 2)
{
if(Cut_String_Control())
{
Z_Order.b.Run = Z_ORDER_BRAKE;
u_Circle_Count = 0;
}
}
if(Z_FBK.b.Run == Z_ORDER_STOP)
State.Run = RUN_EMBROIDER_STOP;
break;
case RUN_CHANGE_COLOR:
if(Change_Color_Control(u_Color_Select))
State.Run = RUN_EMBROIDER_STOP;
break;
}
}
//====================================================
//Sub-routine Name:void Motor_Control_Proc(void)
//Description:
//
//Input:
//Output:
//Modified:
//===================================================
void Motor_Control_Proc(void)
{
if((u_1ms_Flag & 0x01)==0)return;
u_1ms_Flag &= ~(0x01);
switch(State.System)
{
case SYS_DEBUG : //Debug
STMT_Order.b.Y_Motor = STMT_STOP;
STMT_Order.b.X_Motor = STMT_STOP;
if(State.Handle == HANDLE_R_HLD || State.Handle == HANDLE_R)
{
STMT_Order.b.Flag = 1;
if(STMT_FBK.b.X == 0)
STMT_Order.b.X_Motor = STMT_MANUAL;
u_X_Step_Timer =49;
State.Handle = HANDLE_NULL;
}
if(State.Handle == HANDLE_L_HLD || State.Handle == HANDLE_L)
{
STMT_Order.b.Flag = 1;
if(STMT_FBK.b.Y == 0)
STMT_Order.b.Y_Motor = STMT_MANUAL;
u_Y_Step_Timer =49;
State.Handle = HANDLE_NULL;
}
if(State.Handle == HANDLE_ENTER)
{
State.System = SYS_NORMAL;
State.Normal = NORMAL_READY;
Z_Order.b.Run = Z_ORDER_STOP;
State.Handle = HANDLE_NULL;
}
if(Cut_Request_Flag) //剪线设定
{
u_Z_Debug_Flag = 4;
n_Speed_Desired = 800;
if( u_Circle_Count >= 2)
{
if(Cut_String_Control())
{
Cut_Request_Flag = 0;
u_Circle_Count = 0;
u_Z_Debug_Flag = 1;
}
}
}
if(Change_Request_Flag == 1)
{
if(Change_Color_Control(u_Color_Select))
Change_Request_Flag = 0;
}
/* if(Buckle_Request_Flag) //扣线设定
{
if(Buckle_String_Set())
Buckle_Request_Flag = 0;
}
if(Cut_Request_Flag) //剪线设定
{
if(Cut_String_Set())
Cut_Request_Flag = 0;
}
if(Change_Request_Flag == 1)
{
if(Change_Color_Control(u_Color_Select))
Change_Request_Flag = 0;
}
if(Change_Request_Flag == 2)
{
u_OUT_IO |= Change_Color_P;
u_OUT_IO &=~Change_Color_N;
Out_01 = u_OUT_IO;
Out_02 = u_OUT_IO & 0x10;
}
if(Change_Request_Flag == 3)
{
u_OUT_IO &= ~Change_Color_P;
u_OUT_IO |= Change_Color_N;
Out_01 = u_OUT_IO;
Out_02 = u_OUT_IO & 0x10;
}*/
if(Change_Request_Flag == 0)
{
u_OUT_IO &= ~Change_Color_P;
u_OUT_IO &= ~Change_Color_N;
u_OUT_IO &= ~Change_Color_Start;
Out_01 = u_OUT_IO;
Out_02 = u_OUT_IO & 0x10;
}
Z_Order.b.Run = Z_ORDER_DEBUG;
break;
case SYS_NORMAL: //Normal
switch(State.Normal)
{
case NORMAL_READY:
if(State.Handle == HANDLE_ENTER)
{
State.Normal = NORMAL_ENABLE;
State.Handle = HANDLE_NULL;
}
if(State.Handle == HANDLE_BACK)
{
State.System = SYS_DEBUG;
State.Handle = HANDLE_NULL;
}
break;
case NORMAL_ENABLE:
if(State.Handle == HANDLE_R_HLD || State.Handle == HANDLE_R)
{
State.Normal = NORMAL_RUN;
State.Run = RUN_EMBROIDER_STOP;
State.Handle = HANDLE_NULL;
}
if(State.Handle == HANDLE_ENTER)
{
State.Normal = NORMAL_READY;
State.Handle = HANDLE_NULL;
}
break;
case NORMAL_RUN:
Motor_Run_Set();
if(State.Run == RUN_EMBROIDER_STOP)
{
if(State.Handle == HANDLE_ENTER)
{
State.Normal = NORMAL_ENABLE;
State.Handle = HANDLE_NULL;
}
}
break;
}
break;
case SYS_FAULT: //Fault
break;
}
Motor_Z_Motor_Control();
}
//====================================================
//Sub-routine Name: void Motor_Speed_Ramp(void)
//Description: 实现速度按斜率升降
//
//Input:
//Output:
//Modified:
//===================================================
void Motor_Speed_Ramp(void)
{
if(n_Speed_Desired == n_Speed_Order) return;
if(n_Speed_Order >= n_Speed_Desired)
{
if((n_Speed_Order - n_Speed_Desired) > n_Speed_Slope)
n_Speed_Desired += n_Speed_Slope;
else
n_Speed_Desired = n_Speed_Order;
}
else
{
if((n_Speed_Desired - n_Speed_Order) > n_Speed_Slope)
n_Speed_Desired -= n_Speed_Slope;
else
n_Speed_Desired = n_Speed_Order;
}
}
#define THTAM_PIN2_K 3 //0<>-400,针在布下
//================================================================================
//Sub-routine Name: void Motor_Needle_Check(void)
//Description:检测针位置,每针完成情况。
//
//
//Input:
//Output:
//Modified: 2004/03/10 OK
//=================================================================================
void Motor_Needle_Check(void)
{
static short Down_Zero_Flag = 0;
if(Down_Zero_Flag)
{
if(abs(n_THETA - n_THETA_DN) < THTAM_PIN2_K) //针在布下
{
Down_Zero_Flag = 0;
}
}
else
{
if (n_THETA < n_THETA_DN)
{
if(abs(n_THETA - n_THETA_DN) > THTAM_PIN2_K ) //针在布上
{
Down_Zero_Flag = 1;
++u_Circle_Count;
if(Z_Order.b.EMB_State)
{
u_Needle_Over += 1;
++u_Over_Stitch_Count;
}
}
}
}
}
#define SPEED_SOFT_START 800 //启动速度 80RPM
unsigned short u_Soft_Stitch_Num; //启动步数
unsigned short u_Soft_Flag; //启动标示
//================================================================================
//Sub-routine Name: void Motor_Soft_Start(void)
//Description:软启动子程序
//
//
//Input:
//Output:
//Modified: 2004/09/10 OK
//=================================================================================
void Motor_Soft_Start(void)
{
if(u_Soft_Flag)return;
if(u_Over_Stitch_Count >= u_Soft_Stitch_Num)
{
if(u_Embroider_Speed_Des < Max_Speed_Limit)
n_Speed_Order = u_Embroider_Speed_Des;
else
n_Speed_Order = Max_Speed_Limit;
Motor_Speed_Ramp();
if(n_Speed_Order == n_Speed_Desired)
u_Soft_Flag = 1;
}
else
{
n_Speed_Desired = SPEED_SOFT_START;
}
}
#define BRAKE_FIRST 0
#define BRAKE_HIGH_SPD 1
#define BRAKE_LOW_SPD 2
//================================================================================
//Sub-routine Name: void Motor_Midway_Brake(void)
//Description:中间刹车程序
//
//
//Input:
//Output:
//Modified: 2004/09/10 OK
//=================================================================================
unsigned short Motor_Midway_Brake(void)
{
unsigned short u_Com_A ;
n_THETA_Shifted = 1020 + n_THETA;
u_Com_A = 0;
if( n_Speed_Desired > 700)
n_Speed_Desired = 700;
if(abs(n_Z_Speed) <= 800)
{
if((n_THETA_Shifted <= 500)&& (n_THETA_Shifted >= 400)) //280度--244度
u_PLoop_Flag = 1;
}
if(u_PLoop_Flag)
{
if(n_THETA_Shifted < 100)
n_Speed_Desired = n_THETA_Shifted*2;
else
n_Speed_Desired = 200;
if(n_Speed_Desired < 200)
n_Speed_Desired = 200;
//if(n_THETA_Shifted <= 12) //提前2度
if(n_THETA == 0)
{
Motor_Stop_Set(); //停电机
u_PLoop_Flag = 0;
n_Speed_Desired = 0;
u_Com_A = 1;
}
}
return(u_Com_A);
}
//================================================================================
//Sub-routine Name: void Motor_Z_Motor_Control(void)
//Description:Z 相电机控制程序
//
//
//Input:
//Output:
//Modified: 2004/09/10 OK
//=================================================================================
void Motor_Z_Motor_Control(void)
{
long l_a;
Motor_Needle_Check();
if(u_First_Flag == 0)
u_First_Flag = u_Over_Zero;
switch(Z_FBK.b.Run)
{
case Z_ORDER_STOP:
n_Speed_Desired = 0;
Motor_Stop_Set();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -