Внедряем LinuxCNC в массы

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
xenon-alien
Почётный участник
Почётный участник
Сообщения: 4506
Зарегистрирован: 01 янв 2013, 13:13
Репутация: 920
Настоящее имя: Daniel
Откуда: Закарпатская обл. Украина
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение xenon-alien »

antoxa-kylibin писал(а): со стороны linuxcnc, потому и обратная связь нужна и pid и танцы с бубном чтобы это настроить ещё....
А как же PID в самой серве? Отключается при управлении по скорости с ЛЦНЦ?
Аватара пользователя
antoxa-kylibin
Мастер
Сообщения: 786
Зарегистрирован: 22 июн 2017, 13:18
Репутация: 107
Настоящее имя: Антон
Откуда: г. Воронеж
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение antoxa-kylibin »

Нет, сначала pid в серве настраивается, желательно под нагрузкой, а потом уже настраивается в linuxcnc pid...
На самом деле я не очень понимаю как совсем отключить pid в самом серводрайвере, он там по умолчанию нужен, чтобы мотор мог адекватно работать....
alex_sar
Мастер
Сообщения: 1672
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 278
Настоящее имя: Алексей
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение alex_sar »

xenon-alien писал(а): Всё можно, только как ???
ну а энкодер с сервы получится завести в комп? электрически и в hal прописать нужный компонент? не знаю как там в апельсинке это сделано. если получится, дальше могу подсказать всё.
и может лучше тему отдельную? а то автор может обидеться.
Аватара пользователя
antoxa-kylibin
Мастер
Сообщения: 786
Зарегистрирован: 22 июн 2017, 13:18
Репутация: 107
Настоящее имя: Антон
Откуда: г. Воронеж
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение antoxa-kylibin »

Нет, если речь идёт про обратную связь в linuxcnc, то смысл есть ставить оптические линейки на оси и с них заводить сигнал в linuxcnc, а энкодер с мотора в серводрайвер как и должно быть. При этом сначала спец софтом настраивается серводрайвер с установленным мотором на ось станка, чтобы подобрать оптимальные параметры работы привода (pid регулятора, который крутится в серводрайвере), продвинутые привода имеют функцию автонастройки, которая упрощает эту процедуру. А после этого уже переходить к настройке обратной связи в linuxcnc, причём сигналы брать с оптических линеек и их заводить в linuxcnc, дальше для каждой оси в linuxcnc подстраивается pid регулятор, который крутится уже на самом компе в сервоцикле, который в свою очередь задаётся в hal файле (если не ошибаюсь). Длительность сервоцикла можно задать разную, но обычно используется 1кгц (1мс), это оптимально с точки зрения нагрузки на комп и скорости обработки данных. Но если вы измените время сервоцикла, то и pid в linuxcnc придётся заново настраивать.
Если оптических линеек нет и не предусмотрено, то можно эту самую "физическую обратную связь с линеек" заменить на "программную ОС", когда значение заданной позиции связано с значением фактической позиции. По сути программная заглушка, я так это понимаю. В таком случае получаем по факту не замкнутую систему управления на уровне linuxcnc, но программно как бы все замкнуто......
P.S. изложил как я это понимаю......
Аватара пользователя
antoxa-kylibin
Мастер
Сообщения: 786
Зарегистрирован: 22 июн 2017, 13:18
Репутация: 107
Настоящее имя: Антон
Откуда: г. Воронеж
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение antoxa-kylibin »

Ну и так, в дополнение, когда есть реальный датчик обратной связи, который связан непосредственно с самой осью станка, то можно при настройке pid в linuxcnc увидеть реальную картину, что происходит с осью в моменты разгона и торможения, какая ошибка рассогласования на каких участках движения бывает и тем самым добиться нужной точности следования оси. Я к тому что можно увидеть при каких ускорениях привод укладывается в желаемую погрешность следования, а при каких уже не вывозит. Ведь все же связано, мощность привода, масса которую он двигает, шаг швп..... Реальная обратная связь даёт возможность это оценить, программная обратная связь это от лукавого..... Когда этот пазл сложится в голове, понимаешь что не хватает S разгонов и торможения в linuxcnc для максимального выжимания возможностей приводов..... :freak:
Аватара пользователя
antoxa-kylibin
Мастер
Сообщения: 786
Зарегистрирован: 22 июн 2017, 13:18
Репутация: 107
Настоящее имя: Антон
Откуда: г. Воронеж
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение antoxa-kylibin »

И вот объясните мне такой момент, нафига linuxcnc контроллировать работу мотора, когда этим занимается серводрайвер? До конечной оси ещё есть как правило упругая муфта, винт и гайка швп, которые тоже не идеальны и вносят свои погрешности и инерционные составляющие? Логично контроллировать конечное звено цепи, а не промежуточное......или я что то не так понимаю?
romanetz
Кандидат
Сообщения: 90
Зарегистрирован: 10 окт 2021, 08:13
Репутация: 77
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение romanetz »

antoxa-kylibin писал(а): 05 июн 2022, 02:35 И вот объясните мне такой момент, нафига linuxcnc контроллировать работу мотора, когда этим занимается серводрайвер? До конечной оси ещё есть как правило упругая муфта, винт и гайка швп, которые тоже не идеальны и вносят свои погрешности и инерционные составляющие? Логично контроллировать конечное звено цепи, а не промежуточное......или я что то не так понимаю?
Ну таки что же вам мешает линейку вместо энкодера прицепить на серву?
Только последствия вот такие: движок будет п*****сить по-черному. Обратная связь все эти нежесткости и люфты будет пытаться отработать.
Аватара пользователя
antoxa-kylibin
Мастер
Сообщения: 786
Зарегистрирован: 22 июн 2017, 13:18
Репутация: 107
Настоящее имя: Антон
Откуда: г. Воронеж
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение antoxa-kylibin »

Линейку к серве проблема, энкодер ещё можно). Механика должна быть в порядке. Банально муфту провернет если, то при контроле сервы этого никто не заметит, а при контроле оси сразу lcnc в ошибку свалится. И это станет сигналом чтобы принимать меры. Механика должна быть в любом случае в порядке, а не раздолбанной.
alex_sar
Мастер
Сообщения: 1672
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 278
Настоящее имя: Алексей
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение alex_sar »

Модные приводы (Mitsubishi J4) с линейками работают так (всё внутри сервы) - на большой скорости берет фидбэк с мотора, если скорость меньше сконфигурённой - допозиционируется по линейке. Не видел пока как это живёт, но интересно. У меня на ремнях пара осей, там не помешала бы такая история - последние сотки люфта не получается победить.
Аватара пользователя
antoxa-kylibin
Мастер
Сообщения: 786
Зарегистрирован: 22 июн 2017, 13:18
Репутация: 107
Настоящее имя: Антон
Откуда: г. Воронеж
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение antoxa-kylibin »

Тогда стойке для контроля нужно дать сигналы alarm с приводов, и будет тоже норм.
alex_sar
Мастер
Сообщения: 1672
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 278
Настоящее имя: Алексей
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение alex_sar »

antoxa-kylibin писал(а): 05 июн 2022, 11:38 Тогда стойке для контроля нужно дать сигналы alarm с приводов, и будет тоже норм.
можно и аларм, но так viewtopic.php?t=12087 значительно приятнее
Аватара пользователя
xenon-alien
Почётный участник
Почётный участник
Сообщения: 4506
Зарегистрирован: 01 янв 2013, 13:13
Репутация: 920
Настоящее имя: Daniel
Откуда: Закарпатская обл. Украина
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение xenon-alien »

Всем благодарен за подсказки.
У меня есть тема по пуско-наладке, и по микро токарнику, по которому вопросы с настройкой по апельсине и ЛЦНЦ (там же и 6 осей уже прописано, но это на будущее робот руки).
В теме по апельсинке уже поделились конфигурацией токарного с энкодером для шпинделя, но не проверял.
Так что можно там продолжить, или туда перенести пару последних постов. (вариантов несколько, для переноса, скорей всего в тему про апельсин и ЛЦНЦ)
ex71
Мастер
Сообщения: 697
Зарегистрирован: 18 май 2019, 13:23
Репутация: 96
Настоящее имя: Андрей
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение ex71 »

ну вы тут наваяли//. намудрили и все разрулили ))
Вам всем надо бросать писать конфиг через мастер, и начать писать вручную. Тогда будете понимать что к чему связывается.
А то вот рассуждаете тут: "да нам бы все готовое, нам бы чтобы кнопку одну нажать". А потом вижу у вас осутствие вообще понимания как работает ваш станок.
xenon-alien писал(а): А если это серва?
Она имеет возможность управляться по скорости, не только по позиции.
Или это никак не связано?
Есть управление осью по скорости и по позиции. По моменту не рассматриваем - нам оно не надо.
Есть управление мотором по аналогу и по импульсам.
и они не взаимосвязаны.

Входные сигналы в серву могут быть аналоговые (+/-10в, +10в/дир, +/-5в и тп). То есть по двум проводам подается 0-10В для прямого вращения, -10-0 для обратного. Где +/-10в максимальная скорость. Так же может быть скорость по одному каналу, а направление по второму (как у степ/дир).

А есть цифровые - степ/дир типа..Ну там на самом деле в серве варивантов полно - можно как шаговики, можно как энкодеры, можно... их кажется 6 или 8 версий.


Обычно, именно обычно. И в целом сама LinuxCNC управляеn осями по скорости. ЧПУ задает скорость перемещения оси и сама по датчику обратной связи (энкодеру) контролирует где СЕЙЧАС ось. Таким образом выбирает ЗАДАННУЮ скорость вращения вала мотора. Поэтому нужен PID.
В самой серве тоже есть PID - его надо настроиться, чтобы без внешнего управления не было вибраций и ускорение было достаточным для ваших задач. Потом уже PID в ЧПУ подгоняется под заданные вами в конфиге скорости и ускорения.
Положение управляется не так же как шаговики.
alex_sar писал(а): тогда можно в режиме позиционирования шаги не высчитывать, а выдавать частоту шагов пропорционально рассогласованию текущей координаты расчётной.
именно так и происходит. в режиме SD на серву просто выдается поток импульсов с заданной частотой, и ожидается когда серва повернется. При чем если ты отключишь серву, и нажмешь перемещение на 0.1мм - то ошибки рассогласования не будет никогда. Просто сигналы будут шпарить до тех пор, пока что-то их не прикажет отключить.
То что серва принимает SD еще не означает что она считает импульсы и поворачивается так как шаговый мотор.
Она считает импульсы и поворачивается, но импульсы генерятся не так как в варианте домашнего фрезера или 3д принтера. Сигнал генерится пока серва не переместится в указанное положение. именно импульсы генерятся.
Да можно задать 10к импульсов на 1 оборот вала сервы. Но это лишь точность ее поворота и максимальная скорость. Сможет ли ваш комп сгенерить 120кГц для обеспечения вращения мотора на скорости 12об/сек. А это лишь 720об/мин.

С шаговиками вообще не так. Вы задаете количество импульсов на 1 оборот вала или 1 мм хода оси. И ЧПУ генерит 1 импульс и двигает на экране на указанное значение. При этом ЧПУ ничего не знает о том, есть ли мотор вообще. Работает ли он, или пропускает шаги.
Поэтому при наличии энкодера, даже шаговики уже работают в режиме скорости. Просто драйвер шаговика это лишь усилитель, он просто принимает сигналы с контроллера(порта) и превращает их в силовые сигналы подаваемые на обмотки.
Серва же принимает сигнал и анализируя кучу параметров пропускает все через свою логику уже потом выдает ток на мотор.
antoxa-kylibin писал(а): потому что генерация сигналов не будет привязана к позиции оси..... Я как раз походу на эти подводные камни и нарвался в своём проекте.....
Не совсем. Часть ответа выше. Плюсом:
Ты задаешь в конфиге обратную связь, софтовым энкодером. То есть ты жестко завязываешь генератор импульсов на поворот оси. Вот ты же сам в степконфиге задаешь количество импульсов на оборот. При этом связываешь выход оси joint со входом степгена, а его уже со портом LPT или что у вас там. И у степгена берешь обрятную связь и заводишь ее в joint.
А для сервы joint связывается с портом контроллера напрямую.
Суть в том, что JOINT дает "аналоговый" сигнал, то есть там числовое значение. СтепГен по нему генерит сигналы и считает каждый сигнал в фидбэк.
Контроллер (меса, пинцет и тп) генерят по числу от joint либо имульсы либо уровень напряжения.

antoxa-kylibin писал(а): Ну да, серва либо рулится в режиме step/dir (по сути управление по позиции, ещё встречается терминология управление по моменту двигателя) и в этом случае обратная связь не нужна, либо +-10в аналог и это уже режим управления по скорости. Но управление по скорости подразумевает контроль этой скорости, со стороны linuxcnc, потому и обратная связь нужна и pid и танцы с бубном чтобы это настроить ещё....
вам бы теорию управления серв почитать. Есть скорость, есть позиция, есть момент. Но по факту, момент < скорость < позиция.
То есть для движения нам надо подать указанное в настройках значение тока, но не более чем задано. Подаем минимум, не едем? подаем еще больше и это пофакту PID в некотром роде. Скажем серва должна удерживать натяжение ленты с заданным усилием, не ослаблять и не рвать. Вот и будет держать.
Для управления по скорости - ЧПУ генерит сигнал (напряжение или импульсы) для вращения с заданной скоростью. Мотор двигает, ЧПУ контролирует перемещение по энкодеру, корректируя скорость.
Позиция - ну в целом это как и по скорости, но драйвер сервы БОЛЕЕ автономен. Ему дается сигнал движения, но он сам контролирует качество движения и удержание позиции. да это похоже на шаговики, но совсем не так.
alex_sar
Мастер
Сообщения: 1672
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 278
Настоящее имя: Алексей
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение alex_sar »

ex71 писал(а): То что серва принимает SD еще не означает что она считает импульсы и поворачивается так как шаговый мотор.

именно так и происходит. в режиме SD на серву просто выдается поток импульсов с заданной частотой, и ожидается когда серва повернется. При чем если ты отключишь серву, и нажмешь перемещение на 0.1мм - то ошибки рассогласования не будет никогда. Просто сигналы будут шпарить до тех пор, пока что-то их не прикажет отключить.
То что серва принимает SD еще не означает что она считает импульсы и поворачивается так как шаговый мотор.
Вы так уверенно говорите чушь, что это даже завораживает )

Давайте определимся, какую именно серву вы имеете в виду? Может игрушечную от ардуино.... те такие, да.

А нормальные, взрослые, в режиме step/dir управляются точно также как шаговики. Только лучше, честнее как-то.
То что вы описали, это управление по скорости с использованием PWM выхода.
Аватара пользователя
xenon-alien
Почётный участник
Почётный участник
Сообщения: 4506
Зарегистрирован: 01 янв 2013, 13:13
Репутация: 920
Настоящее имя: Daniel
Откуда: Закарпатская обл. Украина
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение xenon-alien »

ex71 писал(а): Вам всем надо бросать писать конфиг через мастер, и начать писать вручную. Тогда будете понимать что к чему связывается.
Можете дать ссылку, что и к чему подключать? Имеются ввиду пины...
К примеру тот же ШИМ... Степ/дир для шаговика (задается позиция), и для шпинделя (задаются обороты).
По степгенам по идее можно ссылку выше посмотреть, но понятнее она от того не станет.
Я подозреваю, что тут тупо нужно зубриьт, что выдает ЛЦНЦ и к каким пинам уже остальных модулей подключать ту, или иную задачу.
Аватара пользователя
antoxa-kylibin
Мастер
Сообщения: 786
Зарегистрирован: 22 июн 2017, 13:18
Репутация: 107
Настоящее имя: Антон
Откуда: г. Воронеж
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение antoxa-kylibin »

ex71 писал(а): В самой серве тоже есть PID - его надо настроиться, чтобы без внешнего управления не было вибраций и ускорение было достаточным для ваших задач. Потом уже PID в ЧПУ подгоняется под заданные вами в конфиге скорости и ускорения.
Я по сути так же дал ответ, может чуть другими словами..... Но смысл точно такой....
ex71 писал(а): Поэтому при наличии энкодера, даже шаговики уже работают в режиме скорости. Просто драйвер шаговика это лишь усилитель, он просто принимает сигналы с контроллера(порта) и превращает их в силовые сигналы подаваемые на обмотки.
Серва же принимает сигнал и анализируя кучу параметров пропускает все через свою логику уже потом выдает ток на мотор.
Серводрайвер может работать как угодно внутри себя, но задача у него одна, точно повернуть на заданный угол мотор, хоть шаговый мотор с энкодером, хоть bldc с энкодером.... Точнее чем энкодер, мотор повернуть не получится.
romanetz
Кандидат
Сообщения: 90
Зарегистрирован: 10 окт 2021, 08:13
Репутация: 77
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение romanetz »

Таки будет joint following error, если на дать серве отработать команду. Прелесть реалтаймовой системы управления как раз в том, что реакция на команду должна уложиться в заданное время, иначе она уже нафиг не нужна. Что касается способа управления сервами, вы напрочь забыли цифровые шины, когда в мозги сервы сразу готовая циферка прилетает. Кстати, в режиме управления по позиции, скорость движения задаётся путем выдачи задания как ожидаемой позиции оси к моменту следующего сервопривода.
alex_sar
Мастер
Сообщения: 1672
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 278
Настоящее имя: Алексей
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение alex_sar »

xenon-alien писал(а): 06 июн 2022, 18:53
ex71 писал(а): Вам всем надо бросать писать конфиг через мастер, и начать писать вручную. Тогда будете понимать что к чему связывается.
Можете дать ссылку, что и к чему подключать? Имеются ввиду пины...
К примеру тот же ШИМ... Степ/дир для шаговика (задается позиция), и для шпинделя (задаются обороты).
По степгенам по идее можно ссылку выше посмотреть, но понятнее она от того не станет.
Я подозреваю, что тут тупо нужно зубриьт, что выдает ЛЦНЦ и к каким пинам уже остальных модулей подключать ту, или иную задачу.
Если начинать с начала. То нужно во первых в ini добавить ось. Это несложно должно быть, по образу и подобию имеющихся.

Потом можно переходить к делу.
Допустим добавили ось#2 (если про токарный говорим)
Тогда должны появится пины motion.joint.2.xxxxx
могут быть интересны
motion.joint.2.amp-enable-out -> включена ли ось?
motion.joint.2.motor-pos-cmd -> это выход, какая координата должна быть у оси
motion.joint.2.motor-pos-fb -> это вход, если будет энкодер - его сюда
в установившемся положении cmd и fb совпадают
они должны быть в одном масштабе, масштаб вроде задаётся scale в ini файле для оси.

в простейшем случае, если взять stepgen и шаговик:

нужно загрузить(добавить) hal компонент stepgen
не забыть добавить функции в threadы

подключить пин position-cmd (как раз соединяется с motion.joint.2.motor-pos-cmd)
подключить enable от amp-enable-out оси
выставить параметры как минимум position-scale (сколько шагов на единицу измерения), ограничения настроить в параметрах - макс ускорение, скорость и т.д.

после этого можно брать сигналы с выхода этого stepgen и вывести на пины LPT или куда хочется.

в режиме шпинеля берутся сигналы например
motion..spindle-speed-out-rps (его можно прицепить к stepgen.velocity-cmd, а position-cmd наоборот, отключить)
motion.spindle-on (этот завести на stepgen.enable)

думаю принцип понятен. "ядро" это hal motion, оно знает как что должно ехать, ему надо сообщать обратно что как приехало, а уж куда дальше эти вещи подключить - тут большая свобода.
alex_sar
Мастер
Сообщения: 1672
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 278
Настоящее имя: Алексей
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение alex_sar »

romanetz писал(а): 06 июн 2022, 21:07 Таки будет joint following error, если на дать серве отработать команду. Прелесть реалтаймовой системы управления как раз в том, что реакция на команду должна уложиться в заданное время, иначе она уже нафиг не нужна. Что касается способа управления сервами, вы напрочь забыли цифровые шины, когда в мозги сервы сразу готовая циферка прилетает. Кстати, в режиме управления по позиции, скорость движения задаётся путем выдачи задания как ожидаемой позиции оси к моменту следующего сервопривода.
конечно зазор в ferror должен быть для выполнения команды, иначе ошибка будет.

step/dir собственно и есть простейший доступный вид выдачи задания по цифровой шине.
romanetz
Кандидат
Сообщения: 90
Зарегистрирован: 10 окт 2021, 08:13
Репутация: 77
Контактная информация:

Re: Внедряем LinuxCNC в массы

Сообщение romanetz »

Ну у серв ещё бывают всякие поверлинки, езеркаты, мехатролинки и прочие каны...
Ответить

Вернуться в «LinuxCNC»