103 lines
5.4 KiB
C
103 lines
5.4 KiB
C
// ============================================
|
||
// Файл: estimate.h
|
||
// ============================================
|
||
#ifndef ESTIMATE_H
|
||
#define ESTIMATE_H
|
||
|
||
typedef enum {
|
||
ESTIMATE_TEST_IDLE = 0,
|
||
ESTIMATE_TEST_RS,
|
||
ESTIMATE_TEST_RR_L,
|
||
ESTIMATE_TEST_LM,
|
||
ESTIMATE_TEST_DONE
|
||
} Estimate_Test_t;
|
||
|
||
typedef struct {
|
||
float Rs; // сопротивление статора, Ом
|
||
float Rr; // сопротивление ротора, Ом
|
||
float Lm; // взаимная индуктивность, Гн
|
||
float Lk; // полная индуктивность рассеяния, Гн
|
||
float Lls; // индуктивность рассеяния статора, Гн
|
||
float Llr; // индуктивность рассеяния ротора, Гн
|
||
float Zk; // полное сопротивление КЗ, Ом
|
||
float Rk; // активное сопротивление КЗ, Ом
|
||
float Xk; // реактивное сопротивление КЗ, Ом
|
||
} Params_t;
|
||
|
||
/*
|
||
* Состояние автомата для эксперимента по измерению Rs
|
||
* Метод: разностный метод с двумя уровнями постоянного тока
|
||
*/
|
||
typedef struct {
|
||
char step; /* текущий шаг 0-5 */
|
||
float timer; /* таймер выдержки времени */
|
||
float meas1, meas2; /* измеренные напряжения для I1 и I2, В */
|
||
float val1, val2; /* измеренные токи I1 и I2, А */
|
||
float sum_v; /* сумма напряжений для усреднения */
|
||
float sum_i; /* сумма токов для усреднения */
|
||
int sample_cnt; /* счетчик выборок для усреднения */
|
||
int done; /* флаг завершения эксперимента */
|
||
} RsState_t;
|
||
|
||
|
||
/*
|
||
* Состояние автомата для эксперимента по измерению Rr и Lls, Llr
|
||
* Метод: подача переменного тока по оси q, RMS измерения
|
||
*/
|
||
typedef struct {
|
||
float timer; /* таймер фазы синусоиды, с */
|
||
float ramp_timer; /* таймер нарастания амплитуды, с */
|
||
float sum_p; /* сумма активной мощности, Вт */
|
||
float sum_vq2; /* сумма квадратов напряжения Vq, В^2 */
|
||
float sum_iq2; /* сумма квадратов тока Iq, А^2 */
|
||
int sample_count; /* счетчик выборок */
|
||
|
||
/* усреднение одного измерения на текущей частоте */
|
||
float avg_Zk; /* накопл. Zk для текущей частоты, Ом */
|
||
float avg_Xk; /* накопл. Xk для текущей частоты, Ом */
|
||
float avg_Lk; /* накопл. Lk для текущей частоты, Гн */
|
||
float avg_Rk; /* накопл. Rk для текущей частоты, Ом */
|
||
int avg_count; /* счетчик усреднений (RRL_AVG) на частоте */
|
||
|
||
/* буфер результатов по частотам */
|
||
int freq_idx; /* индекс текущей частоты */
|
||
float freq_Zk[5]; /* Zk(f), Ом */
|
||
float freq_Rk[5]; /* Rk(f), Ом */
|
||
float freq_Xk[5]; /* Xk(f), Ом */
|
||
float freq_Lk[5]; /* Lk(f), Гн */
|
||
int freq_ready; /* сколько частот заполнено */
|
||
|
||
int done; /* флаг завершения эксперимента */
|
||
} RrlState_t;
|
||
|
||
|
||
/*
|
||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> Lm
|
||
* <20><><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*/
|
||
typedef struct {
|
||
char step; /* <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 0-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>., 1-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>., 2-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 3-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||
float timer; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> */
|
||
float prev_ed; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ed = Vd - Rs*Id (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */
|
||
float integral_psi; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ?Ed<45>dt, <20><> */
|
||
float sum_id; /* <20><><EFBFBD><EFBFBD><EFBFBD> Id <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> */
|
||
int sample_cnt; /* <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||
float avg_Lm; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> Lm <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||
int avg_count; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||
int done; /* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||
int first_sample; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||
} LmState_t;
|
||
|
||
|
||
|
||
void estimate_init(void);
|
||
void estimate_reset(void);
|
||
void estimate_start(Estimate_Test_t start_test);
|
||
Estimate_Test_t estimate_get_step(void);
|
||
Params_t* estimate_get_params(void);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
void estimate_process(float vd, float vq, float id, float iq, float dt,
|
||
float* vd_ref, float* vq_ref, float* freq_ref);
|
||
|
||
#endif |