Добрый день, уважаемые коллеги.
В этой статье я хочу поделиться с вами своими методическими разработками, которые я использую в курсе «Теория автоматического управления» на кафедре управляющих и информационных систем НИУ ИТМО.
Основная задача, которую я перед собой поставил, — объединить теоретические знания для решения практической задачи.
Эта задача заключалась в управлении приводами робота Lego. Еще один повод поиграть с игрушками, и ученикам легче принять грубую лексику.
Вот пример описания этого набора: habrahabr.ru/post/166449 .
Давайте по порядку, сначала нам нужно было создать адекватную математическую модель двигателя.
И уже здесь я столкнулся с проблемой: производители не указали в комплекте технические характеристики двигателей.
Поиск Google дает несколько вариантов (например, nxt-unroller.blogspot.ru/2011/01/motor-controller-with-feed-forward-for.html или philohome.com/nxtmotor/nxtmotor.htm ), но мне нужно было получить характеристики моторов, которые использовались в роботе.
Вот тут-то и пригодятся знания физики и теоретической механики.
Составим уравнение Лагранжа и учтем влияние встречного ДС в обмотке ротора двигателя постоянного тока (ДПТ), получим:
где w - угловая скорость вращения двигателя, w0 - частота вращения холостого хода, М - крутящий момент, развиваемый двигателем, М0 - пусковой момент, J - момент инерции ротора двигателя.
Решением дифференциального уравнения будет следующее выражение:
где J*w0/M0 = Tm, Tm — электромеханическая постоянная двигателя.
Функция изменения угла во времени будет интегралом от функции скорости с учетом начальных условий:
Это именно то, что нам нужно.
Далее необходимо было написать программу, которая бы снимала разгонную характеристику двигателя постоянного тока, описываемую указанным уравнением.
Для этого я использовал nxcEditor для Linux и Bricxcc для Windows. На выходе получился файл, содержащий значения углов и соответствующие показания времени.
Данные с двигателя я обработал в Scilab (открытый аналог Matlab), получив значения электромеханической постоянной и установившейся скорости вращения двигателя методом наименьших квадратов, которые будут равны aa(2 )=Tm=0,081[сек] и aa(1)=w0=14,7[рад/сек] соответственно.
Теги: #автоматическое управление #идентификация #моторы #lego #открытый код #математика #разработка робототехникиdata=read("/home/kasper/Number.txt",-1,2); time=(data(:,2)-data(1,2))/1000; angle=data(:,1)*%pi/180; angle=angle'; time=time'; f=[time;angle]; function e=G(a, z),
-
Хабрапочтоглюк.
19 Oct, 24 -
Интернет Вещей И 5G
19 Oct, 24 -
Работа С Сенсорным Экраном На Arduino Due
19 Oct, 24 -
О Чем Бы Вы Хотели Прочитать?
19 Oct, 24