И как минимум три направления.
CNC
Motion Controller
ну и простые штуки, вроде пошевелить парой осей
Вид для печати
А вот на малыше это возможно, функция SPED, попроще чем PLS2, но минимальный интервал вроде 8 мс.
-------------------
Вы уж определитесь, а то заладили
Ну не рулит он в Вашей задаче, Вы уже не первый день решаете то, что на другом оборудовании как два пальца об асфальт.:p
Впрос в том, как часто можно вызывать функцию PLS2.
Грубо говоря:
t0: "PLS2, поехали на 10мм".
t1: Вас понял, еду
t3: "ой, нет, я передумал, PLS2 надо было на 7мм ехать, а не на 10"
t4: Кхм. Вообще-то мы находимся на отметке 9мм, но если уж так нужно, то отмотаем назад 2мм.
Каков минимальный временной интервал t3-t0, который позволит вызывать PLS2/SPED?
С одной стороны, пишете "2 цикла управления = 8мс". Я понимаю это так, что PLS2, выполняясь в основном цикле, отдаёт команды на управление обработчику быстрого выхода раз в "основной цикл ПЛК". Если основной цикл ПЛК составляет 4мс, то ПЛК потратит примерно 8мс от осознания того, что нужно запускать ШД до фактического запуска.
С другой стороны, пишете, что есть таймеры на 20мкс. Можно в этом таймере вызывать PLS2? Т.е. можно, условно говоря, каждые 20мкс выдавать новую PLS2 инструкцию? Я, конечно, понимаю, что 20мкс это порядка 50кГц, но всё же.
Т.е. что-то в духе "выполни вот этот код как только счётчик выхода достигнет значения 42"?
Сильно сомневаюсь, что в Омроне одно и то же ядро занимается генерацией импульсов и выполнением инструкций типа PLS2.
Значит, выполнение асинхронное.
Значит, возможно временное запаздывание (ну, импульсы уже накопились, а до обработчика ещё не дошло, что нужно выполнять обрабатывающий код).
Тот же самый вопрос, но с другой стороны: отличается ли эта "обработка входа по прерыванию" от "обработки входа в 20мкс таймере"? Например, мы в нашем 20мкс таймере будем проверять счётчик быстрого выхода и вызывать разнообразные PLS2/SPED команды. Так можно? Оно будет отличаться от "обработки счётчик выхода в прерывании"?
PS. "Начинает выдачу импульсов через 72 мкс" и 20мкс таймер звучит жутковато. Если вычисления траектории занимают 72мкс, то 20мкс таймеру придёт северный лис. У меня на PRU траектория вычисляется где-то за 5мкс. Возможно, более сложные вычисления (совмещение двух движений) действительно выйдут на 36-72мкс.
Я уже давно определился. Что тут не понятно ?
Для тех кто не понял повторяю - ПЛК110[М02] + Hardella IDE рулят. Повторяйте это как мантру и до вас наконец дойдет. ;)
Быстро, как известно, только кошки родятся. ;) Муки творчества действуют на меня благотворно, без этого жизнь скучна.
Свое подключение к разговору вы начали со слов "Для справки, ни с кем спорить не собираюсь". То что вы изложили лично я принимаю к сведению, но не более того.
Владимир, что за задачи такие, менять задания по нескольку раз в течении милисек?
Обычно любой автомат работает много медленнее.
Я работал с линией по изготовлению сендвич панелей там мультиконтроллерное упр 3шт S300 и примерно 20 осевых приводов S120
плюс ок 40-60 ПЧ. Средний цикл 15-18мс
Работал на роботизированном заводе Мазахенка, весь завод управляется 4-мя S400(в сети) с коммуникациями, цикл 15-20мс
А я откуда знаю? Про задачи нужно не у меня спрашивать.
Вот тащили-тащили клещами из Вольда его задачу. Оказалось, ему нужно PLS2/SPED/ACC.
Попробую угадать, где может пригодиться быстрое управление: "поиск нуля". Т.е. мы движемся-движемся и нужно останавливать ШД при достижении отметки.
С одной стороны, под это дело можно сделать "отдельную инструкцию <<поиск нуля>>", а с другой можно отдельных не делать, а сделать что-то типа PLS2/SPED и вызывать уже их (но из 60мкс таймера).
Я хочу по-нормальному сделать.
C stepper блоком перо попробовали, теперь можно более серьёзные штуки делать. И не хотелось бы тратить время на штуки, которые по факту окажутся непригодными к реальному использованию.
Если 100мкс всех устраивает, то надо пробовать.
Я не говорил, что мне нужно PLS2/SPED/ACC. Пускай этим пользуются адепты забугорного железа. ;) Мой пост о том, что мне понравился документ, который выложил Ветер вы истолковали совершенно не верно. В этом документе я нашел интересные для себя моменты и только. Мне нужен проверенный, работающий быстрый ШИМ, а остальное я сам постараюсь сделать.
такие задачи используют прерывания и цикл не затрагивают
устроит в 99,9% задач.
а для поиска 0 привод движется оч. медленно. Тут нет расчета инерции и торможения. Остановка происходит мгновенно по прерыванию.
Вот выход в координату с заданной скоростью разгона и остановки это другое, для сложных задач делают приводов с высокоскоростной цифровой обратной связью по позиции.
Для этого используют спец моторы, которые к ПЛК не подключить.
Не надо нас за лохов держать. Никто не собирается подключать т.н. спецмоторы напрямую к ПЛК. Если вы о сервоприводах, то они то же бывают с интерфейсом STEP/DIR/EN и их без труда можно подключить к быстрым дискретным выходам ПЛК. Управлять сервоприводом с синхронным двигателем много проще чем драйвером ШД.
Приборист уже подключал сервопривод к ПЛК110[М02] и остался очень доволен.
судя по инструкции, те не совсем понятные мне "2 цикла управления = 8мс" трактовать можно по разному.
Если PLS2 не выполняется, вывод импульсов начнётся через 72 мкс после команды, если нужно изменить команду которая выполняется, то те самые 8мс.Цитата:
С одной стороны, пишете "2 цикла управления = 8мс". Я понимаю это так, что PLS2, выполняясь в основном цикле, отдаёт команды на управление обработчику быстрого выхода раз в "основной цикл ПЛК". Если основной цикл ПЛК составляет 4мс, то ПЛК потратит примерно 8мс от осознания того, что нужно запускать ШД до фактического запуска.
Вы проглядели, я писал 20 мсек, т.е. 20 мс.Цитата:
С другой стороны, пишете, что есть таймеры на 20мкс.
Да, подпрограмму прерывания, а если не торопимся, то можно и в основном цикле отследить счётчик.Цитата:
Т.е. что-то в духе "выполни вот этот код как только счётчик выхода достигнет значения 42"?
Фиг его знает, но у этого малыша один камень от Фуджицу, какой именно смотреть не полезу.Цитата:
Сильно сомневаюсь, что в Омроне одно и то же ядро занимается генерацией импульсов и выполнением инструкций типа PLS2.
Ещё как будет.Цитата:
Тот же самый вопрос, но с другой стороны: отличается ли эта "обработка входа по прерыванию" от "обработки входа в 20мкс таймере"? Например, мы в нашем 20мкс таймере будем проверять счётчик быстрого выхода и вызывать разнообразные PLS2/SPED команды. Так можно? Оно будет отличаться от "обработки счётчик выхода в прерывании"?
В Омроне есть что то похожее на скоростной таймер в ПЛК110, т.е. можно считать и проверить значение счётчика выхода. Называется "Прерывание по расписанию"
Но ещё есть прерывания по событиям: по физическому входу, по уставке счётчика. т.е. нет смысла постоянно гонять код в таймере как у ПЛК110.
-------------------
Вольд, Вы случайно не САМ на ШД пытаетесь организовать?
Да, проглядел.
Ясно. Значит нужно делать что-то типа PLS2/SPED/ACC.
Кстати, ещё вопрос: может быть "очередь из PLS2/SPED команд"?
Т.е. "сначала 10мм на скорости A, потом 12мм на скорости Б".
Или это решается через SPED, контроль положения, и выдачу новой SPED команды?
PS Совсем шик, наверное, будет запитать 4 ШД от одного ПЛК110.
STEP из быстрых выходов, а DIR из обычных.
речь о двигателях с энкодером и цифровой обратной связью. при чем тут степ дир?
вы хотите получить какие-то не реальные скорости изменения команды на лету.
но вы не получите без такой обратной связи команды на изменение задания.
это вообще не нужная для плк скорость.
вам нужно реально подходить к выбору скорости. для компенсации инерции при остановки,
а скорость отклика на изменение команды не так критична.
Если самому её описать, в той бумажке которую я выложил, с конца 99 страницы и далее, это описано.
-----------------------------------
Вольд, ну Вы прям как партизан, тайны не выдаёте.:cool:
Вы в этой теме уже больше месяца вопросы задаёте, интересно, на сколько Ваше "осталось чуть-чуть" растянется :)
Ещё раз, попробую убедить, что вам нужны именно PLS2/SPED/ACC, а не ШИМ.
Да, ШИМ (мой блок PWM_DW) уже является аналогом команды SPED -- на нём можно генерировать импульсы нужной длительности.
Ставим скважность 50% (половину периода единица, а потом ноль). Длина ШИМ периода это и есть напрямую частота импульсов.
Нужно менять скорость -- корректируем уставку PWM_DW и всего делов.
Но программы типа "обнаружен сигнал предварительного концевика, значит нужно включать торможение" на этом самом PWM_DW сделать непросто.
Конечно, можно всё на ступеньках изображать, но по-хорошему, нужны всё-таки более простые в использовании блоки. Не просто "генератор частоты", а например, тот же самый ACC (насколько я понял это ускорение/замедление)/PLS2(движение)/SPED(генератор частоты). Т.е. "генератор частоты с нарастанием", "генератор с планированием разгона-замедления" и т.п.
Ну я 99-ую страницу понимал так: если в момент движения (которое образовалось прошлым вызовом SPED) вызвать ещё раз SPED, то результирующий график будет такой.
У меня же вопрос был такой: можно ли в "управлятор быстрого выхода" загрузить последовательность команд "сначала делай SPED такой, а потом PLS2 такой".
Насколько я понял, такой опции нет. Т.е. выдача команд SPED/PLS2 происходит либо в основном цикле, либо по прерыванию, либо по таймеру.
Да, такого нет.Цитата:
загрузить последовательность команд
Владимир, смотрю ваш ФБ PWM_DW. У вас там Q - BOOL, POS - DWORD. Как возможна такая строка: Q := pos <= value; ?
Я так понимаю все у вас там в мкс мерится, если ФБ вызывается раз в микросекунду ?
Нет, измеряется в попугаях.
Вот блок, с помощью которого можно узнать количество выполненных процессором тактов: https://hardella.com/docs/pru/standa...u_current_time
В PRU нет операций деления/умножения, поэтому лучше в программе использовать "количество тактов процессора" (PRU это 200МГц, каждый такт -- 5нс), и переводить мкс в такты ещё при написании программы.
Единственное место, где в Hardella указываются микросекунды это PRU Configuration, но тот параметр как раз и превращается в "такты" на этапе компиляции проекта.
Ещё в упрощенном случае можно считать, что каждый цикл PRU выполняется через указанное в конфигурации время. Например указали цикл PRU в 1 мкс, вызываем pwm_dw в каждом цикле и тогда можно считать, что pwm_dw настраивается в мкс.
Тогда задам конкретный вопрос. Какие значения должны иметь period и value, если на выходе надо получить импульсы с периодом 10 мкс и скважностью 2 в ФБ PWM_DW и PDM_DW соответственно ? min cycle = 1 mcs.
Я так понял, что PWM_DW и PDM_DW - это совершенно разные вещи. PWM_DW - это классический ШИМ, а PDM_DW - это я не знаю что такое. Зачем вы на сайте Hardella сравниваете эти не сравнимые вещи. И названия этим ФБ дали похожие. Это сбивает с толку. Я с дуру ухватился за PDM_DW подумав, что это какой-то супер ШИМ от которого мне привалит много счастья. ;)
PDM это pulse density modulation: https://en.wikipedia.org/wiki/Pulse-density_modulation
В английской статье говорится, что PWM это частный случай PDM.
Есть про PDM упоминание и в русской статье про ШИМ:Цитата:
Pulse-width modulation (PWM) is a special case of PDM where the switching frequency is fixed and all the pulses corresponding to one sample are contiguous in the digital signal...
Цитата:
Высоким качеством обладает такая разновидность однобитной ИКМ, как импульсно-плотностная модуляция (pulse density modulation), которая ещё именуется импульсно-частотной модуляцией.
Добрый день.
Интересный документ представил Ветер. Владимир Ситников, вы не планируете реализовать что-то подобное (хотя бы часть инструкций) в своем проекте ? Ваш ФБ Steper работает хорошо. Было бы не плохо расширить возможности управления ШД.
Владимир, как можно оценить время исполнения программы для PRU ? Я так понимаю, что время исполнения программы для PRU должно обязательно укладываться в min cycle.
Можно:
1) выполнить её на эмуляторе.
2) грубо оценить -- умножить на 5нс количество команд в PRU коде. Т.е. заглянуть в программу ..._Pru0Init, найти там pruCode : ARRAY[1..557] и умножить размер массива на 5нс.
557*5нс = 2.785мкс. Это оценка сверху. Например, если выполнение пошло по одной из веток IF, то вторая, разумеется, не выполняется.
Можно придумать какой-нибудь механизм, чтобы в online можно было узнать сколько выполнялся пользовательский код. Минус в том, что он потребует какого-то регистра для хранения данных. С другой стороны, одного-двух байтов должно быть достаточно.