// ============================================ // Файл: 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; /* * ��������� �������� ��� Lm * �����: ������ ����������� ����, �������������� ��� ������ � ���������� �������� */ typedef struct { char step; /* ��� ��������: 0-�������., 1-������., 2-��������, 3-������ */ float timer; /* ������ �������� / ���������������, � */ float prev_ed; /* ���������� Ed = Vd - Rs*Id (��������) */ float integral_psi; /* ��������������� ?Ed�dt, �� */ float sum_id; /* ����� Id ��� ���������� �� ��������, � */ int sample_cnt; /* ����� ������� �� �������� */ float avg_Lm; /* ����������� ����� Lm ��� ���������� */ int avg_count; /* ������� �������� ��������� */ int done; /* ���� ���������� ������������ */ int first_sample; /* ������ ������� ����� ������ �������������� */ } 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); // ������ ������� ��������� void estimate_process(float vd, float vq, float id, float iq, float dt, float* vd_ref, float* vq_ref, float* freq_ref); #endif