Статья служит шпаргалкой для тех, кто хочет сделать обратный маятник своими руками.
В нем описаны проблемы, из-за которых мне приходилось несколько раз все переделывать, и дается краткий обзор теории, необходимой для понимания того, как стабилизировать систему.
Зачем мне это нужно?
Кратко: Хотел расширить свой станок с ЧПУ, но что-то пошло не так.Полная история Я с детства хотел иметь свой станок с ЧПУ, потому что.
работал над моделями самолетов, где нужно делать множество мелких повторяющихся деталей.
Сначала я купил готовый Набор для самостоятельного изготовления , а затем решил увеличить его.
Я играл с ним два месяца, но машинка все равно маленькая, рабочая зона всего 18 на 10 см, датчиков позиционирования у нее нет. Решил купить направляющую побольше, поставить концевые выключатели и посередине установить каретку с шаговым двигателем.
Сделал за полдня, но сразу к мечте не пойдешь - на большом ЧПУ нужно усложнить задачу и поставить маятник на каретку, тогда мне это казалось простым, но надо было запомнить мои институтские годы и знакомство с ТАУ.
Неудачные попытки
На реализацию проекта ушло почти два года проб и ошибок, редизайнов, ожиданий запчастей и не до конца прожитых выходных, так что желающие повторить его сэкономят себе время и нервы, считаю необходимым рассказать о неудачных решениях.
- гироскоп (MPU6050) вместо энкодера - в принципе ничего против нет, но датчик должен располагаться на вращающемся стержне, это вносит непредсказуемый эффект и невозможность провернуть стержень несколько раз вокруг своей оси.
- абсолютный энкодер - если это потенциометр, то даже движение проводов вносит в измерения шум (в основном из-за контактов в ардуино), 10-битного АЦП все равно недостаточно; если это более дорогой датчик, то считывание происходит через последовательный интерфейс, а это вносит задержку в систему, особенно в сочетании с шаговым двигателем.
- нежесткость системы - в какой-то момент я взял алюминиевую трубку с грузом на конце, когда каретка закачалась, в ней начались сильные вибрации, и сразу стало непонятно, какую систему мы стабилизируем.
Мы должны стремиться к тому, чтобы физическая система была максимально приближена к моделируемой.
- трение - это явление, которое часто упускают из виду, я пытался уменьшить его, используя большие каретные колеса и профили с V-образными пазами, в отличие от рельсов с маленькими шариковыми полозьями, потому что трение качения обратно пропорционально радиусу.
- с использованием шагового двигателя - я потратил много времени, пытаясь пойти по этому пути, упрощение формул вводит в заблуждение (фактически мы сразу управляем ускорением основания маятника) и простота конструкции (можно забыть про трение в рейке, энкодер двигателя, если считать, что мотор не пропускает шаги) , но.
Для точного контроля скорости время между шагами должно измеряться десятками микросекунд, а значит можно забыть о вывод состояния на консоль.
Без обратной связи вы не можете быть уверены, что двигатель не пропустил шаги и что скорость действительно такая, как считает система.
Я не говорю, что это тупиковое решение; если кому-то удастся стабилизировать маятник шаговым двигателем, буду рад взглянуть.
Свободный маятник
Для полноты картины смоделируем маятник на свободной каретке без трения.
Уравнения движения можно получить дифференцированием лагранжиан по обобщенным координатам.
Получаем следующие уравнения:
из которого можно узнать, как меняется вектор состояния:
и смоделировать систему.
Код Здесь .
Почему система нестабильна?
Здравый смысл и визуализация говорят нам, что маятник не устоит сам по себе.
Но как это проверить математически?
В общем виде линеаризованная система и решение выглядят так:
Показатель степени матрицы выглядит нагляднее, если перейти к системе координат от собственных векторов, тогда матрица
будет диагональной(
), а показатель степени будет иметь вид:
Теперь мы видим, что если имеются собственные значения (
) при положительной вещественной части соответствующая компонента вектора состояния будет стремиться к бесконечности, и система развалится.
Вышесказанное относится к непрерывным системам; Стабильность более подробно описана в этот видеолекции.
Давайте проверим, верно ли это для обратного маятника.
Линеаризуем нашу систему вокруг положения равновесия при
:
Ненулевые собственные значения имеют вид
, таким образом мы убедились в нестабильности.
Добавление отзыва
Теперь сила будет действовать на карету, одно из уравнений перепишется как:
, и линеаризованная система примет вид:
Теперь система (
) стал контролируемый , в этом можно убедиться, проверив, что ранг матрицы
равна размерности вектора состояния, т.е.
4. Для удержания маятника в вертикальном положении я использовал линейно-квадратичный регулятор состояния, т.е.
управление (u или f) есть произведение вектора состояния
к вектору параметров, которые встречаются один раз минимизация квадратичного функционала .
Код моделирования Здесь .
Контроль двигателя
Теперь мне нужно управлять двигателем постоянного тока, он содержит множество параметров, которые мне неизвестны, поэтому я принял его за «черный ящик», описываемый следующими уравнениями с учетом трения:Вы можете прочитать о выводе уравнений и оценке параметров.
Здесь .
Ниже я приведу свои графики разгона двигателя с кареткой в зависимости от напряжения (реально на выходе контроллера — ШИМ-сигнал) и подогнанные кривые.
Коэффициенты модели я также нашел методом перебора, код .
Таким образом, регулятор дает нам необходимое ускорение, а из 2-го уравнения, зная все константы, мы найдем напряжение.
Сборка реального устройства
Теперь у нас есть все знания, чтобы собрать и стабилизировать маятник.Я использовал следующее оборудование:
- Arduino Mega 2560 — это не UNO, поскольку для двух энкодеров требуется 4 контакта прерывания.
- Энкодер для маятника - OMRON E6B2-CWZ6C 2500 импульсов на оборот - выдает нам угол, вычисляем угловую скорость, разрешение достаточно высокое, поэтому конечных разностей без сглаживания и усреднения хватило
- Энкодер для двигателя - LPD3806-600BM-G5-24C 600 импульсов на оборот - выдает положение каретки, рассчитывает скорость
- Двигатель постоянного тока 12 В с коробкой передач 5:1.
- Водитель двигателя 10А 5В-30В
К моему удивлению, все как есть довольно быстро заработало.
Результатом доволен, оно того стоит и даже стакан держит! Код для Arduino находится Здесь Что было улучшено по сравнению со многими вариантами, которые можно найти на YouTube, так это то, что этот маятник работает бесшумно, поскольку ШИМ установлен за пределами слышимого диапазона и используются пластиковые колеса.
Сейчас эта задача выглядит как лабораторная работа: измерить параметры двигателя и найти коэффициенты регулятора, попутно понимая, что происходит.
Что дальше?
Планирую изготовить маятник: сделать его качающимся, избавиться от катушки проводов, сделать щиток с удобными разъемами, чтобы не стыдно было отдать в какую-нибудь школу или музей.Если кто-то захочет присоединиться, буду рад, еще много амбициозных идей.
Ссылки
- Подробное описание задачи об обратном маятнике.
- Разжевывание линейно-квадратичного регулятора для управления перевернутым маятником - эта статья сэкономила мне много времени при сборке маятника
- Отличные видеолекции по ТАУ
-
Проекционный Будильник От Sony.
19 Oct, 24 -
Leaxt — Простой Способ Сделать Текст Короче
19 Oct, 24