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

📄 events.c

📁 用freescale公司的DSP56F8013芯片实现的PMSM的SVPWM 驱动
💻 C
字号:
#include "Cpu.h"
#include "Events.h"
#include "Start.h"
#include "Close.h"
#include "Smopos.h"
#include "Clarke.h"
#include "Iclarke.h"
#include "Park.h"
#include "Ipark.h"
#include "ADC1.h"
#include "Spdcal.h"
#include "Spdreg.h"
//#include "PFC_function.h"

extern long int cnt2drtchg;
extern bool updown;	
extern unsigned int Vbus1;
extern unsigned int Vbusoffset;
extern int Vbus;
extern unsigned int Ia1;
extern unsigned int Ib1;
extern int Iaoffset;
extern int Iboffset;
extern int Ia;			
extern int Ib;
extern int a;
extern int b;
extern int cnt2tabset;
extern bool tabset;
extern bool tabstop;
extern int cnt2ctlchg;
extern bool clzloop;
extern int cnt2autoadj;
extern bool autoadj;
extern int ktempchg;
extern int ktempmax;
extern int ktemp;
extern int gujun;
extern int Imax;
extern bool Imaxfst;
extern int cnt2Imax;
extern int index;					
extern unsigned int cnt2Imaxchg;
extern int Imaxtab[28];
extern int Imin;
extern int idx;
extern int Iminflag;
extern int d;
extern int e;
extern bool tab;
extern int sensebit;
extern bool normalbit;
extern int smobit;
extern bool stnormal;
extern int num;
extern unsigned int cnt2omg;
extern int thetaa;
extern int thetab;
extern bool spdregbit;
extern int omeg;

///////*variables used in pfc*///0xc9d 350V
volatile int dc_bus,dcbus_ref=0,dc_lowlim,dc_highlim,dcref_trgt=0xd58;//0x23f-60v  0x5b8-150v	//reference value of dcbus	
volatile int soft_flag,soft_start,p_flag;
volatile int value0,D_sat;

volatile value_CMPLD1=30000,value_CMPLD2=0;
int	pro_num;

 /* variables used in voltage loop */
  int evol_n;
  int kp_vol=0x6800;						
  int ki_vol=0x0666,ksat_vol=0x00fc;		
  long vol_temp;
  
  int vol_pi_max=0x3333,vol_pi_min=0;	
  
 long Integral_Max=16777216,Integral_Min=-16777216;
  ///// 
  /* for LED   */
  extern int Leddata[8];
 bool change;
////
///for SCI
SCIAS_TComData senddata[12];
SCIAS_TComData recdata[12];
bool scicom;
///

#pragma interrupt called 
                        
void PWM_OnReload(void)
{
static int pfc_count=0;
	

   //start AD conversion, sample iA and iB and vDC
  clrRegBit(ADC_ADCR1,STOP0);
  setRegBit(ADC_ADCR1,START0);
  //end  AD conversion
   
   /* Read the adc result */
  dc_bus=(int)(getReg(ADC_ADRSLT1)>>3); 
  //end read
  
  /*under output-voltage protection*/
 if(p_flag==1&&((dc_bus<dc_lowlim)||(dc_bus>dc_highlim)))   ///0x186-40v///0x4f5-130v  0xc94-330v
  {
  	 pro_num++;
  }
  else pro_num=0;
  if(pro_num>=200)
  {
  	ACRELAY_ClrVal();

  	soft_start=0;
 	p_flag=0;
  	pro_num=0;
  	dcbus_ref=0;
  	value_CMPLD2=0;
  	value_CMPLD1=30000;
 
  }
  /*end protection*/

//  SOFTSTART_function();//call soft start function
   /*end soft start*/
if((dcbus_ref<dcref_trgt)&&(soft_start==1))
       {  if(soft_flag>10)
          {  dcbus_ref++;
             soft_flag=0;
          }
          else
            soft_flag++;
       }
   else if((dcbus_ref>=dcref_trgt)&&(soft_start==1))
   {
   	  p_flag=1;
   }   
   

	
   if((soft_start==1||p_flag==1)&&pfc_count)
    /* voltage loop,output the result of voltage PI calculation:vol_sat,Q14 */
{

  evol_n=dcbus_ref-dc_bus;			//Q12,e(n)			
 
//  D_sat=PID_function(evol_n);//call PID
  /* end voltage PI calculation */  
  
   // value0=((long)D_sat*period)>>14;  					//Q0
  value0=(int)(((long)D_sat*160)>>14);
  value0=(int)(((long)D_sat*160)>>14);
  value_CMPLD2=2*value0;
  value_CMPLD1=320-value_CMPLD2;
}
 /*end pfc*/
 
	if(pfc_count++!=0)
	{
	  pfc_count=0;
	}
   
 setReg(TMR0_CMPLD1,value_CMPLD1);     //updata the Timer register 
 setReg(TMR0_CMPLD2,value_CMPLD2);

if(p_flag==1)
{ PWM_OutputPadEnable();

	if(clzloop==1)	
	cnt2omg++;
	if((clzloop==1) && (cnt2omg==1))
	{
	thetaa=num;							/* start angle */
	}


	else if((clzloop==1) && (cnt2omg==401))
	{
										/* end angle */
		if(num>=thetaa)
			omeg=num-thetaa;			/* 240 means 1000rpm */
		else
			omeg=num-thetaa+360;	

		spdregbit=1;
	
		if(omeg<=230)
			omeg=230;
		
		else if(omeg>=250)
			omeg=250;
	}
	sensebit++;
		
	if(sensebit==1)	
	{
	smobit++;								
	
	if(smobit==2)	
	{
	stnormal=1;
	smobit=0;
	}
							
	}
	
	else
	{		
		clrRegBit(ADC_ADCR1,STOP0);
		setRegBit(ADC_ADCR1,START0);
		sensebit=0;	
	}
}

else 
  {
  PWM_OutputPadDisable();
  }

}
/*
** ===================================================================
**     Event       :  TI2_OnInterrupt (module Events)
**
**     From bean   :  TI2 [TimerInt]
**     Description :
**         When a timer interrupt occurs this event is called (only
**         when the bean is enabled - "Enable" and the events are
**         enabled - "EnableEvent").
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
#pragma interrupt called /* Comment this line if the appropriate 'Interrupt preserve registers' property */
                         /* is set to 'yes' (#pragma interrupt saveall is generated before the ISR)      */
void TI2_OnInterrupt(void)
{
  /* Write your code here ... */
  static int i=0,l=0;
  word *num=0;
  static int number=0;
  static int count=0;
  LEDSPI_SendChar((unsigned int)(Leddata[i]));
  i++;
  if(i==8)
  i=0;
  
  count++;
  if(count>1000)
  {
  	count=0;
  	change=1;
  }
   
  l++;
  if(l==50)
  {number++;
  if(number==10)
  {  number=0;
  	if (scicom)
	{
//		SCIAS_ClearTxBuf();  
//		SCIAS_SendBlock(senddata,12,num);
	//	scicom=0;//need to disable
	}
  
  }
  l=0;	
  }

}

/*
** ===================================================================
**     Event       :  SCIAS_OnError (module Events)
**
**     From bean   :  SCIAS [AsynchroSerial]
**     Description :
**         This event is called when a channel error (not the error
**         returned by a given method) occurs. The errors can be
**         read using <GetError> method.
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
#pragma interrupt called /* Comment this line if the appropriate 'Interrupt preserve registers' property */
                         /* is set to 'yes' (#pragma interrupt saveall is generated before the ISR)      */
void SCIAS_OnError(void)
{
  /* Write your code here ... */
}

/*
** ===================================================================
**     Event       :  SCIAS_OnRxChar (module Events)
**
**     From bean   :  SCIAS [AsynchroSerial]
**     Description :
**         This event is called after a correct character is
**         received. 
**         DMA mode:
**         If DMA controller is available on the selected CPU and
**         the receiver is configured to use DMA controller then
**         this event is disabled. Only OnFullRxBuf method can be
**         used in DMA mode.
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
#pragma interrupt called /* Comment this line if the appropriate 'Interrupt preserve registers' property */
/*
** ===================================================================
**     Event       :  SCIAS_OnTxChar (module Events)
**
**     From bean   :  SCIAS [AsynchroSerial]
**     Description :
**         This event is called after a character is transmitted.
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
#pragma interrupt called /* Comment this line if the appropriate 'Interrupt preserve registers' property */
/*
** ===================================================================
**     Event       :  SCIAS_OnFullRxBuf (module Events)
**
**     From bean   :  SCIAS [AsynchroSerial]
**     Description :
**         This event is called when the input buffer is full.
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
#pragma interrupt called /* Comment this line if the appropriate 'Interrupt preserve registers' property */
                         /* is set to 'yes' (#pragma interrupt saveall is generated before the ISR)      */
void SCIAS_OnFullRxBuf(void)
{
  /* Write your code here ... */
    word *num=0;
	
	scicom=1;
//	SCIAS_RecvBlock(recdata,12,num);
//	SCIAS_ClearRxBuf();
}

/*
** ===================================================================
**     Event       :  SCIAS_OnFreeTxBuf (module Events)
**
**     From bean   :  SCIAS [AsynchroSerial]
**     Description :
**         This event is called after the last character in output
**         buffer is transmitted.
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
#pragma interrupt called /* Comment this line if the appropriate 'Interrupt preserve registers' property */
/*
** ===================================================================
**     Event       :  TO1_OnFalling (module Events)
**
**     From bean   :  TO1 [TimerOut]
**     Description :
**         This event is called at falling edge of the output signal.
**         (only when the bean is enabled - "Enable" and the events
**         are enabled - "EnableEvent").
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
#pragma interrupt called /* Comment this line if the appropriate 'Interrupt preserve registers' property */
                         /* is set to 'yes' (#pragma interrupt saveall is generated before the ISR)      */
void TO1_OnFalling(void)
{
  /* Write your code here ... */
}

/*
** ===================================================================
**     Event       :  TI1_OnInterrupt (module Events)
**
**     From bean   :  TI1 [TimerInt]
**     Description :
**         When a timer interrupt occurs this event is called (only
**         when the bean is enabled - "Enable" and the events are
**         enabled - "EnableEvent").
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
#pragma interrupt called /* Comment this line if the appropriate 'Interrupt preserve registers' property */
                         /* is set to 'yes' (#pragma interrupt saveall is generated before the ISR)      */
void TI1_OnInterrupt(void)
{
  /* Write your code here ... */
}

/* END Events */

⌨️ 快捷键说明

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