📄 events.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 + -