трех координатная интерполяция приводов ШД (шагов. двигат.)

Автомат, адаптивный автомат ... разум

трех координатная интерполяция приводов ШД (шагов. двигат.)

Сообщение serg » 05 апр 2006, 23:24

возник вопрос как можно перемещать сразу три координаты в одну точку например
x1=10;y1=5;z1=25;
x2=20;y2=10;z2=12;
т.е. задаются точки координат начальные и конечные как в алгоритме все того же самого Брезенхема, только там применялся с двухмерной проекцией, а мне надо еще как то третью приспособить.
спасибо за любую помощь.
serg
 
Сообщения: 11
Зарегистрирован: 26 мар 2006, 02:45
Откуда: Воткинск

Сообщение -= Александр =- » 05 апр 2006, 23:53

Я делал так:
По Х надо пройти А шагов
По Y - B
По Z - C

Значит ищем D = наименьшее общее кратное A, B и С
Запускаем цикл из D шагов.
Каждый A-тый шаг двигаем X-мотор
Каждый B-тый шаг двигаем Y-мотор
Каждый C-тый шаг двигаем Z-мотор

осле этого цикла попадаем в нужную точку +-1 по каждой координате. Корректируем и все ОК.

В общем как-то так. Если надо подробнее - дам в виде куска кода.

В новой версии это сделано тремя независимыми процессами с разделением во времени (элементарная многозадачность)
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Сообщение serg » 06 апр 2006, 01:44

этот кусок кода большой получился, если да то пришли по адресу basv_@mail.ru, если нет то здесь покажи что у тебя вышло.
пишу в CodeVisionAVR
serg
 
Сообщения: 11
Зарегистрирован: 26 мар 2006, 02:45
Откуда: Воткинск

Сообщение Kanoka » 06 апр 2006, 02:30

Дык просто же все, но писать долго, если коротко то принимаем самую длинную прекцию за 1 (мах. скорость двигателя), скорости двух других двигателей пропорционально отношению проекций с учетом знака.
Kanoka
Модератор
 
Сообщения: 1274
Зарегистрирован: 11 ноя 2004, 03:18
Откуда: Москва

Сообщение serg » 09 апр 2006, 14:35

спасибо конечно, но я кажется сам домыслил. А суть такова,
вводим начальные и конечные точки координат расчитываем дельта
т.е. расстояние от точки до точки затем ищем наибольшее из отрезков ,
этот наибольший отрезок делим на все три найденые дельта, эти полученные числа преобразуем в целое , затем в программе ставим для каждой координаты условия совпадения счетчиков такта: пример
a:=1, b:=10, c:=3  это есть числа после деления
if L=a то координата Х ; L:=0(при совпадении сбрасываем счетчик)
if M=b то координата Y ; M:=0
if N=c то координата Z ; N:=0
L:=L+1, M:=M+1, N:=N+1 эти счетчики внутри цикла движения
и считают постоянно.
так вот теперь возник вопрос о том насколько плавно будут переходы из точки в точку до конечной точки координат. И еще теперь размышляю как осуществить постоянное вращение двигателя в ПРИМЕРЕ приведенном здесь по координате X так как а:=1 т.е. как только L=1 то двигатель должен быть включен, координата Y через девять тактов счетчика M , координата Z включится через два такта счетчика N и пройдя какое-то расстояние выключится.
serg
 
Сообщения: 11
Зарегистрирован: 26 мар 2006, 02:45
Откуда: Воткинск


Вернуться в Алгоритмы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4