- PVSM.RU - https://www.pvsm.ru -

Делаем контур управления электродвигателем с заданием тока

Постановка задачи

Это вторая, итоговая статья. Напоминаю цель: есть двигатель постоянного тока. Задача — разработать, собрать и протестировать устройство, позволяющиее реализовать контур управления с заданием тока применительно к этому двигателю. Желаемое время переходного процесса на застопоренном двигателе (без противо-ЭДС) — не более 10мс.

Текст разбит на две статьи:

Напоминаю, как выглядит макет управляющего железа:

Делаем контур управления электродвигателем с заданием тока - 1

Желаемый результат

Вся система как чёрный ящик

Итак, вся затея состоит в том, что я хочу напрямую задавать силу тока, протекающего через мой двигатель. Если объединить контроллер и двигатель воедино, то я бы хотел получить примерно следующее:

Делаем контур управления электродвигателем с заданием тока - 2

Здесь J(t) — это задание по току, I(t) — это ток, протекающий через двигатель. Я бы хотел, чтобы входной и выходной сигналы были бы связаны по закону τ I'(t) + I(t) = J(t). Этот закон выбран произвольно, просто мне нравится такое дифференциальное уравнение. Умными словами оно называется апериодическим звеном первого порядка. [2] Контроллеры, подчиняющиеся такому закону даже имееют свой собственный символ на некоторых схемах:

Делаем контур управления электродвигателем с заданием тока - 3

Вот реакция подобного звена на единичное ступенчатое воздействие:

Делаем контур управления электродвигателем с заданием тока - 4

Это красивая экспоненциальная сходимость без разнообразных колебаний, поэтому такая форма и была выбрана. Постоянная тау в формуле τ I'(t) + I(t) = J(t) называется постоянной времени, это то время, за которое процесс достигнет 63% своего конечного значения при реакции на единичный скачок. Если определить время переходного процесса как время достижения 98% конечного значения, то это примерно 5 тау. В постановке задачи у нас время переходного процесса не должно превосходить 10мс, поэтому возьмём τ = 0,002.

Приоткроем чёрный ящик

Если же чёрный ящик приоткрыть, то выглядеть он будет как-то так:

Делаем контур управления электродвигателем с заданием тока - 5

На вход чёрного ящика подаём сигнал J(t), на выход получаем протекающий ток I(t). Внутри чёрного ящика два подъящика: двигатель со своим диффуром, связывающим напряжение на клеммах U(t) с протекающим через него током I(t), и непосредственно регулятор, который должен подавать напряжение U(t) в зависимости от задания тока J(t) и реально протекающего тока I(t).

Давайте скажем, что регулятор берёт на вход ошибку E(t) — это разница между желаемой силой тока и реальной, и на выход даёт напряжение U(t). Наша задача найти диффур, который связывает E(t) и U(t), тогда будет понятно, как программировать ардуину контроллера.

Итак, мы хотим, чтобы задание тока и реальный ток были бы связаны по выбранному нами закону:

Делаем контур управления электродвигателем с заданием тока - 6

Применим к нему преобразование Лапласа (с нулевыми начальными значениями):

Делаем контур управления электродвигателем с заданием тока - 7

И составим следующую пропорцию:

Делаем контур управления электродвигателем с заданием тока - 8

На всякий случай, в теории управления эта пропорция называется передаточной функцией. [3]

Определим ошибку E(t) как разницу между желаемой и реальной силой тока:

Делаем контур управления электродвигателем с заданием тока - 9

Для настройки контура тока зафиксируем вал двигателя, таким образом угловая скорость уходит из диффура двигателя:

Делаем контур управления электродвигателем с заданием тока - 10

В предыдущей статье мы вывели связь между напряжением на клеммах мотора и силой протекающего тока (при зафиксированном роторе):

Делаем контур управления электродвигателем с заданием тока - 11

Давайте поделим эту пропорцию на пропорцию из уравнения (1):

Делаем контур управления электродвигателем с заданием тока - 12

Почти закончили, осталось перейти от координат Лапласа к обычным временным. Для начала раскроем пропорцию:

Делаем контур управления электродвигателем с заданием тока - 13

Вооружившись таблицами преобразования Лапласа [4], можно увидеть следующее:

Делаем контур управления электродвигателем с заданием тока - 14

А это значит, что напряжение U(t) и ошибка задания E(t) должны быть связаны по следующему закону:

Делаем контур управления электродвигателем с заданием тока - 15

Таким образом, выбрав поведение всей системы как апериодическое звено первого порядка, мы получаем, что необходимый регулятор есть не что иное, как обычный ПИ-регулятор. [5]

Воплощение в жизнь

Сишный код регулятора можно посмотреть тут. [6] Программа вполне стандартная, единственное, что следует отметить, так это то, что у атмеги не хватает здоровья работать с плавающими точками. Поэтому вся работа ведётся с фиксированной точкой и целочисленными переменными.

Проверка работы регулятора

Для проверки работы регулятора зададим ему на вход меандр и синусоидальный сигнал.

Меандр

Вот тут [7] можно взять данные эксперимента: из нулевого начального состояния зададим желаемую силу тока в I0=4А и измерим реально протекающий ток.

Затем давайте посчитаем на бумаге, по какому закону должен изменяться протекающий ток в таких условиях. Это один-в-один совпадает с тем, что мы делали в предыдущей статье:

Делаем контур управления электродвигателем с заданием тока - 16

Попробуем подобрать значение параметра, чтобы теоретическая кривая наилучшем образом аппроксимировала реальные данные и сравним с выбранной нами ранее постоянной времени. Код подбора параметра можно взять здесь. [8]

Вот результат работы управляющего контура на полупериоде меандра:

Делаем контур управления электродвигателем с заданием тока - 17

Метод наименьших квадратов нам говорит, что наилучшее значение параметра это .00184, что очень близко к выбранной нами постоянной времени .002. Хорошо видно, что переходный процесс уложился в десять миллисекунд, которые ему были отведены в постановке задачи.

Синусоидальный сигнал

На всякий случай вторая проверка, опять же, вычисления все взяты из предыдущей статьи. При синусоидальном задании силы тока I(t) должна меняться по следующему закону:

Делаем контур управления электродвигателем с заданием тока - 18

Код подбора параметра теоретической кривой можно взять тут. [9] Он нам говорит, что постоянная времени равна .00196, что опять-таки близко к расчётному параметру в 2мс.

Вот результат работы управляющего контура на синусоидальном входном сигнале:

Делаем контур управления электродвигателем с заданием тока - 19

Заключение

В общем, не так страшен чёрт, как его малюют. Большое спасибо arastas [10] за науку! Постараюсь в обозримом будущем найти немного времени, чтобы собрать перевёрнутый маятник не так, как его делал [11] (управляя напряжением), а управляя непосредственно силой тока, это должно упростить расчёты регулятора непосредственно маятника.

Автор: haqreu

Источник [12]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/matematika/210899

Ссылки в тексте:

[1] 1. Измерение сопротивления и индуктивности двигателя: https://habrahabr.ru/post/314520/

[2] апериодическим звеном первого порядка.: https://ru.wikipedia.org/wiki/%D0%90%D0%BF%D0%B5%D1%80%D0%B8%D0%BE%D0%B4%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%B7%D0%B2%D0%B5%D0%BD%D0%BE#.D0.90.D0.BF.D0.B5.D1.80.D0.B8.D0.BE.D0.B4.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.BE.D0.B5_.D0.B7.D0.B2.D0.B5.D0.BD.D0.BE_.D0.BF.D0.B5.D1.80.D0.B2.D0.BE.D0.B3.D0.BE_.D0.BF.D0.BE.D1.80.D1.8F.D0.B4.D0.BA.D0.B0

[3] передаточной функцией.: https://en.wikipedia.org/wiki/Transfer_function

[4] таблицами преобразования Лапласа: http://tutorial.math.lamar.edu/pdf/Laplace_Table.pdf

[5] ПИ-регулятор.: http://autoworks.com.ua/teoreticheskie-svedeniya/pi-regulyator/

[6] тут.: https://github.com/ssloy/tutorials/blob/7d49c791d37836f139668722d023a11dace6347b/tests/amplifier/main.c

[7] Вот тут: https://github.com/ssloy/tutorials/blob/master/tutorials/dcmotor/controller_unit_step_4.08A.csv

[8] здесь.: https://github.com/ssloy/tutorials/blob/master/tutorials/dcmotor/controller_unit_step.py

[9] тут.: https://github.com/ssloy/tutorials/blob/master/tutorials/dcmotor/controller_sine_fine.py

[10] arastas: https://habrahabr.ru/users/arastas/

[11] как его делал: https://habrahabr.ru/post/301276/

[12] Источник: https://habrahabr.ru/post/315488/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best