Страница 9 из 11

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 01:25
tims
UAVpilot писал(а): tims писал(а):
Количество фактически выданных шагов будет недостаточно. Нужно делать "substep interpolation".


Удивительно, но Mach и LinuxCNC как-то умудряются выдавать нужное количество шагов...
В LinuxCNC пишут так:

// note that it's important to use "subcounts/65536.0" instead of just
// "counts" when computing position_fb, because position_fb needs sub-count
// precision

Может "substep interpolation" неправильные слова, но смысл в том что LinuxCNC как раз считает фидбэк не только на основе "целых" импульсов. Иначе на частотах близких к частоте обновления будет лажа.

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 01:41
Serg
Потому-что планировщик желает контроллировать реальное перемещение оси, но не для того, чтобы делать "substep interpolation", а для того, чтобы вовремя остановитьь работу при слишком большом расхождении (FERROR). Для случая без энкодеров/линеек это и вовсе не работает, т.к. значение position_fb просто берётся с выхода генератора шагов (stepgen).

соотв. кусок конфига LinuxCNC:

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

# connect position commands from motion module to step generator
net Xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-cmd
net Ypos-cmd axis.1.motor-pos-cmd => stepgen.1.position-cmd
net Zpos-cmd axis.2.motor-pos-cmd => stepgen.2.position-cmd

# connect position feedback from step generators
# to motion module
net Xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb
net Ypos-fb stepgen.1.position-fb => axis.1.motor-pos-fb
net Zpos-fb stepgen.2.position-fb => axis.2.motor-pos-fb

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 01:58
tims
Так в том то и дело что при работе без энкодеров/линеек позиция меняется даже если реальные шаги не генерируются. Не потому ли что stepgen.0.position-fb получается не простым перемножением сделанных целых шагов на коэффициент?

https://github.com/LinuxCNC/linuxcnc/bl ... pgen.c#L59

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 02:32
Serg
tims писал(а):Так в том то и дело что при работе без энкодеров/линеек позиция меняется даже если реальные шаги не генерируются.
А как LinuxCNC об этом узнаёт?..
tims писал(а):Не потому ли что stepgen.0.position-fb получается не простым перемножением сделанных целых шагов на коэффициент?
Можешь показать этот кусок кода в исходниках LinuxCNC?

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 02:47
tims
UAVpilot писал(а):А как LinuxCNC об этом узнаёт?..
Непонятно )
UAVpilot писал(а):Можешь показать этот кусок кода в исходниках LinuxCNC?
Вот этот кусок:
https://github.com/LinuxCNC/linuxcnc/bl ... pgen.c#L59

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 04:33
Argon-11
UAVpilot писал(а):Прямо-таки все? И содержимое таблиц для расчёта S-кривых?
Можно и так сказать. Главное - мастер должен знать форму кривой, а в каком виде - второй вопрос.
А задача генератора - точно отработать эту форму.
UAVpilot писал(а): А зечем тогда реализовывать S-кривые в генераторе, если "мастер" уже всё сделал?..
Кривая разгона - это такой немаленький массив. Как, и главное, когда мастер его будет его передавать генератору? И зачем?

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 10:46
Сергей Саныч
tims писал(а):Количество фактически выданных шагов будет недостаточно. Нужно делать "substep interpolation".
В принципе, да. Шагогенератор на Pluto, к примеру, возвращает количество шагов (условную текущую позицию) в формате с фиксированной запятой - 12.10 двоичных разрядов.
То есть, целая часть - количество сделанных шагов (точнее, выданных импульсов), а дробная - часть "недоделанного" шага. И на запрос: "Сколько пройдено в попугаях?" будет ответ "38 попугаев и одно попугайское крылышко!" :)
UAVpilot писал(а): tims писал(а):
Так в том то и дело что при работе без энкодеров/линеек позиция меняется даже если реальные шаги не генерируются.
А как LinuxCNC об этом узнаёт?..
Время-то идет. Таймеры тикают (не важно, аппаратные или программные).

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 16:26
Serg
tims писал(а):Вот этот кусок:
Там хорошо видно, что на position_fb подаётся то, что stepgen успел нагенерить к этому моменту. Если он нагенерит больше или меньше, чем задано, то случится аварийный останов по причине "following error". Никто не будет догенерировать недогенерённое и отгенерировать перегенерённое. :)
Argon-11 писал(а):Главное - мастер должен знать форму кривой, а в каком виде - второй вопрос.
А задача генератора - точно отработать эту форму.
Если мастер будет знать форму кривой, то кто мешает ему сгенерить эту самую S-кривую и передать её генератору в виде коротких отрезков длиной в сервоцикл? Тем более, что в этом случае при интерполяции по нескольким осям у него будет возможность синхронизировать траектории осей с точностью этих отрезков, а не только начало и конец всего разгона. И опть возникает тот-же самый вопрос: для чего генератору надо уметь S-кривые?
Argon-11 писал(а):Кривая разгона - это такой немаленький массив. Как, и главное, когда мастер его будет его передавать генератору? И зачем?
Не надо мне такие вопросы задавать - я уже давно говорю, что S-кривые в генераторе не нужны. :)
Сергей Саныч писал(а):Время-то идет. Таймеры тикают (не важно, аппаратные или программные).
Переведи? :)

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 16:36
tims
UAVpilot писал(а):Там хорошо видно, что на position_fb подаётся то, что stepgen успел нагенерить к этому моменту. Если он нагенерит больше или меньше, чем задано, то случится аварийный останов по причине "following error". Никто не будет догенерировать недогенерённое и отгенерировать перегенерённое.
Никто с этим не спорит. Речь о том что в фидбэк идёт subcount, а не count.

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 16:47
Serg
tims писал(а):Речь о том что в фидбэк идёт subcount, а не count.
Это нужно лишь для для того, чтобы в текущем сервоцикле точнее знать что успели нагенерить в предыдущем.
К реализации S-кривых это никакого отношения не имеет.

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 17:00
Сергей Саныч
UAVpilot писал(а):Переведи? :)
Ну вот, к примеру, ШГ выдает импульс при увеличении целой части счетчика на единицу. И еще у него есть некая условно дробная часть, к которой каждый такт базовой частоты прибавляется значение, пропорциональное скорости. В качестве обратной связи используется не только целая часть, но и дробная, что позволяет повысить стабильность частоты шага от сервоцикла к сервоциклу.
UAVpilot писал(а):Это нужно лишь для для того, чтобы в текущем сервоцикле точнее знать что успели нагенерить в предыдущем.
И я про то же.

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 17:20
Argon-11
UAVpilot писал(а):...в виде коротких отрезков длиной в сервоцикл?
Ну да, но по всей видимости, топикстартер не планирует беседовать с генератором с интервалом сервоцикла. В моем проекте (поршневой дозатор) это тоже не требуется и даже будет вредно, поскольку мастером является одноплатник с ОС Android, у к-рого периодически запускается сборщик мусора, к-рый вроде как может приостанавливать процессы. Т.е. разговор тут идет о связке "реалтайм генератор + мастер без реалтайма".
UAVpilot писал(а):И опть возникает тот-же самый вопрос: для чего генератору надо уметь S-кривые?
по вышеописанным вышеописаниям: чтобы не работать с интервалом сервоцикла.

Касаемо моего поршневого дозатора - вообще-то пока не уверен, нужны ли там кривые разгона? Разве что для постепенного нарастания давления в шлангах.

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 17:45
Serg
Сергей Саныч писал(а):В качестве обратной связи используется не только целая часть, но и дробная, что позволяет повысить стабильность частоты шага от сервоцикла к сервоциклу.
Именно стабильность. Но на точность позиции это по сути не влияет.
Argon-11 писал(а):Т.е. разговор тут идет о связке "реалтайм генератор + мастер без реалтайма".
Argon-11 писал(а):чтобы не работать с интервалом сервоцикла.
А без этого вообще никак. Ведь к моменту окончания выполнения задания генератором мастер должен быть готов передать следующее задание генератору, иначе будет пауза в движении, а это почти наверняка потеря шагов для обычного шаговика.

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 17:45
tims
Argon-11 писал(а):Ну да, но по всей видимости, топикстартер не планирует беседовать с генератором с интервалом сервоцикла.
Тогда возникают грабли с реакцией на события touchprobe, концевиков.

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 08 сен 2017, 17:49
Shkryab
tims писал(а):
Argon-11 писал(а):Тогда возникают грабли с реакцией на события touchprobe, концевиков.
А вот это да, должен обрабатывать обсуждаемый контроллер.

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 09 сен 2017, 06:23
Argon-11
UAVpilot писал(а):А без этого вообще никак. Ведь к моменту окончания выполнения задания генератором мастер должен быть готов передать следующее задание генератору, иначе будет пауза в движении, а это почти наверняка потеря шагов для обычного шаговика.
Не вижу причины почему нельзя отправлять очередь заданий генератору. И при этом следить, чтобы буфер заданий в генераторе не опустошался, тогда пауз не будет. И по-моему, RT ядро в этом случае нафиг не нужно. Концевики и зонды - другой вопрос, об этом изначально речи не было.

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 09 сен 2017, 17:14
Serg
Argon-11 писал(а):Не вижу причины почему нельзя отправлять очередь заданий генератору. И при этом следить, чтобы буфер заданий в генераторе не опустошался, тогда пауз не будет.
А оси ты как синхронизировать собираешься?..

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 09 сен 2017, 17:22
Argon-11
Привязкой ко времени, вестимо.

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 09 сен 2017, 17:26
Serg
Argon-11 писал(а):Привязкой ко времени, вестимо.
Без RealTime? Ну-ну... :)

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Добавлено: 09 сен 2017, 17:30
Argon-11
UAVpilot писал(а):Без RealTime? Ну-ну... :)
Сфигале без realtime? Генератор ващето можно считать реалтаймным девайсом, он и будет синхронизировать оси. Вот мастер - тот с реалтаймом может не дружить. Просто в перечне команд должны быть команды простоя определенное кол-во тиков или что-то вроде этого.