запущен проект motor identification c терминалкой

This commit is contained in:
2026-06-05 12:15:36 +03:00
commit 177431f3d2
1383 changed files with 840275 additions and 0 deletions

View File

@@ -0,0 +1,103 @@
// ============================================
// Файл: 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