Постановка задачи
Это вторая, итоговая статья. Напоминаю цель: есть двигатель постоянного тока. Задача — разработать, собрать и протестировать устройство, позволяющиее реализовать контур управления с заданием тока применительно к этому двигателю. Желаемое время переходного процесса на застопоренном двигателе (без противо-ЭДС) — не более 10мс.
Текст разбит на две статьи:
- 1. Измерение сопротивления и индуктивности двигателя
- 2. Разработка управляющего контура
Напоминаю, как выглядит макет управляющего железа:
![](https://habrastorage.org/getpro/habr/post_images/1b5/a46/085/1b5a46085014b5705f481b05ba580c63.jpg)
Желаемый результат
Вся система как чёрный ящик
Итак, вся затея состоит в том, что я хочу напрямую задавать силу тока, протекающего через мой двигатель. Если объединить контроллер и двигатель воедино, то я бы хотел получить примерно следующее:
![](https://habrastorage.org/getpro/habr/post_images/1c0/3cb/135/1c03cb135d90bf6483acf2b860c4c4ea.png)
Здесь J(t) — это задание по току, I(t) — это ток, протекающий через двигатель. Я бы хотел, чтобы входной и выходной сигналы были бы связаны по закону τ I'(t) + I(t) = J(t). Этот закон выбран произвольно, просто мне нравится такое дифференциальное уравнение. Умными словами оно называется апериодическим звеном первого порядка. Контроллеры, подчиняющиеся такому закону даже имееют свой собственный символ на некоторых схемах:
![](https://habrastorage.org/getpro/habr/post_images/94d/580/fdd/94d580fdd9b9bb7ea0139020d054bb7c.png)
Вот реакция подобного звена на единичное ступенчатое воздействие:
Это красивая экспоненциальная сходимость без разнообразных колебаний, поэтому такая форма и была выбрана. Постоянная тау в формуле τ I'(t) + I(t) = J(t) называется постоянной времени, это то время, за которое процесс достигнет 63% своего конечного значения при реакции на единичный скачок. Если определить время переходного процесса как время достижения 98% конечного значения, то это примерно 5 тау. В постановке задачи у нас время переходного процесса не должно превосходить 10мс, поэтому возьмём τ = 0,002.
Приоткроем чёрный ящик
Если же чёрный ящик приоткрыть, то выглядеть он будет как-то так:
![](https://habrastorage.org/getpro/habr/post_images/ddb/bd3/bde/ddbbd3bde4daab59e5dcd159a29658e4.png)
На вход чёрного ящика подаём сигнал J(t), на выход получаем протекающий ток I(t). Внутри чёрного ящика два подъящика: двигатель со своим диффуром, связывающим напряжение на клеммах U(t) с протекающим через него током I(t), и непосредственно регулятор, который должен подавать напряжение U(t) в зависимости от задания тока J(t) и реально протекающего тока I(t).
Давайте скажем, что регулятор берёт на вход ошибку E(t) — это разница между желаемой силой тока и реальной, и на выход даёт напряжение U(t). Наша задача найти диффур, который связывает E(t) и U(t), тогда будет понятно, как программировать ардуину контроллера.
Итак, мы хотим, чтобы задание тока и реальный ток были бы связаны по выбранному нами закону:
![](https://habrastorage.org/getpro/habr/post_images/aed/e31/5fa/aede315fa1c4beb6db7354f3b2f474b8.png)
Применим к нему преобразование Лапласа (с нулевыми начальными значениями):
![](https://habrastorage.org/getpro/habr/post_images/f61/7a8/598/f617a85981e13ab6d834d37944eedad5.png)
И составим следующую пропорцию:
![](https://habrastorage.org/getpro/habr/post_images/4c7/f40/b0f/4c7f40b0f7bcd4e6255e45831aa5fdd8.png)
На всякий случай, в теории управления эта пропорция называется передаточной функцией.
Определим ошибку E(t) как разницу между желаемой и реальной силой тока:
![](https://habrastorage.org/getpro/habr/post_images/04e/560/53a/04e56053ac729c114663d252cddeccb0.png)
Для настройки контура тока зафиксируем вал двигателя, таким образом угловая скорость уходит из диффура двигателя:
![](https://habrastorage.org/getpro/habr/post_images/375/27c/cae/37527ccae2a369b08bb93da0f848cc9b.png)
В предыдущей статье мы вывели связь между напряжением на клеммах мотора и силой протекающего тока (при зафиксированном роторе):
![](https://habrastorage.org/getpro/habr/post_images/1ce/005/81c/1ce00581c4cefe114cb97b7d36fcb8ee.png)
Давайте поделим эту пропорцию на пропорцию из уравнения (1):
![](https://habrastorage.org/getpro/habr/post_images/512/fc8/002/512fc80024c2ee85ab109c159f750387.png)
Почти закончили, осталось перейти от координат Лапласа к обычным временным. Для начала раскроем пропорцию:
![](https://habrastorage.org/getpro/habr/post_images/3de/ad1/67f/3dead167f595df47a3b1d3b72f2e6c08.png)
Вооружившись таблицами преобразования Лапласа, можно увидеть следующее:
![](https://habrastorage.org/getpro/habr/post_images/ca1/1f9/079/ca11f9079fecdccacc630033504bfd12.png)
А это значит, что напряжение U(t) и ошибка задания E(t) должны быть связаны по следующему закону:
![](https://habrastorage.org/getpro/habr/post_images/1ef/f43/1d7/1eff431d7edbf5850228a255153c7fdf.png)
Таким образом, выбрав поведение всей системы как апериодическое звено первого порядка, мы получаем, что необходимый регулятор есть не что иное, как обычный ПИ-регулятор.
Воплощение в жизнь
Сишный код регулятора можно посмотреть тут. Программа вполне стандартная, единственное, что следует отметить, так это то, что у атмеги не хватает здоровья работать с плавающими точками. Поэтому вся работа ведётся с фиксированной точкой и целочисленными переменными.
Проверка работы регулятора
Для проверки работы регулятора зададим ему на вход меандр и синусоидальный сигнал.
Меандр
Вот тут можно взять данные эксперимента: из нулевого начального состояния зададим желаемую силу тока в I0=4А и измерим реально протекающий ток.
Затем давайте посчитаем на бумаге, по какому закону должен изменяться протекающий ток в таких условиях. Это один-в-один совпадает с тем, что мы делали в предыдущей статье:
![](https://habrastorage.org/getpro/habr/post_images/6ea/d5a/901/6ead5a90177204689cd4041e0c7d5e94.png)
Попробуем подобрать значение параметра, чтобы теоретическая кривая наилучшем образом аппроксимировала реальные данные и сравним с выбранной нами ранее постоянной времени. Код подбора параметра можно взять здесь.
Вот результат работы управляющего контура на полупериоде меандра:
![](https://habrastorage.org/getpro/habr/post_images/09d/602/41b/09d60241bb108902edfca4b4d065c3f6.png)
Метод наименьших квадратов нам говорит, что наилучшее значение параметра это .00184, что очень близко к выбранной нами постоянной времени .002. Хорошо видно, что переходный процесс уложился в десять миллисекунд, которые ему были отведены в постановке задачи.
Синусоидальный сигнал
На всякий случай вторая проверка, опять же, вычисления все взяты из предыдущей статьи. При синусоидальном задании силы тока I(t) должна меняться по следующему закону:
![](https://habrastorage.org/getpro/habr/post_images/bfe/47a/a7d/bfe47aa7de757d7651b7bd89cbbe5cf5.png)
Код подбора параметра теоретической кривой можно взять тут. Он нам говорит, что постоянная времени равна .00196, что опять-таки близко к расчётному параметру в 2мс.
Вот результат работы управляющего контура на синусоидальном входном сигнале:
![](https://habrastorage.org/getpro/habr/post_images/60e/319/6a3/60e3196a3dad6013f6a713c2268b9b96.png)
Заключение
В общем, не так страшен чёрт, как его малюют. Большое спасибо arastas за науку! Постараюсь в обозримом будущем найти немного времени, чтобы собрать перевёрнутый маятник не так, как его делал (управляя напряжением), а управляя непосредственно силой тока, это должно упростить расчёты регулятора непосредственно маятника.