📄 tsf_main.c
字号:
/*********************************************************************
* 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 + -