1636 lines
44 KiB
C
1636 lines
44 KiB
C
|
|
|||
|
|
|||
|
#include "v_pwm24.h"
|
|||
|
//#include "DSP281x_Device.h" // DSP281x Headerfile Include File
|
|||
|
//#include "big_dsp_module.h"
|
|||
|
//#include "rmp2cntl.h" // Include header for the VHZPROF object
|
|||
|
//#include "rmp_cntl_my1.h" // Include header for the VHZPROF object
|
|||
|
#include "pid_reg3.h" // Include header for the VHZPROF object
|
|||
|
|
|||
|
#include "params.h"
|
|||
|
// #include "PWMTools.h"
|
|||
|
#include "adc_tools.h"
|
|||
|
#include "v_pwm24.h"
|
|||
|
|
|||
|
#include "dq_to_alphabeta_cos.h"
|
|||
|
|
|||
|
#include "IQmathLib.h"
|
|||
|
// #include "log_to_memory.h"
|
|||
|
//Xilinx
|
|||
|
//#include "x_parameters.h"
|
|||
|
// #include "x_basic_types.h"
|
|||
|
// #include "xp_project.h"
|
|||
|
// #include "xp_cds_tk.h"
|
|||
|
#include "svgen_dq.h"
|
|||
|
#include "xp_write_xpwm_time.h"
|
|||
|
|
|||
|
#include "def.h"
|
|||
|
|
|||
|
#define DEF_FREQ_PWM_XTICS T1_PRD
|
|||
|
#define DEF_PERIOD_MIN_XTICS (DT + 10e-6)*FTBCLK
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> xilinx <20><><EFBFBD><EFBFBD><EFBFBD> (60000000 / 16 / FREQ_PWM = 3750000 / FREQ_PWM)
|
|||
|
// #pragma DATA_SECTION(VAR_FREQ_PWM_XTICS,".fast_vars1");
|
|||
|
int VAR_FREQ_PWM_XTICS = DEF_FREQ_PWM_XTICS;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> xilinx <20><><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// #pragma DATA_SECTION(VAR_PERIOD_MAX_XTICS,".fast_vars1");
|
|||
|
int VAR_PERIOD_MAX_XTICS = DEF_FREQ_PWM_XTICS - DEF_PERIOD_MIN_XTICS;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> xilinx <20><><EFBFBD><EFBFBD><EFBFBD> (mintime+deadtime) (F<><46><EFBFBD><EFBFBD> * T<><54><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD> = (60 / 16 / 2) * T<><54><EFBFBD> = (60 * T<><54><EFBFBD> / 16 / 2))
|
|||
|
// #pragma DATA_SECTION(VAR_PERIOD_MIN_XTICS,".fast_vars1");
|
|||
|
int VAR_PERIOD_MIN_XTICS = DEF_PERIOD_MIN_XTICS;//
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> xilinx <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (mintime) (F<><46><EFBFBD><EFBFBD> * T<><54><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD> = (60 / 16 / 2) * T<><54><EFBFBD> = (60 * T<><54><EFBFBD> / 16 / 2))
|
|||
|
// #pragma DATA_SECTION(VAR_PERIOD_MIN_BR_XTICS,".fast_vars1");
|
|||
|
// int VAR_PERIOD_MIN_BR_XTICS = DEF_PERIOD_MIN_BR_XTICS;//
|
|||
|
|
|||
|
#define PWM_ONE_INTERRUPT_RUN 1
|
|||
|
#define PWM_TWICE_INTERRUPT_RUN 0
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#define SQRT3 29058990 //1.7320508075688772935274463415059
|
|||
|
#define CONST_IQ_1 16777216 //1
|
|||
|
#define CONST_IQ_05 8388608 //0.5
|
|||
|
#define CONST_IQ_2 33554432 //2
|
|||
|
|
|||
|
#define CONST_IQ_PI6 8784530 //30
|
|||
|
#define CONST_IQ_PI3 17569060 // 60
|
|||
|
#define CONST_IQ_PI 52707178 // 180
|
|||
|
#define CONST_IQ_OUR1 35664138 //
|
|||
|
#define CONST_IQ_2PI 105414357 // 360
|
|||
|
#define CONST_IQ_120G 35138119 // 120 grad
|
|||
|
#define CONST_IQ_3 50331648 // 3
|
|||
|
|
|||
|
#define IQ_ALFA_SATURATION1 15099494//16441671//15099494
|
|||
|
#define IQ_ALFA_SATURATION2 1677721//16441671//15099494
|
|||
|
|
|||
|
|
|||
|
#define PI 3.1415926535897932384626433832795
|
|||
|
|
|||
|
// #pragma DATA_SECTION(iq_alfa_coef,".fast_vars");
|
|||
|
_iq iq_alfa_coef = 16777216;
|
|||
|
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
//#pragma DATA_SECTION(freq_array,".v_24pwm_vars");
|
|||
|
//int freq_array[COUNT_VAR_FREQ];
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
|
|||
|
//#pragma DATA_SECTION(pidCur_Kp,".v_24pwm_vars");
|
|||
|
//_iq pidCur_Kp = 0;
|
|||
|
|
|||
|
// #pragma DATA_SECTION(pidCur_Ki,".fast_vars");
|
|||
|
_iq pidCur_Ki = 0;
|
|||
|
|
|||
|
// #pragma DATA_SECTION(ar_tph,".fast_vars");
|
|||
|
_iq ar_tph[7];
|
|||
|
|
|||
|
// #pragma DATA_SECTION(winding_displacement,".fast_vars");
|
|||
|
_iq winding_displacement = CONST_IQ_PI6;
|
|||
|
|
|||
|
//#pragma DATA_SECTION(iq_koef_mod_korrect_1,".fast_vars");//v_24pwm_vars
|
|||
|
//_iq iq_koef_mod_korrect_1;
|
|||
|
|
|||
|
//#pragma DATA_SECTION(iq_koef_mod_korrect_2,".v_24pwm_vars");
|
|||
|
//_iq iq_koef_mod_korrect_2;
|
|||
|
|
|||
|
//#pragma DATA_SECTION(ar_sa_all,".v_24pwm_vars");
|
|||
|
// #pragma DATA_SECTION(ar_sa_all,".fast_vars");
|
|||
|
int ar_sa_all[3][6][4][7] = { {
|
|||
|
{
|
|||
|
{-1,0,0,0,1,1,1},{0,1,1,1,0,0,0},{0,0,1,1,1,0,0},{0,1,1,1,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,-1,0,0,0,1,1},{-1,-1,0,0,0,0,0},{-1,0,0,0,1,0,0},{0,0,1,1,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,-1,-1,0,0,0,1},{-1,-1,-1,0,0,0,0},{-1,-1,-1,0,0,0,0},{-1,-1,-1,0,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,-1,-1,0,0,0,1},{-1,-1,-1,0,0,0,0},{-1,-1,-1,0,0,0,0},{-1,-1,-1,0,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,-1,0,0,0,1,1},{-1,-1,0,0,0,0,0},{-1,0,0,0,1,0,0},{0,0,1,1,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,0,0,0,1,1,1},{0,1,1,1,0,0,0},{0,0,1,1,1,0,0},{0,1,1,1,0,0,0}
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
{
|
|||
|
{-1,-1,0,0,0,1,1},{-1,-1,0,0,0,0,0},{-1,0,0,0,1,0,0},{0,0,1,1,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,0,0,0,1,1,1},{0,1,1,1,0,0,0},{0,0,1,1,1,0,0},{0,1,1,1,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,0,0,0,1,1,1},{0,1,1,1,0,0,0},{0,0,1,1,1,0,0},{0,1,1,1,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,-1,0,0,0,1,1},{-1,-1,0,0,0,0,0},{-1,0,0,0,1,0,0},{0,0,1,1,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,-1,-1,0,0,0,1},{-1,-1,-1,0,0,0,0},{-1,-1,-1,0,0,0,0},{-1,-1,-1,0,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,-1,-1,0,0,0,1},{-1,-1,-1,0,0,0,0},{-1,-1,-1,0,0,0,0},{-1,-1,-1,0,0,0,0}
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
{
|
|||
|
{-1,-1,-1,0,0,0,1},{-1,-1,-1,0,0,0,0},{-1,-1,-1,0,0,0,0},{-1,-1,-1,0,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,-1,-1,0,0,0,1},{-1,-1,-1,0,0,0,0},{-1,-1,-1,0,0,0,0},{-1,-1,-1,0,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,-1,0,0,0,1,1},{-1,-1,0,0,0,0,0},{-1,0,0,0,1,0,0},{0,0,1,1,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,0,0,0,1,1,1},{0,1,1,1,0,0,0},{0,0,1,1,1,0,0},{0,1,1,1,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,0,0,0,1,1,1},{0,1,1,1,0,0,0},{0,0,1,1,1,0,0},{0,1,1,1,0,0,0}
|
|||
|
},
|
|||
|
{
|
|||
|
{-1,-1,0,0,0,1,1},{-1,-1,0,0,0,0,0},{-1,0,0,0,1,0,0},{0,0,1,1,0,0,0}
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
// #pragma DATA_SECTION(svgen_pwm24_1,".v_24pwm_vars");
|
|||
|
//#pragma DATA_SECTION(svgen_pwm24_1,".fast_vars");
|
|||
|
SVGEN_PWM24 svgen_pwm24_1 = SVGEN_PWM24_DEFAULTS;
|
|||
|
// #pragma DATA_SECTION(svgen_pwm24_2,".v_24pwm_vars");
|
|||
|
//#pragma DATA_SECTION(svgen_pwm24_2,".fast_vars");
|
|||
|
SVGEN_PWM24 svgen_pwm24_2 = SVGEN_PWM24_DEFAULTS;
|
|||
|
|
|||
|
// #pragma DATA_SECTION(svgen_dq_1,".v_24pwm_vars");
|
|||
|
SVGENDQ svgen_dq_1 = SVGENDQ_DEFAULTS;
|
|||
|
// #pragma DATA_SECTION(svgen_dq_2,".v_24pwm_vars");
|
|||
|
SVGENDQ svgen_dq_2 = SVGENDQ_DEFAULTS;
|
|||
|
|
|||
|
//#pragma DATA_SECTION(delta_t1_struct,".v_24pwm_vars");
|
|||
|
//#pragma DATA_SECTION(delta_t1_struct,".fast_vars");
|
|||
|
//PIDREG3 delta_t1_struct = PIDREG3_DEFAULTS;
|
|||
|
//#pragma DATA_SECTION(delta_t2_struct,".v_24pwm_vars");
|
|||
|
//#pragma DATA_SECTION(delta_t2_struct,".fast_vars");
|
|||
|
//PIDREG3 delta_t2_struct = PIDREG3_DEFAULTS;
|
|||
|
|
|||
|
void calc_t_abc(_iq k, _iq teta, int region, _iq *iq_tt0, _iq *iq_tt1, _iq *iq_tt2, _iq *iq_tt3, _iq *iq_tt4, _iq *iq_tt5);
|
|||
|
void set_predel_dshim24(SVGEN_PWM24_TIME *T,int16 dmin,int16 dmax);
|
|||
|
void set_predel_dshim24_simple0(SVGEN_PWM24_TIME *T,int16 dmin,int16 dmax);
|
|||
|
void set_predel_dshim24_simple1(SVGEN_PWM24_TIME *T,int16 dmin,int16 dmax);
|
|||
|
int detect_sec(_iq teta);
|
|||
|
int detect_region(_iq k, _iq teta);
|
|||
|
//
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//void init_alpha(void)
|
|||
|
//{
|
|||
|
//
|
|||
|
//// power_ain1.init(&power_ain1);
|
|||
|
//// power_ain2.init(&power_ain2);
|
|||
|
//
|
|||
|
// svgen_mf1.NewEntry = 0;//_IQ(0.5);
|
|||
|
// svgen_mf2.NewEntry = 0;
|
|||
|
//
|
|||
|
// svgen_mf1.SectorPointer = 0;
|
|||
|
// svgen_mf2.SectorPointer = 0;
|
|||
|
//
|
|||
|
////<2F><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// svgen_mf1.Alpha = _IQ(0);
|
|||
|
// svgen_mf2.Alpha = _IQ(0);
|
|||
|
//
|
|||
|
//
|
|||
|
//
|
|||
|
//
|
|||
|
//
|
|||
|
//#if (SETUP_SDVIG_OBMOTKI == SDVIG_OBMOTKI_30_PLUS)
|
|||
|
//// 30 <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// svgen_mf1.Alpha = _IQ(0.5);
|
|||
|
// svgen_mf2.Alpha = _IQ(0);
|
|||
|
//
|
|||
|
// svgen_mf1.Full_Alpha = svgen_mf1.Alpha;
|
|||
|
// svgen_mf2.Full_Alpha = svgen_mf2.Alpha;
|
|||
|
//#else
|
|||
|
//
|
|||
|
//
|
|||
|
//#if (SETUP_SDVIG_OBMOTKI == SDVIG_OBMOTKI_30_MINUS)
|
|||
|
//// -30 <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// svgen_mf1.Alpha = _IQ(0);
|
|||
|
// svgen_mf2.Alpha = _IQ(0.5);
|
|||
|
// svgen_mf1.Full_Alpha = svgen_mf1.Alpha;
|
|||
|
// svgen_mf2.Full_Alpha = svgen_mf2.Alpha;
|
|||
|
//#else
|
|||
|
//
|
|||
|
//#if (SETUP_SDVIG_OBMOTKI == SDVIG_OBMOTKI_ZERO)
|
|||
|
//// -30 <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// svgen_mf1.Alpha = _IQ(0);
|
|||
|
// svgen_mf2.Alpha = _IQ(0);
|
|||
|
// svgen_mf1.Full_Alpha = svgen_mf1.Alpha;
|
|||
|
// svgen_mf2.Full_Alpha = svgen_mf2.Alpha;
|
|||
|
//#else
|
|||
|
// #error "!!!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!! <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SETUP_SDVIG_OBMOTKI <20> params_motor.h!!!"
|
|||
|
//
|
|||
|
//
|
|||
|
//#endif
|
|||
|
//
|
|||
|
//#endif
|
|||
|
//
|
|||
|
//
|
|||
|
//
|
|||
|
//#endif
|
|||
|
//
|
|||
|
//
|
|||
|
//
|
|||
|
//}
|
|||
|
|
|||
|
void InitVariablesSvgen(unsigned int freq)
|
|||
|
{
|
|||
|
////////// Inserted from 'initPWM_Variables' for modulation project //////////
|
|||
|
|
|||
|
//<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
xpwm_time.Tclosed_0 = 0;
|
|||
|
xpwm_time.Tclosed_1 = VAR_FREQ_PWM_XTICS + 1;
|
|||
|
xpwm_time.Tclosed_high = VAR_FREQ_PWM_XTICS + 1;
|
|||
|
xpwm_time.pwm_tics = VAR_FREQ_PWM_XTICS;
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
|||
|
// "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>=0x0
|
|||
|
//<2F><><EFBFBD><EFBFBD> SAW_DIRECTbit = 0 <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=0
|
|||
|
//<2F><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD> SAW_DIRECTbit = 1 <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=0
|
|||
|
//<2F><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
//<2F><><EFBFBD> 22220 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0, <20>.<2E>. <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
xpwm_time.saw_direct.all = 0;//0x0555;
|
|||
|
xpwm_time.one_or_two_interrupts_run = PWM_TWICE_INTERRUPT_RUN;
|
|||
|
|
|||
|
initXpwmTimeStructure(&xpwm_time);
|
|||
|
init_alpha_pwm24(VAR_FREQ_PWM_XTICS);
|
|||
|
/////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
svgen_pwm24_1.pwm_minimal_impuls_zero_minus = 0;//(float)DEF_PERIOD_MIN_MKS*1000.0*FREQ_INTERNAL_GENERATOR_XILINX_TMS/1000000000.0;// DEF_PERIOD_MIN_XTICS_100;//DEF_PERIOD_MIN_XTICS_80;
|
|||
|
svgen_pwm24_1.pwm_minimal_impuls_zero_plus = 0;//(float)DEF_PERIOD_MIN_MKS*1000.0*FREQ_INTERNAL_GENERATOR_XILINX_TMS/1000000000.0;// DEF_PERIOD_MIN_XTICS_80;
|
|||
|
|
|||
|
svgen_pwm24_2.pwm_minimal_impuls_zero_minus = svgen_pwm24_1.pwm_minimal_impuls_zero_minus;
|
|||
|
svgen_pwm24_2.pwm_minimal_impuls_zero_plus = svgen_pwm24_1.pwm_minimal_impuls_zero_plus;
|
|||
|
|
|||
|
|
|||
|
svgen_pwm24_1.Tclosed_high = xpwm_time.Tclosed_1;
|
|||
|
svgen_pwm24_2.Tclosed_high = xpwm_time.Tclosed_1;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
svgen_dq_1.Ualpha = 0;
|
|||
|
svgen_dq_1.Ubeta = 0;
|
|||
|
|
|||
|
svgen_dq_2.Ualpha = 0;
|
|||
|
svgen_dq_2.Ubeta = 0;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// #pragma CODE_SECTION(recalc_time_pwm_minimal_2_xilinx_pwm24_l,".fast_run2");
|
|||
|
void recalc_time_pwm_minimal_2_xilinx_pwm24_l(SVGEN_PWM24 *pwm24,
|
|||
|
_iq *T0, _iq *T1,
|
|||
|
_iq timpuls_corr )
|
|||
|
{
|
|||
|
|
|||
|
//_iq pwm_t, timpuls_corr;
|
|||
|
|
|||
|
volatile unsigned long pwm_t;
|
|||
|
volatile unsigned int minimal_plus, minimal_minus;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
minimal_plus = pwm24->pwm_minimal_impuls_zero_plus;
|
|||
|
minimal_minus = pwm24->pwm_minimal_impuls_zero_minus;
|
|||
|
|
|||
|
// if (pwm24->prev_level == V_PWM24_PREV_PWM_CLOSE || pwm24->prev_level == V_PWM24_PREV_PWM_MIDDLE || pwm24->prev_level == V_PWM24_PREV_PWM_WORK_KM0)
|
|||
|
// {
|
|||
|
// minimal_plus *= 2;
|
|||
|
// minimal_minus *= 2;
|
|||
|
// }
|
|||
|
|
|||
|
pwm_t = timpuls_corr / pwm24->XilinxFreq;
|
|||
|
|
|||
|
// *T_imp = pwm_t;
|
|||
|
|
|||
|
// if (pwm_t>(pwm24->Tclosed_high-4*minimal_minus))
|
|||
|
// pwm_t=(pwm24->Tclosed_high-4*minimal_minus);
|
|||
|
|
|||
|
|
|||
|
if (timpuls_corr >= 0)
|
|||
|
{
|
|||
|
*T0 = pwm_t + minimal_plus;
|
|||
|
// *T1 = 0;
|
|||
|
*T1 = pwm24->Tclosed_high - minimal_minus;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
*T0 = 0 + minimal_plus;
|
|||
|
// *T1 = -pwm_t - minimal_minus;
|
|||
|
*T1 = pwm24->Tclosed_high + pwm_t - minimal_minus;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// if (*T0 < minimal_plus)
|
|||
|
// *T0 = minimal_plus;
|
|||
|
|
|||
|
// if (*T0 > (pwm24->Tclosed_high - 2 * minimal_plus))
|
|||
|
// *T0 = (pwm24->Tclosed_high - 2 * minimal_plus);
|
|||
|
|
|||
|
// if (*T1 < (2 * minimal_minus))
|
|||
|
// *T1 = 2 * minimal_minus;
|
|||
|
|
|||
|
// if (*T1 > (pwm24->Tclosed_high - minimal_minus))
|
|||
|
// *T1 = (pwm24->Tclosed_high - minimal_minus);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
static DQ_TO_ALPHABETA dq_to_ab = DQ_TO_ALPHABETA_DEFAULTS;
|
|||
|
|
|||
|
// #pragma CODE_SECTION(test_calc_dq_pwm24,".v_24pwm_run");
|
|||
|
void test_calc_dq_pwm24(_iq Ud, _iq Uq, _iq Ud2, _iq Uq2, _iq tetta,_iq Uzad_max)
|
|||
|
{
|
|||
|
// DQ_TO_ALPHABETA dq_to_ab = DQ_TO_ALPHABETA_DEFAULTS;
|
|||
|
_iq maxUq = 0;
|
|||
|
_iq Uzad_max_square = _IQmpy(Uzad_max, Uzad_max);
|
|||
|
|
|||
|
if (tetta > CONST_IQ_2PI)
|
|||
|
{
|
|||
|
tetta -= CONST_IQ_2PI;
|
|||
|
}
|
|||
|
|
|||
|
if (tetta < 0)
|
|||
|
{
|
|||
|
tetta += CONST_IQ_2PI;
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
maxUq = _IQsqrt(Uzad_max_square - _IQmpy(Ud, Ud));
|
|||
|
if (Uq > maxUq) { Uq = maxUq;}
|
|||
|
if (Uq < -maxUq) { Uq = -maxUq;}
|
|||
|
|
|||
|
|
|||
|
//Reculct dq to alpha-beta
|
|||
|
dq_to_ab.Tetta = tetta;
|
|||
|
dq_to_ab.Ud = Ud;
|
|||
|
dq_to_ab.Uq = Uq;
|
|||
|
dq_to_ab.calc2(&dq_to_ab);
|
|||
|
//Calc swgen times for 1-st winding
|
|||
|
svgen_dq_1.Ualpha = dq_to_ab.Ualpha;
|
|||
|
svgen_dq_1.Ubeta = dq_to_ab.Ubeta;
|
|||
|
svgen_dq_1.calc(&svgen_dq_1);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
maxUq = _IQsqrt(Uzad_max_square - _IQmpy(Ud, Ud));
|
|||
|
if (Uq2 > maxUq) { Uq2 = maxUq;}
|
|||
|
if (Uq2 < -maxUq) { Uq2 = -maxUq;}
|
|||
|
|
|||
|
//Reculc dq to alpha-beta for 2-nd winding with winding displasement
|
|||
|
dq_to_ab.Tetta = tetta - winding_displacement;
|
|||
|
dq_to_ab.Ud = Ud2;
|
|||
|
dq_to_ab.Uq = Uq2;
|
|||
|
dq_to_ab.calc2(&dq_to_ab);
|
|||
|
//Calc swgen times for 1-st winding
|
|||
|
svgen_dq_2.Ualpha = dq_to_ab.Ualpha;
|
|||
|
svgen_dq_2.Ubeta = dq_to_ab.Ubeta;
|
|||
|
svgen_dq_2.calc(&svgen_dq_2);
|
|||
|
|
|||
|
//1 winding
|
|||
|
recalc_time_pwm_minimal_2_xilinx_pwm24_l (&svgen_pwm24_1, &svgen_pwm24_1.Ta_0.Ti, &svgen_pwm24_1.Ta_1.Ti, svgen_dq_1.Ta);
|
|||
|
recalc_time_pwm_minimal_2_xilinx_pwm24_l (&svgen_pwm24_1, &svgen_pwm24_1.Tb_0.Ti, &svgen_pwm24_1.Tb_1.Ti, svgen_dq_1.Tb);
|
|||
|
recalc_time_pwm_minimal_2_xilinx_pwm24_l (&svgen_pwm24_1, &svgen_pwm24_1.Tc_0.Ti, &svgen_pwm24_1.Tc_1.Ti, svgen_dq_1.Tc);
|
|||
|
|
|||
|
// 2 winding
|
|||
|
recalc_time_pwm_minimal_2_xilinx_pwm24_l (&svgen_pwm24_2, &svgen_pwm24_2.Ta_0.Ti, &svgen_pwm24_2.Ta_1.Ti, svgen_dq_2.Ta);
|
|||
|
recalc_time_pwm_minimal_2_xilinx_pwm24_l (&svgen_pwm24_2, &svgen_pwm24_2.Tb_0.Ti, &svgen_pwm24_2.Tb_1.Ti, svgen_dq_2.Tb);
|
|||
|
recalc_time_pwm_minimal_2_xilinx_pwm24_l (&svgen_pwm24_2, &svgen_pwm24_2.Tc_0.Ti, &svgen_pwm24_2.Tc_1.Ti, svgen_dq_2.Tc);
|
|||
|
|
|||
|
// set_predel_dshim24_simple0(&svgen_pwm24_1.Ta_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
// set_predel_dshim24_simple1(&svgen_pwm24_1.Ta_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
//
|
|||
|
// set_predel_dshim24_simple0(&svgen_pwm24_1.Tb_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
// set_predel_dshim24_simple1(&svgen_pwm24_1.Tb_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
//
|
|||
|
// set_predel_dshim24_simple0(&svgen_pwm24_1.Tc_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
// set_predel_dshim24_simple1(&svgen_pwm24_1.Tc_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
//
|
|||
|
// set_predel_dshim24_simple0(&svgen_pwm24_2.Ta_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
// set_predel_dshim24_simple1(&svgen_pwm24_2.Ta_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
//
|
|||
|
// set_predel_dshim24_simple0(&svgen_pwm24_2.Tb_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
// set_predel_dshim24_simple1(&svgen_pwm24_2.Tb_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
//
|
|||
|
// set_predel_dshim24_simple0(&svgen_pwm24_2.Tc_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
// set_predel_dshim24_simple1(&svgen_pwm24_2.Tc_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
/*
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Ta_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Ta_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tb_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tb_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tc_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tc_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Ta_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Ta_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tb_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tb_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tc_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tc_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);*/
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// #pragma CODE_SECTION(test_calc_simple_dq_pwm24,".v_24pwm_run");
|
|||
|
void test_calc_simple_dq_pwm24(_iq uz1, _iq uz2, _iq fz1, _iq fz2,_iq Uzad_max)
|
|||
|
{
|
|||
|
static _iq hz_to_angle = _IQ(2.0 * PI * NORMA_FROTOR / FREQ_PWM / 2);
|
|||
|
// static _iq tetta = 0;
|
|||
|
DQ_TO_ALPHABETA dq_to_ab = DQ_TO_ALPHABETA_DEFAULTS;
|
|||
|
|
|||
|
_iq Ud = 0;
|
|||
|
_iq Uq = _IQsat(uz1,Uzad_max,0);
|
|||
|
|
|||
|
analog.tetta += _IQmpy(fz1, hz_to_angle);
|
|||
|
|
|||
|
if (analog.tetta >= CONST_IQ_2PI)
|
|||
|
{
|
|||
|
analog.tetta -= CONST_IQ_2PI;
|
|||
|
}
|
|||
|
|
|||
|
if (analog.tetta < 0)
|
|||
|
{
|
|||
|
analog.tetta += CONST_IQ_2PI;
|
|||
|
}
|
|||
|
|
|||
|
dq_to_ab.Tetta = analog.tetta;
|
|||
|
dq_to_ab.Ud = Ud;
|
|||
|
dq_to_ab.Uq = Uq;
|
|||
|
dq_to_ab.calc2(&dq_to_ab);
|
|||
|
|
|||
|
svgen_dq_1.Ualpha = dq_to_ab.Ualpha;
|
|||
|
svgen_dq_1.Ubeta = dq_to_ab.Ubeta;
|
|||
|
|
|||
|
// svgen_dq_1.Ualpha = 0;
|
|||
|
// svgen_dq_1.Ubeta = 0;
|
|||
|
|
|||
|
svgen_dq_1.calc(&svgen_dq_1);
|
|||
|
|
|||
|
dq_to_ab.Tetta = analog.tetta - winding_displacement;
|
|||
|
dq_to_ab.Ud = Ud;
|
|||
|
dq_to_ab.Uq = Uq;
|
|||
|
dq_to_ab.calc2(&dq_to_ab);
|
|||
|
|
|||
|
svgen_dq_2.Ualpha = dq_to_ab.Ualpha;
|
|||
|
svgen_dq_2.Ubeta = dq_to_ab.Ubeta;
|
|||
|
|
|||
|
svgen_dq_2.calc(&svgen_dq_2);
|
|||
|
|
|||
|
recalc_time_pwm_minimal_2_xilinx_pwm24_l (&svgen_pwm24_1, &svgen_pwm24_1.Ta_0.Ti, &svgen_pwm24_1.Ta_1.Ti, svgen_dq_1.Ta);
|
|||
|
recalc_time_pwm_minimal_2_xilinx_pwm24_l (&svgen_pwm24_1, &svgen_pwm24_1.Tb_0.Ti, &svgen_pwm24_1.Tb_1.Ti, svgen_dq_1.Tb);
|
|||
|
recalc_time_pwm_minimal_2_xilinx_pwm24_l (&svgen_pwm24_1, &svgen_pwm24_1.Tc_0.Ti, &svgen_pwm24_1.Tc_1.Ti, svgen_dq_1.Tc);
|
|||
|
|
|||
|
// 2
|
|||
|
recalc_time_pwm_minimal_2_xilinx_pwm24_l (&svgen_pwm24_2, &svgen_pwm24_2.Ta_0.Ti, &svgen_pwm24_2.Ta_1.Ti, svgen_dq_2.Ta);
|
|||
|
recalc_time_pwm_minimal_2_xilinx_pwm24_l (&svgen_pwm24_2, &svgen_pwm24_2.Tb_0.Ti, &svgen_pwm24_2.Tb_1.Ti, svgen_dq_2.Tb);
|
|||
|
recalc_time_pwm_minimal_2_xilinx_pwm24_l (&svgen_pwm24_2, &svgen_pwm24_2.Tc_0.Ti, &svgen_pwm24_2.Tc_1.Ti, svgen_dq_2.Tc);
|
|||
|
|
|||
|
// logpar.log1 = (int16)(_IQtoIQ15(uz1));
|
|||
|
// logpar.log2 = (int16)(_IQtoIQ15(fz1));
|
|||
|
// logpar.log3 = (int16)(_IQtoIQ15(Ud));
|
|||
|
// logpar.log4 = (int16)(_IQtoIQ15(Uq));
|
|||
|
// logpar.log5 = (int16)(_IQtoIQ15(svgen_dq_1.Ualpha));
|
|||
|
// logpar.log6 = (int16)(_IQtoIQ15(svgen_dq_1.Ubeta));
|
|||
|
// logpar.log7 = (int16)(_IQtoIQ15(svgen_dq_1.Ta));
|
|||
|
// logpar.log8 = (int16)(_IQtoIQ15(svgen_dq_1.Tb));
|
|||
|
// logpar.log9 = (int16)(_IQtoIQ15(svgen_dq_1.Tc));
|
|||
|
// logpar.log10 = (int16)(_IQtoIQ12(analog.tetta));
|
|||
|
// logpar.log11 = (int16)(svgen_pwm24_1.Ta_0.Ti);
|
|||
|
// logpar.log12 = (int16)((svgen_pwm24_1.Ta_1.Ti));
|
|||
|
// logpar.log13 = (int16)(svgen_pwm24_1.Tb_0.Ti);
|
|||
|
// logpar.log14 = (int16)((svgen_pwm24_1.Tb_1.Ti));
|
|||
|
// logpar.log15 = (int16)(svgen_pwm24_1.Tc_0.Ti);
|
|||
|
// logpar.log16 = (int16)((svgen_pwm24_1.Tc_1.Ti));
|
|||
|
|
|||
|
|
|||
|
// svgen_pwm24_1.calc(&svgen_pwm24_1);
|
|||
|
// svgen_pwm24_2.calc(&svgen_pwm24_2);
|
|||
|
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
|
|||
|
// set_predel_dshim24_simple0(&svgen_pwm24_1.Ta_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
// set_predel_dshim24_simple1(&svgen_pwm24_1.Ta_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
//
|
|||
|
// set_predel_dshim24_simple0(&svgen_pwm24_1.Tb_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
// set_predel_dshim24_simple1(&svgen_pwm24_1.Tb_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
//
|
|||
|
// set_predel_dshim24_simple0(&svgen_pwm24_1.Tc_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
// set_predel_dshim24_simple1(&svgen_pwm24_1.Tc_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
//
|
|||
|
// set_predel_dshim24_simple0(&svgen_pwm24_2.Ta_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
// set_predel_dshim24_simple1(&svgen_pwm24_2.Ta_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
//
|
|||
|
// set_predel_dshim24_simple0(&svgen_pwm24_2.Tb_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
// set_predel_dshim24_simple1(&svgen_pwm24_2.Tb_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
//
|
|||
|
// set_predel_dshim24_simple0(&svgen_pwm24_2.Tc_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
// set_predel_dshim24_simple1(&svgen_pwm24_2.Tc_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Ta_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Ta_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tb_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tb_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tc_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tc_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Ta_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Ta_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tb_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tb_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tc_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tc_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
// #pragma CODE_SECTION(test_calc_pwm24,".v_24pwm_run");
|
|||
|
void test_calc_pwm24(_iq uz1, _iq uz2, _iq fz1)
|
|||
|
{
|
|||
|
//static int i =0;
|
|||
|
svgen_pwm24_1.Freq = fz1;
|
|||
|
svgen_pwm24_2.Freq = fz1;
|
|||
|
|
|||
|
svgen_pwm24_1.Gain = uz1;//_IQmpy(uz1,iq_koef_mod_korrect_1);
|
|||
|
svgen_pwm24_2.Gain = uz2;//_IQmpy(uz2,iq_koef_mod_korrect_2);
|
|||
|
|
|||
|
svgen_pwm24_1.delta_U = filter.iqU_1_fast - filter.iqU_2_fast;
|
|||
|
svgen_pwm24_2.delta_U = filter.iqU_3_fast - filter.iqU_4_fast;
|
|||
|
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
svgen_pwm24_1.delta_U = 0;
|
|||
|
svgen_pwm24_2.delta_U = 0;
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
|
|||
|
svgen_pwm24_1.Ia = analog.iqIa1_1;
|
|||
|
svgen_pwm24_1.Ib = analog.iqIb1_1;
|
|||
|
svgen_pwm24_1.Ic = analog.iqIc1_1;
|
|||
|
|
|||
|
svgen_pwm24_2.Ia = analog.iqIa2_1;
|
|||
|
svgen_pwm24_2.Ib = analog.iqIb2_1;
|
|||
|
svgen_pwm24_2.Ic = analog.iqIc2_1;
|
|||
|
|
|||
|
svgen_pwm24_1.calc(&svgen_pwm24_1);
|
|||
|
svgen_pwm24_2.calc(&svgen_pwm24_2);
|
|||
|
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Ta_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Ta_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tb_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tb_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tc_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tc_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Ta_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Ta_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tb_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tb_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tc_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tc_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
// if(((svgen_pwm24_2.Ta_0.Ti > (VAR_FREQ_PWM_XTICS - VAR_PERIOD_MIN_XTICS)) && (svgen_pwm24_2.Ta_0.Ti <= (VAR_FREQ_PWM_XTICS))) ||
|
|||
|
// ((svgen_pwm24_2.Ta_1.Ti > (VAR_FREQ_PWM_XTICS - VAR_PERIOD_MIN_XTICS)) && (svgen_pwm24_2.Ta_1.Ti <= (VAR_FREQ_PWM_XTICS))) ||
|
|||
|
// ((svgen_pwm24_2.Tb_0.Ti > (VAR_FREQ_PWM_XTICS - VAR_PERIOD_MIN_XTICS)) && (svgen_pwm24_2.Tb_0.Ti <= (VAR_FREQ_PWM_XTICS))) ||
|
|||
|
// ((svgen_pwm24_2.Tb_1.Ti > (VAR_FREQ_PWM_XTICS - VAR_PERIOD_MIN_XTICS)) && (svgen_pwm24_2.Tb_1.Ti <= (VAR_FREQ_PWM_XTICS))) ||
|
|||
|
// ((svgen_pwm24_2.Tc_0.Ti > (VAR_FREQ_PWM_XTICS - VAR_PERIOD_MIN_XTICS)) && (svgen_pwm24_2.Tc_0.Ti <= (VAR_FREQ_PWM_XTICS))) ||
|
|||
|
// ((svgen_pwm24_2.Tc_1.Ti > (VAR_FREQ_PWM_XTICS - VAR_PERIOD_MIN_XTICS)) && (svgen_pwm24_2.Tc_1.Ti <= (VAR_FREQ_PWM_XTICS))))
|
|||
|
// {
|
|||
|
// asm(" NOP ");
|
|||
|
// }
|
|||
|
//
|
|||
|
// if( ((svgen_pwm24_2.Ta_0.Ti > 0) && (svgen_pwm24_2.Ta_0.Ti < (VAR_PERIOD_MIN_XTICS))) ||
|
|||
|
// ((svgen_pwm24_2.Ta_1.Ti > 0) && (svgen_pwm24_2.Ta_1.Ti < (VAR_PERIOD_MIN_XTICS))) ||
|
|||
|
// ((svgen_pwm24_2.Tb_0.Ti > 0) && (svgen_pwm24_2.Tb_0.Ti < (VAR_PERIOD_MIN_XTICS))) ||
|
|||
|
// ((svgen_pwm24_2.Tb_1.Ti > 0) && (svgen_pwm24_2.Tb_1.Ti < (VAR_PERIOD_MIN_XTICS))) ||
|
|||
|
// ((svgen_pwm24_2.Tc_0.Ti > 0) && (svgen_pwm24_2.Tc_0.Ti < (VAR_PERIOD_MIN_XTICS))) ||
|
|||
|
// ((svgen_pwm24_2.Tc_1.Ti > 0) && (svgen_pwm24_2.Tc_1.Ti < (VAR_PERIOD_MIN_XTICS))))
|
|||
|
// {
|
|||
|
// asm(" NOP ");
|
|||
|
// }
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// #pragma CODE_SECTION(svgen_pwm24_calc,".v_24pwm_run");
|
|||
|
void svgen_pwm24_calc(SVGEN_PWM24 *vt)
|
|||
|
{
|
|||
|
_iq StepAngle;
|
|||
|
|
|||
|
StepAngle = _IQmpy(vt->Freq,vt->FreqMax);
|
|||
|
|
|||
|
vt->Alpha = vt->Alpha + StepAngle;
|
|||
|
|
|||
|
|
|||
|
if (vt->Alpha > CONST_IQ_2PI)
|
|||
|
{
|
|||
|
vt->Alpha -= CONST_IQ_2PI;
|
|||
|
}
|
|||
|
|
|||
|
if (vt->Alpha < 0)
|
|||
|
{
|
|||
|
vt->Alpha += CONST_IQ_2PI;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
calc_time_one_tk(vt->Gain, vt->Alpha, vt->delta_U, vt->Ia, vt->Ib, vt->Ic,
|
|||
|
vt->number_svgen, &vt->Ta_0, &vt->Ta_1,&vt->Tb_0, &vt->Tb_1,&vt->Tc_0, &vt->Tc_1);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
vt->Ta_0.Ti = vt->Ta_0.Ti/vt->XilinxFreq;
|
|||
|
vt->Ta_1.Ti = vt->Ta_1.Ti/vt->XilinxFreq;
|
|||
|
|
|||
|
vt->Tb_0.Ti = vt->Tb_0.Ti/vt->XilinxFreq;
|
|||
|
vt->Tb_1.Ti = vt->Tb_1.Ti/vt->XilinxFreq;
|
|||
|
|
|||
|
vt->Tc_0.Ti = vt->Tc_0.Ti/vt->XilinxFreq;
|
|||
|
vt->Tc_1.Ti = vt->Tc_1.Ti/vt->XilinxFreq;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// #pragma CODE_SECTION(calc_time_one_tk,".v_24pwm_run");
|
|||
|
void calc_time_one_tk(_iq gain, _iq teta, _iq delta_U,
|
|||
|
_iq Ia, _iq Ib, _iq Ic,
|
|||
|
unsigned int number,
|
|||
|
SVGEN_PWM24_TIME *tk0,
|
|||
|
SVGEN_PWM24_TIME *tk1,
|
|||
|
SVGEN_PWM24_TIME *tk2,
|
|||
|
SVGEN_PWM24_TIME *tk3,
|
|||
|
SVGEN_PWM24_TIME *tk4,
|
|||
|
SVGEN_PWM24_TIME *tk5)
|
|||
|
{
|
|||
|
_iq iq_t0 = 0, iq_t1 = 0, iq_t2 = 0, iq_t3 = 0, iq_t4 = 0, iq_t5 = 0;
|
|||
|
_iq t_pos = 0, t_neg = 0;
|
|||
|
_iq delta_ttt;
|
|||
|
_iq teta60;
|
|||
|
|
|||
|
int sector, region;
|
|||
|
int cur_sign, i, ki;
|
|||
|
int updown_tk0;
|
|||
|
int updown_tk1;
|
|||
|
|
|||
|
volatile _iq t_tk0, t_tk1;
|
|||
|
|
|||
|
updown_tk0 = 1;
|
|||
|
updown_tk1 = 0;
|
|||
|
|
|||
|
sector = detect_sec(teta); //
|
|||
|
teta60 = teta - _IQmpy(_IQ(sector - 1),CONST_IQ_PI3); //
|
|||
|
|
|||
|
if ((sector == 2) || (sector == 4) || (sector == 6))
|
|||
|
{
|
|||
|
teta60 = CONST_IQ_PI3 - teta60;
|
|||
|
}
|
|||
|
|
|||
|
region = detect_region(gain, teta60); //
|
|||
|
|
|||
|
calc_t_abc(gain, teta60, region, &iq_t0, &iq_t1, &iq_t2, &iq_t3, &iq_t4, &iq_t5);
|
|||
|
|
|||
|
|
|||
|
delta_ttt = 0; //calc_delta_t(delta_U,number,region);
|
|||
|
//delta_ttt = 0;
|
|||
|
|
|||
|
//if (number == 1)
|
|||
|
//{
|
|||
|
//logpar.log1 = (int16)(_IQtoIQ15(delta_U));
|
|||
|
//logpar.log2 = (int16)(_IQtoIQ15(delta_ttt));
|
|||
|
//}
|
|||
|
//else
|
|||
|
//{
|
|||
|
//logpar.log3 = (int16)(_IQtoIQ15(delta_U));
|
|||
|
//logpar.log4 = (int16)(_IQtoIQ15(delta_ttt));
|
|||
|
//}
|
|||
|
|
|||
|
calc_arr_tph(sector, region, iq_t0, iq_t1, iq_t2, iq_t3, iq_t4, iq_t5, delta_ttt,number, Ia, Ib, Ic);
|
|||
|
|
|||
|
for (ki = 0; ki < 3; ki++)
|
|||
|
{
|
|||
|
t_pos = 0;
|
|||
|
t_neg = 0;
|
|||
|
|
|||
|
for (i = 0; i < 7; i++)
|
|||
|
{
|
|||
|
cur_sign = ar_sa_all[ki][sector - 1][region - 1][i];
|
|||
|
|
|||
|
if (cur_sign > 0)
|
|||
|
{
|
|||
|
t_pos += ar_tph[i];
|
|||
|
}
|
|||
|
|
|||
|
if (cur_sign < 0)
|
|||
|
{
|
|||
|
t_neg += ar_tph[i];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
t_pos = t_pos << 1;
|
|||
|
|
|||
|
t_neg = t_neg << 1;
|
|||
|
|
|||
|
if (t_neg == 0)
|
|||
|
{
|
|||
|
t_tk0 = 0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
t_tk0 = t_neg;
|
|||
|
}
|
|||
|
|
|||
|
if (t_pos == 0)
|
|||
|
{
|
|||
|
t_tk1 = CONST_IQ_1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
t_tk1 = CONST_IQ_1 - t_pos;
|
|||
|
}
|
|||
|
|
|||
|
switch (ki)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
tk0->up_or_down = updown_tk0;
|
|||
|
tk0->Ti = t_tk0;
|
|||
|
|
|||
|
tk1->up_or_down = updown_tk1;
|
|||
|
tk1->Ti = t_tk1;
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
case 1:
|
|||
|
tk2->up_or_down = updown_tk0;
|
|||
|
tk2->Ti = t_tk0;
|
|||
|
|
|||
|
tk3->up_or_down = updown_tk1;
|
|||
|
tk3->Ti = t_tk1;
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
case 2:
|
|||
|
tk4->up_or_down = updown_tk0;
|
|||
|
tk4->Ti = t_tk0;
|
|||
|
|
|||
|
tk5->up_or_down = updown_tk1;
|
|||
|
tk5->Ti = t_tk1;
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
default: break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// #pragma CODE_SECTION(detect_region,".v_24pwm_run");
|
|||
|
int detect_region(_iq k, _iq teta)
|
|||
|
{
|
|||
|
volatile _iq x,y;
|
|||
|
volatile int reg=0;
|
|||
|
|
|||
|
x = _IQmpy(k,_IQcos(teta));
|
|||
|
y = _IQmpy(k,_IQsin(teta));
|
|||
|
|
|||
|
if (y>=CONST_IQ_05) reg=4;
|
|||
|
else if (y < (CONST_IQ_1 - _IQmpy(x,SQRT3))) reg = 1;
|
|||
|
else if (y < (_IQmpy(x,SQRT3) - CONST_IQ_1)) reg = 2;
|
|||
|
else reg = 3;
|
|||
|
|
|||
|
return reg;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// #pragma CODE_SECTION(detect_sec,".v_24pwm_run");
|
|||
|
int detect_sec(_iq teta)
|
|||
|
{
|
|||
|
volatile _iq sector;
|
|||
|
volatile int sectorint;
|
|||
|
|
|||
|
sector = _IQdiv(teta,CONST_IQ_PI3);
|
|||
|
sectorint = (sector >> 24) + 1;
|
|||
|
|
|||
|
if (sectorint > 6) sectorint-=6;
|
|||
|
|
|||
|
return sectorint;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#define nSIN_t(k,t) _IQmpy(k,_IQsin(t))
|
|||
|
|
|||
|
#define nSIN_p3pt(k,t) _IQmpy(k,_IQsin(CONST_IQ_PI3+t))
|
|||
|
|
|||
|
#define nSIN_p3mt(k,t) _IQmpy(k,_IQsin(CONST_IQ_PI3-t))
|
|||
|
|
|||
|
#define nSIN_tmp3(k,t) _IQmpy(k,_IQsin(t-CONST_IQ_PI3))
|
|||
|
|
|||
|
//k - (Uzad)
|
|||
|
//teta -
|
|||
|
//region -
|
|||
|
/*
|
|||
|
* iq_tt0 - time of vectors op, oo, on
|
|||
|
* iq_tt1 - time of vectors ap, an
|
|||
|
* iq_tt2 - time of vectors bp, bn
|
|||
|
* iq_tt3 - time of vector c
|
|||
|
* iq_tt4 - time of vector a
|
|||
|
* iq_tt5 - time of vector b
|
|||
|
*/
|
|||
|
// #pragma CODE_SECTION(calc_t_abc,".v_24pwm_run");
|
|||
|
void calc_t_abc(_iq k, _iq teta, int region, _iq *iq_tt0, _iq *iq_tt1, _iq *iq_tt2, _iq *iq_tt3, _iq *iq_tt4, _iq *iq_tt5)
|
|||
|
{
|
|||
|
switch(region)
|
|||
|
{
|
|||
|
case 1 :
|
|||
|
*iq_tt0 = CONST_IQ_05 - nSIN_p3pt(k,teta);
|
|||
|
*iq_tt1 = nSIN_p3mt(k,teta);
|
|||
|
*iq_tt2 = nSIN_t(k,teta);
|
|||
|
*iq_tt3 = 0;
|
|||
|
*iq_tt4 = 0;
|
|||
|
*iq_tt5 = 0;
|
|||
|
break;
|
|||
|
|
|||
|
case 2 :
|
|||
|
*iq_tt0 = 0;
|
|||
|
*iq_tt1 = CONST_IQ_1 - nSIN_p3pt(k,teta);
|
|||
|
*iq_tt2 = 0;
|
|||
|
*iq_tt3 = nSIN_t(k,teta);
|
|||
|
*iq_tt4 = nSIN_p3mt(k,teta) - CONST_IQ_05;
|
|||
|
*iq_tt5 = 0;
|
|||
|
break;
|
|||
|
|
|||
|
case 3 :
|
|||
|
*iq_tt0 = 0;
|
|||
|
*iq_tt1 = CONST_IQ_05 - nSIN_t(k,teta);
|
|||
|
*iq_tt2 = CONST_IQ_05 - nSIN_p3mt(k,teta);
|
|||
|
*iq_tt3 = nSIN_p3pt(k,teta) - CONST_IQ_05;
|
|||
|
*iq_tt4 = 0;
|
|||
|
*iq_tt5 = 0;
|
|||
|
break;
|
|||
|
|
|||
|
case 4 :
|
|||
|
*iq_tt0 = 0;
|
|||
|
*iq_tt1 = 0;
|
|||
|
*iq_tt2 = CONST_IQ_1 - nSIN_p3pt(k,teta);
|
|||
|
*iq_tt3 = nSIN_p3mt(k,teta);
|
|||
|
*iq_tt4 = 0;
|
|||
|
*iq_tt5 = nSIN_t(k,teta) - CONST_IQ_05;
|
|||
|
break;
|
|||
|
|
|||
|
default :
|
|||
|
*iq_tt0 = 0;
|
|||
|
*iq_tt1 = 0;
|
|||
|
*iq_tt2 = 0;
|
|||
|
*iq_tt3 = 0;
|
|||
|
*iq_tt4 = 0;
|
|||
|
*iq_tt5 = 0;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
//sector
|
|||
|
//region
|
|||
|
//iq_ttt0 - iq_ttt5 - times from calc_t_abs
|
|||
|
//delta_t -
|
|||
|
//number_sv -
|
|||
|
//iqIa, iqIb, iqIc
|
|||
|
// #pragma CODE_SECTION(calc_arr_tph, ".v_24pwm_run");
|
|||
|
void calc_arr_tph(int sector,int region, _iq iq_ttt0, _iq iq_ttt1, _iq iq_ttt2, _iq iq_ttt3, _iq iq_ttt4,
|
|||
|
_iq iq_ttt5, _iq delta_t, unsigned int number_sv,
|
|||
|
_iq iqIa, _iq iqIb, _iq iqIc)
|
|||
|
{
|
|||
|
_iq iq_var1 = 0;
|
|||
|
_iq iqIx, iqIy, iqIz;
|
|||
|
_iq iq_alfa_1_p = CONST_IQ_05, iq_alfa_1_n = CONST_IQ_05, iq_alfa_2_n = CONST_IQ_05, iq_alfa_2_p = CONST_IQ_05;
|
|||
|
_iq iq_alfa = 0;
|
|||
|
// _iq iqIa, iqIb, iqIc;
|
|||
|
_iq iq_mpy1 = 0;
|
|||
|
_iq iq_mpy3 = 0;
|
|||
|
_iq summ = 0;
|
|||
|
|
|||
|
|
|||
|
switch (sector)
|
|||
|
{
|
|||
|
case 1:
|
|||
|
iqIx = iqIc;
|
|||
|
iqIy = iqIa;
|
|||
|
iqIz = iqIb;
|
|||
|
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
|
|||
|
iqIx = iqIb;
|
|||
|
iqIy = iqIa;
|
|||
|
iqIz = iqIc;
|
|||
|
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
|
|||
|
iqIx = iqIb;
|
|||
|
iqIy = iqIc;
|
|||
|
iqIz = iqIa;
|
|||
|
|
|||
|
break;
|
|||
|
case 4:
|
|||
|
|
|||
|
iqIx = iqIa;
|
|||
|
iqIy = iqIc;
|
|||
|
iqIz = iqIb;
|
|||
|
|
|||
|
break;
|
|||
|
case 5:
|
|||
|
|
|||
|
iqIx = iqIa;
|
|||
|
iqIy = iqIb;
|
|||
|
iqIz = iqIc;
|
|||
|
|
|||
|
break;
|
|||
|
case 6:
|
|||
|
|
|||
|
iqIx = iqIc;
|
|||
|
iqIy = iqIb;
|
|||
|
iqIz = iqIa;
|
|||
|
|
|||
|
break;
|
|||
|
default:
|
|||
|
|
|||
|
iqIx = 0;
|
|||
|
iqIy = 0;
|
|||
|
iqIz = 0;
|
|||
|
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
if (region == 1)
|
|||
|
{
|
|||
|
// if (delta_t != 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// {
|
|||
|
// iq_alfa = _IQsat((CONST_IQ_05 - _IQmpy(delta_t,IQ_KP_DELTA_T)),IQ_ALFA_SATURATION1,IQ_ALFA_SATURATION2);
|
|||
|
|
|||
|
//if (delta_t < 0)
|
|||
|
//{
|
|||
|
//iq_alfa = IQ_ALFA_SATURATION1;
|
|||
|
//}
|
|||
|
//else
|
|||
|
//{
|
|||
|
//iq_alfa = IQ_ALFA_SATURATION2;
|
|||
|
//}
|
|||
|
// }
|
|||
|
// else
|
|||
|
{
|
|||
|
iq_alfa = CONST_IQ_05;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
iq_mpy1 = _IQmpy(_IQabs(iqIx),iq_ttt1)+_IQmpy(_IQabs(iqIy),iq_ttt2);
|
|||
|
iq_mpy3 = _IQmpy(iqIz,iq_ttt3);
|
|||
|
|
|||
|
summ = _IQdiv((iq_mpy3),(iq_mpy1));
|
|||
|
|
|||
|
//iq_alfa = _IQsat((_IQmpy(CONST_IQ_05,(CONST_IQ_1 + summ)) - _IQmpy(delta_t,IQ_KP_DELTA_T)),IQ_ALFA_SATURATION1,IQ_ALFA_SATURATION2);
|
|||
|
iq_alfa = CONST_IQ_05; //test
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
if (iqIx >= 0)
|
|||
|
{
|
|||
|
iq_alfa_1_p = iq_alfa;
|
|||
|
iq_alfa_1_n = CONST_IQ_1 - iq_alfa;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
iq_alfa_1_p = CONST_IQ_1 - iq_alfa;
|
|||
|
iq_alfa_1_n = iq_alfa;
|
|||
|
}
|
|||
|
|
|||
|
if (iqIy >= 0)
|
|||
|
{
|
|||
|
iq_alfa_2_p = CONST_IQ_1 - iq_alfa;
|
|||
|
iq_alfa_2_n = iq_alfa;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
iq_alfa_2_p = iq_alfa;
|
|||
|
iq_alfa_2_n = CONST_IQ_1 - iq_alfa;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//if (number_sv == 2)
|
|||
|
//{
|
|||
|
//logpar.log1 = (int16)(sector);
|
|||
|
//logpar.log2 = (int16)(region);
|
|||
|
//logpar.log3 = (int16)(_IQtoIQ15(iq_alfa));
|
|||
|
//logpar.log4 = (int16)(_IQtoIQ15(iq_alfa_1_p));
|
|||
|
//logpar.log5 = (int16)(_IQtoIQ15(iq_alfa_2_p));
|
|||
|
//logpar.log6 = (int16)(_IQtoIQ13(summ));
|
|||
|
//logpar.log3 = (int16)(_IQtoIQ14(iq_ttt0));
|
|||
|
//logpar.log4 = (int16)(_IQtoIQ14(iq_ttt1));
|
|||
|
//logpar.log5 = (int16)(_IQtoIQ14(iq_ttt2));
|
|||
|
//logpar.log6 = (int16)(_IQtoIQ14(iq_ttt3));
|
|||
|
//logpar.log7 = (int16)(_IQtoIQ14(iq_ttt4));
|
|||
|
//logpar.log8 = (int16)(_IQtoIQ14(iq_ttt5));
|
|||
|
//logpar.log10 = (int16)(_IQtoIQ15(delta_t1_struct.Up));
|
|||
|
//logpar.log11 = (int16)(_IQtoIQ15(delta_t1_struct.Ui));
|
|||
|
//logpar.log12 = (int16)(_IQtoIQ15(delta_t1_struct.Ud));
|
|||
|
//logpar.log13 = (int16)(_IQtoIQ15(iqIx));
|
|||
|
//logpar.log14 = (int16)(_IQtoIQ15(iqIy));
|
|||
|
//logpar.log15 = (int16)(_IQtoIQ15(iqIz));
|
|||
|
|
|||
|
//logpar.log12 = (int16)(_IQtoIQ15(_IQmpy(iq_alfa_2_p,iq_ttt2)));
|
|||
|
//logpar.log13 = (int16)(_IQtoIQ15(_IQmpy(iq_alfa_2_n,iq_ttt2)));
|
|||
|
//logpar.log14 = (int16)(_IQtoIQ15(delta_t));
|
|||
|
//}
|
|||
|
//else
|
|||
|
//logpar.log15 = (int16)(_IQtoIQ15(delta_t));
|
|||
|
|
|||
|
// if (region == 1)
|
|||
|
// {
|
|||
|
// if (f.Rele3 == 1)
|
|||
|
// {
|
|||
|
// iq_alfa_1_p = CONST_IQ_05;
|
|||
|
// iq_alfa_2_p = CONST_IQ_05;
|
|||
|
// iq_alfa_1_n = CONST_IQ_05;
|
|||
|
// iq_alfa_2_n = CONST_IQ_05;
|
|||
|
// }
|
|||
|
// }
|
|||
|
// else
|
|||
|
// {
|
|||
|
// if (f.Down50 == 1)
|
|||
|
// {
|
|||
|
// iq_alfa_1_p = CONST_IQ_05;
|
|||
|
// iq_alfa_2_p = CONST_IQ_05;
|
|||
|
// iq_alfa_1_n = CONST_IQ_05;
|
|||
|
// iq_alfa_2_n = CONST_IQ_05;
|
|||
|
// }
|
|||
|
// }
|
|||
|
|
|||
|
switch (region)
|
|||
|
{
|
|||
|
case 1:
|
|||
|
iq_var1 = _IQdiv(iq_ttt0,CONST_IQ_3);
|
|||
|
|
|||
|
ar_tph[0] = iq_var1;
|
|||
|
ar_tph[1] = _IQmpy(iq_alfa_1_n,iq_ttt1);
|
|||
|
ar_tph[2] = _IQmpy(iq_alfa_2_n,iq_ttt2);
|
|||
|
ar_tph[3] = iq_var1;
|
|||
|
ar_tph[4] = _IQmpy(iq_alfa_1_p,iq_ttt1);
|
|||
|
ar_tph[5] = _IQmpy(iq_alfa_2_p,iq_ttt2);
|
|||
|
ar_tph[6] = iq_var1;
|
|||
|
break;
|
|||
|
|
|||
|
case 2:
|
|||
|
ar_tph[0] = _IQmpy(iq_alfa_1_n,iq_ttt1);
|
|||
|
ar_tph[1] = iq_ttt4;
|
|||
|
ar_tph[2] = iq_ttt3;
|
|||
|
ar_tph[3] = _IQmpy(iq_alfa_1_p,iq_ttt1);
|
|||
|
ar_tph[4] = 0;
|
|||
|
ar_tph[5] = 0;
|
|||
|
ar_tph[6] = 0;
|
|||
|
break;
|
|||
|
|
|||
|
case 3:
|
|||
|
ar_tph[0] = _IQmpy(iq_alfa_1_n,iq_ttt1);
|
|||
|
ar_tph[1] = _IQmpy(iq_alfa_2_n,iq_ttt2);
|
|||
|
ar_tph[2] = iq_ttt3;
|
|||
|
ar_tph[3] = _IQmpy(iq_alfa_1_p,iq_ttt1);
|
|||
|
ar_tph[4] = _IQmpy(iq_alfa_2_p,iq_ttt2);
|
|||
|
ar_tph[5] = 0;
|
|||
|
ar_tph[6] = 0;
|
|||
|
break;
|
|||
|
|
|||
|
case 4:
|
|||
|
ar_tph[0] = _IQmpy(iq_alfa_2_n,iq_ttt2);
|
|||
|
ar_tph[1] = iq_ttt3;
|
|||
|
ar_tph[2] = iq_ttt5;
|
|||
|
ar_tph[3] = _IQmpy(iq_alfa_2_p,iq_ttt2);
|
|||
|
ar_tph[4] = 0;
|
|||
|
ar_tph[5] = 0;
|
|||
|
ar_tph[6] = 0;
|
|||
|
break;
|
|||
|
|
|||
|
default :
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
// Function is commented because of in project 222220 should not be large voltage diviation
|
|||
|
// #pragma CODE_SECTION(calc_delta_t,".v_24pwm_run");
|
|||
|
_iq calc_delta_t(_iq delta_1, unsigned int number,int region)
|
|||
|
{
|
|||
|
if(_IQabs(delta_1) > MAX_LEVEL_DELTA_T)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ConvErrors.m2.bit.Razbalans |= 1;
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
if (number == 1)
|
|||
|
{
|
|||
|
delta_t1_struct.Fdb = delta_1;
|
|||
|
delta_t1_struct.calc(&delta_t1_struct);
|
|||
|
|
|||
|
if (_IQabs(delta_t1_struct.Out) <= INSENSITIVE_LEVEL_DELTA_T) return 0;
|
|||
|
else return delta_t1_struct.Out;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
delta_t2_struct.Fdb = delta_1;
|
|||
|
delta_t2_struct.calc(&delta_t2_struct);
|
|||
|
|
|||
|
if (_IQabs(delta_t2_struct.Out) <= INSENSITIVE_LEVEL_DELTA_T) return 0;
|
|||
|
else return delta_t2_struct.Out;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
*/
|
|||
|
//#pragma CODE_SECTION(set_predel_dshim24,".fast_run2");
|
|||
|
|
|||
|
// #pragma CODE_SECTION(set_predel_dshim24_simple0,".v_24pwm_run");
|
|||
|
void set_predel_dshim24_simple0(SVGEN_PWM24_TIME *T,int16 dmin,int16 dmax)
|
|||
|
{
|
|||
|
dmax++; //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (T->Ti < dmin)
|
|||
|
{
|
|||
|
if (T->Ti < dmin/2)
|
|||
|
T->Ti = 0;
|
|||
|
else
|
|||
|
T->Ti = dmin;
|
|||
|
|
|||
|
} else if (T->Ti >= (dmax - dmin)) {
|
|||
|
T->Ti = (dmax - dmin);
|
|||
|
}
|
|||
|
}
|
|||
|
// #pragma CODE_SECTION(set_predel_dshim24_simple1,".v_24pwm_run");
|
|||
|
void set_predel_dshim24_simple1(SVGEN_PWM24_TIME *T,int16 dmin,int16 dmax)
|
|||
|
{
|
|||
|
dmax++; //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (T->Ti >= (dmax - dmin))
|
|||
|
{
|
|||
|
if (T->Ti >= (dmax - dmin/2))
|
|||
|
T->Ti = dmax;
|
|||
|
else
|
|||
|
T->Ti = dmax-dmin;
|
|||
|
// T->Ti = dmax;
|
|||
|
} else if (T->Ti <= dmin) {
|
|||
|
T->Ti = dmin;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// #pragma CODE_SECTION(set_predel_dshim24,".v_24pwm_run");
|
|||
|
void set_predel_dshim24(SVGEN_PWM24_TIME *T,int16 dmin,int16 dmax)
|
|||
|
{
|
|||
|
//static unsigned int counter_pass = 0;
|
|||
|
//static unsigned int summ = 0;
|
|||
|
//int16 dshim24 = 0;
|
|||
|
dmax++; //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (T->Ti < dmin)
|
|||
|
{
|
|||
|
T->impuls_lenght_max = 0;
|
|||
|
T->counter_pass_max = 0;
|
|||
|
|
|||
|
T->impuls_lenght_min = T->impuls_lenght_min + T->Ti;
|
|||
|
T->counter_pass_min++;
|
|||
|
|
|||
|
if (T->counter_pass_min <= 3)
|
|||
|
{
|
|||
|
if (T->impuls_lenght_min <= dmin)
|
|||
|
{
|
|||
|
T->Ti = 0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
// T->Ti = dmin; //T->impuls_lenght_min;
|
|||
|
// T->impuls_lenght_min -= dmin;// = 0;
|
|||
|
T->Ti = T->impuls_lenght_min;
|
|||
|
T->impuls_lenght_min = 0;
|
|||
|
T->counter_pass_min = 0;
|
|||
|
// if (T->impuls_lenght_min < 0) {
|
|||
|
// T->counter_pass_min = 0;
|
|||
|
// T->impuls_lenght_min = 0;
|
|||
|
// } else {
|
|||
|
// T->counter_pass_min -= 1;
|
|||
|
// }
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
T->counter_pass_min = 1;
|
|||
|
T->impuls_lenght_min = T->Ti;
|
|||
|
T->Ti = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
T->impuls_lenght_min = 0;
|
|||
|
T->counter_pass_min = 0;
|
|||
|
|
|||
|
// if (T->Ti > (dmax - dmin))
|
|||
|
// {
|
|||
|
// dshim = dmax;
|
|||
|
// }
|
|||
|
// else
|
|||
|
// {
|
|||
|
// dshim = T->Ti;
|
|||
|
// }
|
|||
|
|
|||
|
if (T->Ti >= (dmax - dmin))
|
|||
|
{
|
|||
|
T->impuls_lenght_max = T->impuls_lenght_max + (dmax - T->Ti - 1);
|
|||
|
T->counter_pass_max++;
|
|||
|
|
|||
|
if (T->counter_pass_max <= 3)
|
|||
|
{
|
|||
|
if (T->impuls_lenght_max <= dmin)
|
|||
|
{
|
|||
|
T->Ti = dmax;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
// T->Ti = dmax - dmin; //T->impuls_lenght_max;
|
|||
|
// T->impuls_lenght_max -= dmin;// = 0;
|
|||
|
T->Ti = dmax - T->impuls_lenght_max;
|
|||
|
T->impuls_lenght_max = 0;
|
|||
|
T->counter_pass_max = 0;
|
|||
|
// if (T->impuls_lenght_max < 0) {
|
|||
|
// T->impuls_lenght_max = 0;
|
|||
|
// T->counter_pass_max = 0;
|
|||
|
// } else {
|
|||
|
// T->counter_pass_max -= 1;
|
|||
|
// }
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
T->counter_pass_max = 1;
|
|||
|
T->impuls_lenght_max = dmax - T->Ti;
|
|||
|
T->Ti = dmax;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
T->counter_pass_max = 0;
|
|||
|
T->impuls_lenght_max = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//return dshim24;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
void init_alpha_pwm24(int xFreq)
|
|||
|
{
|
|||
|
xFreq = xFreq + 1;
|
|||
|
|
|||
|
svgen_pwm24_1.number_svgen = 1;
|
|||
|
svgen_pwm24_2.number_svgen = 2;
|
|||
|
|
|||
|
//pidCur_Kp = _IQ(PID_KP_DELTA_KOMP_I);
|
|||
|
//pidCur_Ki = _IQ(PID_KI_DELTA_KOMP_I);
|
|||
|
|
|||
|
// svgen_pwm24_1.prev_level = V_PWM24_PREV_PWM_CLOSE;
|
|||
|
svgen_pwm24_1.saw_direct.all = xpwm_time.saw_direct.all & 0x3f;
|
|||
|
svgen_pwm24_1.Tclosed_saw_direct_0 = xpwm_time.Tclosed_saw_direct_0;// xpwm_time.Tclosed_high;//var_freq_pwm_xtics + 1;
|
|||
|
svgen_pwm24_1.Tclosed_saw_direct_1 = xpwm_time.Tclosed_saw_direct_1;
|
|||
|
svgen_pwm24_1.Tclosed_high = xpwm_time.Tclosed_high;
|
|||
|
|
|||
|
// svgen_pwm24_2.prev_level = V_PWM24_PREV_PWM_CLOSE;
|
|||
|
svgen_pwm24_2.saw_direct.all = (xpwm_time.saw_direct.all >> 6) & 0x3f;
|
|||
|
svgen_pwm24_2.Tclosed_saw_direct_0 = xpwm_time.Tclosed_saw_direct_0;// xpwm_time.Tclosed_high;//var_freq_pwm_xtics + 1;
|
|||
|
svgen_pwm24_2.Tclosed_saw_direct_1 = xpwm_time.Tclosed_saw_direct_1;
|
|||
|
svgen_pwm24_2.Tclosed_high = xpwm_time.Tclosed_high;
|
|||
|
|
|||
|
svgen_pwm24_1.FreqMax = _IQ(2.0*PI*F_STATOR_MAX/FREQ_PWM/2);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 2, <20>.<2E>. 2 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
|||
|
svgen_pwm24_2.FreqMax = _IQ(2.0*PI*F_STATOR_MAX/FREQ_PWM/2);
|
|||
|
|
|||
|
svgen_pwm24_1.XilinxFreq = CONST_IQ_1/xFreq;
|
|||
|
svgen_pwm24_2.XilinxFreq = CONST_IQ_1/xFreq;
|
|||
|
|
|||
|
// 30
|
|||
|
svgen_pwm24_1.Alpha = 0; //winding_displacement;
|
|||
|
svgen_pwm24_2.Alpha = -winding_displacement;
|
|||
|
|
|||
|
svgen_pwm24_1.delta_t = 0;
|
|||
|
svgen_pwm24_2.delta_t = 0;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
void init_freq_array(void)
|
|||
|
{
|
|||
|
unsigned int i = 0;
|
|||
|
//unsigned int j = 0;
|
|||
|
int var1 = 0;
|
|||
|
|
|||
|
var1 = 32767 / (FREQ_PWM_MAX - FREQ_PWM_MIN);
|
|||
|
|
|||
|
for (i = 0; i < COUNT_VAR_FREQ; i++)
|
|||
|
{
|
|||
|
//j = rand() / 1023;
|
|||
|
//freq_array[i] = array_optim_freq[j];
|
|||
|
//do
|
|||
|
freq_array[i] = FREQ_PWM_MIN + (rand() / var1);
|
|||
|
//while ((freq_array[i] < 945) && (freq_array[i] > 930));
|
|||
|
}
|
|||
|
|
|||
|
//freq_array[0] = 991;
|
|||
|
//freq_array[1] = 1430;
|
|||
|
}
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
//#pragma CODE_SECTION(calc_freq_pwm,".v_24pwm_run");
|
|||
|
//#pragma CODE_SECTION(calc_freq_pwm,".fast_run");
|
|||
|
/*void calc_freq_pwm()
|
|||
|
{
|
|||
|
static int prev_freq_pwm = 0;
|
|||
|
static float pwm_period = 0;
|
|||
|
static float var0 = 0;
|
|||
|
//static int line = 0;
|
|||
|
//static int i = 0;
|
|||
|
static unsigned int proc_ticks = 1;
|
|||
|
int var1 = 0;
|
|||
|
//static int i = 0;
|
|||
|
|
|||
|
if ((f.flag_change_pwm_freq == 1) && (f.flag_random_freq == 1))
|
|||
|
{
|
|||
|
if (proc_ticks >= 1)
|
|||
|
{
|
|||
|
proc_ticks = 0;
|
|||
|
|
|||
|
|
|||
|
if (line == 0)
|
|||
|
{
|
|||
|
VAR_FREQ_PWM_HZ = VAR_FREQ_PWM_HZ + 1;
|
|||
|
if (VAR_FREQ_PWM_HZ > FREQ_PWM_MAX)
|
|||
|
{
|
|||
|
VAR_FREQ_PWM_HZ = FREQ_PWM_MAX;
|
|||
|
line = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
VAR_FREQ_PWM_HZ = VAR_FREQ_PWM_HZ - 1;
|
|||
|
if (VAR_FREQ_PWM_HZ < FREQ_PWM)
|
|||
|
{
|
|||
|
VAR_FREQ_PWM_HZ = FREQ_PWM;
|
|||
|
line = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
//VAR_FREQ_PWM_HZ = freq_array[i];
|
|||
|
//i_led2_on_off(1);
|
|||
|
|
|||
|
var1 = 32767 / (freq_pwm_max_hz - freq_pwm_min_hz);
|
|||
|
VAR_FREQ_PWM_HZ = freq_pwm_min_hz + (rand() / var1);
|
|||
|
|
|||
|
//i_led2_on_off(0);
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
|
|||
|
if (VAR_FREQ_PWM_HZ > freq_pwm_max_hz)
|
|||
|
{
|
|||
|
VAR_FREQ_PWM_HZ = freq_pwm_max_hz;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (VAR_FREQ_PWM_HZ < freq_pwm_min_hz)
|
|||
|
{
|
|||
|
VAR_FREQ_PWM_HZ = freq_pwm_min_hz;
|
|||
|
}
|
|||
|
}
|
|||
|
//i++;
|
|||
|
|
|||
|
//if (i >= COUNT_VAR_FREQ)
|
|||
|
//{
|
|||
|
//i = 0;
|
|||
|
//}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
//if (VAR_FREQ_PWM_HZ == FREQ_PWM_MIN)
|
|||
|
//{
|
|||
|
//VAR_FREQ_PWM_HZ = FREQ_PWM_MAX;
|
|||
|
//}
|
|||
|
//else
|
|||
|
//{
|
|||
|
//VAR_FREQ_PWM_HZ = FREQ_PWM_MIN;
|
|||
|
//}
|
|||
|
|
|||
|
//if (f.Rele1 == 1)
|
|||
|
//{
|
|||
|
//if (i == 0)
|
|||
|
//{
|
|||
|
//VAR_FREQ_PWM_HZ = 1192;;
|
|||
|
//i = 1;
|
|||
|
//}
|
|||
|
//else
|
|||
|
//{
|
|||
|
//VAR_FREQ_PWM_HZ = 792;
|
|||
|
//}
|
|||
|
//}
|
|||
|
//else
|
|||
|
//{
|
|||
|
//i = 0;
|
|||
|
//VAR_FREQ_PWM_HZ = 1192;
|
|||
|
//}
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
}
|
|||
|
//else
|
|||
|
//{
|
|||
|
//VAR_FREQ_PWM_HZ = FREQ_PWM;
|
|||
|
//}
|
|||
|
|
|||
|
|
|||
|
if (prev_freq_pwm != VAR_FREQ_PWM_HZ)
|
|||
|
{
|
|||
|
prev_freq_pwm = VAR_FREQ_PWM_HZ;
|
|||
|
FREQ_MAX = _IQ(2.0*PI*F_STATOR_MAX/VAR_FREQ_PWM_HZ);
|
|||
|
|
|||
|
var0 = (float)VAR_FREQ_PWM_HZ;
|
|||
|
//pwm_period = ((float64)HSPCLK) / ((float64)VAR_FREQ_PWM_HZ);
|
|||
|
|
|||
|
pwm_period = HSPCLK / var0;
|
|||
|
|
|||
|
pwm_period = pwm_period / 2.0;
|
|||
|
|
|||
|
FREQ_PWM_XTICS = ((int) pwm_period) >> 3;
|
|||
|
|
|||
|
XILINX_FREQ = 16777216/(FREQ_PWM_XTICS + 1);
|
|||
|
|
|||
|
FLAG_CHANGE_FREQ_PWM = 1;
|
|||
|
}
|
|||
|
|
|||
|
proc_ticks++;
|
|||
|
}
|
|||
|
*/
|
|||
|
|
|||
|
void change_freq_pwm(_iq xFreq) {
|
|||
|
svgen_pwm24_1.FreqMax = _IQ(2.0*PI*F_STATOR_MAX/3750000 / xFreq / 2 /2);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 2, <20>.<2E>. 2 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
|||
|
svgen_pwm24_2.FreqMax = _IQ(2.0*PI*F_STATOR_MAX/ 3750000 / xFreq / 2 /2);
|
|||
|
|
|||
|
xFreq += 1;
|
|||
|
svgen_pwm24_1.XilinxFreq = CONST_IQ_1/xFreq;
|
|||
|
svgen_pwm24_2.XilinxFreq = CONST_IQ_1/xFreq;
|
|||
|
}
|
|||
|
|
|||
|
// #pragma CODE_SECTION(test_calc_pwm24_dq,".v_24pwm_run");
|
|||
|
void test_calc_pwm24_dq(_iq U_zad1, _iq U_zad2,_iq teta)
|
|||
|
{
|
|||
|
svgen_pwm24_1.Freq = 0;
|
|||
|
svgen_pwm24_2.Freq = 0;
|
|||
|
|
|||
|
svgen_pwm24_1.Gain = U_zad1;
|
|||
|
svgen_pwm24_2.Gain = U_zad2;
|
|||
|
|
|||
|
svgen_pwm24_1.Alpha = teta;
|
|||
|
svgen_pwm24_2.Alpha = teta - winding_displacement;
|
|||
|
|
|||
|
svgen_pwm24_1.delta_U = filter.iqU_1_fast - filter.iqU_2_fast;
|
|||
|
svgen_pwm24_2.delta_U = filter.iqU_3_fast - filter.iqU_4_fast;
|
|||
|
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
svgen_pwm24_1.delta_U = 0;
|
|||
|
svgen_pwm24_2.delta_U = 0;
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
|
|||
|
svgen_pwm24_1.Ia = analog.iqIa1_1;
|
|||
|
svgen_pwm24_1.Ib = analog.iqIb1_1;
|
|||
|
svgen_pwm24_1.Ic = analog.iqIc1_1;
|
|||
|
|
|||
|
svgen_pwm24_2.Ia = analog.iqIa2_1;
|
|||
|
svgen_pwm24_2.Ib = analog.iqIb2_1;
|
|||
|
svgen_pwm24_2.Ic = analog.iqIc2_1;
|
|||
|
|
|||
|
svgen_pwm24_1.calc_dq(&svgen_pwm24_1);
|
|||
|
svgen_pwm24_2.calc_dq(&svgen_pwm24_2);
|
|||
|
|
|||
|
|
|||
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Ta_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Ta_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tb_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tb_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tc_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_1.Tc_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Ta_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Ta_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tb_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tb_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tc_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
set_predel_dshim24(&svgen_pwm24_2.Tc_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// #pragma CODE_SECTION(svgen_pwm24_calc,".v_24pwm_run");
|
|||
|
void svgen_pwm24_calc_dq(SVGEN_PWM24 *vt)
|
|||
|
{
|
|||
|
|
|||
|
if (vt->Alpha > CONST_IQ_2PI)
|
|||
|
{
|
|||
|
vt->Alpha -= CONST_IQ_2PI;
|
|||
|
}
|
|||
|
|
|||
|
if (vt->Alpha < 0)
|
|||
|
{
|
|||
|
vt->Alpha += CONST_IQ_2PI;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
calc_time_one_tk(vt->Gain, vt->Alpha, vt->delta_U, vt->Ia, vt->Ib, vt->Ic,
|
|||
|
vt->number_svgen, &vt->Ta_0, &vt->Ta_1,&vt->Tb_0, &vt->Tb_1,&vt->Tc_0, &vt->Tc_1);
|
|||
|
|
|||
|
|
|||
|
vt->Ta_0.Ti = vt->Ta_0.Ti/vt->XilinxFreq;
|
|||
|
vt->Ta_1.Ti = vt->Ta_1.Ti/vt->XilinxFreq;
|
|||
|
|
|||
|
vt->Tb_0.Ti = vt->Tb_0.Ti/vt->XilinxFreq;
|
|||
|
vt->Tb_1.Ti = vt->Tb_1.Ti/vt->XilinxFreq;
|
|||
|
|
|||
|
vt->Tc_0.Ti = vt->Tc_0.Ti/vt->XilinxFreq;
|
|||
|
vt->Tc_1.Ti = vt->Tc_1.Ti/vt->XilinxFreq;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void svgen_set_time_keys_closed(SVGEN_PWM24 *vt)
|
|||
|
{
|
|||
|
vt->Ta_0.Ti = VAR_FREQ_PWM_XTICS + 1;
|
|||
|
vt->Ta_1.Ti = 0;
|
|||
|
|
|||
|
vt->Tb_0.Ti = VAR_FREQ_PWM_XTICS + 1;
|
|||
|
vt->Tb_1.Ti = 0;
|
|||
|
|
|||
|
vt->Tc_0.Ti = VAR_FREQ_PWM_XTICS + 1;
|
|||
|
vt->Tc_1.Ti = 0;
|
|||
|
}
|
|||
|
|
|||
|
void svgen_set_time_middle_keys_open(SVGEN_PWM24 *vt)
|
|||
|
{
|
|||
|
vt->Ta_0.Ti = 0;
|
|||
|
vt->Ta_1.Ti = VAR_FREQ_PWM_XTICS + 1;
|
|||
|
|
|||
|
vt->Tb_0.Ti = 0;
|
|||
|
vt->Tb_1.Ti = VAR_FREQ_PWM_XTICS + 1;
|
|||
|
|
|||
|
vt->Tc_0.Ti = 0;
|
|||
|
vt->Tc_1.Ti = VAR_FREQ_PWM_XTICS + 1;
|
|||
|
}
|