Что если G-коды зашить в контроллер?
Что если G-коды зашить в контроллер?
Собственно с этой темой я столкнулся недавно.
Умею программировать AVR. Хочу на основании AVR собрать свой станочек CNC. Хочу обсудить идею. Вопрос собственно в выбранном подходе.
Вся логика работы разбита на два уровня:
Первый уровень - контроллер получает G-команды (в виде текста с COM порта) расшифровывает и расшифрованные по шагам и добавляет в очередь на выполнение контроллерами двигателялей.
Второй уровень - контроллеры двигателей. Получает команды вида (шаг вправо/влево), выполняет его, и докладывает о готовности выполнить следующую команду.
Умею программировать AVR. Хочу на основании AVR собрать свой станочек CNC. Хочу обсудить идею. Вопрос собственно в выбранном подходе.
Вся логика работы разбита на два уровня:
Первый уровень - контроллер получает G-команды (в виде текста с COM порта) расшифровывает и расшифрованные по шагам и добавляет в очередь на выполнение контроллерами двигателялей.
Второй уровень - контроллеры двигателей. Получает команды вида (шаг вправо/влево), выполняет его, и докладывает о готовности выполнить следующую команду.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Что если G-коды зашить в контроллер?
Идея хорошая, но не простая.
С интерпретацией Gкода есть много трудностей. Да, простой код интерпретировать можно, но и та не обойдется без большой кучи параметров (скорости по осям, ускорения, скругления углов, look ahead, и заметь я даже не говорю об отступах, системах координат и прочей экзотике).
ИМХО было бы гораздо эффективнее начать с простого контроллера, который мог бы искать нули осей, и выполнять "процессированный Gкод". Т.е. прогоняем Gкод через EMC2 и на выходе записываем состояние управляющих выходов. А лучше даже такой формат: (состояние выходов, время до следующего изменения). И потом просто повторяем все эти состояния на контроллере.
Насколько это реально?
И сколько будет занимать такая управляющая программа места на карте памяти?
С интерпретацией Gкода есть много трудностей. Да, простой код интерпретировать можно, но и та не обойдется без большой кучи параметров (скорости по осям, ускорения, скругления углов, look ahead, и заметь я даже не говорю об отступах, системах координат и прочей экзотике).
ИМХО было бы гораздо эффективнее начать с простого контроллера, который мог бы искать нули осей, и выполнять "процессированный Gкод". Т.е. прогоняем Gкод через EMC2 и на выходе записываем состояние управляющих выходов. А лучше даже такой формат: (состояние выходов, время до следующего изменения). И потом просто повторяем все эти состояния на контроллере.
Насколько это реально?
И сколько будет занимать такая управляющая программа места на карте памяти?
-
- Зачётный участник
- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6192
- Откуда: Казахстан.
- Контактная информация:
Re: Что если G-коды зашить в контроллер?
Такое умеешь программировать STM32F103ZET6:vastok писал(а):Умею программировать AVR. Хочу на основании AVR собрать свой станочек CNC. Хочу обсудить идею. Вопрос собственно в выбранном подходе.
http://www.ebay.com/itm/STM32-STM32F103 ... 2c5ac79979
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
-
- Зачётный участник
- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6192
- Откуда: Казахстан.
- Контактная информация:
Re: Что если G-коды зашить в контроллер?
На ARM пытаются что то сорудить http://forums.reprap.org/read.php?12,23458,page=2
и чт т полчается http://forums.reprap.org/file.php?12,fi ... NC_LCD.jpg
и чт т полчается http://forums.reprap.org/file.php?12,fi ... NC_LCD.jpg
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Re: Что если G-коды зашить в контроллер?
Не знаю что там на выходе от EMC2 получается (где бы это можно было бы прочесть?). Предполагаю, что управляющие сигналы. Соответственно, если управляющие сигнал байт (или два). Сколько их может придти в секунду? (где-то встречал цифру, но не факт, в 60к). Соответственно имеем ~3,6/7 мегабайта в минуту. Теоретически при скорости 60к. их можно читать с ком порта, забивать в очередь и выполнять.Nick писал(а):Идея хорошая, но не простая.
С интерпретацией Gкода есть много трудностей. Да, простой код интерпретировать можно, но и та не обойдется без большой кучи параметров (скорости по осям, ускорения, скругления углов, look ahead, и заметь я даже не говорю об отступах, системах координат и прочей экзотике).
ИМХО было бы гораздо эффективнее начать с простого контроллера, который мог бы искать нули осей, и выполнять "процессированный Gкод". Т.е. прогоняем Gкод через EMC2 и на выходе записываем состояние управляющих выходов. А лучше даже такой формат: (состояние выходов, время до следующего изменения). И потом просто повторяем все эти состояния на контроллере.
Насколько это реально?
И сколько будет занимать такая управляющая программа места на карте памяти?
Вопрос где взять описание "простого процессированного кода", которые EMC2 посылает на контроллер? А там можно было бы и посмотреть как его обработать.
Re: Что если G-коды зашить в контроллер?
Это отладочная плата. К тому же для АRM, а не AVR.aftaev писал(а):Такое умеешь программировать STM32F103ZET6:vastok писал(а):Умею программировать AVR. Хочу на основании AVR собрать свой станочек CNC. Хочу обсудить идею. Вопрос собственно в выбранном подходе.
http://www.ebay.com/itm/STM32-STM32F103 ... 2c5ac79979
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Что если G-коды зашить в контроллер?
Его можно сделать любым. Самое просто решение - в EMC2 есть компонент sampler, он может записывать состояния выходов с заданной частотой. Потом прогоняем файл через простенький скрипт, который пакует его, удаляя лишние интервалы времени.vastok писал(а):Вопрос где взять описание "простого процессированного кода", которые EMC2 посылает на контроллер? А там можно было бы и посмотреть как его обработать.
Да на выходе скорее всего будет что-то около байта. Да, частота может быть до 60К, но на средних компьютерах она не превышает 30К, плюс далеко не факт, что двигатели будут работать с такой частотой постоянно. Обычно есть рабочих ход, который медленнее холостого.
Тогда смысла нет делать отдельный контроллер, можно прямо на станок пихать . Основная идея, иметь маленький контроллер, который сможет работать автономно от компьютера. Втыкаем в него флешку/карту памяти, нажимаем старт и поехали!vastok писал(а):Теоретически при скорости 60к. их можно читать с ком порта, забивать в очередь и выполнять.
Как вариант, можно в контроллере реализовать функции stepgen, pwmgen, pid и encoder, как в hostmot2 на MESA (их можно взять прямо из ее прошивки). А программу записывать в виде управляющих сигналов на эти компоненты. При этом частота этих управляющих сигналов гораздо меньше, обычно 1кГц. В самом EMC2 все происходит точно также, компонент stepgen 1000 (servo period) раз в секунду получает команду на перемещение в заданное положение. И потом на основе заданных заранее параметров оси генерирует сигналы step/dir.
В простейшем случае будет нужен только stepgen.
-
- Зачётный участник
- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6192
- Откуда: Казахстан.
- Контактная информация:
Re: Что если G-коды зашить в контроллер?
Nick меня тут недавно в типографию позвали станочек запустить. Стоит значит там китайский пульт в котором нстройки только степ на мм и ускорение. Станок может ездитьсразу только по ОДНОЙ оси. Втыкаешь флешку, выбираешь файлик и поехал он работать. Нетникаких скруглений,ШИМ ипрочих наворотов. Этого вполне хватает. Эт я все к тому что тебя на сложности тянет.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Что если G-коды зашить в контроллер?
Одно дело для типографии, на плоттере резать, другое, узоры гравировать, третье железяку резать. А решение хочется универсальное. Один фиг, программу готовить специально придется - только G0 и G1, никакой лишней ерунды, и прочее. Так почему бы сразу не сделать все очень хорошо ? Я думаю, пропустить через EMC2 и дополнительный скриптик этот код можно будет одной кнопкой.
Re: Что если G-коды зашить в контроллер?
Нужно не только записывать изменения выходов, но и знать как его интерпритировать. Допустим на выходе (LPT) появился сигнал 0b00011001. Что должен делать станок? Шагнуть вправо, влево, включить инструмент?Nick писал(а): Его можно сделать любым. Самое просто решение - в EMC2 есть компонент sampler, он может записывать состояния выходов с заданной частотой.
Где прочесть как понимать эти байты? Нужен формат.Nick писал(а): Да на выходе скорее всего будет что-то около байта.
Тогда изменения на порте будут реже. Достаточно считать эти изменения и вставить между ними "пустые команды". Опять же вопрос тот же: какие это команды и как их интерпритировать?Nick писал(а): Да, частота может быть до 60К, но на средних компьютерах она не превышает 30К, плюс далеко не факт, что двигатели будут работать с такой частотой постоянно. Обычно есть рабочих ход, который медленнее холостого.
Если получится принять команды с порта, то считать их с флешки эти же команды не намного сложнее. Нужно понять как должен реагировать контроллер на ту или иную команду.Nick писал(а): Тогда смысла нет делать отдельный контроллер, можно прямо на станок пихать . Основная идея, иметь маленький контроллер, который сможет работать автономно от компьютера. Втыкаем в него флешку/карту памяти, нажимаем старт и поехали!
Не знаком с этой темой. Для меня это новые слова. Нужно читать, искать рыть.Nick писал(а): Как вариант, можно в контроллере реализовать функции stepgen, pwmgen, pid и encoder, как в hostmot2 на MESA (их можно взять прямо из ее прошивки).
А что на выходе?Nick писал(а): В простейшем случае будет нужен только stepgen.
Наверно, мне придется сначала изучить тему EMC2, чтоб понять что эта программа дает на выходе и как ее использовать.
Re: Что если G-коды зашить в контроллер?
На G00, G01, G02, G03 в интернете есть алгоритмы. Их не сложно зашить в контроллер. Действительно пугает многообразие этих Gxx. Поэтому набор команд для станка получится урезанный. Кроме того G-команды придется где-то получать. Видимо это какой-то постпроцессор, который не знает, что на моем станке поддерживаются только эти команды.Nick писал(а):Одно дело для типографии, на плоттере резать, другое, узоры гравировать, третье железяку резать. А решение хочется универсальное. Один фиг, программу готовить специально придется - только G0 и G1, никакой лишней ерунды, и прочее. Так почему бы сразу не сделать все очень хорошо ? Я думаю, пропустить через EMC2 и дополнительный скриптик этот код можно будет одной кнопкой.
Re: Что если G-коды зашить в контроллер?
Достаточно просто выдумать свой набор простых команд. Например:
0b00000001 - шаг вправо по оси Х.
0b00000010 - шаг влево по оси Х.
... и т.д.
Но ведь замучаешься программировать. Проще использовать уже готовый продукт, чтоб генерировать команды. Но для этого нужно знать набор этих команд. Чтоб научить свой контроллер этим командам. G-коды описаны, но их слишком много. К тому же они как бы на "высоком уровне" для контроллера. А другого описания команд я не встречал.
0b00000001 - шаг вправо по оси Х.
0b00000010 - шаг влево по оси Х.
... и т.д.
Но ведь замучаешься программировать. Проще использовать уже готовый продукт, чтоб генерировать команды. Но для этого нужно знать набор этих команд. Чтоб научить свой контроллер этим командам. G-коды описаны, но их слишком много. К тому же они как бы на "высоком уровне" для контроллера. А другого описания команд я не встречал.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Что если G-коды зашить в контроллер?
Из EMC2 голый формат будет "выход1 выход2 ... выходn", из нее простейшим скриптом делаем любой необходимый формат. Например в двоичке состояние выходов 010100101 + задержка в нс до следующего изменения. Контроллер должен просто выводить все построчно на свои выводы через определенные промежутки времени. тогда всю настройку станка нужно делать только внутри EMC2, а контроллер будет чем-то вроде транслятора/удлинителя (в пространстве и главное во времени ).vastok писал(а):Да на выходе скорее всего будет что-то около байта.
Где прочесть как понимать эти байты? Нужен формат.
Это простые схемы (программки) реализующие управление простыми устройствами.vastok писал(а):Не знаком с этой темой. Для меня это новые слова. Нужно читать, искать рыть.
stepgen - управляет шаговым двигателем. При инициализации задаются параметры оси (скорость, ускорение) и двигателя и контроллера. Получает на вход заданное положение. На выходе выдает сигналы step/dir.
pid - реализует PID регулятор, на вход получает требуемое положение и обратную связь от оси, на выходе команда скорости или усилия для драйвера.
encoder - обрабатывает сигналы квадратурного энкодера.
pwmgen - генерирует ШИМ. На входе float на выходном пине ШИМ.
Сигналы step/dir.vastok писал(а):А что на выходе?
Это не очень хорошо, т.к. не будет синхронизации по осям. Лучше одной командой описывать сразу все выходы.Достаточно просто выдумать свой набор простых команд. Например:
0b00000001 - шаг вправо по оси Х.
0b00000010 - шаг влево по оси Х.
-
- Зачётный участник
- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6192
- Откуда: Казахстан.
- Контактная информация:
Re: Что если G-коды зашить в контроллер?
Почти на каждом форуме "делают" такие пультики и дальше разговоров не пошло. Если бы начил с прстого, уже сделали и поом доробатываи, а так аппетит возрасат и никто еще не сделал чтоб хоть одна ось ездилаNick писал(а):Так почему бы сразу не сделать все очень хорошо ?
Нет никакого формата. vastok ты понимаешь как шаговики ездят?vastok писал(а):Где прочесть как понимать эти байты? Нужен формат.
Шаговики приимают 2 сигнала step (шаги -вращение) и Dir - направление.
В программе ЕМС или Мач конфигурирутся на каком выводе LPT будет step. а где Dir. Куды мне удобно туды и прикручу сигналы.
Вот пример:
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Re: Что если G-коды зашить в контроллер?
Вот тут посмотрите http://radiokot.ru/circuit/digital/automat/25/ + на их форуме активно обсуждается эта статья