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

📄 stepmoto(128step).s

📁 用步进电机的朋友参考一下
💻 S
📖 第 1 页 / 共 2 页
字号:
我的步进电机细分的源代码(128细分),已经运转正常,请大家参考                                                                                     
#include <motor.h>                                                                                                                                
/************************************************************/                                                                                    
//internal  clock,Fosc/6,PCA interrupt enable                                                                                                     
//system oscillator frequency 12M, 1/6 * 12M=0.5us                                                                                                
void ConfigPWM()                                                                                                                                  
{                              //CIDL WDTE               CPS1 CPS0  ECF                                                                           
     CMOD=0x02;            //      0    0       0    0    0    0    1    0                                                                        
     CCAPM0=0x42;      // CEX0(P1.3) 8 bit PWM Model,join B winding                                                                               
     CCAPM1=0x42;      // CEX1(P1.4) 8 bit PWM Model,join A winding                                                                               
     CL=0;                                                                                                                                        
     CH=0;                                                                                                                                        
     CR=1;                  // turn the PCA counter on                                                                                            
}                                                                                                                                                 
/************************************************************/                                                                                    
void SetMaxStep(unsigned char Steps)                                                                                                              
{                                                                                                                                                 
     MotorWorking.MaxStep=Steps;                                                                                                                  
}                                                                                                                                                 
/************************************************************/                                                                                    
//马达走动一步                                                                                                                                    
//参数:Direct=1,0-->3象限逆时针走细分表                                                                                                          
//                                                                                                                                                
/************************************************************/                                                                                    
void MotorRunOneStep(unsigned char Direct)                                                                                                        
{                                                                                                                                                 
     if(Direct)                                                                                                                                   
     {      //逆时针走细分表                                                                                                                      
           //下一细分表ID等于当前细分表ID加细分倍数                                                                                               
           MotorWorking.SubdivideTableID+=MotorWorking.SubdivideNumber;                                                                           
           if(MotorWorking.SubdivideTableID%128==0)                                                                                               
                 MotorWorking.MotorSteps-=1;                        //细分表走完128小步,马达旋转1.8度,走了1步                                   
           if(MotorWorking.SubdivideTableID>=512)            //细分表走完归零                                                                     
                 MotorWorking.SubdivideTableID=0;                                                                                                 
     }                                                                                                                                            
     else                                                                                                                                         
     {      //顺时针走细分表                                                                                                                      
           if(MotorWorking.SubdivideTableID==0)            //下一步细分表ID等于当前细分表ID减细分倍数                                             
                 MotorWorking.SubdivideTableID=512-MotorWorking.SubdivideNumber;                                                                  
           else                                                                                                                                   
                 MotorWorking.SubdivideTableID-=MotorWorking.SubdivideNumber;                                                                     
           if(MotorWorking.SubdivideTableID%128==0)                                                                                               
                 MotorWorking.MotorSteps-=1;                        //细分表走完128小步,马达旋转1.8度,走了1步                                   
     }                                                                                                                                            
}                                                                                                                                                 
/************************************************************/                                                                                    
//马达根据细分ID输出电流                                                                                                                          
/************************************************************/                                                                                    
void MotorGetEnergy(unsigned int SubdivideID)                                                                                                     
{                                                                                                                                                 
     SubdivideTable *pSubdivideTable;                                                                                                             
     pSubdivideTable=&(MotorSubdividedTab+SubdivideID);                                                                                           
     switch(pSubdivideTable->mQuardrant)                                                                                                          
     {                                                                                                                                            
           case 1:                  //+iA,+iB                                                                                                     
                 PhaseA=1;                                                                                                                        
                 PhaseB=1;                                                                                                                        
                 break;                                                                                                                           
           case 2:                  //-iA,+iB                                                                                                     
                 PhaseA=0;                                                                                                                        
                 PhaseB=1;                                                                                                                        
                 break;                                                                                                                           
           case 3:                  //-iA,-iB                                                                                                     
                 PhaseA=0;                                                                                                                        
                 PhaseB=0;                                                                                                                        
                 break;                                                                                                                           
           case 4:                  //+iA,-iB                                                                                                     
                 PhaseA=1;                                                                                                                        

⌨️ 快捷键说明

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