Files
motor_params/Inu_im_1wnd_3lvl/Inu/estimate.h

103 lines
5.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ============================================
// Файл: 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