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

📄 motor.c.bak

📁 步进电机控制程序
💻 BAK
📖 第 1 页 / 共 5 页
字号:
          Motor_Update();
         if(Z_Order.b.Run == Z_ORDER_ONE)
           {
            Motor_Drive_Set();
            u_Over_Stitch_Count = 0;	
            Z_FBK.b.Run = Z_ORDER_ONE;	
            n_Speed_Desired = 800;	
           }
         if(Z_Order.b.Run == Z_ORDER_RUN)
           {
            Z_FBK.b.Run = Z_ORDER_RUN;
            Motor_Drive_Set();
            u_Soft_Stitch_Num = 2;
            u_Soft_Flag = 0;
           }
         if(Z_Order.b.Run == Z_ORDER_DEBUG)
           {
            Z_FBK.b.Run = Z_ORDER_DEBUG;
           }
         break;	
   case Z_ORDER_RUN:
   		Motor_Update();
        Motor_Soft_Start();
        if(u_Soft_Flag)
          {
           if(u_Embroider_Speed_Des < Max_Speed_Limit)
              n_Speed_Desired = u_Embroider_Speed_Des;
           else
             {
              n_Speed_Desired = Max_Speed_Limit;	
             }
           }
         if(Z_Order.b.Run == Z_ORDER_BRAKE)
           {
            u_Over_Stitch_Count = 0;
            Z_FBK.b.Run = Z_ORDER_BRAKE;
            n_Speed_Desired = 700;
           }
   		break;
   case Z_ORDER_ONE:
         Motor_Update();
         Motor_Drive_Set();
         if(u_First_Flag)
           {
           	if(Motor_Midway_Brake())
            {
             Motor_Stop_Set();
             Z_FBK.b.Run = Z_ORDER_STOP;
            }
           }
        break;	
  case Z_ORDER_BRAKE:
        Motor_Update();
        if(Motor_Midway_Brake())
             {
              Z_FBK.b.Run = Z_ORDER_STOP;
             }
        break;
  case Z_ORDER_DEBUG:
        if(u_Z_Debug_Flag == 0)
       {
        if(u_Drive_Flag)
          Drive_Set();
        else
          Drive_Clear();
        if(u_Brake_Flag)
          Brake_Set();
          else
          Brake_Clear(); 
        if(Uart_Get_Cmp3())
           Needle_Set();
        else
          Needle_Clear();
        if(Uart_Get_Cmp2() > 5)
          {
           n_Speed_Desired = Uart_Get_Cmp2() *10;
           l_a = Uart_Get_Cmp2();
           Z_Ref = (60*5000)/l_a;
           rTCNTB2 = rTCNTB2 & ~(0xffff) | Z_Ref;   
  	   	   rTCMPB2 = rTCMPB2 & ~(0xffff) | (Z_Ref/2); 
          }
        else
          {
           Z_Ref = 1000;
           rTCNTB2 = rTCNTB2 & ~(0xffff) | 1000;   
  	       rTCMPB2 = rTCMPB2 & ~(0xffff) | 1000; 
          }
        }
    if(u_Z_Debug_Flag == 1)				//100度停车
        {
          Motor_Update();
          if(Motor_Midway_Brake())
             {
              u_Z_Debug_Flag = 2;	
             }
        }
    if(u_Z_Debug_Flag == 2)					//Z电机停止
        {
         Motor_Stop_Set();	
         n_Speed_Desired = 0;
        }
    if(u_Z_Debug_Flag == 3)					//走一针
        {
         Motor_Update();
         Motor_Drive_Set();
         n_Speed_Desired = 800;
         if(u_First_Flag)
           {
           	if(Motor_Midway_Brake())
            {
             Motor_Stop_Set();
             u_Z_Debug_Flag = 2;
            }
           }
        }
     if(u_Z_Debug_Flag == 4)				//
        {
         Motor_Update();
        }
   if(Z_Order.b.Run == Z_ORDER_STOP)
         {
           Motor_Stop_Set();
           Z_FBK.b.Run = Z_ORDER_STOP;
         }
        break;    		
 } 
}
//================================================================================                                         
//Sub-Routine Name:void Motor_Drive_Set(void)                                                            
//Description:启动滑差电机
//            
//                                                                                          
//Input:                                                                                     
//Output:                                                                               
//Modified: 2004/26/11         OK                                                            
//=================================================================================
void Motor_Drive_Set(void)
{
  unsigned short u_a;
  Drive_Set();
  for(u_a=0;u_a<30;u_a++);
  Drive_Clear();
  Brake_Set();
}
//================================================================================                                         
//Sub-Routine Name:void Motor_Brake_Set(void)                                                            
//Description:滑差电机刹车
//            
//                                                                                          
//Input:                                                                                     
//Output:                                                                               
//Modified: 2004/26/11         OK                                                            
//=================================================================================
void Motor_Brake_Set(void)
{
 unsigned short u_a;
 Drive_Set();
 Brake_Set();
 for(u_a=0;u_a<10;u_a++);
 Brake_Clear();
 for(u_a=0;u_a<10;u_a++);
 Brake_Set();
 
}

//================================================================================                                         
//Sub-Routine Name:void Motor_Stop_Set(void)                                                            
//Description:停止控制
//            
//                                                                                          
//Input:                                                                                     
//Output:                                                                               
//Modified: 2004/26/11         OK                                                            
//=================================================================================
void Motor_Stop_Set(void)
{
 Drive_Set();
 Brake_Set();
}

//================================================================================                                         
//Sub-Routine Name:void Motor_Update(void)                                                            
//Description:停止控制
//            
//                                                                                          
//Input:                                                                                     
//Output:                                                                               
//Modified: 2004/26/11         OK                                                            
//=================================================================================
void Motor_Update(void)
{
 unsigned long l_a;
 l_a = n_Speed_Desired;
 if(l_a > 50)
 {
  Z_Ref = (60*50000)/l_a;					//1000RPM = 16.67KHZ; 
  rTCNTB2 = rTCNTB2 & ~(0xffff) | Z_Ref;   
  rTCMPB2 = rTCMPB2 & ~(0xffff) | (Z_Ref/2); 
 } 
 else
  {
  rTCNTB2 = rTCNTB2 & ~(0xffff) | 1000;   	//5k
  rTCMPB2 = rTCMPB2 & ~(0xffff) | 1000; 	
  } 
}
//================================================================================                                         
//Sub-Routine Name:void Motor_First_Read(void)                                                            
//Description:初始读花样文件
//            
//                                                                                          
//Input:                                                                                     
//Output:                                                                               
//Modified: 2004/23/12         OK                                                            
//=================================================================================
void Motor_First_Read(void)
{
 unsigned short u_a;
 for(u_a = 0;u_a < 16; ++u_a)
     {
     	if(u_File_Point == 0)
     	  Needle[u_a].Work_State = 1; 
     	else
     	  Needle[u_a].Work_State = 0;
     	if(*(horse + u_File_Point) == 0x80 )
         {
     	  ++u_File_Point;
     	  if((*(horse + u_File_Point) == 02) ||(*(horse + u_File_Point) == 04))
     	     Needle[u_a].Embroider_Mode = JUMP_NEEDLE;
     	  if(*(horse + u_File_Point) == 01)
     	     Needle[u_a].Embroider_Mode = CHANGE_COLOR;
     	  ++u_File_Point;
     	  Needle[u_a].X_Reference = *(horse + u_File_Point);
     	  ++u_File_Point;
     	  Needle[u_a].Y_Reference = *(horse + u_File_Point);
     	  ++u_File_Point;
     	  ++u_Jump_num;
     	 }
  		else
    	 {
    	 Needle[15].Embroider_Mode = NORMAL;
    	 Needle[u_a].X_Reference = *(horse + u_File_Point);
     	  ++u_File_Point;
     	 Needle[u_a].Y_Reference = *(horse + u_File_Point);
     	 ++u_File_Point;
    	 }
      Needle[u_a].Sequence = u_a + 1;
      }
   u_Read_Index = 1;
   u_Buffer_Index = 0;
  }	
//================================================================================                                         
//Sub-Routine Name:void Motor_File_Read(void)                                                            
//Description:中间读花样文件
//            
//                                                                                          
//Input:                                                                                     
//Output:                                                                               
//Modified: 2004/23/12         OK                                                            
//=================================================================================
void Motor_File_Read(void)
{
 unsigned u_a;
 if(u_Buffer_Index > 7 )
  {
   if((*(horse + u_File_Point) == 0) && (*(horse + u_File_Point+1) == 0)&&(*(horse + u_File_Point+2) == 0)&&(*(horse + u_File_Point+3) == 0))
   	   {
      Needle[15].Work_State  = 2;	
      }
   else
    {
   	 if(u_Read_Index)
   	    {
   	     for( u_a = 0;u_a < 15; ++u_a )
   	       {
   	     	Needle[u_a].X_Reference = Needle[u_a + 1].X_Reference;	
   	     	Needle[u_a].Y_Reference = Needle[u_a + 1].Y_Reference;	
   	     	Needle[u_a].Work_State  = Needle[u_a + 1].Work_State;
   	     	Needle[u_a].Embroider_Mode = Needle[u_a + 1].Embroider_Mode;
   	     	Needle[u_a].Sequence  = Needle[u_a + 1].Sequence;
   	    	}
   	     Needle[15].Work_State  = 0;
   	     Needle[15].Sequence  = Needle[14].Sequence + 1;
   	     if(*(horse + u_File_Point) == 0x80 )
   	        {
   	       	 ++u_File_Point;
   	       	 if((*(horse + u_File_Point) == 02) ||(*(horse + u_File_Point) == 04))
   	       	     Needle[15].Embroider_Mode = JUMP_NEEDLE;
   	       	 if(*(horse + u_File_Point) == 01)
   	       	     Needle[15].Embroider_Mode = CHANGE_COLOR;
   	       	 ++u_File_Point;
   	       	 Needle[15].X_Reference = *(horse + u_File_Point);
   	       	  ++u_File_Point;
   	       	 Needle[15].Y_Reference = *(horse + u_File_Point);
   	       	 ++u_File_Point;
   	       	 ++u_Jump_num;
   	       	}
   	    else
   	      {
   	      	 Needle[15].Embroider_Mode = NORMAL;
   	      	 Needle[15].X_Reference = *(horse + u_File_Point);
   	       	  ++u_File_Point;
   	       	 Needle[15].Y_Reference = *(horse + u_File_Point);
   	       	 ++u_File_Point;
   	      }
   	    if(*(horse + u_File_Point_Front) == 0x80)
           	u_File_Point_Front+=4;
        else
            u_File_Point_Front+=2;
   	      --u_Buffer_Index;
   	  } 
  }
 }
if(u_Buffer_Index < 7)
  {
   if(u_File_Point_Front == 0)
     {
      Needle[0].Work_State  = 1;	//开始针
     }
   else
     {
      if(u_Read_Index)
   	    {
   	     for( u_a = 15; u_a > 0; --u_a )
   	       {

⌨️ 快捷键说明

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