matlab_23550/Inu/Src/VectorControl/alg_pll.h
2024-12-27 10:50:32 +03:00

189 lines
4.6 KiB
C

#ifndef __ALG_PLL_H__
#define __ALG_PLL_H__
#include "IQmathLib.h"
#include "math_pi.h"
#include "pid_reg3.h"
#include "abc_to_alphabeta.h"
#include "alphabeta_to_dq.h"
#include "smooth.h"
#include "smooth.h"
#define DEFAULT_FREQ_NET 50.00 // Hz
#define DEFAULT_FREQ_RUN_PLL 4000 // Hz
#define DEFAULT_PID_KP_PLL 0.0375
#define DEFAULT_PID_KI_PLL 0.0128
#define STATUS_PLL_OK 10
#define STATUS_PLL_ERROR 2
#define STATUS_PLL_INITED 1
#define STATUS_PLL_NOT_INITED 0
#define FIND_MAX_W_STRIH 1.5 //0.12 //75Hz
#define FIND_MIN_W_STRIH 0.5 //0.045 //33Hz
#define MAX_PERIOD_WAIT_PLL_W_SHTRIH 3
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
typedef struct {
float pid_kp_pll; // êîýô. ðåãóëßòîðà Kp äëß ïîèñêà ñåòè
float pid_ki_pll; // êîýô. ðåãóëßòîðà Ki äëß ïîèñêà ñåòè
int freq_run_pll; // ÷àñòîòà çàïóñêà ðàñ÷åòà, Ãö.
int rotation_u_cba; // ÷åðåäîâàíèå ôàç: 0 - ïðàâèëüíîå A-B-C, 1 - íåïðàâèëüíîå A-C-B
} PLL_SETUP;
#define PLL_SETUP_DEFAULT {DEFAULT_PID_KP_PLL, DEFAULT_PID_KI_PLL, DEFAULT_FREQ_RUN_PLL,0}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
typedef struct { _iq Input_U_AB; // âõîäíîå íàïðßæåíèå Uab
_iq Input_U_BC; // âõîäíîå íàïðßæåíèå Ubc
_iq Input_U_CA; // âõîäíîå íàïðßæåíèå Uca
} PLL_INPUT;
#define PLL_INPUT_DEFAULT {0, 0, 0}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
typedef struct { int flag_find_pll;
int int_freq_net;
_iq iq_freq_net;
int status;
} PLL_OUTPUT;
#define PLL_OUTPUT_DEFAULT {0, 0, 0, STATUS_PLL_NOT_INITED}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
typedef struct {
int enable_detect_phase_count;
int error_phase_count;
_iq pll_Ud;
_iq pll_Uq;
_iq Tetta;
_iq Tetta_v2;
_iq wc;
_iq dwc;
_iq w_shtrih;
_iq Tetta_z;
_iq Tetta_p;
_iq dTetta;
_iq zeroPLL;
_iq pi_teta_u_out;
_iq pi_teta_u_p;
_iq pi_teta_u_i;
_iq add_teta;
_iq add_teta2;
_iq Ua;
_iq Ub;
_iq Uc;
_iq Uab;
_iq Ubc;
_iq Uca;
_iq Ualpha;
_iq Ubeta;
_iq iqZeroUAB;
_iq iqZeroUBC;
_iq iqZeroUCA;
_iq sum_zeroU_AB_BC_CA;
_iq sum_zeroU_A_B_C;
_iq delta_Tetta_c;
_iq22 sum_div_find_zero_uabc;
int count_sum_find_zero_uabc;
_iq find_max_w_strih;
_iq find_min_w_strih;
int count_wait_pll_w_shtrih;
int max_time_wait_pll_w_strih;//MAX_TIME_WAIT_PLL_W_SHTRIH
int enable_find_pll;
}PLL_VARS;//39
#define PLL_VARS_DEFAULT {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
typedef struct { PLL_INPUT input;
PLL_OUTPUT output;
PLL_SETUP setup;
PLL_VARS vars;
void (*init)(); // Pointer to calculation function
void (*calc_pll)(); // Pointer to calculation function
void (*get_freq_float)(); // Pointer to calculation function
void (*get_freq_iq)();
}PLL_REC;
typedef PLL_REC *PLL_REC_handle;
#define PLL_REC_DEFAULT {\
PLL_INPUT_DEFAULT,\
PLL_OUTPUT_DEFAULT,\
PLL_SETUP_DEFAULT,\
PLL_VARS_DEFAULT,\
(void (*)(unsigned long))pll_init,\
(void (*)(unsigned long))pll_calc,\
(void (*)(unsigned long))pll_get_freq_float,\
(void (*)(unsigned long))pll_get_freq_iq \
}
void pll_init(PLL_REC_handle);
void pll_calc(PLL_REC_handle);
void pll_get_freq_float(PLL_REC_handle);
void pll_get_freq_iq(PLL_REC_handle);
void Find_zero_Uabc(PLL_REC_handle);
void PLLController(PLL_REC *v);
void AB_BC_CA_To_ABC(_iq U_AB, _iq U_BC, _iq U_CA, _iq *Ua, _iq *Ub, _iq *Uc);
void detect_phase_count(PLL_REC *v);
int read_error_find_pll(PLL_REC *v);
_iq minus_plus_2_pi(_iq a);
_iq minus_plus_2_pi_v2(_iq a);
#endif