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

📄 tsf_main.c

📁 变频器程序
💻 C
📖 第 1 页 / 共 3 页
字号:
/*********************************************************************
* Filename: tsf_main.c                          	                 *
*                                                                    *
* Author: John Cao, HUST						                     *
*                                                                    *
* Last Modified: 30/05/2003                                          *
*                                                                    *
* Description: This program realizes TSF control trategy of SRMd     *    
*                                                                    *
*********************************************************************/


/*** Address Definitions ***/
#include        "f2407regs.h"        
#include  		"qmath.h"
#include        "svgen.h"
//#include        "drive.h"
#include        "pwmgen.h"
#include        "F07ILVD.h"
#include        "QEP.h"
#include        "target.h"
#include        "pid_reg3.h"
#include        "pid_reg1.h"
#include        "speed_fr.h"
#include        "volt_cal.h" 
#include        "aci_fe.h" 
#include        "rampgen.h"
#include        "rmp_cntl.h"  
#include 		"firfilt.h"
#include        "cur_mod.h" 
   

#define         DAC0    port8018        /* EVM DAC register 0 (I/O space) */
ioport unsigned port8018;               /* '24xx compiler specific keyword */

#define         DAC1    port8019        /* EVM DAC register 1 (I/O space) */
ioport unsigned port8019;               /* '24xx compiler specific keyword */

#define         DAC2    port801a        /* EVM DAC register 2 (I/O space) */
ioport unsigned port801a;               /* '24xx compiler specific keyword */

#define         DAC3    port801b        /* EVM DAC register 3 (I/O space) */
ioport unsigned port801b;               /* '24xx compiler specific keyword */

#define         DAOUT   port8020        /* EVM DAC update register (I/O space) */
ioport unsigned port8020;               /* '24xx compiler specific keyword */

#define         DIPSWCH port0008        /* EVM DIP switch (I/O space) */
ioport unsigned port0008;               /* '24xx compiler specific keyword */


#define			DAUSER 	port0020
ioport unsigned port0020; 


#define const_c  0x026E/*c=0.019,Q15*/ 
#define const_a  0x0312/*c=0.024,Q15*/ 
#define pesi_s   0x0800/*pesi_s=0.25,Q15*/
/*interrupt void timer1_isr(void);      */  
void timer1_isr(void);
interrupt void timer2_isr(void);
void led(void);
void observe(unsigned int,unsigned int,unsigned int,unsigned int);
unsigned int amplitute(unsigned int a,unsigned int b);

void delay(void); 
void sysinit(void);   
void Led1On(void);
 void Led1Off(void);
 void Led2On(void); 
 void Led2Off(void);
 void Led3On(void);
 void Led3Off(void);
void Led4On(void); 
void Led4Off(void);
 void Led5On(void); 
 void Led5Off(void);
 void Led6On(void);
 void Led6Off(void);
  void ad(void);
  void UpCeptRes(void);
 void GndCeptRes(void);
 
 void UpCeptS(void);
 void GndCeptS(void);

 void UpPrtRes(void);
 void GndPrtRes(void);
 
 void UpTS(void);
 void GndTS(void);
 
 
 void UpJzgEn(void);
 void GndJzgEn(void);
 void UpVtgRes(void);
 void GndVtgRes(void);
 void UpVtgs(void);
 void GndVtgS(void);
 
 void UpJcqEn(void);
 void GndJcqEn(void);
 
 
 void EnDrive(void);
 void DisDrive(void);
 void UpRes(void);
 void GndRes(void);
 
 
 
 
 void UpP1(void);
 void GndP1(void);
 
 


/*** Constant Definitions ***/
#define         timer2_per    4000     /* 1ms timer2 period with a 1/4 timer prescaler and 40MHz CPUCLK */
#define 		timer1_per	  4000    
#define         pwm_duty      2000      /* 25% PWM duty cycle */ 
#define			SP_LOOP_FRQ_CONT	20			
#define			Speed_ref	0x02ab			/*Desired velocity, 0x2ab --->100r/min,
                                                                0x1000--->600r/min */




int vtg_res,prt_res;


	  
int led_cnt=0; 
int tx_cnt=0,sp_cnt=0;
unsigned int LED_STATE=0xffff;
int channel_0=-1,channel_1=-1,channel_2=-1,channel_3=-1;/*the result of ad0-3*/ 
int time=0,time1=0;   
unsigned int ramp=0;
int test_step=0,phase_no=1;
int test_comm=0;

//int Ad_data[200];
extern int Ad_data[200];

 #pragma DATA_SECTION(fira,"firfilt");
 #pragma DATA_SECTION(firb,"firfilt");
// FIRFILT_ORD10 fira =FIRFILT_ORD10_LPF; 
// FIRFILT_ORD10 firb =FIRFILT_ORD10_LPF; 
  FIRFILT_ORD20 fira =FIRFILT_ORD20_LPF; 
  FIRFILT_ORD20 firb =FIRFILT_ORD20_LPF; 

int flag=0;
int qq=0;
int amp=0;
int Vbus;

typedef struct {int a,b,c ;} triad; 
typedef struct {int d,q ;} dq; 
typedef struct {int D,Q,theta ;} DQt;
RMPCNTL rmpc = RMPCNTL_DEFAULTS;
RAMPGEN rg = RAMPGEN_DEFAULTS;
SVGENDQ svgen=SVGENDQ_DEFAULTS;
PWMGEN pwm=PWMGEN_DEFAULTS;
PHASEVOLTAGE volt=PHASEVOLTAGE_DEFAULTS;
PIDREG3 pid_id = PIDREG3_DEFAULTS_id;  
PIDREG3 pid_iq = PIDREG3_DEFAULTS_iq; 
//PIDREG3 pid_spd = PIDREG3_DEFAULTS_sp;
PIDREG1 pid_spd=PIDREG1_V_USER;
ILEG2DCBUSMEAS ilg2_vdc = ILEG2DCBUSMEAS_DEFAULTS;
QEP qep1 = QEP_DEFAULTS;
SPEED_MEAS sp = SPEED_FR_MEAS_DEFAULTS;
ACIFE fe = ACIFE_DEFAULTS;
CURMOD cur = CURMOD_DEFAULTS;

       dq	  voltage_dq,current_dq,current_DQ;
       DQt	  voltage_DQt,current_dqt;
       triad  current_abc;
       
       unsigned int freq_testing = 0x0900;
       unsigned int Vd_testing = 0x1fff;
       unsigned int Vq_testing = 0x0000;
       unsigned int speed_ref =0x500;
       //unsigned int aa[50],bb[50],cc[50];
       
       
//DRIVE drive=DRIVE_DEFAULTS;
/****************************** MAIN ROUTINE ***************************/
void main(void)
{

int jj;
int s1,s2,s3,s_t,s_c,s_v,flag;
    *IMR = 0x0000;
    sysinit();
    delay();     
    delay();
    delay();
    delay();   
fira.dbuffer_ptr=&fira.dbuffer[0];
fira.coeff_ptr=&fira.coeff[0];
fira.init(&fira);
firb.dbuffer_ptr=&firb.dbuffer[0];
firb.coeff_ptr=&firb.coeff[0];
firb.init(&firb);
    jj=1;
/*for(;;)
//for(jj=0;jj<100;jj++)
{ int kk;
//for(kk=0;kk<1000;kk++)
//{delay();}
//Ad_data[jj]=(*RESULT1)>>6;
jj=jj+10;
observe((*RESULT1)>>6,jj>>6,0,0);
}*/
//    pid_id.Kp_reg3 = 21178;  		/* Q15 */                                                    
//    pid_id.Ki_reg3 = 5592;   		/* Q31-16bit */
//    pid_id.Kd_reg3 = 0;		   		/* Q14 */
//    pid_id.Kc_reg3 = 20281;  		/* Q15 */
//    pid_id.pid_out_max = 0x4000;     /* Q15 */
//    pid_id.pid_out_min = 0xC000;     /* Q15 */
    
//    pid_iq.Kp_reg3 = 21178;  		/* Q15 */                                                    
//    pid_iq.Ki_reg3 = 5592;   		/* Q31-16bit */
//    pid_iq.Kd_reg3 = 0;		   		/* Q14 */
//    pid_iq.Kc_reg3 = 20281;  		/* Q15 */
//    pid_iq.pid_out_max = 0x6500;     /* Q15 */
//    pid_iq.pid_out_min = 0x9B00;     /* Q15 */
    current_DQ.d=0;
    current_DQ.q=0;
    
    ilg2_vdc.Ch_sel=0x067f;
    ilg2_vdc.Imeas_a_offset=0;//-400;
    ilg2_vdc.Imeas_b_offset=0;//-400;
    ilg2_vdc.init(&ilg2_vdc);
    qep1.init(&qep1);
    /*DA initialization*/
    DAC0=0;
    DAC1=0;
    DAC2=0;
    DAC3=0;
    DAOUT=3;
     
while(1)
{   s1=*PFDATDIR&0x0004;
    s2=*PFDATDIR&0x0020;
    s3=*PFDATDIR&0x0008;
    if(s1==0x0000)
      {GndJcqEn();
      Led1On();
      //UpJzgEn();
      break;}

}    
while(1)
{   s1=*PFDATDIR&0x0004;
    s2=*PFDATDIR&0x0020;
    s3=*PFDATDIR&0x0008;
 /* if (s2==0x0000)
      {
    UpJcqEn();
    Led1Off();
    break; }*/
  /* if(s3==0x000)
    {   
    GndJzgEn();
    Led3On();
    break;
    }*/
    
    if(s3==0x000)
    {   
    GndJzgEn();
    Led3On();
    
    GndVtgRes();
    
    
    
    break;
    }

}   

 
 





/*if(s3==0x0000){
	while(1)
	{   s1=*PFDATDIR&0x0004;
	    s2=*PFDATDIR&0x0020;
	    s3=*PFDATDIR&0x0008;
	 if (s2==0x0000)
  	    {
	    UpJcqEn();
	    Led1Off();
	    UpJzgEn();
	    Led3Off();
	    break; }
} 
  }  */
  

    asm(" CLRC INTM");  

/*** Enable global interrupts ***/
                 /* enable global interrupts */   

/*** Proceed with main routine ***/
   
  /* while(drive.enable_flg==0)
        {
        drive.init(&drive);
        } */
    //pwm.init(&pwm);



    while(1)
    
    {
    
    s1=*PFDATDIR&0x0004;
    //s2=*PFDATDIR&0x0020;
    s3=*PFDATDIR&0x0008;
    s_t=*PBDATDIR&0x0080;
    s_c=*PBDATDIR&0x0020;
    s_v=*PFDATDIR&0x0002;


 
while(1)
{s2=*PFDATDIR&0x0020;
 if(s2==0x000)

 {delay();
s2=*PFDATDIR&0x0020;
 if(s2==0x000)
 {
 qq=1;
 Led1Off();
 Led3Off();
 Led2On();
 break;
 }

}
}





while(1)
{
 s1=*PFDATDIR&0x0004;
    s2=*PFDATDIR&0x0020;
    s3=*PFDATDIR&0x0008;


if(s2==0x0000&&s3==0x0000&&(amp==0))

{asm(" setc INTM ");
Led2Off();
qq=0;
break;
}
}



//故障中断返回处

while(1)
{   s1=*PFDATDIR&0x0004;
    s2=*PFDATDIR&0x0020;
    s3=*PFDATDIR&0x0008;
    if(s1==0x0000)
      {GndJcqEn();
      Led1On();
      //UpJzgEn();
      break;}

}    
while(1)
{   s1=*PFDATDIR&0x0004;
    s2=*PFDATDIR&0x0020;
    s3=*PFDATDIR&0x0008;
 /* if (s2==0x0000)
      {
    UpJcqEn();
    Led1Off();
    break; }*/
   if(s3==0x000)
    {   
    GndJzgEn();
    Led3On();
    asm(" CLRC INTM"); 
    break;
    }

}   
    
    
    
   
  /*  if(s1==0x0000) 
  { // GndCeptRes();    
     UpPrtRes();
      
        Led1On();}
      
      if (s2==0x0000)
      {//UpCeptRes();
      GndPrtRes();
      Led1Off();}
      if(s_t)
      Led2On();
      if(s_t==0x0000)
      Led2Off();
     if(s_c)
      Led3On();
      if(s_c==0x0000)
      Led3Off();
      if(s_v)
      Led4On();
      if(s_v==0x0000)
      Led4Off();
      if(s3==0x0000)
    {
      GndVtgRes();
       Led5On();
       }
      */
       
 /*      if(s1==0x0000)
      {GndJcqEn();
      Led1On();
      flag=1;}
      if (s2==0x0000)
      {
    UpJcqEn();
      Led1Off();
     flag=0; }
     
  */   
     
     
 /*    
    
     
   if(s3==0x000&&flag==1)
    {
   
    GndJzgEn();
    Led3On();
    }
    */
      /*  if(s1==0x0000)
       {GndJcqEn();
       Led1On();}
       if (s2==0x0000)
       {
       UpJcqEn();
       Led1Off();} */
    
    
   
    
   
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

⌨️ 快捷键说明

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