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

📄 stepmoto(128step).s

📁 用步进电机的朋友参考一下
💻 S
📖 第 1 页 / 共 2 页
字号:
                 PhaseB=0;                                                                                                                        
                 break;                                                                                                                           
           default:                                                                                                                               
                 break;                                                                                                                           
     }                                                                                                                                            
     CCAP0L=0;                                                                                                                                    
     CCAP0H=255-pSubdivideTable->mB_PWM;                                                                                                          
     CCAP1L=0;                                                      //CL<CCAPxL  PWMx=0                                                           
     CCAP1H=255-pSubdivideTable->mA_PWM;                  //CL>=CCAPxL PWMx=1                                                                     
}                                                                                                                                                 
/************************************************************/                                                                                    
void MotorRun(unsigned char Direct,unsigned int Steps)                                                                                            
{                                                                                                                                                 
     unsigned int StepCount;                                                                                                                      
     unsigned char Subdivide=1;                                                                                                                   
     switch(MotorWorking.WorkState)                                                                                                               
     {                                                                                                                                            
           case MotorIdel:                                                                                                                        
                 MotorWorking.MotorDirect=Direct;                                                                                                 
                 MotorWorking.MotorSteps=Steps;                                                                                                   
                 MotorWorking.SubdivideNumber=1;                        //马达128倍细分                                                           
                 MotorWorking.WorkState=MotorPowerOn;                                                                                             
          case MotorPowerOn:                                                      //马达旋转步距角比较小时,在上电过程中完成,速度不上到正常旋转中
                 while(Subdivide<MotorWorking.MaxStep)                                                                                            
                 {                                                                                                                                
                       StepCount=65;                        //马达走64个小步,速度上一个台阶                                                      
                       while(--StepCount)                                                                                                         
                       {                                                                                                                          
                             MotorRunOneStep(MotorWorking.MotorDirect);                                                                           
                             MotorGetEnergy(MotorWorking.SubdivideTableID);                                                                       
                       }                                                                                                                          
                       Subdivide<<=1;                                                                                                             
                       MotorWorking.SubdivideNumber=Subdivide;                                                                                    
                 }//当马达速度达到最大速度时进入正常运转状态                                                                                      
                 MotorWorking.WorkState=MotorNormalState;                                                                                         
           case MotorNormalState:                                                                                                                 
                 StepCount=MotorWorking.MotorSteps;                              //这里的StepCount保存的是马达还有多少个步距角                    
                 while(StepCount>4)                  //马达最后一圈进入减速状态                                                                   
                 {                                                                                                                                
                             MotorRunOneStep(MotorWorking.MotorDirect);                                                                           
                             MotorGetEnergy(MotorWorking.SubdivideTableID);                                                                       
                             StepCount=MotorWorking.MotorSteps;                                                                                   
                 }                                                                                                                                
                 MotorWorking.WorkState=MotorPowerOff;                                                                                            
           case MotorPowerOff:                                                                                                                    
                 StepCount=MotorWorking.MotorSteps;                                                                                               
                 if(MotorWorking.MotorSteps==4)                                                                                                   
                 {                                                                                                                                
                       Subdivide=MotorWorking.MaxStep>>1;                                                                                         
                       while(Subdivide)                                                                                                           
                       {                                                                                                                          
                             StepCount=65;                        //马达走64个小步,速度上一个台阶                                                
                             while(--StepCount)                                                                                                   
                             {                                                                                                                    
                                   MotorRunOneStep(MotorWorking.MotorDirect);                                                                     
                                   MotorGetEnergy(MotorWorking.SubdivideTableID);                                                                 
                             }                                                                                                                    
                             Subdivide>>=1;                                                                                                       
                             MotorWorking.SubdivideNumber=Subdivide;                                                                              
                       }//当马达速度达到最大速度时进入正常运转状态                                                                                
                 }                                                                                                                                
                 MotorWorking.WorkState=MotorIdel;                                                                                                
                 break;                                                                                                                           
           default:                                                                                                                               
                 break;                                                                                                                           
     }                                                                                                                                            
}                                                                                                                                                 
                                                                                                                                                  

⌨️ 快捷键说明

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