hCNC2 - Контроллер ЧПУ

Контроллеры, драйверы, датчики, управляющие устройства.
Horeen

hCNC2 - Контроллер ЧПУ

Сообщение Horeen »

Ню так мож продолжим "мучения"?

Допустим, есть железяка с интерфейсом RS-232, с встроенной машиной линейной интерполяции на четыре оси.
Протокол примитивный, и состоит почти из одной строки, которую должно посылать ПО в порт:

Код: Выделить всё

H1X1000000Y1000000Z1000000A1000000F00000
Где:
"H1" - код комманды (в данном случае линейная интерполяция)
"X1000000" - координата (в шагах), в которую нужно переместить ось
"F00000" - скорость перемещения (шаг\с)

Строка всегда фиксированной длинны. Заканчивается коммандой Chr(13) (конец строки).
За "ноль" железяка принимает миллион ("1000000"), сделано для избавления от отрицательных значений. Т.е. если нуна на 100 шагов в плюс, то, например, "X1000100", если 100 шагов в минус, то "X0999900" и т.п.
Строка пишется всегда целиком. Если по каким-то из четырёх осей в данной строке перемещаться ненужно, то посылаем её предыдущее значение. Например, нуна на 100 шагов в плюс по X и 50 шагов в минус по Z:

Код: Выделить всё

H1X1000100Y1000000Z0999950A1000000F00000
После отправки строки в порт, железяка перемещает нужные оси и как только завершит этот процесс, выдаст в порт "Target ok". ПО получит, и поймёть что можно слать следующую строку.

Как видно, в протоколе запас по скорости до 99кГц. По длине перемещения в полушаге (если 1мм = 400 шагов) до 5м.

Кинулся своё ПО писать. Пол-проги написал, потом что-то грустно стало ^__^
СтОит с этим всем мучатся? Писака под ПК из мя никакой *__*
spike
Почётный участник
Почётный участник
Сообщения: 358
Зарегистрирован: 08 фев 2010, 01:03
Репутация: 5
Контактная информация:

Re: hCNC2 - Контроллер ЧПУ

Сообщение spike »

Ну скажем так, это скорее не продолжение, а новый проект. Потому как основной задачей LPT-bridge было сглаживание неравномерности импульсов, а здесь это уже соображучий контроллер.

Интересная железка. Насколько я понимаю это продолжение контроллера hCNC2?

Протокол в принципе понятен, можно прикрутить к GIGAMESH`у, не просто, но можно.

Есть вопросы.
  • Скорость, указана в шаг/сек, а это скорость какой оси? той, которая имеет максимальное количество шагов?
  • Сколько таймеров в контроллере? один? с несущей частотой (из входной команды или какой-то другой) или четыре таймера, каждый на свою ось?
  • Насколько я понимаю контроллер обрабатывает текущую команду, выдает подтверждение и ждет следующую. Это плохо, время реакции РС, как нам известно не айс. Нужен буффер, чтобы, если это необходимо контроллер мог бы работать без задержки.
Расскажи как устроена интерполяция (принцип, конечно) и для чего ты ее встроил?
Horeen

Re: hCNC2 - Контроллер ЧПУ

Сообщение Horeen »

Интересная железка. Насколько я понимаю это продолжение контроллера hCNC2?
Нет. Это он, родимый, и есть :)
можно прикрутить к GIGAMESH`у, не просто, но можно.
Не так и сложно. Написал за пару часов прогу, открывающую Ж-код, переделывающую строки в нужный вид (точность, скорость и т.п. берутся из настроек программы), и отправляет в порт пошагово, т.е. нажал кнопку - станок выполнил одну строку ж-кода. Нажал ещё раз - пошла вторая строка, ню и т.п. В твоей же проге всё есть, и страдать так как мне особо ненуна ^^
Я б и сам дальше пошол, но прикладное программирование - не моё *__*
Скорость, указана в шаг/сек, а это скорость какой оси? той, которая имеет максимальное количество шагов?
Да, так и есть.
Сколько таймеров в контроллере? один? с несущей частотой (из входной команды или какой-то другой) или четыре таймера, каждый на свою ось?
В наличии три таймера. Для нужд интерполяции используется один общий.
Насколько я понимаю контроллер обрабатывает текущую команду, выдает подтверждение и ждет следующую. Это плохо, время реакции РС, как нам известно не айс. Нужен буффер, чтобы, если это необходимо контроллер мог бы работать без задержки.
Не думаю, что это столь важный момент. Время посылания строк в порт крайне мало. А промежуток от получения комманды от контроллера и до посылки следующей строки ничтожен на общем фоне работы. Основное время прога будить заниматься празным нечегонеделанием.
К тому же, вся прелесть ещё и в том, что ни контроллер ни комп уже никто никуда не гонить. Если кто-то из них что-то не успеет, то ни пропуска шагов, ни каких-нить других конфузов не произойдёт.
Расскажи как устроена интерполяция (принцип, конечно) и для чего ты ее встроил?
Линейная интерполяция методом оценочной функции. Думаю, не мне тебе рассказывать что это такое :)
Оставалось валом свободной памяти, вот и решил поиграться ^_^
spike
Почётный участник
Почётный участник
Сообщения: 358
Зарегистрирован: 08 фев 2010, 01:03
Репутация: 5
Контактная информация:

Re: hCNC2 - Контроллер ЧПУ

Сообщение spike »

Horeen писал(а):Не так и сложно. Написал за пару часов прогу, открывающую Ж-код, переделывающую строки в нужный вид (точность, скорость и т.п. берутся из настроек программы), и отправляет в порт пошагово, т.е. нажал кнопку - станок выполнил одну строку ж-кода. Нажал ещё раз - пошла вторая строка, ню и т.п. В твоей же проге всё есть, и страдать так как мне особо ненуна ^^
Я б и сам дальше пошол, но прикладное программирование - не моё *__*
Действительно так как ты описал (т.е. конвертер из G-кода в твой формат) сделать несложно, только вот не нужно. Почему? Потому что смысла в такой связке (РС-контроллер) не будет. Во-первых, это только линейная интерполяция, во-вторых, отсутствие разгона/торможения, в-третьих и т.д. - ПО контроллера, ресурсов мало, сложно модифицировать, сложно обновлять, ну и т.п.

Расскажу теперь, как мне видится возможность эффективно использовать твой контроллер.
Допустим есть некая линейная траектория в координатах XY, конвертированная в координаты приводов картезианской машины (привода параллельны осям) - это тоже линейная зависимость. Но во времени это не должны быть линейные зависимости - добавив только лишь разгон/торможение, получим уже совсем кривую:
Func.PNG
Func.PNG (3.62 КБ) 5002 просмотра
Круговая интерполяция в координатах приводов и времени еще более веселая загогулина. А в случае некартезианской машины это вообще непонятные кривули. Еще хотелось бы и lookahead и контроль подачи...
Так вот, предлагается следующее - РС-программа производит расчет подобных сложных траекторий, находит в них кусочную линейность (второй график) и данные об этих кусках передает контроллеру.
Что это дает? Возможность не усложнять жизнь контроллеру, умеет он линейную интерполяцию делать и хорошо. Траффик через порт при кусочно-линейной интерполяции ожидается на пару порядков меньше, чем в случае с LPT-мостом, когда должен передаваться каждый шаг.
Т.о. на РС высвобождается время для подготовки траектории. Контроллер, как ему и положено, обеспечивает равномерность шагов ну и обрабатывает входные данные.
Horeen писал(а):Линейная интерполяция методом оценочной функции.
Прикольно, забил в поисковик (хотя в принципе знаю шо це таке) и нашел пару офигенных книг и лекций по ТАУ. )ay(

А зарегистрироваться религия не позволяет? )bt8(
Horeen

Re: hCNC2 - Контроллер ЧПУ

Сообщение Horeen »

А зарегистрироваться религия не позволяет?
Вобще да ^^ Очень точно подмечено. Если форум не требуить регистрации - то мя не регится никогда. Кстати, благодарю, что на твоём форуме отвечать можно гостем. Таким уже не каждый форум могёть похвастаться... а жаль.
Действительно так как ты описал (т.е. конвертер из G-кода в твой формат) сделать несложно, только вот не нужно. Почему? Потому что смысла в такой связке (РС-контроллер) не будет. Во-первых, это только линейная интерполяция, во-вторых, отсутствие разгона/торможения, в-третьих и т.д. - ПО контроллера, ресурсов мало, сложно модифицировать, сложно обновлять, ну и т.п.
Давай смотреть правде в глаза. Для линейной механики 99% народа обходится только лишь линейной интерполяцией. Разгон и торможение уже почти сделаны, так что, это только вопрос времени, т.к. разумеется, мимо этого мя пройти никак не мог. Про свободные ресурсы и сложность обновлений - не спорю, твоя правда.
Еще хотелось бы и lookahead и контроль подачи...
Думал, что lookahead это такая разновидность оптимизации g-кода, т.е. объединение слишком коротких перемещений в одно, для того, что бы не сбавлять скорость на мелкие разгоны и торможения... ню лана, мя не спец, и особо не вникал. Но если это оно, то этим и так должно заниматься ПО компа.. никто ж не мешает перелопатить строки и координаты как угодно, перед отправкой в железо. А что подразумевается под контролем подачь?
Прикольно, забил в поисковик (хотя в принципе знаю шо це таке) и нашел пару офигенных книг и лекций по ТАУ.
Вобще-то взято из одного тобой же выложенного ПДФа :)

Ню, это всё хорошо.. но в чём суть описываемого тобой способа? Т.е. обрисуй в общих чертах, что будить приходить в железо. Тогда и мя поймёть ^^ Мя не против поменять что-то (или всё).
spike
Почётный участник
Почётный участник
Сообщения: 358
Зарегистрирован: 08 фев 2010, 01:03
Репутация: 5
Контактная информация:

Re: hCNC2 - Контроллер ЧПУ

Сообщение spike »

Horeen писал(а):Вобще да ^^ Очень точно подмечено. Если форум не требуить регистрации - то мя не регится никогда.
)ab( Ладно, как хошь.
Horeen писал(а):Давай смотреть правде в глаза. Для линейной механики 99% народа обходится только лишь линейной интерполяцией.
Давай смотреть правде в глаза. Из тех 99% народа, о которых ты говоришь, 75% вообще не знает для чего им нужен станок и вообще никакого станка нет или есть такой, на котором максимум что художественная гравировка по пластилину получается, другим 20% станок нужен для сверления печатных плат. Думаю что такие товарищи, не ориентир.
Horeen писал(а):Разгон и торможение уже почти сделаны, так что, это только вопрос времени, т.к. разумеется, мимо этого мя пройти никак не мог.
Молодец!
Когда нет разгона с торможением, его хочется, когда он есть - хочется lookahead, потом захочется изменить алгоритм разгона/торможения с трапециеидального на какой нибудь S-образный, ну и т.д. Нет предела совершенству.
Horeen писал(а):Думал, что lookahead это такая разновидность оптимизации g-кода, т.е. объединение слишком коротких перемещений в одно, для того, что бы не сбавлять скорость на мелкие разгоны и торможения...
Примерно так, только не обязательно коротких.
Horeen писал(а):А что подразумевается под контролем подачь?
То, что инструмент должен двигаться с определенной скоростью, в G-коде задается после литеры F (Feedrate).

____________________
Все это я к чему, чтобы сделать конкурентоспособный продукт, нужно делать его если не совершенным, то близким к тому. А запихнуть все эти приблуды в мелкий контроллер... )bl( и в то же время такой контроллер может решить две основные проблемы программного обеспечения под Windows - сложность в получении качественных импульсов и большой, если не сказать огромный, объем данных при передаче всех шагов траектории.
Horeen писал(а):но в чём суть описываемого тобой способа? Т.е. обрисуй в общих чертах, что будить приходить в железо. Тогда и мя поймёть ^^ Мя не против поменять что-то (или всё).
Управляющая программа обрабатывается в РС, в результате генерится траектория приводов во времени, она разбивается на линейные участки и информация об этих линейных участках передается в контроллер. Контроллер должен иметь некий буффер этих кусочков, чтобы не задерживаясь переходить к выполнению следующего. "Кусочки" могут иметь предложенный тобой формат.

Мы тут начали подобную разработку, с несколько иным алгоритмом передачи данных, расскажу попозжа, в отдельной теме.

Кстати, а как насчет USB? Будет контроллер работать через переходник USB-COM?
Гость

Re: hCNC2 - Контроллер ЧПУ

Сообщение Гость »

Давай смотреть правде в глаза. Из тех 99% народа, о которых ты говоришь, 75% вообще не знает для чего им нужен станок и вообще никакого станка нет или есть такой, на котором максимум что художественная гравировка по пластилину получается, другим 20% станок нужен для сверления печатных плат. Думаю что такие товарищи, не ориентир.
Ничего удивительного. Большенство ПО по формированию g-кода вобще умалчивают, что есть такие штуки как G02,G03. И хоть ты трижды идеальный круг нарисуй, всё-равно по умолчанию в полученном g-коде этих комманд не обнаружить (если только намерянно не ткнуть носом ПО, что бы использовало круговую). А конкурентоспособные коммерческие разработки (типа CNC-USB, DeskCNC board) так же от рождения не признают круговую интерполяцию. Не скажу, что им с ихней колокольни виднее.. ладно, ты несомненно прав. В любом случае, в жизни всё бываить, и никогда не знаешь на перёд, что пригодится, а что нет.
Когда нет разгона с торможением, его хочется, когда он есть - хочется lookahead
Да, но опять же, lookahead в любом случае делается на стороне компа, и к контроллеру никакого отношения не имеет. Мя ж изначально не делаить просто прямую трансляцию строк G-кода в контроллер... с траектории можно вертеть как захочется, перед тем, как отправить на выполнение в порт.
То, что инструмент должен двигаться с определенной скоростью, в G-коде задается после литеры F (Feedrate).
Есть такое. В проге и параметр такой в настройках есть (типа, брать скорость из файла, или игнорировать и работать от установленных скоростей в настройках самой управляющей проги). Пока не докрутил (оставил на потом, просто настройка неактивна), но и мне понятно было изначально, что вещь нужная.
Управляющая программа обрабатывается в РС, в результате генерится траектория приводов во времени, она разбивается на линейные участки и информация об этих линейных участках передается в контроллер. Контроллер должен иметь некий буффер этих кусочков, чтобы не задерживаясь переходить к выполнению следующего. "Кусочки" могут иметь предложенный тобой формат.
Если могут иметь предложенный мной формат и при этом приходят линейные данные на перемещение, то чем это вобще отличается от того, что предложил мя в первом посте? Ню, если не брать в расчёт буфер, а то, что траектории обрабатываются на ПК по каким-то своим произвольным алгоритмам мы и так знаем. Вроде то же самое и получается.. просто линейные траектории со скоростью...

Про буфер. Прощитай задержки. Не актуально. Лучше память поберечь (и так в ОЗУ цифры километровые прокручиваются). Допустим, у нас 1000 строк g-кода. Пакет = 40 байт. На 115кБит\с это ~3мс. Пусть время реакции компа на подтверждение контроллера = 1мс (ничего нереального, стоит рассчитывать на гораздо меньшее время). И того, ~4мс паузы между каждым линейным кусочком траектории. Примерно 4сек. задержек на весь может быть многочасовой файл обработки. Много ли это? А 4мс паузу заметит ли кто-нить между командами? Мы ж всё-равно не избавимся от этих 4сек., т.к. в случае буферизации мы просто запихаем сколько-то там строк, потратив, скажем, половину от 4сек. сразу (и так, допустим, дважды за полный цикл работы станка), а без буфера мы просто размажем эти 4сек. равномерно по всему циклу.
Кстати, а как насчет USB? Будет контроллер работать через переходник USB-COM?
Проверено - работает. Вобщем-то, USB и был целью. Но зашить его в тот же МК пока руки-крюки, а положить на плату конвертер типа FTxxx - дорого. Вот и взял за основу RS-232 (причём, для удешевления - именно на бросовых транзисторах, а не на MAX). А там уже хоть в COM втыкай, хоть через любой USB-COM конвертер.

Кстати да, разумеется думал над тем, что в контроллере можно реализовать какой-нить уже используемый последовательный протокол. Но тот же DeskCNC хранит тайну протокола под страхом смерти :) MaxStepper от KCam слишком мутный и запутанный сам по себе. Вот нашёл приличный и простой протакол, с уже написанным ПО - cncdudez.. вшил бы его для опытов, но там контроллер на USB, и родное ПО общается с ним через хид-устройство, а не через RS.. т.е. никак не заюзать.
Horeen

Re: hCNC2 - Контроллер ЧПУ

Сообщение Horeen »

Это мя был.. вот он - минус от нерегания ^^ Но мне простительно.. ночь не спал, хожу как зомбяка *__*
Мы тут начали подобную разработку, с несколько иным алгоритмом передачи данных, расскажу попозжа, в отдельной теме.
Ню так давай и дождёмся вашего алгоритма. Мож он более оптимальным окажется ^^
Мне даже легче будить подстроить железо под уже созданный, рабочий, и хорошо расписанный алгоритм... как гриться - покажи мне, что выдаёть твоя прога "в попугаях" и мя подстроиться под любой алгоритм. Это всё ж удобнее, что бы ты занимался своим делом, а не подстраивался под моё железо. Всё, что нужно - это толковый манускрипт по протоколу (можно в картинках для самых маленьких станкостроителей) :)
spike
Почётный участник
Почётный участник
Сообщения: 358
Зарегистрирован: 08 фев 2010, 01:03
Репутация: 5
Контактная информация:

Re: hCNC2 - Контроллер ЧПУ

Сообщение spike »

Horeen писал(а):Большенство ПО по формированию g-кода вобще умалчивают, что есть такие штуки как G02,G03. И хоть ты трижды идеальный круг нарисуй, всё-равно по умолчанию в полученном g-коде этих комманд не обнаружить (если только намерянно не ткнуть носом ПО, что бы использовало круговую).
Вообще-то использовать или нет определенные виды интерполяции указывается в постпроцессоре для конкретной Ч[ере]ПУ[шки]. Я изначально ориентировался на постпроцессоры Fanuc, а уж они-то точно толк знают в энтом деле )bs( . Ну да ладно, это дело вкуса... ©Барбос...
Horeen писал(а):Если могут иметь предложенный мной формат и при этом приходят линейные данные на перемещение, то чем это вобще отличается от того, что предложил мя в первом посте? Ню, если не брать в расчёт буфер, а то, что траектории обрабатываются на ПК по каким-то своим произвольным алгоритмам мы и так знаем. Вроде то же самое и получается.. просто линейные траектории со скоростью...
А ничем, собственно и не отличаются, кроме того, что следующий кусок нужно начинать выполнять сразу же после предыдущего, без всякой задержки. Для этого буффер и нужен, и, конечно же, никакой паузы внутри одного кадра быть не могет.
Может я не слишком понятно объясняю идею, давай еще раз попробую:
Итак, мы видим что одними прямыми не обойдешься. А в контроллере у нас есть линейная интерполяция, так давай все что кривое (а кривое реально все, во времени) разбивать на отрезки прямых. Т.е. кадр G0 или G1 будет представлять из себя эдакую (не особо маленькую) пачку пакетов твоего протокола, некоторые отрезки короткие (на разгонах/торможениях), а некоторые длинные (см второй график), там, где нужная скорость уже набрана, а некоторые могут быть совсем короткими, буквально два-три шага. Это может быть, ну скажем, 300мкс, а то и меньше.
Понимаешь, зачем буффер?
Даже между кадрами паузу делать нельзя - пауза на общение компа с контроллером - это значит что моторы в этот момент должны быть остановлены. Сам алгоритм (это даже не алгоритм, а система) LookAhead, предназначен для минимизации остановок моторов между кадрами. Т.е. если будут задержки, весь его смысл будет потерян.
Я могу предположить что это, возможно, выше сил маленького контроллерчика, выполнять интерполяцию, рулить моторами и общаться с компом. Тут уж надо взвешивать что реально сделать а что нет. Ну и как-то корректировать разработку.
Horeen писал(а):Ню так давай и дождёмся вашего алгоритма.
Мы подумаем, можт действительно такую систему лучше использовать, сразу скажу, она более прогрессивна, но и более сложна.
Horeen

Re: hCNC2 - Контроллер ЧПУ

Сообщение Horeen »

кадр G0 или G1 будет представлять из себя эдакую (не особо маленькую) пачку пакетов твоего протокола, некоторые отрезки короткие (на разгонах/торможениях), а некоторые длинные (см второй график), там, где нужная скорость уже набрана, а некоторые могут быть совсем короткими, буквально два-три шага. Это может быть, ну скажем, 300мкс, а то и меньше.
Понимаешь, зачем буффер?
Тогда сталкнёмся с необходимостью уплотнения пакетов.. т.к. буфер выделить можно лишь под десяток отрезков, не больше (в нынешнем виде протакола). Можно и на 32ю мегу перейти, тогда три десятка уместится, да вот только, здаётся мне, что этого всё-равно явно мало будить. Да и ещё чуть-чуть пошатнётся бюджетность железяки..
Вобще, была мысля наоборот, если что-то и получится, выкинуть с платы LPT и запихать прошивку в 8ю мегу. Получилось бы совсем повторяемо, дёшево и миниатюрно, с теми же параметрами и функционалом. Производительность в любом случае у трёх этих МК одинакова (и избыточна в данный момент), а если с буфером особо не разгонятся (придумать способ по-экономичнее), то и памяти останется завались (и флэш и озу).
LookAhead, предназначен для минимизации остановок моторов между кадрами. Т.е. если будут задержки, весь его смысл будет потерян.
От, это ясно и доходчиво!
Мы подумаем, можт действительно такую систему лучше использовать, сразу скажу, она более прогрессивна, но и более сложна.
Это пока "мысли в головах" или уже где-то началось обсуждение? Всмысле, вашего алгоритма, над которым вы работаете.
spike
Почётный участник
Почётный участник
Сообщения: 358
Зарегистрирован: 08 фев 2010, 01:03
Репутация: 5
Контактная информация:

Re: hCNC2 - Контроллер ЧПУ

Сообщение spike »

Horeen писал(а):...придумать способ по-экономичнее
Тоже можно, но, возможно, упремся в производительность - использовать не линейную интерполяцию, а интерполяцию полиномами второй- , третьей- ну и т.д степеней или сплайн-интерполяцию )bm( Это вообще просто писк был бы. Но, думается, ниасилим мы с наскоку такое дело, надо готовиться.
Horeen писал(а):Это пока "мысли в головах" или уже где-то началось обсуждение? Всмысле, вашего алгоритма, над которым вы работаете.
Да не то чтоб в головах, пообсуждали в оффлайне, на бумажке... Выложу..., ты особо не надейся, прорыва там нету, протокол более тупой чем с линейной интерполяцией и требующий больше траффика.
Гость

Re: hCNC2 - Контроллер ЧПУ

Сообщение Гость »

ты особо не надейся, прорыва там нету, протокол более тупой чем с линейной интерполяцией и требующий больше траффика.
Это неважно. За-то можить он окажется проще и быстрее реализуем на уровне МК.
упремся в производительность - использовать не линейную интерполяцию, а интерполяцию полиномами второй- , третьей- ну и т.д степеней или сплайн-интерполяцию )bm( Это вообще просто писк был бы. Но, думается, ниасилим мы с наскоку такое дело, надо готовиться.
Угу. Начнём с простого.. пока ждём-с ваших мыслей по вашему протаколу в он-лайне, мя сядить за круговую интерполяцию. Выберу что-нить попроще.. опять же, хоть какое-то занятие :)
Horeen

Re: hCNC2 - Контроллер ЧПУ

Сообщение Horeen »

У моего способа оказался недостаток. Посчитал, вышло что время обработки и выдачи шага одной оси равно ~80мкс (140 для трёх осей). И того - 8кГц степов сразу всеми осями на 16мГц ядра. Вобщем-то, для шага-полушага это нормально, но на микрошаг уже не будить хватать. О как. Нуна как-то ускоряться. Или выносить интерполяцию за пределы МК, или сначала производить интерполяцию всей текущей линии, а потом степать с любой нужной частотой. В данный момент у мя пересчёт данных непосредственно перед каждым следующим шагом моторов.
spike
Почётный участник
Почётный участник
Сообщения: 358
Зарегистрирован: 08 фев 2010, 01:03
Репутация: 5
Контактная информация:

Re: hCNC2 - Контроллер ЧПУ

Сообщение spike »

Horeen писал(а):У моего способа оказался недостаток. Посчитал, вышло что время обработки и выдачи шага одной оси равно ~80мкс (140 для трёх осей). И того - 8кГц степов сразу всеми осями на 16мГц ядра. Вобщем-то, для шага-полушага это нормально, но на микрошаг уже не будить хватать. О как. Нуна как-то ускоряться.
А оптимизировал все? Алгоритм вылизан?

Кстати, хотел спросить, твоя реализация как шагает, ступеньками или есть одновременные шаги?
Steps.PNG
Steps.PNG (2.94 КБ) 4963 просмотра
Horeen писал(а):выносить интерполяцию за пределы МК
А с какой скоростью реально данные передавать-принимать?
Если чисто степы слать в порт 115кбит/с, (пакеты по 8бит, это минимум, 4 оси) => ~15 кГц - тоже не сильно айс, надо и частоту ядра поднимать и скорость обмена увеличивать.
Horeen

Re: hCNC2 - Контроллер ЧПУ

Сообщение Horeen »

А оптимизировал все? Алгоритм вылизан?
Разумеется нет. Там есть ещё к чему приложиться.
реализация как шагает, ступеньками или есть одновременные шаги?
Ступеньками. Переделаю на днях. Трохи времени выиграется на этом.
А с какой скоростью реально данные передавать-принимать?
На кварце нестандартной частоты вполне можно на 115.
Если чисто степы слать в порт 115кбит/с, (пакеты по 8бит, это минимум, 4 оси) => ~15 кГц - тоже не сильно айс, надо и частоту ядра поднимать и скорость обмена увеличивать.
Вполне реально поднять частоту ядра до 20мГц, но так как разница не большая, а глюков можно наловить кучу, то не вариант. Хотя работать будить. Можно заюзать другие интерфейсы в МК (некоторые до 250кБит\с), но это сложнее и можно утерять совместимость с КОМ(ЮСБ).

Можно вынести интерполятор на комп, и пойти по пути KCam и cncdudez. Т.е. передавать не шаг\направление, а колличество шагов всех осей, направление, скорость ведущей оси, ускорение\торможение. При таком способе передаём одну длинную строку и станок поехал (уже буквально с любой частотой).
Horeen

Re: hCNC2 - Контроллер ЧПУ

Сообщение Horeen »

Мдя.. кое-какое продвижение..
Частично решён вопрос по скорости работы. Так как в большенстве случаев наибольшая скорость перемещения нужна при отработке G0, то частота выработки степов по этой инструкции уже доведена до 50кГц (в ущерб прямолинейности), можно и больше, т.к. ограничено искуственно. Думается, неплохое решение, при учёте, что по G0 не особо важно как именно ехать, абы приехать и побыстрее )ab( :)

Параллельно всплыла "бородатая" мысля..
Можно взять МК, на плате с которым будить LPT и COM разъёмы. Питаться будить опять же от COM. В реале, уверенно работать по СОМ можно на скорости 115кБит\с, что даст ~10кГц степов на выходе. А современные чипы RS-232 в мамках давно уже могуть до пару мегабит трансмиттить )bs( Есть повод ходя бы проверить теорию на практике. Ты в своей проге в обычном случае отправляешь байт через определённые промежутки времени в LPT на 378й адрес (к примеру). Можно попробывать отправлять тот же байт в СОМ, а МК его переколбасит с последовательного в параллельный, и сунить себе на выход LPT. Идея проста тем, что ничего в проге доделывать не нуна, просто отправлять байт по другому адресу. Мне, например, не юзающему микрошаг, 10кГц выше головы. А если можно работать не имея LPT на мамке, то это уже очень нужно. ^__^
Цена вопроса - голый МК начального уровня (хоть бы и tiny2313) и два разъёма (LPT+COM) )ad(

Способ прост, но его не юзають по двум очевидным причинам:
- не решает проблему "идеальности" следования степов по времени, при сильной загрузке CPU компа.
- низкая частота степов, врядли пригодна для микрошага более 1\4 (а это опять же на 115кБит\с, можно ж и больше!)

Не желаешь, смеха ради, проверить теорию? o_O Нуна ж хоть что-то делать.. а-то стали намертво в этом направлении *__*
Железяка есть, станок есть, прошивку под свою железяку за минуту напишу, т.к. всё ещё проще, чем в теме malvin-а.

В принципе, смысл в том, что бы если и не выдавать идеальные временные интервалы, то хотябы отвязаться от LPT (сколько людей мучается с новыми компами, у которых даже один COM - редкость, не говоря уже про LPT).
spike
Почётный участник
Почётный участник
Сообщения: 358
Зарегистрирован: 08 фев 2010, 01:03
Репутация: 5
Контактная информация:

Re: hCNC2 - Контроллер ЧПУ

Сообщение spike »

Т.е. это будет переходник USB(COM)-LPT, так? Ну вообще, конечно, дело нужное. Думаю что попробовать стоит. Факультативно )ad(
Да, и для этого нужно сделать dll-ку с выводом в COM, и функциями In32, Out32, как в inpout32.dll. Такой девайс, кстати, работал бы не только с GIGAMESH`ем, а еще и с другими софтинами, которые ее используют. Подменяй ее и все.
Horeen

Re: hCNC2 - Контроллер ЧПУ

Сообщение Horeen »

Т.е. это будет переходник USB(COM)-LPT, так?
Нет.. и то, что будите делать вы - тоже нет. USB не подойдёт для засылания пакетов данных с определённой скважностью. Через USB пролезут только или данные для дальнейшей интерполяции в МК, или один большой пакет шагов+скорости в буфер МК.
Да, и для этого нужно сделать dll-ку с выводом в COM, и функциями In32, Out32, как в inpout32.dll.
Главное, про выбор номера СОМ-порта и скорости обмена не забыть...
Смогёшь? Сами-то мы не местные... =^_^=
Видел внутрянку inpout32.dll раньше. Строчек 10 в первой версии.. подправил бы, да в делфях не бум-бум *__*

Раскрыл тайну "быстрошагания" коммерческих девайсов, аналогично интерполирующих внутри внешнего МК.. никак понять не мог.. почему у них раза в три быстрее?! А потом только заметил, что у них сплошь и рядом ПИКи на 40мГц :) Вот и весь секрет..
spike
Почётный участник
Почётный участник
Сообщения: 358
Зарегистрирован: 08 фев 2010, 01:03
Репутация: 5
Контактная информация:

Re: hCNC2 - Контроллер ЧПУ

Сообщение spike »

Horeen писал(а):Нет.. и то, что будите делать вы - тоже нет. USB не подойдёт для засылания пакетов данных с определённой скважностью. Через USB пролезут только или данные для дальнейшей интерполяции в МК, или один большой пакет шагов+скорости в буфер МК.
Т.е. эта девайсина не будет работать через переходник USB-COM?
Horeen писал(а):Смогёшь? Сами-то мы не местные... =^_^=
Сделаю, не буду обещать что быстро - много другой работы, хотя это нужно будет делать по любому. Не думаю что большую сложность составит.
Horeen

Re: hCNC2 - Контроллер ЧПУ

Сообщение Horeen »

Т.е. эта девайсина не будет работать через переходник USB-COM?
Угу. USB - хитрый интерфейс. Его цель - доставить данные адресату, а не соблюсти время доставки. Проще говоря, одиночный пакет шлётся с огромной и постоянной скоростью, но отправляется только при начале следующего сеанса обмена хост-точка. Это значить, что если отправить сразу вдогонку второй пакет байтов, то он будить ждать следующего сеанса связи. Периодичность сеансов вроде постоянна, и составляить 1кГц для low-speed реализации USB (а вроде только такие и применительны к софтовой реализации интерфейса USB на уровне МК). Возможно, МК с аппаратным интерфейсом как-то по другому дейвствують.. но опять же, цена их несоизмерима. С различного рода переходниками та же беда.
Вобщем, или обязательная буферизация при прямопотоке (как у malvin-а), или обработка линии уже в МК. Впрочем, неудивительно, что все коммерческие решения базируются на втором варианте..

Ню и опять же.. всё написанное выше - это то, как мя понял суть работы с USB (относительно МК). Хорошо бы, чтоб мя чего-то недопонял... *__*
Ответить

Вернуться в «Электроника»