|
Перемещение по декартовой СК |
|
|
|
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. Расчеты приращений по координатам и новые координаты. Все.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|