реклама на сайте
подробности

 
 
11 страниц V  « < 7 8 9 10 11 >  
Reply to this topicStart new topic
> Система команд сервоконтроллера, обсудим?
Rst7
сообщение Feb 19 2009, 19:31
Сообщение #121


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
В AVR-libc заложен китайский double


Это как?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Прохожий
сообщение Feb 19 2009, 20:23
Сообщение #122


Cундук
*****

Группа: Участник
Сообщений: 1 478
Регистрация: 13-11-06
Из: Ростов-на-Дону
Пользователь №: 22 269



Цитата(slog @ Feb 19 2009, 15:45) *
Про оптику - это конечно красиво, и у неё много достоинств. Но как-то сложновато.

Ничего не сложновато. И даже не очень дорого. Вот пример.
[attachment=29918:AV02_1504EN.pdf]
А достоинств, в действительности, гораздо больше, чем можно представить себе в начале.
Цитата(slog @ Feb 19 2009, 15:45) *
А EtherCAT не сложнее Sercos, но гораздо красивее.
А вобще, заколебали уже большие производители промэлектроники - каждый изобретает собственный ни с кем не совместимый интерфейс.
Даёшь поголовный переход на CoDeSys и EtherCAT !!! Всё что не совместимо - в мусор!!!

И почему именно CoDeSys. Там, на самом деле, не все так бесплатно как кажется в начале. А может быть это будет лучше?
На самом деле таких систем достаточно большое количество. Хотите примеров? Их есть у меня. Начиная простейшей.
ПМСМ, лучше завести отдельную тему для обсуждения всяких PROFIBUS-ов и EtherCAT-ов.
К стати, по последним данным, PROFIBUS в ближайшем будущем начнет умирать.
SIEMENS готовит ему достойную замену на основе Ethernet.

Сообщение отредактировал Прохожий - Feb 19 2009, 20:31
Go to the top of the page
 
+Quote Post
dpss
сообщение Feb 20 2009, 05:22
Сообщение #123


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 19-04-08
Из: Москва
Пользователь №: 36 913



Цитата(Прохожий @ Feb 19 2009, 23:23) *
И почему именно CoDeSys. Там, на самом деле, не все так бесплатно как кажется в начале.

Это смотря где покупать :-) Кое где совсем бесплатно.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 20 2009, 07:14
Сообщение #124


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Rst7 @ Feb 19 2009, 17:21) *
Я тут попробовал покурить, как плагины для своего железа делать к Mach3.


Предварительные данные:


1. Чисто сплайн в форме (кстати, zltigo прав насчет трехэтажных выражений)

Код
/* as*(t^3)+bs*(t^2) etc */

volatile double spline,as,bs,cs,ds,tmp;

tmp = 0.001; // остальные тоже с вменяемыми значениями

spline = ds + tmp * (cs + tmp * (bs + as*tmp));


жрет 860 тактов при -O2 на WinAVR-20080512 с дефолтным libc.

Остальные варианты - до  1300 и более тактов. В сад. maniac.gif

Кажется форма записи эта называлась полиномом Горнера.

При длительности сервоцикла  1 мс как бенчмарковой отправной точки я могу отсчитать до 64 точек траектории либо где-то за 3 мс либо на ходу, что вполне возможно, т.к все хозяйство меньше 50 мкс. Теперь появляется здоровый интерес к DDA[]

Вывод: плавучка возможна.

Китайский double - это как китайский ватт. double помещается в 32 бита smile.gif
Go to the top of the page
 
+Quote Post
Rst7
сообщение Feb 20 2009, 07:22
Сообщение #125


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Чисто сплайн в форме


Дык может все-же фиксированная точка в формате 16.16? Потому как основная зопа в плавучке это + и -.

Цитата
Кажется форма записи эта называлась полиномом Горнера.


Если быть точным - это схема Горнера для вычисления полинома.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Rst7
сообщение Feb 20 2009, 13:52
Сообщение #126


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Вообщем, если кого интересует, сделал я получение таймстампа в винде с микросекундной дискретностью. Выглядит где-то так (пардон за кривость):
CODE

//---------------------------------------------------------------------------
#include <windows.h>
#include <winbase.h>
#include <stdio.h>
#include <sys\timeb.h>
#pragma hdrstop

//---------------------------------------------------------------------------
static unsigned long long base_m;
static double base_d=0;
static long long ddm=0;

#pragma argsused
double prec_time(void)
{
LARGE_INTEGER counter_b;
LARGE_INTEGER counter_e;
LARGE_INTEGER freq;
unsigned long long m;
struct timeb ct;
double d;

QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&counter_b);
ftime(&ct);
QueryPerformanceCounter(&counter_e);
m=(((unsigned long long)counter_b.QuadPart>>1)+((unsigned long long)counter_e.QuadPart>>1));
//m - новая поправка
d=ct.time*1000.0+ct.millitm; //Собственно время в миллисекундах
if (base_d)
{
long long dm;
double dd=d-base_d;
base_m+=(dd)*((double)freq.QuadPart/1000.0);
dm=m-base_m;
ddm+=dm;
if (dd>0)
{
printf("%d\n",ddm);
if (ddm<0)
base_m-=freq.QuadPart/300000;
else
base_m+=freq.QuadPart/300000;
ddm=0;
}
base_d=d;
return d+((double)dm/((double)freq.QuadPart/1000.0));
}
else
{
base_m=m;
base_d=d;
return d;
}
}


int main(int argc, char* argv[])
{
int i;
struct timeb ct;
double pt=prec_time();

for(i=0;i<10000;i++)
{
double t1;
double t2;
ftime(&ct);
t1=ct.time*1000.0+ct.millitm;
t2=prec_time();
printf("%f - %f = %f, interval = %f\n",t1,t2,t2-t1,t2-pt);
pt=t2;
Sleep(2);
}
return 0;
}


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
khach
сообщение Feb 20 2009, 16:02
Сообщение #127


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Цитата(Rst7 @ Feb 20 2009, 16:52) *
Вообщем, если кого интересует, сделал я получение таймстампа в винде с микросекундной дискретностью.

Дрыгоножество LPT порта под виндой-давно пройденный этап нафиг никому ненужный, неработающий на ноутбуках (даже на тех, где порт есть).
Для любителя интересен сервоконтроллер, имеющий плугин для Mach3, все остальное- нафиг ненужно. Поскольку Mach3 вываливает в Motion plugin 3 осевое управление и требует наличие круговой интерполяции, то именно это и надо засунуть во внешний контроллер- принимать кадры управления перемещением (в формате Mach3 GMoves), управлять 3 осями, выдавать статус. SDK лежит свободно http://www.machsupport.com/downloads.php В нем есть плугин для контроллера GALIL - вот его и перепахиваем. Интерфейс- любой. Хоть эзернет, хоть USB, или CAN. Кстати, предлагаю забит на AVR и делать на STM32 ARMах - там есть кристаллы где можно выбирать- CAN или USB, причем взаимоисключающе. Для любителя будет USB, для профи-CAN, причем плата и код- практически одинаковый. И ресурсов на интерполяцию хватит.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Feb 20 2009, 16:20
Сообщение #128


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Дрыгоножество LPT порта под виндой-давно пройденный этап нафиг никому ненужный, неработающий на ноутбуках (даже на тех, где порт есть).


Причем тут таймстамп к ногодрыжеству?

Цитата
Поскольку Mach3 вываливает в Motion plugin 3 осевое управление


Шестиосевое, шести! Пока принято решение такое: один сервоконтроллер - одна ось.

Цитата
предлагаю забит на AVR


Успеем забить.

Цитата
И ресурсов на интерполяцию хватит.


Хватает и так.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 20 2009, 16:25
Сообщение #129


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Rst7 @ Feb 20 2009, 19:20) *
Шестиосевое, шести!

Бр-р.Тогда я удаляю предыдущий пост.
Go to the top of the page
 
+Quote Post
khach
сообщение Feb 20 2009, 20:27
Сообщение #130


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Цитата(Rst7 @ Feb 20 2009, 18:20) *
Причем тут таймстамп к ногодрыжеству?

Напоминает очень- зафлудить шину управления неизвестно чем, постоянно отрывать процессор на обработку пакетов по шине

Цитата
Шестиосевое, шести! Пока принято решение такое: один сервоконтроллер - одна ось.

Так может все-таки сделать два по 3? И между ними CAN если действительно надо 6 осей. Зато трехосевая интерполяция нормально получиться, если три оси на одном контроллере сидят.

По поводу интерполяции. Есть ли исходники цилиндрической интерполяции с контролем скорости перемещения (динамический разгон и остановка, переход к следующему кадру без торможения)?
Желательно еще и с цифровым ПИД контроллером по всем осям (для использования серв с энкодерами, а не шаговиков). Вот сомневаюсь я что-то что это удасться впихнуть в Атмегу, особенно если она еще и таймстампы будет постоянно расшифровывать.




Цитата(Rst7 @ Feb 19 2009, 16:21) *
1. Прямое (которое Jogging) - просто двигаться по нужной оси в направлении со скоростью такой-то
2. GCode movement - движение с координатами.


Я так понимаю, что GCode movement - это его основной режим. И нафлудить он не сможет больше чем раз в миллисекунду. Вот я и думаю - надо в контроллере имплементить понимание таких данных да и всех делов.

Отдельно там идут всякие IO - но тоже вроде небыстро...

GCode movement - основной, Jogging- настройка, калибровка, люфты определить, ноль найти итд. Флудит он с частотой 10 Гц, по несколько пакетов GMoves. Пакеты желательно принять про запас- тогда можно предсказывать траектрию движения инструмента и не разгоняться- тормозить на каждом кадре.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 20 2009, 20:52
Сообщение #131


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Осей нужно пять.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 20 2009, 21:18
Сообщение #132


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Отдаю на корректуру. Iotypes.h

Что надо, кроме раскритиковать: 

-определиться, какие данные сервак должен отдавать

-определиться все-таки, координаты в плавучке или в целых, в смысле, значение шага регистра положения хранится в серваке или в мастере
Go to the top of the page
 
+Quote Post
dpss
сообщение Feb 20 2009, 21:57
Сообщение #133


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 19-04-08
Из: Москва
Пользователь №: 36 913



Цитата(khach @ Feb 20 2009, 23:27) *
По поводу интерполяции. Есть ли исходники цилиндрической интерполяции с контролем скорости перемещения (динамический разгон и остановка, переход к следующему кадру без торможения)?

Цилиндрическая - это круговая по двум осям + линейная по третьей. Переход без торможения - это так называемый предварительный просмотр кадров. Программа просматривает кадры, находит точки с нулевой скоростью по каждой оси (когда идет остановка или реверс) и с учетом разрешенной скорости и ускорения рассчитывает график скоростей от этих точек. Чем больше кадров может просмотреть вперед ЧПУ, тем оно круче. По английски СNC Look-ahead. Поищите в гугле с этой фразой.
Go to the top of the page
 
+Quote Post
khach
сообщение Feb 20 2009, 22:20
Сообщение #134


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Цитата(dpss @ Feb 20 2009, 23:57) *
Цилиндрическая - это круговая по двум осям + линейная по третьей. Переход без торможения - это так называемый предварительный просмотр кадров. Программа просматривает кадры, находит точки с нулевой скоростью по каждой оси (когда идет остановка или реверс) и с учетом разрешенной скорости и ускорения рассчитывает график скоростей от этих точек. Чем больше кадров может просмотреть вперед ЧПУ, тем оно круче. По английски СNC Look-ahead. Поищите в гугле с этой фразой.

Это понятно. Я ищу реализации в виде исходного кода, которые можно посмотреть и понять и не бегать по граблям при написании своего кода. Пока нашел только LinixCNC http://www.linuxcnc.org/ Исходники доступны в репозитории, но там весьма навороченный низкоуролвневый HAL для работы с различными драйверами моторов и реалтайм линуксовые навороты непонятны. Чтобы его портировать под плату на АРМе без Линуха надо очень много выкидывать. Может кто еще подскажет опенсоурсные проекты контроллеров или вообще полезные ссылки по управлению моторами и интерпретации кода.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 21 2009, 05:48
Сообщение #135


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Исправил косяк: перенес поля CRC16 и 8 для облегчения низкоуровневых операций с буфером.
Go to the top of the page
 
+Quote Post

11 страниц V  « < 7 8 9 10 11 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01506 секунд с 7
ELECTRONIX ©2004-2016