⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motor.c.bak

📁 步进电机控制程序
💻 BAK
📖 第 1 页 / 共 5 页
字号:
      	       }   
      	      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 + -