191 lines
6.6 KiB
C
191 lines
6.6 KiB
C
|
#ifndef _V_PWM24_H
|
|||
|
#define _V_PWM24_H
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
extern "C" {
|
|||
|
#endif
|
|||
|
|
|||
|
#include "IQmathLib.h"
|
|||
|
// #include "DSP281x_Device.h"
|
|||
|
#include "word_structurs.h"
|
|||
|
#include "svgen_dq.h"
|
|||
|
|
|||
|
//#define COUNT_VAR_FREQ 400
|
|||
|
|
|||
|
//#define IQ_KP_DELTA_T 134217728//0.004
|
|||
|
//#define IQ_KP_DELTA_COMP_I 134217728//0.004
|
|||
|
|
|||
|
//#define PID_KP_DELTA_T 0.5//1//20//2//0.001//11.18 //0.036 //0.018 //0.18 //0.095 // PID Kp
|
|||
|
//#define PID_KI_DELTA_T 0.000005//0.01 //0.08 // 0.008 // PID Ki
|
|||
|
//#define PID_KD_DELTA_T 2//5//0.01 //0.08 // 0.008 // PID Ki
|
|||
|
//#define PID_KC_DELTA_T 0.005 //0.09 // PID Kc
|
|||
|
|
|||
|
//#define PID_KP_DELTA_KOMP_I 1//0.12//0.06//5//10
|
|||
|
//#define PID_KI_DELTA_KOMP_I 0.005//0//0.005//0.01
|
|||
|
//#define PID_KC_DELTA_KOMP_I 0.005//0//0.005//0.01
|
|||
|
//#define PID_KD_DELTA_KOMP_I 0//0//0.005//0.01
|
|||
|
//#define PID_KD_DELTA_T 0.0000 //*100 // PID Kd
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//#define DELTA_T_MAX 1258291//15099494//0.9//8388608//0.5//13421772//0.8 //8388608// 0.5//13421772 // 0.8
|
|||
|
//#define DELTA_T_MIN -1258291//-15099494//0.9//-8388608//-0.5//-13421772//0.8 //-8388608// -0.5//-13421772 // -0.8
|
|||
|
|
|||
|
//#define DELTA_KOMP_I_MAX 1258291//6//1677721//0.1//3355443//0.2//1677721//200 A//4194304// 500 A
|
|||
|
//#define DELTA_KOMP_I_MIN -1258291//-6//-1677721//-0.1//-3355443//-0.2//-1677721//-200 A//-4194304// -500 A
|
|||
|
|
|||
|
|
|||
|
//#define INSENSITIVE_LEVEL_DELTA_T 83886 //10 V//167772// 20V //335544//40 V//83886 //10 V//335544//40 V//58720//7V//167772// 20V //83886 //10 V
|
|||
|
//#define MAX_LEVEL_DELTA_T 1258291//150V//1677721 //200v//2516582//300 V//4194304//500 V//2516582 // 838860 //100 V
|
|||
|
|
|||
|
|
|||
|
typedef struct { _iq Ti; // Output: reference phase-a switching function (pu)
|
|||
|
int up_or_down; // Output: reference phase-b switching function (pu)
|
|||
|
int impuls_lenght_max;
|
|||
|
int impuls_lenght_min;
|
|||
|
int counter_pass_max;
|
|||
|
int counter_pass_min;
|
|||
|
} SVGEN_PWM24_TIME;
|
|||
|
|
|||
|
|
|||
|
typedef struct {
|
|||
|
_iq Gain; // Input: reference gain voltage (pu)
|
|||
|
//_iq Offset; // Input: reference offset voltage (pu)
|
|||
|
_iq Freq; // Input: reference frequency (pu)
|
|||
|
_iq FreqMax; // Parameter: Maximum step angle = 6*base_freq*T (pu)
|
|||
|
_iq Alpha; // History: Sector angle (pu)
|
|||
|
|
|||
|
_iq delta_U;
|
|||
|
_iq delta_t;
|
|||
|
int XilinxFreq; // Xilinx freq in TIC
|
|||
|
|
|||
|
unsigned int pwm_minimal_impuls_zero_minus;
|
|||
|
unsigned int pwm_minimal_impuls_zero_plus;
|
|||
|
|
|||
|
WORD_UINT2BITS_STRUCT saw_direct;
|
|||
|
|
|||
|
int prev_level; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> middle <20><><EFBFBD> close <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
unsigned int Tclosed_high;
|
|||
|
unsigned int Tclosed_saw_direct_0;
|
|||
|
unsigned int Tclosed_saw_direct_1;
|
|||
|
|
|||
|
_iq Ia;
|
|||
|
_iq Ib;
|
|||
|
_iq Ic;
|
|||
|
unsigned int number_svgen;
|
|||
|
SVGEN_PWM24_TIME Ta_0; // Output: reference phase-a switching function (pu)
|
|||
|
SVGEN_PWM24_TIME Ta_1; // Output: reference phase-a switching function (pu)
|
|||
|
SVGEN_PWM24_TIME Tb_0; // Output: reference phase-b switching function (pu)
|
|||
|
SVGEN_PWM24_TIME Tb_1; // Output: reference phase-b switching function (pu)
|
|||
|
SVGEN_PWM24_TIME Tc_0; // Output: reference phase-c switching function (pu)
|
|||
|
SVGEN_PWM24_TIME Tc_1; // Output: reference phase-c switching function (pu)
|
|||
|
void (*calc)(); // Pointer to calculation function
|
|||
|
void (*calc_dq)(); // Pointer to calculation function which don`t calculate angle from freq
|
|||
|
} SVGEN_PWM24;
|
|||
|
|
|||
|
typedef SVGEN_PWM24 *SVGEN_PWM24_handle;
|
|||
|
|
|||
|
|
|||
|
#define SVGEN_PWM24_TIME_DEFAULTS { 0,0,0,0 }
|
|||
|
|
|||
|
|
|||
|
#define SVGEN_PWM24_DEFAULTS { 0,0,0,0,0,0,0,0,0, \
|
|||
|
{0}, 0,0,0,0,0,0,0,0,\
|
|||
|
SVGEN_PWM24_TIME_DEFAULTS,SVGEN_PWM24_TIME_DEFAULTS,SVGEN_PWM24_TIME_DEFAULTS, \
|
|||
|
SVGEN_PWM24_TIME_DEFAULTS,SVGEN_PWM24_TIME_DEFAULTS,SVGEN_PWM24_TIME_DEFAULTS, \
|
|||
|
(void (*)(unsigned int))svgen_pwm24_calc, (void (*)(unsigned int))svgen_pwm24_calc_dq }
|
|||
|
|
|||
|
// extern int ar_sa_a[3][4][7];
|
|||
|
|
|||
|
extern SVGEN_PWM24 svgen_pwm24_1;
|
|||
|
extern SVGEN_PWM24 svgen_pwm24_2;
|
|||
|
|
|||
|
extern SVGENDQ svgen_dq_1;
|
|||
|
extern SVGENDQ svgen_dq_2;
|
|||
|
|
|||
|
// extern _iq pidCur_Kp;
|
|||
|
// extern _iq pidCur_Ki;
|
|||
|
|
|||
|
// extern _iq iq_alfa_coef;
|
|||
|
|
|||
|
// extern _iq iq_koef_mod_korrect_1;
|
|||
|
// extern _iq iq_koef_mod_korrect_2;
|
|||
|
|
|||
|
//extern int freq_array[COUNT_VAR_FREQ];
|
|||
|
|
|||
|
void svgen_pwm24_calc(SVGEN_PWM24 *vt);
|
|||
|
void svgen_pwm24_calc_dq(SVGEN_PWM24 *vt);
|
|||
|
|
|||
|
void init_alpha_pwm24(int xFreq);
|
|||
|
void test_calc_pwm24(_iq uz1, _iq uz2, _iq fz1/*, _iq fz2, int revers*/);
|
|||
|
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 calc_delta_t(_iq delta_1, unsigned int number,int region);
|
|||
|
|
|||
|
//void change_freq_pwm(_iq FreqMax, int freq_pwm_xtics, _iq XilinxFreq);
|
|||
|
void change_freq_pwm(_iq freq_pwm_xtics);
|
|||
|
|
|||
|
//void calc_freq_pwm();
|
|||
|
|
|||
|
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);
|
|||
|
|
|||
|
void test_calc_pwm24_dq(_iq U_zad1, _iq U_zad2,_iq teta);
|
|||
|
|
|||
|
void svgen_set_time_keys_closed(SVGEN_PWM24 *vt);
|
|||
|
void svgen_set_time_middle_keys_open(SVGEN_PWM24 *vt);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
void InitVariablesSvgen(unsigned int freq);
|
|||
|
//void init_alpha(void);
|
|||
|
_iq correct_balance_uzpt_pwm24(_iq Tinput, _iq Kplus);
|
|||
|
void recalc_time_pwm_minimal_2_xilinx_pwm24_l(SVGEN_PWM24 *pwm24,
|
|||
|
_iq *T0, _iq *T1,
|
|||
|
_iq timpuls_corr );
|
|||
|
void test_calc_simple_dq_pwm24(_iq uz1, _iq uz2, _iq fz1, _iq fz2, _iq Uzad_max);
|
|||
|
void test_calc_dq_pwm24(_iq Ud, _iq Uq, _iq Ud2, _iq Uq2, _iq tetta,_iq Uzad_max);
|
|||
|
//void test_calc_simple_uf_pwm24(_iq uz1, _iq uz2, _iq fz1, _iq fz2,_iq Uzad_max);
|
|||
|
|
|||
|
//void init_freq_array(void);
|
|||
|
|
|||
|
typedef union {
|
|||
|
unsigned int all;
|
|||
|
struct {
|
|||
|
unsigned int k0;
|
|||
|
unsigned int k1;
|
|||
|
unsigned int k2;
|
|||
|
unsigned int k3;
|
|||
|
unsigned int k4;
|
|||
|
unsigned int k5;
|
|||
|
unsigned int k6;
|
|||
|
unsigned int k7;
|
|||
|
unsigned int k8;
|
|||
|
unsigned int k9;
|
|||
|
unsigned int k10;
|
|||
|
unsigned int k11;
|
|||
|
unsigned int k12;
|
|||
|
unsigned int k13;
|
|||
|
unsigned int k14;
|
|||
|
unsigned int k15;
|
|||
|
}bit;
|
|||
|
} UP_OR_DOWN;
|
|||
|
|
|||
|
extern UP_OR_DOWN up_down;
|
|||
|
extern _iq winding_displacement;
|
|||
|
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
#endif /* _V_PWM24_H */
|