Перейти к содержанию
    

Расчет импеданса по двум осям

Обнаружил погрешность расчета импеданса в своей процедуре, но не могу понять где именно ошибка. Объект измерения - обмотки статора двигателя, можно считать две фазы повернутые на 90 градусов. Между фазами есть взаимная индуктивность, которая зависит от положения ротора. Исходное уравнение вот такое.

L * di/dt = u - i*R

Где, L - искомая симметричная матрица индуктивностей Lx, Ly, Lm, i - вектор тока, u - вектор напряжения, R - активное сопротивление (скаляр).

Подаю вращающийся вектор u и регистрирую значения тока i. Умножаю каждый компонент векторов на опорный сигнал (который задает u) и накапливаю суммы, то есть делаю ДПФ в одной точке. Частоту и величину напряжения выбираю исходя из получения L*2*pi*f >> R и приемлемого подавления случайного шума.

            pm->probe_DFT[0] += pm->probe_fb_X * pm->temporal[0];
            pm->probe_DFT[1] += pm->probe_fb_X * pm->temporal[1];
            pm->probe_DFT[2] += uX * pm->temporal[0];
            pm->probe_DFT[3] += uX * pm->temporal[1];
            pm->probe_DFT[4] += pm->probe_fb_Y * pm->temporal[0];
            pm->probe_DFT[5] += pm->probe_fb_Y * pm->temporal[1];
            pm->probe_DFT[6] += uY * pm->temporal[0];
            pm->probe_DFT[7] += uY * pm->temporal[1];

Здесь в pm->probe_fb_[XY] измеренный ток, в u[XY] напряжение, в temporal опорный сигнал.

Дальше полученные суммы пересчитываются в искомый L на фиксированных осях XY, путем операции Z=U/I в комплексных образах и вытаскивания индуктивности из мнимой части. Взаимный импеданс считается как Zm = (Uy/Ix + Ux/Iy) / 2.

static void
pm_DFT_const_L(const float DFT[8], float HZ, float LDQ[4])
{
    float            DX, DY, WR;
    float            LX, LY, LM;

    WR = 2.f * M_PI_F * HZ;

    DX = (DFT[0] * DFT[0] + DFT[1] * DFT[1]) * WR;
    DY = (DFT[4] * DFT[4] + DFT[5] * DFT[5]) * WR;

    LX = (DFT[2] * DFT[1] - DFT[3] * DFT[0]) / DX;
    LY = (DFT[6] * DFT[5] - DFT[7] * DFT[4]) / DY;
    LM = (DFT[6] * DFT[1] - DFT[7] * DFT[0]) / DX;
    LM += (DFT[2] * DFT[5] - DFT[3] * DFT[4]) / DY;
    LM /= 2.f;

    printf("LXY %.4e %.4e %.4e\n", LX, LY, LM);

    pm_DFT_EIG(LX, LY, LM, LDQ);
}

Все это достаточно хорошо работает, но только пока не появляется взаимная индуктивность Lm. Получить ее можно например поворотом системы координат на 45 градусов, при условии, что исходные индуктивности по осям Ld и Lq были разные. Не сложно посчитать какие должны быть в этом случае Lx, Ly, Lm исходя из Lxy = R * Ldq * R', где R матрица поворота. У меня получаются заниженные на 10-30% значения в зависимости от того насколько отличаются Ld и Lq.

Вот пример, для Ld=10uH, Lq=20uH, R=24mOhm. Поворот 0 и 45 градусов.

LXY 9.8246e-06 1.9677e-05 1.1542e-07
9.8233e-06 (H)
1.9679e-05 (H)
0.67 (g)

LXY 1.2062e-05 1.1568e-05 3.9819e-06
7.8257e-06 (H)
1.5805e-05 (H)
46.78 (g)

 

Если посчитать вручную, то во втором случае должно быть 1.5E-5 и 5E-6.

octave:8> R = [cosd(45) -sind(45); sind(45) cosd(45)]
R =

   0.70711  -0.70711
   0.70711   0.70711

octave:9> A = [10e-6 0 ; 0 20e-6]
A =

   1.0000e-05   0.0000e+00
   0.0000e+00   2.0000e-05

octave:10> R * A * R'
ans =

   1.5000e-05  -5.0000e-06
  -5.0000e-06   1.5000e-05

 

Ничего по теме найти не могу, придется опять самому на бумажке все перепроверять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 hours ago, amaora said:

путем операции Z=U/I в комплексных образах и вытаскивания индуктивности из мнимой части. Взаимный импеданс считается как Zm = (Uy/Ix + Ux/Iy) / 2.

Вот здесь и ошибка, да. Нужно решать систему уравнений Z * I = U, где Z матрица 2x2 из комплексных чисел. Скалярных уравнений здесь 4, так что можно определить только 4 параметра, но больше и не нужно.

Изменено пользователем amaora

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В итоге вот такая функция дает верное решение. Хотя метод возможно не лучший. Из исходной системы нашел R по прямой формуле (она оказалась достаточно простой) и сократил ее до 4x3 системы, дальше МНК для трех переменных и четырех уравнений, решение нахожу с помощью LDL разложения.

static void
pm_LSQ_3(const float LSQ[9], float X[3])
{
    float        LD[6], B[3];

    LD[0] = LSQ[0];
    LD[1] = LSQ[1] / LD[0];
    LD[3] = LSQ[3] / LD[0];
    LD[2] = LSQ[2] - LD[0] * LD[1] * LD[1];
    LD[4] = (LSQ[4] - LD[0] * LD[3] * LD[1]) / LD[2];
    LD[5] = LSQ[5] - (LD[0] * LD[3] * LD[3] + LD[2] * LD[4] * LD[4]);

    B[0] = LSQ[6];
    B[1] = LSQ[7] - LD[1] * B[0];
    B[2] = LSQ[8] - (LD[3] * B[0] + LD[4] * B[1]);

    X[2] = B[2] / LD[5];
    X[1] = B[1] / LD[2] - LD[4] * X[2];
    X[0] = B[0] / LD[0] - (LD[1] * X[1] + LD[3] * X[2]);
}

static void
pm_DFT_LDQ(const float DFT[8], float HZ, float LDQ[5])
{
    float        LSQ[9], B[4], LXY[3], R, WF;

    LSQ[0] = DFT[1] * DFT[1] + DFT[0] * DFT[0];
    LSQ[1] = - DFT[1] * DFT[5] - DFT[0] * DFT[4];
    LSQ[5] = DFT[5] * DFT[5] + DFT[4] * DFT[4];
    LSQ[2] = LSQ[5] + LSQ[0];
    LSQ[3] = 0.f;
    LSQ[4] = LSQ[1];

    R = (DFT[2] * DFT[0] + DFT[3] * DFT[1] + DFT[6] * DFT[4] + DFT[7] * DFT[5]) /
        (DFT[0] * DFT[0] + DFT[1] * DFT[1] + DFT[4] * DFT[4] + DFT[5] * DFT[5]);

    B[0] = DFT[2] - DFT[0] * R;
    B[1] = DFT[3] - DFT[1] * R;
    B[2] = DFT[6] - DFT[4] * R;
    B[3] = DFT[7] - DFT[5] * R;

    LSQ[6] = DFT[1] * B[0] - DFT[0] * B[1];
    LSQ[7] = - DFT[5] * B[0] + DFT[4] * B[1] - DFT[1] * B[2] + DFT[0] * B[3];
    LSQ[8] = DFT[5] * B[2] - DFT[4] * B[3];

    pm_LSQ_3(LSQ, LXY);

    WF = 2.f * M_PI_F * HZ;

    LXY[0] /= WF;
    LXY[1] /= WF;
    LXY[2] /= WF;

    pm_DFT_EIG(LXY[0], LXY[2], LXY[1], LDQ);

    LDQ[4] = R;
}

 

LXY 1.4572e-05 1.4863e-05 4.8201e-06
9.8955e-06 (H)
1.9540e-05 (H)
44.14 (g)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...