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

📄 motor.c.bak

📁 步进电机控制程序
💻 BAK
📖 第 1 页 / 共 5 页
字号:
     x=-a;
     x*=2;
     if(x >= 0)
     {
      u_Y_Step = x;
      STMT_Order.b.Y_Direct = 1;	
     }
     else
      {
      	u_Y_Step = -x;
      	STMT_Order.b.Y_Direct = 0;
      }	
     u_X_Step_Timer = 49;
     u_Y_Step_Timer = 49;	
    }	
  if(u_Direction == 1)  
   {
    a = Needle[u_Buffer_Index].X_Reference;	
       n_X_Reference += a;
     x=a;
     x*=2;
     if(x>=0)
     {
     u_X_Step = x;
     STMT_Order.b.X_Direct = 1;	
     }
     else
      {
      	u_X_Step = -x;
      	STMT_Order.b.X_Direct = 0;
      }
     a = Needle[u_Buffer_Index].Y_Reference;
      n_Y_Reference += a;
     x=a;
     x*=2;
     if(x>=0)
     {
      u_Y_Step = x;
      STMT_Order.b.Y_Direct = 1;	
     }
     else
      {
      	u_Y_Step = -x;
      	STMT_Order.b.Y_Direct = 0;
      }	
  u_X_Step_Timer = 49;
  u_Y_Step_Timer = 49;    
   } 
 if(u_Mode > 0)
   {
   	STMT_Order.b.X_Motor = STMT_AUTO; 
   	STMT_Order.b.Y_Motor = STMT_AUTO;
   	}
else
  {
   	STMT_Order.b.X_Motor = STMT_MANUAL; 
   	STMT_Order.b.Y_Motor = STMT_MANUAL;
  } 	
}
#define RUN_EMBROIDER_STOP		0       //停止
#define RUN_EMBROIDER    		1		//绣花
#define RUN_EMBROIDER_BACK 		3		//回退
#define RUN_CUT_STRING 			4       //剪线
#define RUN_NULL_GO      		5   	//空走
#define RUN_CHANGE_COLOR    	6   	//换色

//====================================================                                         
//Sub-routine Name:void Motor_Run_Set(void)                                                            
//Description: 
//                                                                                  
//Input:                                                                                     
//Output:                                                                               
//Modified:                                                        
//===================================================
void Motor_Run_Set(void)
 {
  static unsigned short Status_Flag = 0;//bit0:电机开始运行 bit1:开始针设定  bit2:开始针执行完成 bit3:走一针标示  
  static unsigned short Null_Over_Flag = 0;
  static unsigned short u_Delay_Counts = 0;  
  switch(State.Run)
      {
      	case  RUN_EMBROIDER_STOP:               	  //绣花停止
      	      Z_Order.b.EMB_State = NULL;
      	      Z_Order.b.Run = Z_ORDER_STOP;
      	      Status_Flag &= ~0x02;					  //清开始针执行完成标示
      	      Status_Flag &= ~0x08;                   //清走一针标示
      	      Null_Over_Flag = 0;
      	      u_Delay_Counts = 0;
      	      u_Circle_Count = 0;
      	      if(State.Handle == HANDLE_R_HLD || State.Handle == HANDLE_R)
      	        {
      	         State.Run = RUN_EMBROIDER;    	          // 绣花
      	         Status_Flag |= 0x04;			  		  //开始针设定
      	         State.Handle = HANDLE_NULL;
      	        }
      	     if(State.Handle == HANDLE_L_HLD || State.Handle == HANDLE_L)
      	        {
      	        State.Run = RUN_EMBROIDER_BACK;          //回退
      	        State.Handle = HANDLE_NULL;
      			}
             if(State.Handle == HANDLE_ENTER)
      	        {
      	        State.Run = RUN_NULL_GO;				//空走
      	        State.Handle = HANDLE_NULL;
      		    }
      	     if(State.Handle == HANDLE_BACK)
      	        {
      	        State.Run = RUN_EMBROIDER;   			//绣一针           
      	        u_Needle_Over = 0;
      	        State.Handle = HANDLE_NULL;
      	        Status_Flag |= 0x04;
      	        Status_Flag |= 0x08;					//走一针
      		    }				
      	     if(State.Handle == HANDLE_NULL_ONE_STEP)	
      	        {
      	        State.Run = RUN_NULL_GO;                //空走一针
      	        State.Handle = HANDLE_NULL;
      	        Status_Flag |= 0x08;			        //走一针
      		    }	
      		 if(State.Handle == HANDLE_BACK_ONE_STEP)	
      	        {
      	        State.Run = RUN_EMBROIDER_BACK;          //空退一针
      	        State.Handle = HANDLE_NULL;
      	        Status_Flag |= 0x08;					//走一针
      		    }	
      		 if(Cut_Request_Flag == 1)
      		   {
      		   	Z_Order.b.Run = Z_ORDER_RUN;      	//Z轴电机启动
      		   	Cut_Request_Flag = 0;
      		   	State.Run = RUN_CUT_STRING;          //剪线
      		   	n_Speed_Desired = 800;
      		   }
      		 if(Change_Request_Flag == 1)
      		    {
      		     Change_Request_Flag = 0;	
      		     State.Run = RUN_CHANGE_COLOR;          //换色	
      		    }			
      	      break;
      	case RUN_EMBROIDER:     			   //绣花状态
      	     if(State.Handle == HANDLE_L_HLD || State.Handle == HANDLE_L)
      	        {
      	         Z_Order.b.Run = Z_ORDER_BRAKE;		//停止绣花,刹车
      	         State.Handle = HANDLE_NULL;
      	        }
      	     if((Z_FBK.b.Run == Z_ORDER_STOP) && (Status_Flag & 0x02))  
      	       {
      	       	State.Run = RUN_EMBROIDER_STOP;
      	       	if(Needle[u_Buffer_Index].Work_State == 2)	//绣花完成退出
      	       	  {
      	       	  }
      	       	break;
      	       	} 
      	     if((STMT_FBK.b.X == 0)&&(STMT_FBK.b.Y == 0))
      	       {
      	       	if((Needle[u_Buffer_Index].Work_State == 1) ||(Status_Flag & 0x04))//开始
      	       	   {
      	       	   	Needle_Set();						//抬针
      	       	    Motor_Pattern_To_Order(0,1);
      	       	    STMT_Order.b.Flag = 1;
      	       	    Status_Flag |= 0x01;
      	       	    Status_Flag &=~ 0x04;
      	       	    Z_Order.b.EMB_State = NULL;			//抬针,到第一针位置,Z电机停止
      	       	    u_Needle_Over = 0;
      	       	    ++u_Buffer_Index;
      	       	    Motor_File_Read();
      	       	    break;
      	       	   }
      	       	if(Status_Flag & 0x01)
      	       	  {
      	       	   Needle_Clear();						//落针
      	       	   Z_Order.b.EMB_State = EMBROIDER;		//落针,开始绣第一针	
      	       	   Z_Order.b.Run = Z_ORDER_RUN;      	//Z轴电机启动
      	       	   Status_Flag &= ~0x01;                //开始针设定完成
      	       	   break; 
      	       	  }
      	       	Status_Flag |= 0x02;					//开始针执行完成
      	        if(u_Needle_Over == 0)break;
      	        if(Status_Flag & 0x08)
      	          {
      	           Z_Order.b.Run = Z_ORDER_BRAKE;		
      	           }
      	        if(u_Needle_Over > 1)
      	           {
      	            u_Error_Flag = 1;
      	            Z_Order.b.Run = Z_ORDER_BRAKE;
      	           }
      	         u_Needle_Over = 0;
      	         if(Needle[u_Buffer_Index].Work_State == 2)	//绣花完成退出
      	            u_Over_Needle_Index = Needle[u_Buffer_Index].Sequence;
      	         else if (u_Buffer_Index > 0)
      	         	u_Over_Needle_Index = Needle[u_Buffer_Index - 1].Sequence;
      	         else
      	           	u_Over_Needle_Index = 0;
      	         if(Z_Order.b.Run == Z_ORDER_BRAKE)		    //刹车状态退出
      	            {
      	             Needle_Set();							    //抬针
      	             break;
      	            } 
      	         if(STMT_Order.b.Flag > 0)
      	              u_Error_Flag = 1; 	  
      	         Motor_Pattern_To_Order(1,1);
      	         STMT_Order.b.Flag = 1;
      	         if(Needle[u_Buffer_Index].Embroider_Mode == 2)
      	           {
      	             Needle_Set();				//跳针时抬针
      	           }
      	         else
      	           {
      	            Needle_Clear();	       //落针
      	           }
      	         if(Needle[u_Buffer_Index].Work_State == 2)	//绣花完成退出,停针
      	           {
      	             Z_Order.b.Run = Z_ORDER_BRAKE;	
      	             break;	
      	           }
      	         if(Needle[u_Buffer_Index + 1].Embroider_Mode == CHANGE_COLOR)  
      	           {
      	             Z_Order.b.Run = Z_ORDER_BRAKE;		//换色停针
      	           }
      	         Cal_Speed_Limit();						//计算速度限幅
      	         ++u_Buffer_Index;						
      	       	 Motor_File_Read();
      	       	 if((u_File_Point/2 - u_Jump_num)!= Needle[15].Sequence)
      	            {
      	             u_Error_Flag = 3;					//读文件错误停针
      	             Z_Order.b.Run = Z_ORDER_BRAKE;
      	            }
      	       	}
      	      break;
      	case RUN_EMBROIDER_BACK: 			 			//绣花回退
      	      Z_Order.b.EMB_State = NULL;
      	      Z_Order.b.Run = Z_ORDER_STOP;                                       
      	      if((STMT_FBK.b.X == 0)&&(STMT_FBK.b.Y == 0))
      	       {
      	       	 if(State.Handle == HANDLE_ENTER)
      	            {
      	             State.Run = RUN_EMBROIDER_STOP;		//回退
      	             State.Handle = HANDLE_NULL;
      	             break;
      	            }
      	         if(Null_Over_Flag)
      	            {
      	             State.Run = RUN_EMBROIDER_STOP;		//回退
      	             State.Handle = HANDLE_NULL;
      	             break;
      	            }
      	        if(u_Delay_Counts > 0)
      	           {
      	           	--u_Delay_Counts;
      	           	break;
      	           }
      	        else
      	          {
      	           u_Delay_Counts = 500;	
      	          }
      	      	if(u_Buffer_Index > 0)
      	      	   {
      	      	    --u_Buffer_Index;
      	      	    Motor_Pattern_To_Order(0,0);
      	      	    STMT_Order.b.Flag = 1;
      	      	    Motor_File_Read();
      	      	    if(u_Buffer_Index > 0)
      	      	       u_Over_Needle_Index = Needle[u_Buffer_Index-1].Sequence;
      	      	    else
      	      	      u_Over_Needle_Index = 0;
      	      	   }
      	       else
      	          {
      	           State.Run = RUN_EMBROIDER_STOP;		//回退	
      	           u_Over_Needle_Index = Needle[u_Buffer_Index].Sequence;
      	          }
      	      if(Status_Flag & 0x08)
      	         {
      	          Null_Over_Flag = 1;		
      	         }  	   
      	       }
      	     break;
      	case RUN_NULL_GO:		       //空走
      	    if((STMT_FBK.b.X == 0)&&(STMT_FBK.b.Y == 0))
      	       {
      	       	if(State.Handle == HANDLE_ENTER)
      	         {
      	           State.Handle = HANDLE_NULL;
      	           State.Run = RUN_EMBROIDER_STOP;
      	           break;
      	          }
      	        if((u_File_Point/2 - u_Jump_num)!= Needle[15].Sequence)
      	             {
      	              u_Error_Flag = 3;
      	              State.Run = RUN_EMBROIDER_STOP;
      	              break;
      	             } 
      	        if(u_Delay_Counts > 0)
      	           {
      	           	--u_Delay_Counts;
      	           	break;
      	           }
      	        else
      	          {
      	           u_Delay_Counts = 500;	
      	          }
      	        if(Needle[u_Buffer_Index].Work_State == 2)	//绣花完成退出
      	           u_Over_Needle_Index = Needle[u_Buffer_Index].Sequence;
      	        else if(u_Buffer_Index > 0)
      	           u_Over_Needle_Index = Needle[u_Buffer_Index - 1].Sequence;
      	        else
      	          u_Over_Needle_Index = 0;
      	        if(Null_Over_Flag == 1)	//空走完成退出
      	          {
      	           State.Run = RUN_EMBROIDER_STOP;
      	           break;
      	          }   
      	          Motor_Pattern_To_Order(0,1);
      	          STMT_Order.b.Flag = 1;
      	          ++u_Buffer_Index;
      	       	  Motor_File_Read();
      	       	if(Needle[u_Buffer_Index].Work_State == 2)	//绣花完成退出
      	          {
      	           Null_Over_Flag = 1;	
      	          }
      	        if(Status_Flag & 0x08)
      	            {
      	             Null_Over_Flag = 1;		
      	            }     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -