Чё-ньть выйдет. С Raspberry Pi, BeagleBone и другими одноплатниками получилось. Cофт генерацию как минимум сделаем, но хочется дотянуться до более скоростных режимов. С применением аппаратной части ARM.Argentum47 писал(а):Я вряд ли буду использовать свой оранж для управления станком, и вряд ли второй раз полезу в CNCL, но очень интересно что выйдет, вот и болею за человека. Как грица большое альтернативы, хорошей и разной.
LinuxCNC + Orange Pi (allwincnc)
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: LinuxCNC + Orange Pi
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: LinuxCNC + Orange Pi
Так, вроде, все основные косяки GPIO драйвера я исправил. И провёл парочку небольших тестов с софт генерацией шагов. Результаты можно посмотреть ниже.
Создал новую конфигурацию из 3-х осей. BASE_PERIOD выставил 30000 ns. Процессор пашет на всех 1200 МГц. Одно ядро проца изолировано и на нём запущен бесконечный цикл. Настройки драйвера в HAL файле очень простые:
В результатах анализатора видно, что боль мень стабильная частота шагов - 16-17 КГц. И если я сделаю функцию reset_port как в драйвере LPT порта (parport), то частоту мы поднимем вдвое, т.е. до 34 КГц. Над функцией reset_port я поработаю на неделе и позже выложу результаты. Работу GPIO на вход я чёта забыл протестировать, выложу результаты в следующий раз.
Что я могу сказать, на данном этапе софт генерация шагов у нас удалась. Дальше будет тюнинг этого процесса. Могу поздравить всех кто ждал результатов, и себя в том числе
Создал новую конфигурацию из 3-х осей. BASE_PERIOD выставил 30000 ns. Процессор пашет на всех 1200 МГц. Одно ядро проца изолировано и на нём запущен бесконечный цикл. Настройки драйвера в HAL файле очень простые:
Код: Выделить всё
loadrt hal_gpio_h3 output_pins=3,5,7,8
addf hal_gpio_h3.read base-thread
addf hal_gpio_h3.write base-thread
net xstep => hal_gpio_h3.pin-03-out
net ystep => hal_gpio_h3.pin-05-out
net zstep => hal_gpio_h3.pin-07-outЧто я могу сказать, на данном этапе софт генерация шагов у нас удалась. Дальше будет тюнинг этого процесса. Могу поздравить всех кто ждал результатов, и себя в том числе
-
nevkon
- Почётный участник

- Сообщения: 2471
- Зарегистрирован: 17 июл 2015, 10:25
- Репутация: 310
- Настоящее имя: Константин
- Откуда: Балаково (Саратовская обл.)
- Контактная информация:
Re: LinuxCNC + Orange Pi
Получается уже сейчас при микрошаге 1/8 и ШВП с шагом 5мм получится скорость перемещений порядка 3 м/мин (если я правильно посчитал). Это уже неплохо.MX_Master писал(а):В результатах анализатора видно, что боль мень стабильная частота шагов - 16-17 КГц.
-
fredy79
- Опытный
- Сообщения: 100
- Зарегистрирован: 03 июн 2014, 20:22
- Репутация: 3
- Контактная информация:
Re: LinuxCNC + Orange Pi
А вот такой вопрос, возможно ли к оранж подключить ПЛИС, для генерации шагов и расширения портов ввода вывода, на подобе плат MESA для PC
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: LinuxCNC + Orange Pi
Да, всё верно. 17000 / (8*200/5) * 60 = 3187.5 мм/минnevkon писал(а):MX_Master писал(а):Получается уже сейчас при микрошаге 1/8 и ШВП с шагом 5мм получится скорость перемещений порядка 3 м/мин (если я правильно посчитал). Это уже неплохо.
Можно, пишете драйвер для LCNC и создаёте прошивку для Плисины/МКfredy79 писал(а):А вот такой вопрос, возможно ли к оранж подключить ПЛИС, для генерации шагов и расширения портов ввода вывода, на подобе плат MESA для PC
Наверн, быстрее саму МЕСУ подключить..
Последний раз редактировалось MX_Master 02 ноя 2017, 12:41, всего редактировалось 1 раз.
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: LinuxCNC + Orange Pi
Добавил в драйвер возможность инвертировать сигналы. Функционал аналогичен драйверу LPT порта.
Например, нам нужно инвертировать сигнал от домашнего концевика оси Х. Вместо
надо написать
Теперь пример инвертирования выходного сигнала DIR для оси Z
Вощем, что касается настроек в HAL файле.. Я хочу сделать их абсолютно такими же как для LPT порта. Это значит, что имея готовый рабочий конфиг для материнки с LPT, можно получить конфиг для Orange Pi всего за пару минут. Нужно будет просто заменить строку вида "parport.0." на "hal_gpio_h3.", а также поменять номера пинов на желаемые. Когда драйвер выйдет стабильным, я могу накатать HTML страницу с конвертером HAL файла из LPT в GPIO.
Например, нам нужно инвертировать сигнал от домашнего концевика оси Х. Вместо
Код: Выделить всё
net min-home-x <= hal_gpio_h3.pin-05-inКод: Выделить всё
net min-home-x <= hal_gpio_h3.pin-05-in-notКод: Выделить всё
setp hal_gpio_h3.pin-07-out-invert 1
net zdir => hal_gpio_h3.pin-07-out- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: LinuxCNC + Orange Pi
MX_Master писал(а):Нужно будет просто заменить строку вида "parport.0." на "hal_gpio_h3."
Код: Выделить всё
loadrt hal_gpio_h3 names=parport.0 output_pins=3,5,7,8Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: LinuxCNC + Orange Pi
Добавил в драйвер функцию reset_port как у LPT порта. Ничего не оптимизировал, сделал по аналогии. И тут же появилась главная проблема софт генерации - нехватка ресурсов проца
Нельзя просто так взять и растранжирить время ядра проца. Ведь на этом же ядре крутятся и другие компоненты LCNC. Имея всего 1200 МГц, оптимизировать код нужно очень тщательно. Особенно, если он запускается каждые 30 мкс и чаще. Вощем, как и везде, будем оптимизировать..
Где-то читал, что в Machinekit'ах добавили поддержку многоядерных процессоров. Надо уточнить что там и как.. А в LinuxCNC такого, вроде, нет. Поэтому все компоненты крутится на одном ядре.
P.S. проверил входные сигналы и инвертирование пинов - всё работает
Где-то читал, что в Machinekit'ах добавили поддержку многоядерных процессоров. Надо уточнить что там и как.. А в LinuxCNC такого, вроде, нет. Поэтому все компоненты крутится на одном ядре.
P.S. проверил входные сигналы и инвертирование пинов - всё работает
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: LinuxCNC + Orange Pi
LinuxCNC состоит из нескольких процессов, в некоторых из них работают несколько потоков:MX_Master писал(а):Где-то читал, что в Machinekit'ах добавили поддержку многоядерных процессоров. Надо уточнить что там и как.. А в LinuxCNC такого, вроде, нет. Поэтому все компоненты крутится на одном ядре.
Код: Выделить всё
9179 pts/4 S+ 0:00 linuxcncsvr -ini /home/serg/linuxcnc/configs/laser/laserplane.ini.expanded
9183 pts/4 S+ 0:00 io -ini /home/serg/linuxcnc/configs/laser/laserplane.ini.expanded
9185 pts/4 S+ 0:00 halui -ini /home/serg/linuxcnc/configs/laser/laserplane.ini.expanded
9191 ? SLsl 0:00 /usr/bin/rtapi_app load trivkins
9191 ? SLsl 0:12 /usr/bin/rtapi_app load trivkins
9236 pts/4 S+ 0:00 milltask -ini /home/serg/linuxcnc/configs/laser/laserplane.ini.expanded
9239 pts/4 Sl+ 0:10 /usr/bin/python /usr/bin/gmoccapy -ini /home/serg/linuxcnc/configs/laser/laserplane.ini.expanded
9239 pts/4 Sl+ 0:00 /usr/bin/python /usr/bin/gmoccapy -ini /home/serg/linuxcnc/configs/laser/laserplane.ini.expanded
9239 pts/4 Sl+ 0:00 /usr/bin/python /usr/bin/gmoccapy -ini /home/serg/linuxcnc/configs/laser/laserplane.ini.expanded
9248 pts/4 Sl+ 0:00 /usr/bin/python /usr/bin/gladevcp -x 54526035 -c gmoccapy.override -u override.py override.glade
9248 pts/4 Sl+ 0:00 /usr/bin/python /usr/bin/gladevcp -x 54526035 -c gmoccapy.override -u override.py override.glade
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: LinuxCNC + Orange Pi
Продолжаю работу над выносом софт генерации на отдельное изолированное ядро проца.. Накатал библиотеку для работы с аппаратными таймерами. Соответственно, проверил их работу. Всё работает отлично. Теперь у нас есть точный инструмент для отсчёта времени.
Сейчас меня интересует вопрос - как, всё-таки, полностью убрать хозяйственные операции ядра Linux с изолированного ядра проца? В прошлый раз, когда я проверял ногодрыг на изолированном ядре (в режиме "nohz_full"), было видно, что ядро Linux всё равно отнимает у нас по 15мкс каждую секунду. Эта задержка даёт нам возможность плавно генерировать шаги только до 66 КГц. На частотах выше будет едва заметная пауза каждую секунду. Но хочется её убрать.
Ну так вот, никто, случаем не слышал, есть ли какой-нибудь патч ядра Linux, который полностью отключает хоз. операции на изолированном ядре? Когда читал про "nohz_full", такая инфа где-то проскакивала, но не помню где
Сейчас меня интересует вопрос - как, всё-таки, полностью убрать хозяйственные операции ядра Linux с изолированного ядра проца? В прошлый раз, когда я проверял ногодрыг на изолированном ядре (в режиме "nohz_full"), было видно, что ядро Linux всё равно отнимает у нас по 15мкс каждую секунду. Эта задержка даёт нам возможность плавно генерировать шаги только до 66 КГц. На частотах выше будет едва заметная пауза каждую секунду. Но хочется её убрать.
Ну так вот, никто, случаем не слышал, есть ли какой-нибудь патч ядра Linux, который полностью отключает хоз. операции на изолированном ядре? Когда читал про "nohz_full", такая инфа где-то проскакивала, но не помню где
Пояснения:
Смысл софт генерации шагов на отдельном ядре процессора в том, что мы сразу убиваем двух зайцев.
Освобождаем LinuxCNC от этой трудоёмкой задачи. А также повышаем частоту вывода шагов.
Смысл софт генерации шагов на отдельном ядре процессора в том, что мы сразу убиваем двух зайцев.
Освобождаем LinuxCNC от этой трудоёмкой задачи. А также повышаем частоту вывода шагов.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: LinuxCNC + Orange Pi
Я ж тебе уже выше писал что никак. Проблема в том, что эти "хозяйственные операции" занимают не только ядро, но и шину с памятью, а они на все ядра в единственном экзкмпляре и пока они заняты одним ядром другие ядра курят в сторонке.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: LinuxCNC + Orange Pi
Это я понимаю, будем тестировать всё на местах, в данный момент ответить за базар не могу
Немного покопался в интернетах.. Вижу, что несколько человек ведут работу над патчем под названием "task_isolation". Свежая версия патча добавлена 3 ноября - https://patchwork.kernel.org/patch/10040801/. В описании говорится, что режим "nohz_full" это, всё-таки, не полная изоляция процесса от ядра. Что, в общем-то, и видно из осциллограмм с простым ногодрыгом. Патч призван максимально приблизиться к жёсткой изоляции процесса от прерываний ядром Linux.
Сергей, что вы об этом думаете? Стоит ли двигаться в этом направлении?
Немного покопался в интернетах.. Вижу, что несколько человек ведут работу над патчем под названием "task_isolation". Свежая версия патча добавлена 3 ноября - https://patchwork.kernel.org/patch/10040801/. В описании говорится, что режим "nohz_full" это, всё-таки, не полная изоляция процесса от ядра. Что, в общем-то, и видно из осциллограмм с простым ногодрыгом. Патч призван максимально приблизиться к жёсткой изоляции процесса от прерываний ядром Linux.
Сергей, что вы об этом думаете? Стоит ли двигаться в этом направлении?
- going
- Мастер
- Сообщения: 523
- Зарегистрирован: 29 сен 2013, 20:55
- Репутация: 129
- Настоящее имя: Леонид
- Откуда: г.Киров
- Контактная информация:
Re: LinuxCNC + Orange Pi
Вопросом на вопрос!MX_Master писал(а):как, всё-таки, полностью убрать хозяйственные операции ядра Linux с изолированного ядра проца?
А как можно отловить, что происходит и каким процессом в этот "нехороший момент" ?? И на какой период времени??
Платы: BPI-M3, BPI-A64, OPI-PC2
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: LinuxCNC + Orange Pi
Патч не панацея, нужна ещё соотв. поддержка в железе. Увы, Orange Pi и аналоги - это не тот случай. На этих платформах может помочь только значительное увеличение тактовой частоты процессора, шины, памяти, ну или отказ от программной генерации шагов.MX_Master писал(а):Стоит ли двигаться в этом направлении?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: LinuxCNC + Orange Pi
Можно, канеш, в коде детально посмотреть. Но если коротко - сбор статистики, распределение нагрузки между ядрамиgoing писал(а):Вопросом на вопрос!
А как можно отловить, что происходит и каким процессом в этот "нехороший момент" ?? И на какой период времени??
Для ARM и ARM64 этот патч портирован. Да, и чего-то аппаратного он в явном виде не касается (детально не смотрел). Это, скорее, программная перенастройка поведения ядра Linux. В общем, изучу вопрос детальнее..UAVpilot писал(а):Патч не панацея, нужна ещё соотв. поддержка в железе. Увы, Orange Pi и аналоги - это не тот случай. На этих платформах может помочь только значительное увеличение тактовой частоты процессора, шины, памяти, ну или отказ от программной генерации шагов.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: LinuxCNC + Orange Pi
Нет, не касается, он совсем на другую тему. Я имел в виду некий абстрактный патч по твоей теме, который возможно может быть сделан.MX_Master писал(а):Да, и чего-то аппаратного он в явном виде не касается (детально не смотрел).
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Крафтер
- Мастер
- Сообщения: 211
- Зарегистрирован: 27 мар 2015, 22:25
- Репутация: 61
- Настоящее имя: Андрей
- Откуда: Ростов-на-Дону
- Контактная информация:
Re: LinuxCNC + Orange Pi
Может лучше мой код на какую-нибудь популярную плату STM32F407 портируешь? В принципе он уже рабочий, алюминий пилить хватает
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: LinuxCNC + Orange Pi
Дык, тебе и флаг в руки, здесь никто еще полноценных контроллеров на F4 не делал.Крафтер писал(а):Может лучше мой код на какую-нибудь популярную плату STM32F407 портируешь? В принципе он уже рабочий, алюминий пилить хватает
-
arkhnchul
- Мастер
- Сообщения: 1773
- Зарегистрирован: 01 фев 2016, 13:56
- Репутация: 339
- Откуда: москва
- Контактная информация:
Re: LinuxCNC + Orange Pi
"не делал" в смысле самостоятельно не писал?)
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: LinuxCNC + Orange Pi
А чё, разве кто-то на форуме выкладывал исходники какого-ньть ЧПУ контроллера на STM32F4 ?arkhnchul писал(а):"не делал" в смысле самостоятельно не писал?)