matlab_23550/Inu/Src2/main/v_pwm24.c

1636 lines
44 KiB
C
Raw Normal View History

2024-12-27 10:50:32 +03:00
#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;
}