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

📄 eva_interrupt.c

📁 DSP2812的直流斩波调速程序
💻 C
字号:


#include "DSP28_Device.h"     // DSP281x Headerfile Include File
#include "DSP28_Adc.h"   // DSP281x Examples Include File
/*
#pragma CODE_SECTION(T1PINT_isr, "ramfuncs");
#pragma CODE_SECTION(T1UFINT_isr, "ramfuncs");
*/
extern void Vd_pi(void);
extern void Id_pi(void);
extern float Vd,Id,Vr,M;
/*
extern Uint16 Ramfuncs_LoadStart;
extern Uint16 Ramfuncs_LoadEnd;
extern Uint16 Ramfuncs_RunStart;
*/
Uint16 LoopCount;
Uint16 i=0;
Uint16 Current1[3];
Uint16 Current2[3];
Uint16 Voltage1[3];
Uint16 Voltage2[3];
Uint16 switch_flag;
Uint16 Softvoltage=0;
Uint16 sum1=0,Sum1=0;
Uint16 sum2=0,Sum2=0;
Uint16 sum3=0,Sum3=0;
Uint16 sum4=0,Sum4=0;
Uint16 Uinref=0;

float M_ratio;

int  k;
int  speed1=0;
int  speed2=0;
int  Time=0;
int  softstart_flag=0;
void StartStop_Control(void);
void Speedcontrol(int speed1, int speed2);//速度控制函数
void ADCaverage(void);
void Delay(int Time);
void SoftStart(void);
void Switchoff(void);
void Vd_pi(void);
void Protect(void);
/*
void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr);
*/
interrupt void T1PINT_isr(void);
interrupt void T1UFINT_isr(void);
main()
{

   InitSysCtrl();//系统初始化
   switch_flag=1;//置关机标志
  // while(GpioDataRegs.GPFDAT.bit.GPIOF13)//开关机拦截
   //{ }
   InitGpio();  // 输入输出端口初始化
        
   DINT;
   IER = 0x0000;
   IFR = 0x0000;

   InitPieCtrl();

   InitPieVectTable();

   EALLOW;
   PieVectTable.T1PINT = &T1PINT_isr;//向中断向量表写入T1周期中断地址
   PieVectTable.T1UFINT = &T1UFINT_isr;//向中断向量表写入T1下益中断地址

   EDIS;

   InitEv();//

   InitAdc();//
// memcpy(&Ramfuncs_LoadStart, &Ramfuncs_LoadEnd, &Ramfuncs_LoadEnd-&Ramfuncs_LoadStart);

  // Call Flash Initialization to setup flash waitstates
   // This function must reside in RAM
//   InitFlash();
   PieCtrl.PIEIER2.bit.INTx4 = 1;
   PieCtrl.PIEIER2.bit.INTx6 = 1;//原来为1
   
   IER |= M_INT2; // Enable CPU Interrupt 2
   
   EINT;          // Enable Global interrupt INTM
   ERTM;          // Enable Global realtime interrupt DBGM
  
  
  while(1)
   {
   StartStop_Control();
   Protect();
   }

}//main层
interrupt void T1PINT_isr(void)
{
  if(softstart_flag==1)  
  	{
    //ADCaverage();
  	Vd_pi();
    Id_pi();
  	}
  AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
  AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;

  EvaRegs.EVAIFRA.bit.T1PINT=1;//Clear interrupt flag bit 7
  PieCtrl.PIEACK.all = PIEACK_GROUP2;   // Acknowledge interrupt to PIE
  EINT;
  return;//
}

interrupt void T1UFINT_isr(void)
{
  
  
  EvaRegs.EVAIFRA.bit.T1UFINT=1;
  for(i=0;i<=3;i++)
  {
  Current1[i] = AdcRegs.RESULT0 >>4;//
  Current2[i] = AdcRegs.RESULT1 >>4;//
  Voltage1[i] = AdcRegs.RESULT2 >>4;//
  Voltage2[i] = AdcRegs.RESULT3 >>4;//
  }
  ADCaverage();
  PieCtrl.PIEACK.all = PIEACK_GROUP2;   // Acknowledge interrupt to PIE
  EINT;
  return;//

}
void Protect()
{
    if(Id>=45)
	softstart_flag=0;	 	
    EvaRegs.CMPR1=5000;
	 
}

void Speedcontrol(int speed1,int speed2)
{
          
        EvaRegs.CMPR1 = speed1;
        EvaRegs.CMPR2 = speed2;
}

void ADCaverage()
{
if(i==4) //
  {
    for(k=0;k<=3;k++)
    {
     sum1=sum1+Current1[k];
     sum2=sum2+Current2[k];
     sum3=sum3+Voltage1[k];
     sum4=sum4+Voltage2[k];
    }
     Sum1=sum1/4;
     Id=sum2*0.0033;//=Sum2*3*18/4095;//输出电流乘18和电压基准一样
     Vd=sum3*0.0022;//=Sum3*3*18/4095;//输出电压
     Sum4=sum4/4;
     // M_ratio=Sum4;//电位器调节占空比
     sum1=0;
     sum2=0;
     sum3=0;
     sum4=0;
     k=0;
     i=0;
     }
 }

void StartStop_Control()
{
if(switch_flag==1)
      {
      if(GpioDataRegs.GPFDAT.bit.GPIOF13==0)
      SoftStart();
      }
      else if(switch_flag==0) 
      {
      if(GpioDataRegs.GPFDAT.bit.GPIOF13==1)
       //Delay(10);
       if(GpioDataRegs.GPFDAT.bit.GPIOF13==1)
        {
         Switchoff(); 
        }     
      }
}
void SoftStart()
{       
   
    GpioDataRegs.GPEDAT.bit.GPIOE2=1;//
    switch_flag=0;
    softstart_flag=1;
    for(Softvoltage=0;Softvoltage<=5000;Softvoltage++)
        {
          
          //Delay(5);
          EvaRegs.CMPR1=Softvoltage;//Vr
          EvaRegs.CMPR2=Softvoltage;//
        }
    
}
void Switchoff()
{
      
      GpioDataRegs.GPEDAT.bit.GPIOE2=0;//
      switch_flag=1;
      Uinref=0;
//Speedcontrol(Uinref,Uinref);
}
void Delay(int Time)
{
 while(Time>0)
 Time--;
}


⌨️ 快捷键说明

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