|
Перемещение по декартовой СК |
|
|
|
Nov 24 2007, 21:41
|
Частый гость
 
Группа: Свой
Сообщений: 126
Регистрация: 1-09-07
Из: Винница
Пользователь №: 30 222

|
Всем привет! Нужно перемещать головку по декартовой СК. Траектории движений всегда должны быть прямыми отрезками при равномерном разгоне и торможении. Т.е. знаем 4 величины - x,y,x0,y0, и по ним требуется рассчитать общее время перемещения (оно будет равное и для двигателя по Х, и для двигателя по оси У), максимальную скорость каждого двигателя после разгона/перед торможением, и соответственно величину ускорения/торможения для каждого двигателя. При этом уже есть некоторые заранее известные значения - максимальное ускорение, максимальная скорость. Существуют ли какие-то наработки по этой теме? Вроде то как ниче сложного и нет, но вот к примеру остановить двигатель в нужном месте вроде тож не оч сложно, а используется ПИД регуляция со всякими формулами  Нарисовал мой вариант решения (блок-схему) этого алгоритма, возможно не совсем правильную, хотелось бы услышать по этой теме несколько советов, возможно уже где-то есть красивая реализация алгоритма?
|
|
|
|
|
Nov 25 2007, 10:26
|
Частый гость
 
Группа: Свой
Сообщений: 126
Регистрация: 1-09-07
Из: Винница
Пользователь №: 30 222

|
Цитата(urasinov @ Nov 25 2007, 09:35)  Что-то меня смущает блок: Определим путь ускорения/торможения L_amax = (a_t^2)/2 Не нашел описания переменной a_t что это? Насколько я помню из физики, растояние пройденное при равномерном ускорении определяется как L_amax = (a*t^2)/2. Но если мы не начали движение откуда нам знать величину ускорения и время? Да, ошибка. L_amax - ето перемещение за время ускорения/торможения. Получается, что мы его знаем еще до начала движения, т.к. мы знаем максимальную скорость V_max, и максимальное ускорение a_max - и это константы - они экспериментально потом находятся. Я считал, что возможно только 2 варианта: 1- двигатель разгоняется до V_max с ускорением a_max, проходя путь L_amax, затем некоторое время движется с максимальной скоростью, и затем тормозит с тем же ускорением a_max до 0-ой скорости, также проходя путь L_amax. Торможение/ускорение будет регулироваться программно ,т.е. не сразу пытаемся крутить двигатель с 3000об/мин, а постепенно увеличивая обороны. Так и получится одинаковое ускорение при разгоне/торможении. 2- двигатель не успевает разогнаться до V_max, т.к. общее перемещение меньше, чем то, которое требуется для разгона+торможения до V_max. Поэтому в этом случае беру время на разгон такое же как и в первом случае ,но ускорение умножаю еще на koefA, чтоб не разгонятся до максимальной скорости и успеть затормозить. Для этого я и считаю L_amax, чтоб потом сверить большую координату(ту, по которой перемещение больше) с величиной 2*L_amax. Так я узнаю какой вариант будет (успеет разогнаться до V_max или нет) Пересчитал L_amax t_amax=V_max/a_max L_amax= (a_max*t_amax^2)/2 Возможно я еще чет не учел? Цитата(urasinov @ Nov 25 2007, 09:35)  PS Прошу прощенья за оффтоп, но подобные картинки где мало цветов (тут их два черный и белый), тонкие линии и контрастные переходы лучше сэйвить в GIF, качество будет гораздо выше (не будет артефактов при переходе цветов), а объем меньше чем JPG. Ок, приаттачил с исправлением, только уже не картинкой, о оригинальным файлом от FCEditor. Возможно, так лучше будет (9Кб)
blok_cxema.rar ( 1.41 килобайт )
Кол-во скачиваний: 164
FCEditor.rar ( 1.88 мегабайт )
Кол-во скачиваний: 137
|
|
|
|
|
Nov 25 2007, 16:38
|
Частый гость
 
Группа: Свой
Сообщений: 126
Регистрация: 1-09-07
Из: Винница
Пользователь №: 30 222

|
Вопрос заключался в том, что я хотел посмотреть на похожие уже реализованные алгоритмы, т.к. был не уверен что учел все основные моменты в своем решении. Еще поискал, почитал, вроде нормально будет. Всем спасибо, тему можно закрывать. Извиняйте за немного странную тему
|
|
|
|
|
Nov 25 2007, 17:13
|
Частый гость
 
Группа: Свой
Сообщений: 126
Регистрация: 1-09-07
Из: Винница
Пользователь №: 30 222

|
Цитата(Tanya @ Nov 25 2007, 18:45)  Тут ошибка. Разгоняться нужно всегда с максимальным ускорением. Ровно на середине отрезка знак ускорения меняется.... Равно, как и в первом случае. Путь (и время) ускорения = пути (времени) замедления Я тож сначала так хотел сделать, но потом чет по времени решил вычислять все величины. А посчитать время момента переключения ускорение-торможение не получилось. Значит нужно будет не по времени все считать, а по импульсах с датчиков Холла в двигателях, и делать так, как Вы написали. Тогда легче будет определить середину отрезка, и точнее будет, да?
|
|
|
|
|
Nov 25 2007, 17:28
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(_lukash_ @ Nov 25 2007, 20:13)  Я тож сначала так хотел сделать, но потом чет по времени решил вычислять все величины. А посчитать время момента переключения ускорение-торможение не получилось. Значит нужно будет не по времени все считать, а по импульсах с датчиков Холла в двигателях, и делать так, как Вы написали. Тогда легче будет определить середину отрезка, и точнее будет, да? Реальность сложнее наших представлений о ней (формул). Кто даст гарантию, что ускорение будет по модулю точно воспроизводиться..., и их соотношение по координатам? Возможно, что будет перебег или недобег. Более того, ошибка в ускорении будет умножаться на время в квадрате для пересчета в ошибку в координате. Будь у Вас шаговые двигатели, проблем было бы меньше. А в Вашем случае, действительно, надежнее следить за координатой (ведь это у Вас целевая функция?) и регулировать это дело ПИД'ом.
|
|
|
|
Guest_TSerg_*
|
Nov 26 2007, 06:58
|
Guests

|
Цитата(_lukash_ @ Nov 25 2007, 21:19)  Ок, спасибо. Ща про ПИД (в моем случае, наверно, только П-составляющая потребуется) регулирование почитаю глубже, а то только оч поверхностно знаю че это такое. А то перебег/недобег я совсем не учел  Без обратной связи по координатам все будет очень плохо.
|
|
|
|
|
Nov 26 2007, 13:50
|
Бывалый
    
Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615

|
Цитата(_lukash_ @ Nov 25 2007, 00:41)  Ваша задача типовая для устройств с числовым программным управлением. Как я решал эти задачи. Как делается многокоординатная система. Каждая координата имеет обратную связь по положению. Вы имеете линейную интерполяцию, если нужно из точки А приехать в точку Б. Подготовка. 1.Вы считываете длину пути, как корень квадратный из квадратов перемещений по координатам. 2.Высчитываете косинусы для каждой координаты. По таймеру выполняется: 1. Расчет показаний датчиков. 2. Замыкание следящих систем. 3. Алгоритм разгона-замедления. 4. Диспетчер интерполяций. 4.1. Расчеты приращений по координатам и новые координаты. Все.
|
|
|
|
Guest_TSerg_*
|
Nov 27 2007, 06:33
|
Guests

|
Цитата(_lukash_ @ Nov 26 2007, 21:01)  А можно немного объяснить по пункту 4 - про интерполяцию и приращение по координатам? Т.е. с самой интерполяцией я разобрался, а как ее здесь применить не оч понял.
ЗЫ Нагуглил по ЧПУ инфы, разбираюсь... Я бы попробовал смоделировать другой вариант, он несколько более "свободный", но и более робастный. Предварительно вычисляется направление движения и и на рекомендуемой линии движения определяются точки переключения разгон-стационар и стационар-торможение. В каждый момент времени определяются текущие координаты X,Y и рассчитываются: - направление на конечную точку - отклонение по траверзу от рекомендованной линии движения; Для следующего шага вырабатывается новый вектор скорости, а имеющееся отклонение устраняется регулятором типа ПИ или ПИД. В случае достижения по одной из координат максимальной скорости или ускорения разгон прекращается.
|
|
|
|
|
Nov 27 2007, 07:02
|
Бывалый
    
Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615

|
Цитата(urasinov @ Nov 26 2007, 18:51)  Что нам даст знание косинусов? По-моему гораздо удобнее знать перемещение отдельно по каждой из координат Х и У. Когда известна контурная (общая) скорость. Умножив ее на на косинус получаем приращение по координате. Цитата(TSerg @ Nov 27 2007, 09:33)  Для следующего шага вырабатывается новый вектор скорости, а имеющееся отклонение устраняется регулятором типа ПИ или ПИД. Для программного управления используется П-регулятор, иногда вводится скоростная компенсация с некоторой недокомпенсацией. Это необходимо для отсутствия перерегулирований. ПИ и ПИД используются в копировально-фрезерных станках. Там это необходимо, но требования к люфтам и т.д. здесь намного жестче.
|
|
|
|
|
Nov 27 2007, 07:50
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(TSerg @ Nov 27 2007, 09:33)  Я бы попробовал смоделировать другой вариант, он несколько более "свободный", но и более робастный. Предварительно вычисляется направление движения и и на рекомендуемой линии движения определяются точки переключения разгон-стационар и стационар-торможение. В каждый момент времени определяются текущие координаты X,Y и рассчитываются: - направление на конечную точку - отклонение по траверзу от рекомендованной линии движения; Для следующего шага вырабатывается новый вектор скорости, а имеющееся отклонение устраняется регулятором типа ПИ или ПИД. В случае достижения по одной из координат максимальной скорости или ускорения разгон прекращается. Такой подход, в принципе, правильный. Для системы с ограниченной информацией. Но возможны улучшенные варианты. Автору нужно разобраться с двигателем. Может ли (и хочет ли) он напрямую управлять (измерять по электрическим сигналам, а не с датчика положения) ускорением, скоростью и с какой точностью...
|
|
|
|
|
Nov 27 2007, 16:10
|
Частый гость
 
Группа: Свой
Сообщений: 126
Регистрация: 1-09-07
Из: Винница
Пользователь №: 30 222

|
Значит делаю как TSerg написал: Сначала рассчитываю коэффициент для меньшей координаты. Если случай первый, рассчитываю длины отрезков ускорение/стационар/торможение. Далее перевожу эти длины в количество импульсов от датчика Холла(будет около 30 импульсов на 1 миллиметр) Потом возьму какую-то переменную в качестве счетчика (по переменной на каждую ось, ее перед каждым проездом обнулять буду) и в обработчике прерывания компаратора (по импульсу от датчиков Холла) буду каждый раз ее увеличивать на 1. Там же (в обработчике прерывания) и проверять ее на равность со значениями ускорение/стационар/торможение. Так я узнаю, что пора прекратить разгон, к примеру. И так же для 2-го случая, но там просто ускорение/торможение.
Немного непонятно как мне посчитать отклонение от рекомендованной линии движения. Опять по времени? Еще объясните доступно плз, как прикрутить к этому всему П-регулятор - получается он тоже будет корректировать скорость исходя из времени, или он будет корректировать только конечную точку, в которой нужно остановиться?
И еще один момент – сами расчеты ведутся в одном контроллере, потом он (master) контроллер передает рассчитанные данные в 2 slave МК (на каждый двигатель по МК), после чего master одновременно дает команду на пуск 2 –х двигателей. Во время движения каждый из slave контроллеров НЕ будет знать сколько в данный момент прошел второй slave, т.е. связи между ними не будет. Возможно ли обойтись без привязки по времени в данном случае?
|
|
|
|
Guest_TSerg_*
|
Nov 28 2007, 08:52
|
Guests

|
Цитата(_lukash_ @ Nov 27 2007, 19:10)  Значит делаю как TSerg написал:
Немного непонятно как мне посчитать отклонение от рекомендованной линии движения. Опять по времени? Рекомендованная линия пути (ЛРП) известна, т.к. задана начальной и конечно точками. Текущая точка тоже известна по датчикам перемещения. Далее - обычная геометрия (кратчайшее расстояние от точки до прямой) В качестве примера, реализующего подобный подход, привожу симуляцию. Имеется двухкоординатная система с двигателями пост.тока и датчиками положения (не снижая общности). рис.1
Каждая из подсистем реализована как замкнутая по скорости, т.е. обеспечивается постоянство скорости на рабочем участке. Для демонстрации возможностей работы такой САР в условиях значительной неопределенности введены следующие усложнения жизни. Динамические характеристики разомкнутых систем различаются по динамике и передаточному числу. рис.2
Динамические хар-ки замкнутых систем отличаются качественно - одна имеет апериодический характер, вторая - колебательный. рис.3
В канал скорости по X вводится случайная составляющая, как интеграл от белого шума с катастрофической величиной дисперсии 25% от макс.скорости. рис.4
(синий - результирующая скорость задатчика, красный - шумовой сигнал). Т.е. мы в сигнал задания вводим значительное возмущение без объяснения его природы. На рис.5 приведен график отклонения от ЛРП при работе САР без канала коррекции по отклонению. Как видно, текущую точку значительно уводит и отклонение достигает 2 мм на 100 мм, т.е. 2%
На рис.6 приведен аналогичный график при включенной коррекции. Отклонение не превышает 0.05 мм, т.е. 0.05%
Отключим возмущение по скорости рис.7. Дисбаланс в каналах приводит конечно же к процессу установления, но он быстротечен и невелик, те же 0.05%.
Безусловно, это всего лишь демонстрация возможностей и отнюдь не идеальная. Все регуляторы имеют П-характер, возможно введением иных законов и нелинейностей удасться получить апериодический характер пуска и выхода на ЛРП. Пуск производился на максимальном ускорении, если же делать его плавным, с контролируемым ускорением, то переходной процесс выглядит так - рис.8.
Если же каналы максимально идентичны, то - рис.9 и переходной процесс, скорее всего, будет определятся иными факторами.
Следующим шагом к улучшению показателей может стать введение режима "погоня за фазовой точкой", когда азимут берется не на конечную, а на искусственную движущуюся точку впереди фазовой точки системы. На рис.10 приведена траектория выхода на ЛРП при несовпадающих начальных точках ЛРП и каретки. Т.е. изменили начальные условия X0=0, Y0=-5, XT=0, YT=0
Эскизы прикрепленных изображений
|
|
|
|
Guest_TSerg_*
|
Nov 29 2007, 07:33
|
Guests

|
Цитата(_lukash_ @ Nov 29 2007, 00:32)  Это понял, спасибо. >Но еще один момент - у Вас при симуляции для расчета корректирования берутся показатели датчиков >обратной связи с 2-х двигателей в данный момент. А у меня так не получится – т.е. каждый контроллер >знает данные только своего двигателя. Можно ли брать для каждого контроллера вместо показателей >датчиков 2-го двигателя матем. посчитан "идеальный вариант" движения второго двигателя в данный >момент? >Т.е. мы будем корректировать ошибку каждого двигателя, принимая, что второй движется "идеально", и >также для второго двигателя соответственно? Пожалуй, что - нет. Это связанная система управления. Стабилизация по скорости у каждого канала своя, но траекторные вычисления необходимо делать на основе координат X,Y каретки. Иначе ноги врозь пойдут  >PS А в чем это симулировалось/можно прикрепить проект симуляции чеб самому попробовать? Это VisSim 6.0 ( http://www.vissim.com ) На этом сайте есть также VisSim viewer 4.0 (если нужен проект для просмотра, могу проект выложить) Есть бесплатная версия VisSim 3.0 (с данным проектом могут быть проблемы по совместимости) http://model.exponenta.ru/download.htmlВообще-то, на мой взгляд, попытки создания систем управления удовлетворительного качества без начальных системных расчетов и последующей симуляции - пустая трата времени и сил (средств) Кстати, вышеприведеный проект реализован в аналоговой постановке, но ничто не мешает его выполнить и в цифровой, благо VisSim это позволяет. Справедливости ради скажу, что есть неплохой отечественный симулятор - МВТУ http://mbty.com.ru/
|
|
|
|
|
Nov 29 2007, 19:56
|
Частый гость
 
Группа: Свой
Сообщений: 126
Регистрация: 1-09-07
Из: Винница
Пользователь №: 30 222

|
Возможно, удастся сделать так, чтоб при расчетах использовать и текущею Х, и У. Просто эти МК (которые управляют двигателями) связаны между собой через еще один МК, причем все на одной линии УАРТА. Если это все успеет обмениваться данными вовремя, то все будет хорошо  Там еще скорость каждого двигателя будет регулироваться ПИ-регуляторами, поэтому, возможно отклонение и не будет оч большим без коррекции. Плохо, что еще нет этого собранного станка, и не на чем это испытать. Скачал VisSim, посмотрел примеры, сам опробовал в нем с ПИД разобраться - понравилось  Если не трудно, выложите плз ваш проект, интересно посмотреть. Значит буду пробовать делать связь между МК, и собственно коррекцию по Х и У. Интересно будет посмотреть как это заработает на реальном станке Пока с основными вопросами разобрался, спасибо!
|
|
|
|
Guest_TSerg_*
|
Nov 30 2007, 06:51
|
Guests

|
Цитата(_lukash_ @ Nov 29 2007, 22:56)  Скачал VisSim, посмотрел примеры, сам опробовал в нем с ПИД разобраться - понравилось  Если не трудно, выложите плз ваш проект, интересно посмотреть. Пока с основными вопросами разобрался, спасибо! Выкладываю демо-проект на VisSim v.5.11 P.S. Честно говоря, настолько VisSim удобный инструмент, что не представляю уже как без него  ) В Сети стоит поискать фамилию Клиначев - апологет VisSim-а из Южно-Уральского универа. Кстати, VisSim имеет открытую систему плагинов на основе самописных DLL, а также может работать с внешними устройствами в качестве собственно системы управления.
dc.zip ( 2.84 килобайт )
Кол-во скачиваний: 117
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|