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

📄 led8_8.c

📁 使用芯片为TI公司的DSP2812。该程序用以完成对交流电机的控制
💻 C
字号:

#include "DSP28_Device.h"
#include "DSP28_Globalprototypes.h"


#define Phase_A 	GpioDataRegs.GPADAT.bit.GPIOA0
#define Phase_C     GpioDataRegs.GPADAT.bit.GPIOA1
#define Phase_B     GpioDataRegs.GPADAT.bit.GPIOA2
#define Phase_D  	GpioDataRegs.GPADAT.bit.GPIOA3


#define Start GpioDataRegs.GPBDAT.bit.GPIOB0
#define Stop GpioDataRegs.GPBDAT.bit.GPIOB1
#define Pos GpioDataRegs.GPBDAT.bit.GPIOB2
#define Neg GpioDataRegs.GPBDAT.bit.GPIOB3
#define SpeedUp     GpioDataRegs.GPBDAT.bit.GPIOB4
#define SpeedDown   GpioDataRegs.GPBDAT.bit.GPIOB5

#define ON 1
#define OFF 0

#define A 1
#define C 2
#define B 3
#define D 4


#define STT 0x01
#define STP 0x02
#define P   0x03
#define N   0x04
#define SUp 0x05
#define SDn 0x06

unsigned int flag;
unsigned int ssflag;
int timer;
unsigned int keytmp;
unsigned int KeyData;
unsigned int StartOrNot = 0;
unsigned int NegOrPos = 1;


void Gpio_select(void);
void Delay(unsigned int t);
void StepMotor(int phase,int status);
void stop(void);
unsigned char ScanKey(void);
void MoDe1(unsigned int MF1,unsigned int t);
void MoDe2(unsigned int MF2,unsigned int t);
void MoDe3(unsigned int MF3,unsigned int t);

void main(void)
{

    unsigned int kb = 0;
    
	InitSysCtrl();

	// Disable and clear all CPU interrupts:
	DINT;
	IER = 0x0000;
	IFR = 0x0000;

	// Initialize Pie Control Registers To Default State:
	InitPieCtrl();

	InitPieVectTable();	
	
	Gpio_select();
	timer = 2000;
	StartOrNot = 0;
	NegOrPos = 1;
	stop();
		
	while(1)
	{
    if(StartOrNot==1 && NegOrPos==1)
	  MoDe1(1,timer);
	else if(StartOrNot==1 && NegOrPos==0)
	        MoDe1(0,timer);
	else stop();
	kb = ScanKey();
	switch(kb)
	{
	case STT:
	     StartOrNot = 1;	     
	     break;
	case STP:	     
	     StepMotor(A,OFF);
	     StepMotor(C,OFF);
      	 StepMotor(B,OFF);
	     StepMotor(D,OFF);
	     StartOrNot = 0;	     
	     break;
	case P:
	     if(StartOrNot==1 && NegOrPos==0)
	     NegOrPos=1;	     
	     break;
	case N:
	     if(StartOrNot==1 && NegOrPos==1)
	     NegOrPos=0;	     
	     break;
	case SUp:
	     timer = timer-100;
	     if(timer < 300) timer = 300;
	     break;
	case SDn:
	     timer = timer+100;
	     break;
	default:
	     break;	     
	
	}
	
	}
	
} 



void Gpio_select(void)
{
	EALLOW;
	
	GpioMuxRegs.GPAMUX.all=0x0000;
	GpioMuxRegs.GPADIR.all=0x000F;
	GpioMuxRegs.GPAQUAL.all=0x0000;;
	 
    GpioMuxRegs.GPBMUX.all=0x0000;    
    GpioMuxRegs.GPBDIR.all=0x0000;   		// GPIO DIR select GPIOs as output  
    GpioMuxRegs.GPBQUAL.all=0x0000;   
    
    EDIS;
     
}

void Delay(unsigned int t)
{
  int  i,j;
    for(i=0;i<t;i++)
    { for(j=0;j<200;j++); }
}

//单拍方式
void MoDe1(unsigned int MF1,unsigned int t)
{
  if(MF1 == 1)
  {
  StepMotor(D,OFF);
  StepMotor(A,ON);
  Delay(t);
  StepMotor(A,OFF);
  StepMotor(C,ON);
  Delay(t);
  StepMotor(C,OFF);
  StepMotor(B,ON);
  Delay(t);
  StepMotor(B,OFF);
  StepMotor(D,ON);
  Delay(t);
  }else
  {
  StepMotor(C,OFF);
  StepMotor(A,ON);
  Delay(t);
  StepMotor(A,OFF);
  StepMotor(D,ON);
  Delay(t);
  StepMotor(D,OFF);
  StepMotor(B,ON);
  Delay(t);
  StepMotor(B,OFF);
  StepMotor(C,ON);
  Delay(t);
  }
}

//双拍方式
void MoDe2(unsigned int MF2,unsigned int t)
{
if(MF2 == 1)
  {
StepMotor(D,OFF);
StepMotor(A,ON);
StepMotor(C,ON);
Delay(t);
StepMotor(A,OFF);
StepMotor(C,ON);
 StepMotor(B,ON);
 Delay(t);
StepMotor(C,OFF);
 StepMotor(B,ON);
StepMotor(D,ON);
Delay(t);
StepMotor(B,OFF);
StepMotor(D,ON);
 StepMotor(A,ON);
Delay(t);
}else
{
StepMotor(B,OFF);
StepMotor(A,ON);
StepMotor(C,ON);
Delay(t);
StepMotor(C,OFF);
StepMotor(D,ON);
 StepMotor(A,ON);
Delay(t);
StepMotor(A,OFF);
 StepMotor(B,ON);
StepMotor(D,ON);
Delay(t);
StepMotor(D,OFF);
StepMotor(C,ON);
 StepMotor(B,ON);
 Delay(t);
}
}
//单双拍结合
void MoDe3(unsigned int MF3,unsigned int t) 
{
if(MF3 == 1)
  {
StepMotor(D,OFF);
StepMotor(A,ON);
Delay(t);
	            

StepMotor(A,ON);
StepMotor(C,ON);
Delay(t);
	            
StepMotor(A,OFF);
StepMotor(C,ON);
Delay(t);
	            

 StepMotor(C,ON);
StepMotor(B,ON);
Delay(t);
	            
StepMotor(C,OFF);
StepMotor(B,ON);
Delay(t);
	            

StepMotor(B,ON);
StepMotor(D,ON);
Delay(t);
	            
StepMotor(B,OFF);
StepMotor(D,ON);
Delay(t);
	            

StepMotor(D,ON);
StepMotor(A,ON);
Delay(t);
}else
{
StepMotor(C,OFF);
StepMotor(A,ON);
Delay(t);


StepMotor(D,ON);
StepMotor(A,ON);
Delay(t);

StepMotor(A,OFF);
StepMotor(D,ON);
Delay(t);


StepMotor(B,ON);
StepMotor(D,ON);
Delay(t);

StepMotor(D,OFF);
StepMotor(B,ON);
Delay(t);


StepMotor(C,ON);
StepMotor(B,ON);
Delay(t);

StepMotor(B,OFF);
StepMotor(C,ON);
Delay(t);


StepMotor(A,ON);
 StepMotor(C,ON);
 Delay(t);

}	            

	          

} 


void StepMotor(int phase,int status)
{
    switch(phase)
    {
       case A:
           if(status==ON)
           {
               Phase_A = ON;
           } else
           {
               Phase_A = OFF;
           }
           break;
       case B:
           if(status==ON)
           {
               Phase_B = ON;
           } else
           {
               Phase_B = OFF;
           }
           break;
       case C:
           if(status==ON)
           {
               Phase_C = ON;
           } else
           {
               Phase_C = OFF;
           }
           break;
        case D:
           if(status==ON)
           {
               Phase_D = ON;
           } else
           {
               Phase_D = OFF;
           }
           break; 
         default:
           break;   
    }
}
void stop(void)
{
	StepMotor(A,OFF);
	StepMotor(C,OFF);
	StepMotor(B,OFF);
	StepMotor(D,OFF);
}
unsigned char ScanKey(void)
{ 
    EALLOW;
    GpioMuxRegs.GPBDIR.all=0x0FFFF;
    EDIS;
    

    GpioDataRegs.GPBSET.all = 0x003F;
    GpioDataRegs.GPBCLEAR.all = 0x0FFC0; 
    
    Delay(1000);
    
    EALLOW;
    GpioMuxRegs.GPBDIR.all=0x0000;
    EDIS;
    Delay(1000);
   
    keytmp = GpioDataRegs.GPBDAT.all;
   
   
    /*if(keytmp  == 0x003F)
     {
      flag = 0;
     
      while(flag == 0)
      {
      keytmp = GpioDataRegs.GPBDAT.all & 0x003F;
      flag = 1;
      }
      
     }*/ 
     
     switch(keytmp & 0x003F)
     {
     case 0x003E:
          KeyData = STT;
        
          break;
     case 0x003D:
          KeyData = STP;
         
          break;
     case 0x003B:
          KeyData = P;
          break;
     case 0x0037:
          KeyData = N;
          break;
     case 0x002F:
          KeyData = SUp;
          break;
     case 0x001F:
          KeyData = SDn;
          break;
     default:
          break;
     
     }
   
     return(KeyData);  
     
}



   
//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

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