Последний раз редактировалось Newcomer; 09.07.2017 в 18:48.
Владимир, задаю заведомо большее чем над accel_ramp и получаю совсем плохой результат. Пачка импульсов генерируется много дольше расчетного времени. Т.е. ФБ steper не верно интерпретирует accel_ramp, который ему задается.
Последний раз редактировалось Newcomer; 10.07.2017 в 13:38.
Приподниму малость тему.
Моя разработка модуля PRU-энкодера с детектором машинного нуля уже успешно работает около трех месяцев в режиме 24\7.
После модернизации оборудования, при наладке, выявился интересный глюк. Установка имеет несколько электромагнитных клапанов, которые управляются с ПЛК через промежуточные реле. Напряжение питания их соленоидов 230VAC. При размыкании (отпускании) реле одного из соленоидов происходил сброс показаний энкодера в ноль. Флаг машинного нуля при этом не сбрасывался, как не наблюдалось сбоев и в ПЛЦ_ПРГ. Проблему мы конечно решили методом изменения и экранировки разводки, но как говорится, "осадочек остался". Я понимаю, что это вопрос к производителю ПЛК, однако я не могу понять почему сбрасывался один регистр ПРУ, но не сбрасывался другой.
--------------
Другой вопрос.
Есть задумка модернизации еще одной установки, но там нужен ПРУ-модуль почти как для ШД.
Установка содержит три не очень навороченных сервопривода с возможностью управления от Step\Dir.
Задача заключается в том, что бы на привод №1 выдать образцовую частоту вращения F, на привод №2выдать F +- дельта, где дельта= 3% с максимально плавной регулировкой, на привод №3 выдать F+5% с ограничением момента (это функционал привода).
Частота импульсов примерно 30-50кГц. Т.е. например на привод №1 отправляем 32500Гц, на привод №2 - 32614Гц, на привод №3 - 32894Гц. Направление менять не требуется, ибо вращение идет всегда только в одну сторону. Рассматриваю так же просто передачу уставки скорости по Модбасу, но там только в Гц, и думаю будет грубовато.
Собственно вопросы:
1). В процессе работы есть оперативная необходимость изменения частоты любого из приводов без останова генератора, т. к. останов недопустим. Получится ли сделать три таких независимых генератора импульсов?
2). Генераторы должны работать бесконечно.
Последний раз редактировалось Sulfur; 05.10.2017 в 08:57.
А катушки ЭМ клапанов RC-цепочками зашунтированы ?
По второй задаче особых проблем не вижу. Но интересно что скажет отец основатель Hardella IDE В.Ситников.
Последний раз редактировалось Newcomer; 05.10.2017 в 10:48.
Это хорошо
Т.е. установка уже может принимать уставку частоты по modbus с точностью до Гц, и вы всё равно хотите заменить?
Почему же тогда?
Вообще говоря, 32500Гц это 30769.2нс, а 32501 это 30768.3нс.
Если у вас установка может не только принимать "с точностью до Гц", но ещё и реально выставлять частоту с точностью до Гц, то зачем же её "модернизировать"?
Там, говорите, серво?
Т.е. им можно выдавать приближенную частоту, а они подстроятся?
3 генератора сделать можно. И подстройку частоты тоже можно сделать.
Вопрос в точности, которая нужна.
Например, если поставить цикл PRU в 1мкс, то грубо говоря, генерируемые импульсы будут кратны 1мкс.
Импульс в 32мкс (16 единиц, 16 нулей) это 31'250Гц.
Импульс в 33мкс (17 единиц, 16 нулей) это 30'303Гц.
Импульс в 34мкс (17 единиц, 17 нулей) это 29'412Гц.
В итоге, при уставке в 30'000Гц PRU будет чередовать 33мкс и 34мкс импульсы примерно так: 33 34 33 ... Тут так получается, что 33+34+33=100мкс, а 3 импульса за 100мкс это как раз 30кГц=3/100мкс.
Вряд ли, конечно, вам будет это мешать, но вдруг.
Вы это понимаете, и вас устраивает?
Это, конечно, можно.
Уставка задается в Гц с точностью 0.01Гц в диапазоне 1.50...50.00 Гц. С имеющимися двигателями дискретность уставки получается примерно 0.3 об\мин. Вероятно хватит, но на всякий случай буду прорабатывать вариант с Степ\Дир. В данный момент используется аналоговое управление высокоточным многообортным переменным резистором (10 оборотов), для получения нужного результата оператору иногда приходится вращать ручку буквально на несколько градусов.Т.е. установка уже может принимать уставку частоты по modbus с точностью до Гц, и вы всё равно хотите заменить?
Почему же тогда?
Приведенные мною цифры весьма условные, чисто для понимания задачи.Вообще говоря, 32500Гц это 30769.2нс, а 32501 это 30768.3нс.
Стоят асинхронные двигатели с установленными резольверами. В приводе резольверный сигнал преобразуется в "энкодерный" 1024имп\об. Для задачи частоты требуется подавать внешний сигнал по формуле 4х, т.е. чтобы вал двигателя повернулся на 1 оборот нужно выдать 4096 импульсов. Обычная скорость вращения - 300-600 об\мин. Да, привод подстраивает частоту, т.к. она немного плавает от внешних механических возмущений (люфты, неравномерность нагрузки и т.п.)Там, говорите, серво?
Т.е. им можно выдавать приближенную частоту, а они подстроятся?
3 генератора сделать можно. И подстройку частоты тоже можно сделать.
По факту получается, что нужно иметь генератор в диапазоне 20..50кГц с возможностью оперативного изменения частоты с дискретностью 1 Гц. Например для частоты 40000 Гц обороты двигателя будут равны 585,94 об\мин, для 40001 Гц это составит 585,95 об\мин. Грубо - 1Гц равен 0.01 об\мин. В принципе это очень высокая точность, даже излишняя. Думаю дискретности задающей частоты в 5 Гц будет достаточно. Это в 6 раз точнее, чем через Модбас.
Завтра понаблюдаю за реальными цифрами на пока еще живой установке)).
32мкс = 457,76 об\минВопрос в точности, которая нужна.
Импульс в 32мкс (16 единиц, 16 нулей) это 31'250Гц.
Импульс в 33мкс (17 единиц, 16 нулей) это 30'303Гц.
Импульс в 34мкс (17 единиц, 17 нулей) это 29'412Гц.
33мкс = 443,89 об\мин
34мкс = 430,84 об\мин.
Это очень грубая дискретность.
Можно ли в ПРУ ставить время цикла меньше, чем 1 мкс?
Последний раз редактировалось Sulfur; 05.10.2017 в 17:15.
Вы правильно поняли?
Вы тут оперируете словом "количество оборотов в минуту", а я говорю о том, что 33-34 мкс импульсы будут быстро-быстро меняться так, что "в среднем" (скажем, среднее за несколько секунд) окажется 33.333333.
Ну или пример для ваших "443,89 об\мин 430,84 об\мин"
Допустим, уставка 437.00 об\мин.
PRU может генерировать такие импульсы: 33 34 34 33 34 33 34 33 34 33 34 33 34 33 34 33 34 33 34 33 34 33 34 33 34...
Это 25 импульсов за 838мкс или 33.52мкс/импульс или 437.006 Гц в среднем за эту "секунду".
За это время (25 имп) вал провернётся на 1.83 градуса.
Вам точно такой точности не хватит?
Текущий ШД-блок именно так делает. Он размазывает импульсы и в среднем получается указанная частота.
Надо, конечно, смотреть PRU статистику. Может, и можно ставить меньше 1мкс, но сильно меньше не получится.
Ну, поставим 0.5мкс, но это всё равно не будет чем-то кардинально более точным.
Сделать "безцикловый режим", наверное, можно, но непросто. 1мкс это 1000нс, или 200 команд PRU процессора.
Я с самого начала говорил, что "точность в 1 Гц на частоте 30кГц" это то же самое, что и "точность в 1нс".
А PRU ядро на одну команду тратит 5нс. Как вы собираетесь делать точность в 1нс при этом?
Начнём с того, что (пишу по памяти):
1) Нужно сделать какой-то обмен между PRU и PLC_PRG. Он может занять, например, 100-200нс. Конечно, зависит от количества обменных переменных и т.п.
2) "Цикл ожидания времени" на PRU сам по себе занимает ~50нс
3) Ну и самое коварное: вы же хотите 3 генератора одновременно. Может так оказаться, что "нужно сгенерировать импульс через 50нс для 1-го, потом через 1нс импульс для 2-го и ещё через 2нс импульс для третьего генератора". Если "подождать 50нс до генерации 1-го импульса PRU ещё может", то после этого не так то и просто будет "за 1 нс сгенерировать второй импульс".
Либо вариант "2 ПЛК", "по 2 PRU ядра в каждом", "на каждом PRU ядре свой генератор". Но это, по-моему, дичь какая-то.