аппаратный StepGen
-
- Почётный участник
- Сообщения: 112
- Зарегистрирован: 21 апр 2012, 22:52
- Репутация: 5
- Контактная информация:
аппаратный StepGen
Смотрю в сторону реализации аппаратного USB stepgen - всякие аналоги smooth stepper, planet cnc и иже с ними. Но хочется чего-то более открытого.
Поясню - каждый изобретает свой тщательно охраняемый протокол взаимодействия со своим устройством через USB, соотвественно на компе у каждого своя программа.
Хотелось бы в идеале такую схему: на компе программа отрабатывает g-код, учитывает все смещения, циклы, переменные, look-ahead и прочие вкусности, а в контроллер гонится уже максимально привязанный к машинным координатам поток данных. В идеале вообще в шагах Всеми измерениями заведует контроллер, данные для пересчетов смещений передает на комп. Как-то так.
Например, программа интерполирует все полиномами, в контроллер гонятся коэффициенты, а уже сама интерполяция происходит "аппаратно" в реалтайме. Вобщем много вариантов.
И, соответственно, ищется более-менее распространенная программа на компе. Сначала увидел EMC, обрадовался. Потом все оказалось грустно - мало того, что все происходит внутри модуля motion, так еще ядро реалтаймовое не поддерживает ничего кроме лпт-порта. А счастье было так возможно ((
mach3 - платный и закрытый. Хотя в ближайшее время помедитирую над плагинами и путем smooth stepper. Хотя озвучено, что в smooth stepper-e нельзя компенсировать люфт, значит и там какая-то принципиальная собака зарыта.
gigamesh - вроде идеально подходит, тем более на форуме раздел рассуждений о протоколах, разделению сущностей и т.п. Но заброшен и никаких новостей ((
Что еще я может быть упустил?
Поясню - каждый изобретает свой тщательно охраняемый протокол взаимодействия со своим устройством через USB, соотвественно на компе у каждого своя программа.
Хотелось бы в идеале такую схему: на компе программа отрабатывает g-код, учитывает все смещения, циклы, переменные, look-ahead и прочие вкусности, а в контроллер гонится уже максимально привязанный к машинным координатам поток данных. В идеале вообще в шагах Всеми измерениями заведует контроллер, данные для пересчетов смещений передает на комп. Как-то так.
Например, программа интерполирует все полиномами, в контроллер гонятся коэффициенты, а уже сама интерполяция происходит "аппаратно" в реалтайме. Вобщем много вариантов.
И, соответственно, ищется более-менее распространенная программа на компе. Сначала увидел EMC, обрадовался. Потом все оказалось грустно - мало того, что все происходит внутри модуля motion, так еще ядро реалтаймовое не поддерживает ничего кроме лпт-порта. А счастье было так возможно ((
mach3 - платный и закрытый. Хотя в ближайшее время помедитирую над плагинами и путем smooth stepper. Хотя озвучено, что в smooth stepper-e нельзя компенсировать люфт, значит и там какая-то принципиальная собака зарыта.
gigamesh - вроде идеально подходит, тем более на форуме раздел рассуждений о протоколах, разделению сущностей и т.п. Но заброшен и никаких новостей ((
Что еще я может быть упустил?
-
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: аппаратный StepGen
С завидной регулярностью генерируются подобные идеи на различных форумах.
И всем кажется, что их идея самая оригинальная.
Ну зачем с нуля начинать. Здесь в соседней теме большая часть работы уже сделана.
http://www.cnc-club.ru/forum/viewtopic.php?f=41&t=1771
И всем кажется, что их идея самая оригинальная.
Ну зачем с нуля начинать. Здесь в соседней теме большая часть работы уже сделана.
http://www.cnc-club.ru/forum/viewtopic.php?f=41&t=1771
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: аппаратный StepGen
Главный вопрос который надо решить - стабильная передача данных раз в servo-thread, т.е. около раз в мс. Мне неоднократно говорили, что есть библиотеки, типа libusb, которые это умеют (передача в изохронном режиме), но никак не могу до них добраться.
-
- Почётный участник
- Сообщения: 112
- Зарегистрирован: 21 апр 2012, 22:52
- Репутация: 5
- Контактная информация:
Re: аппаратный StepGen
для реалтаймового ядра даже просто usb внятного нет. И задача - убрать весь реалтайм с компа.Nick писал(а):Главный вопрос который надо решить - стабильная передача данных раз в servo-thread, т.е. около раз в мс. Мне неоднократно говорили, что есть библиотеки, типа libusb, которые это умеют (передача в изохронном режиме), но никак не могу до них добраться.
-
- Почётный участник
- Сообщения: 112
- Зарегистрирован: 21 апр 2012, 22:52
- Репутация: 5
- Контактная информация:
Re: аппаратный StepGen
Та вот в том-то и дело, что не хочется "еще один контроллер на pic со своей программой, которая работает только под XP"Impartial писал(а):С завидной регулярностью генерируются подобные идеи на различных форумах.
И всем кажется, что их идея самая оригинальная.
Ну зачем с нуля начинать. Здесь в соседней теме большая часть работы уже сделана.
http://www.cnc-club.ru/forum/viewtopic.php?f=41&t=1771
тред почитаю внимательней, вроде там не то что хотелось...
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: аппаратный StepGen
А почему это ядро не умеет с usb работать?
-
- Почётный участник
- Сообщения: 112
- Зарегистрирован: 21 апр 2012, 22:52
- Репутация: 5
- Контактная информация:
Re: аппаратный StepGen
Linux hardware drivers cannot be used from the realtime context, so it is not possible to reuse them. In principle, emc supports two different real-time kernels (rtlinux and rtai) and they have no mutually compatiable hardware drivers. For this reason, hal hardware drivers have been written in the lowest possible terms: inb(), outb() and the like. Realistically, the only real-time kernel we know of people using with emc2 is rtai. For this reason, it is reasonable to consider using higher-level drivers that work with rtai.Nick писал(а):А почему это ядро не умеет с usb работать?
там же говорят, что в принципе есть проект rt-usb, но его никто вживую не видел ))
-
- Почётный участник
- Сообщения: 112
- Зарегистрирован: 21 апр 2012, 22:52
- Репутация: 5
- Контактная информация:
Re: аппаратный StepGen
Прочитал. Понял, что основной путь - это в контроллер засунуть EMC и не парится, так?Impartial писал(а):Здесь в соседней теме большая часть работы уже сделана.
http://www.cnc-club.ru/forum/viewtopic.php?f=41&t=1771
-
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: аппаратный StepGen
Ну можно и так, только довольно сложно. Проще идти по накатанной месе/плуто.
Для ЕМС USB возможен только HS(480 МБит/125ns) и только при условии написания аппаратного драйвера. Правда это касается только сервопривода, завязанного на ХАЛ. Аппаратные блоки степгенов и ПИД можно и на FS запустить. Только смысла в этой затее нет, там получается все впритирку, поэтому никто еще не сделал что нибудь путнее.
Для ЕМС USB возможен только HS(480 МБит/125ns) и только при условии написания аппаратного драйвера. Правда это касается только сервопривода, завязанного на ХАЛ. Аппаратные блоки степгенов и ПИД можно и на FS запустить. Только смысла в этой затее нет, там получается все впритирку, поэтому никто еще не сделал что нибудь путнее.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: аппаратный StepGen
Ну можно же servo период сделать по-больше, скажем 2-5мс, при этом останется плавность управления шаговиками.
-
- Почётный участник
- Сообщения: 112
- Зарегистрирован: 21 апр 2012, 22:52
- Репутация: 5
- Контактная информация:
Re: аппаратный StepGen
Та в том-то и дело, хочу все, что на компе вывести из реалтайма. Вон аналог - тот же "Кулибин". Связь через usb, протокол самобытный, но пилит же.
Рано или поздно плюну, изобрету свой велосипед. Но скорее всего он уже изобретен ))
Impartial, ты меня уже почти убедил в том, чтобы всунуть в контроллер разборку g-кода. А его можно хоть через gprs заливать ))
Потому что рассуждения примерно такие:
самый нижний уровень: шаги транслировать не получится - слишком часто, и очень реалтаймово )
поднимаемся выше - координаты точек с частотой servo_thread, между ними едем по прямой - уже лучше, но все-равно часто слишком. За 1 мс двигатель делает с десяток степов.
еще выше - передаем точки, по которым строится бикубические сплайны, можно вместе с коэффициентами этих сплайнов. Вот на это ходил, облизывался как кот на сметану. Уже был готов дописать несколько пинов в motmod. Но тут сказывается реалтаймовость emc2 - эти точки генерируются и обрабатываются в servo_thread, то есть налету. И любая задержка будет сказываться в дерганности движения.
Конечно, можно сначала накомпилировать этих точек, а потом неспеша их заливать в порт. Но как-то длинно и через левое ухо.
третий уровень - упрощенный g-код. Весь путь разбит на сегменты с постоянным ускорением (либо с ускорением 0, что тоже постоянное). То есть прямолинейное движение с классической трапецией разбивается н атри участка - разгон-равномерное движение-торможение.
При этом в контроллер передаются координаты следующей точки (уже в машинных координатах) и требуемая скорость в конце траектории. Ясен пень, для этого нужна своя программа, которая трансформирует имеющийся g-кодб занимается визуализацией и прочими плюшками. Понятно, что вопросы работы с концевиками и сенсорами инструментов лежат на контроллере, а расчет системы координат - на программе.
ну а раз мы и так разбираем g-код, то тут уже один шаг до того, чтобы вся программа разбиралась на контроллере. В этом случае софт на компе делает только copy file.cnc usb1 с минимальными кнопочками. Вплоть до того, что контроллер виден как mass storage, на который и копируется файл g-кода.
Визуализацию можно желать на экранчике контроллера, тем более что от нее особых изобразительных качеств не требуется - было бы видно, где сейчас фреза и сколько времени осталось.
Вот сижу размышляю над двумя последними подходами. Кто что посоветует?
Вариант mesa/pluto не рассматриваю, в виду несовпадения подходов с моим мировоззрением.
Рано или поздно плюну, изобрету свой велосипед. Но скорее всего он уже изобретен ))
Impartial, ты меня уже почти убедил в том, чтобы всунуть в контроллер разборку g-кода. А его можно хоть через gprs заливать ))
Потому что рассуждения примерно такие:
самый нижний уровень: шаги транслировать не получится - слишком часто, и очень реалтаймово )
поднимаемся выше - координаты точек с частотой servo_thread, между ними едем по прямой - уже лучше, но все-равно часто слишком. За 1 мс двигатель делает с десяток степов.
еще выше - передаем точки, по которым строится бикубические сплайны, можно вместе с коэффициентами этих сплайнов. Вот на это ходил, облизывался как кот на сметану. Уже был готов дописать несколько пинов в motmod. Но тут сказывается реалтаймовость emc2 - эти точки генерируются и обрабатываются в servo_thread, то есть налету. И любая задержка будет сказываться в дерганности движения.
Конечно, можно сначала накомпилировать этих точек, а потом неспеша их заливать в порт. Но как-то длинно и через левое ухо.
третий уровень - упрощенный g-код. Весь путь разбит на сегменты с постоянным ускорением (либо с ускорением 0, что тоже постоянное). То есть прямолинейное движение с классической трапецией разбивается н атри участка - разгон-равномерное движение-торможение.
При этом в контроллер передаются координаты следующей точки (уже в машинных координатах) и требуемая скорость в конце траектории. Ясен пень, для этого нужна своя программа, которая трансформирует имеющийся g-кодб занимается визуализацией и прочими плюшками. Понятно, что вопросы работы с концевиками и сенсорами инструментов лежат на контроллере, а расчет системы координат - на программе.
ну а раз мы и так разбираем g-код, то тут уже один шаг до того, чтобы вся программа разбиралась на контроллере. В этом случае софт на компе делает только copy file.cnc usb1 с минимальными кнопочками. Вплоть до того, что контроллер виден как mass storage, на который и копируется файл g-кода.
Визуализацию можно желать на экранчике контроллера, тем более что от нее особых изобразительных качеств не требуется - было бы видно, где сейчас фреза и сколько времени осталось.
Вот сижу размышляю над двумя последними подходами. Кто что посоветует?
Вариант mesa/pluto не рассматриваю, в виду несовпадения подходов с моим мировоззрением.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: аппаратный StepGen
А почему никто не рассматривает вариант увеличения servo thread??? тот же кулибин, наверняка не раз в мс контроллируется. Ну сделай 10 мс на один такт серво цикла. Все остальное также.
Да, надо будет еще сразу реализовать обработку touch или концевиков, т.е. движение до срабатывания какого-то пина.
Переход с 2-го уровня на третий по твоей классификации сразу очень сильно ограничивает возможности УП. Если в на уровнях 1-2 УП может все что может LinuxCNC, то на 3 уровне это уровень самой простой управляющей программки.
Да, надо будет еще сразу реализовать обработку touch или концевиков, т.е. движение до срабатывания какого-то пина.
Переход с 2-го уровня на третий по твоей классификации сразу очень сильно ограничивает возможности УП. Если в на уровнях 1-2 УП может все что может LinuxCNC, то на 3 уровне это уровень самой простой управляющей программки.
-
- Почётный участник
- Сообщения: 112
- Зарегистрирован: 21 апр 2012, 22:52
- Репутация: 5
- Контактная информация:
Re: аппаратный StepGen
давай прикинем. Это у меня максимальная скорость 600мм/мин, а тут станки есть, которые метра по 4 легко дают ))Nick писал(а):А почему никто не рассматривает вариант увеличения servo thread??? тот же кулибин, наверняка не раз в мс контроллируется. Ну сделай 10 мс на один такт серво цикла. Все остальное также.
за серво-период он проедет уже порядка миллиметра. А по канонам EMC он между серво-тиками едет по прямой, при необходимости - с ускорением. Устроит интерполяция хордами по 1мм?
а что в этом плане умеет необычного linuxcnc?Nick писал(а): Переход с 2-го уровня на третий по твоей классификации сразу очень сильно ограничивает возможности УП. Если в на уровнях 1-2 УП может все что может LinuxCNC, то на 3 уровне это уровень самой простой управляющей программки.
-
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: аппаратный StepGen
Ну если силен в С++ бери этот исходник и дерзай.Steel.ne писал(а):Вот сижу размышляю над двумя последними подходами. Кто что посоветует?
http://www.cnc-club.ru/forum/viewtopic. ... 1&start=40 пост 53.
Потому, что на 10мс уже временной интерполятор работает.Nick писал(а):А почему никто не рассматривает вариант увеличения servo thread??? тот же кулибин, наверняка не раз в мс контроллируется. Ну сделай 10 мс на один такт серво цикла. Все остальное также.
-
- Почётный участник
- Сообщения: 112
- Зарегистрирован: 21 апр 2012, 22:52
- Репутация: 5
- Контактная информация:
Re: аппаратный StepGen
да, нивапрос. Я уже примерно раскурил исходники EMC, принцип ясен, выкинуть os-dependent структуры и вызовы, задействовать аппаратные таймеры и будет счастье )Impartial писал(а):Ну если силен в С++ бери этот исходник и дерзай.Steel.ne писал(а):Вот сижу размышляю над двумя последними подходами. Кто что посоветует?
http://www.cnc-club.ru/forum/viewtopic. ... 1&start=40 пост 53.
а что это за зверь?Impartial писал(а):Потому, что на 10мс уже временной интерполятор работает.Nick писал(а):А почему никто не рассматривает вариант увеличения servo thread??? тот же кулибин, наверняка не раз в мс контроллируется. Ну сделай 10 мс на один такт серво цикла. Все остальное также.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: аппаратный StepGen
Тут надо рассматривать не только скорость, но и ускорение, от него зависит максимальный размер хорды.Steel.ne писал(а):А по канонам EMC он между серво-тиками едет по прямой, при необходимости - с ускорением. Устроит интерполяция хордами по 1мм?
Т.е. скажем ускорение 1000 мм/сек^2, за 0,01 секунды станок с таким ускорением проедет 0,05 мм, значит максимальной сглаживание будет не больше 0.05 мм.
-
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: аппаратный StepGen
Счастье будет недолгим. Если вообще будет. Будет только ощущение, что твоя любознательность и амбиция сыграла с тобой злую шутку.Steel.ne писал(а):да, нивапрос. Я уже примерно раскурил исходники EMC, принцип ясен, выкинуть os-dependent структуры и вызовы, задействовать аппаратные таймеры и будет счастье )
Пустая трата времени. Это из личного опыта IMHO
Планировщик траектории.Steel.ne писал(а):а что это за зверь?
-
- Почётный участник
- Сообщения: 112
- Зарегистрирован: 21 апр 2012, 22:52
- Репутация: 5
- Контактная информация:
Re: аппаратный StepGen
тю. А почему? Не взлетит? или пользы не будет?Impartial писал(а):Счастье будет недолгим. Если вообще будет. Будет только ощущение, что твоя любознательность и амбиция сыграла с тобой злую шутку.Steel.ne писал(а):да, нивапрос. Я уже примерно раскурил исходники EMC, принцип ясен, выкинуть os-dependent структуры и вызовы, задействовать аппаратные таймеры и будет счастье )
Пустая трата времени. Это из личного опыта IMHO
Re: аппаратный StepGen
По-моему все гораздо проще. Надо объединить вот это http://www.fpga4fun.com/CNC.html с этим http://www.cnc-club.ru/forum/viewtopic.php?f=41&t=1771 и все.
-
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: аппаратный StepGen
Почему бы Вам не попробовать?