Pull to refresh

Comments 18

Плюсанул статью и карму. Пишите ещё!

П.с. как ни пытался понять ТАУ в универе, так и не смог. Незакрытый гештальд.

Спасибо). Планирую привести пример в Open Modelica. Там другой подход к моделированию. От знания физики процессов не избавляет, но вместо диаграммы потоков используется имитационное моделирование. В нем модель системы строиться по форме близко к реальной системе. Максимум, придется строить уравнения состояний, а в ряде случаев просто использовать готовые библиотеки моделей

А вы сравнивали результаты вашего моделирования с каким-нибудь реальным электродвигателем?

Да, я смотрел графики реальных систем управления. Многое зависит от структуры системы, выбора коэффициентов. Мои результаты симуляции не достаточно оптимальные. Возможно стоит рассмотреть вопрос оптимизации систем, исследовать, какие сейчас разрабатываются методики в этом направлении. В предыдущей статье "Анализ кривой падения добычи нефтяных и газовых скважин" я постарался показать, как с помощью инструмента SciPy optimization curve_fit производиться подгонка коэффициентов уравнения для прогноза. Классическими методами настройки ПИД-регулятора считаются правила Зиглера-Никольса или Коэна-Куна. Вопрос, действительно, интересный и важный

Можно попробовать портировать на STM32 или ESP32, доработать SVPWM. Подключить потом, например, к Matlab/Simulink для симуляции controller-plant (PMSM). В Scilab тоже есть тублокс STM32, но, боюсь, он уже давно не рабочий. А если портировать на Arduino, то можно и в Scilab, тулбокс рабочий, есть книжки где рассказано что и как.

на STM32F303 порт был, потом были попытки перенести на STM32G473, собственно частоты для PWM оттуда пришли. Модель на C++ как раз у нужна была, чтоб иметь полный контроль, а не как в Scilab "квадратики двигать" :) А какая доработка SVPWM имеется в виду?

Посмотреть в сторону векторной ШИМ (SVPWM), вырабатывающей duty согласно сравнению фазных напряжений. Можете в этой статье глянуть, или поискать в сети. Ну полный контроль, это уже когда полностью все в железе). Но это отдельная тема, нужно много чего предусматривать в прошивке, думаю, вы и так знаете

Так оно у меня есть :)

void svgen(const array &ab, array &abc, const double Vbus)
{
const double scale = 2.0 / Vbus;
tie(abc[0], abc[1], abc[2]) = iclarke(ab[0], ab[1]);
const double mn = fmin(abc[0], fmin(abc[1], abc[2]));
const double mx = fmax(abc[0], fmax(abc[1], abc[2]));
const double off = (mn + mx) .5;
for (unsigned i = 0; i < 3; ++i) {
abc[i] -= off;
abc[i]
= scale;
}
}

Да, я смотрел графики реальных систем управления.

Я, наверное, плохо сформулировал. Меня интересует не оптимальность системы управления, а для начала адекватность моделирования самого электродвигателя. Если реальный двигатель реагирует на входное управление не так, как модель, то ну и все.

Можете посмотреть материалы диссертации Design, Simulation and Implementation of a PMSM Drive System или работ Permanent Magnet Synchronous Machine Model for Real- Time Simulation, Trends of Permanent-magnet Synchronous Machine Drives, где обосновывается, что подобные модели имеют смысл, и показаны экспериментальные результаты скоростных характеристик. Если получится, постараюсь привести такие сравнения для своей модели в отдельной работе, возможно нужно будет подкорректировать систему

Обстоятельно об open source системах моделирования мало кто пишет. Пробежал по диагонали пока, но обязательно изучу все подробно. +

Вопрос по настройе начальных условий на практике: индуктивности, сопротивление статора, постоянная обратной ЭДС и главное, на каком угле энкодера находится 0 ротора. Эти параметры обычно неизвестны. Более того, энкодер можно поменять и новый поставить со смещением. Есть ли рекомендации по начальной настройке на новый двиатель? Ну хорошо, сопротивление статора примерно понятно, как найти. А остальное? В реальных ПЧ эти параметры определяются автоматически и зачастую даже без вращения. Вот как?

Я выше привел код модели на С++ -- там есть определение L и R обмотки в начале работы. Идея померять как нарастает и спадает ток в обмотке в ответ на подачу импульса напряжение -- L замедляет нарастание, R замедляет спад.

       if (t > 0.1) {
            if (fsm == 0) {
                vdq[0] = 0.2 * VBUS;
                fsm = 1;
            } else if (fsm == 1) {
                vdq[0] = 0;
                fsm = 2;
                iprev = Iab[0];
                ls = 0.2 * VBUS * he.Ts / Iab[0];
                printf("Ls is %.3g\n", ls);
            } else if (fsm == 2) {
                double di = iprev - Iab[0];
                static int i = 0;
                if (i++ > 8)
                    fsm = 3;
                double rs = ls * di/(i * he.Ts * iprev);
                printf("Rs is %.3g\n", rs);
            }
        }

обратную ЭДС по факту особо мерять не надо -- она относительна питающему напряжению, и если есть KV мотора -- вычисляется из нее (как и питающее напряжение для достижения необходимых оборотов). Энкодеры -- если вращение в начале разрешено, то можно прокрутить мотор до 0, если нет, то принимаем за ноль стартовое значение.

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

Sign up to leave a comment.

Articles