PDA

Просмотр полной версии : Возможно написать программу для управления драйвером шагового двигателя?



Андрей Михайлович
27.06.2020, 17:33
Здравствуйте!
Я недавно начал общение с программируемыми реле, есть задача, но маловато опыта для ее реализации.
Надо составить программу, что бы с аналогового выхода ПР200-220.24.2.1.0 выходили импульсы +5В с регулируемой частотой. Импульсы будут поданы на пульс вход драйвера, управляющего шаговым двигателем. Там на этом входе внутри драйвера, стоит оптопара и этот сигнал подается как управляющий на светодиод этой оптопары.
Хотелось бы так же наблюдать за значением частоты импульсов на мониторе ПР200. Внешним резистором надо управлять этой частотой, а одним дискретным входом управлять включением вращения и его отключением.

Какой частоты вообще импульсы возможно получить? Я так понимаю, что если цикл исчисляется минимум 1 мсек, то частота не может быть больше 1000 Герц? Существуют возможности умножения этой частоты для аналогового выхода?

В общем понятно, что необходим генератор, с регулируемой частотой работы. Выход его должен записываться в переменную булевского типа. Эта переменная потом через логический элемент И, будет прерывать сигнал от константы со значением 0.5, что даст на аналоговом выходе сигнал амплитудой 5В. Не знаю правда, какой скважности должны быть эти импульсы. Может генератор меандр подойдет, может надо, что бы длительность импульса отличалась от паузы.
А вот как реализовать управление частотой генератора с внешнего резистора в заданных пределах, туго себе представляю. А так же как реализовать отображение частоты на экране ПР200, а лучше наверное пересчитать ее сразу в обороты двигателя, так как известно число импульсов необходимых для одного полного оборота двигателя. Это количество импульсов выставляется на драйвере, переключателями. от 800 имп/об, до 40 000 имп/об.

Как правильно организовать такие вещи? Опытных людей много, прошу совета и помощи.

С уважением....

Sulfur
27.06.2020, 20:31
У ПР недостаточно быстродействия для программной генерации импульсов такой частоты. Если нужно просто крутить ШД, то возможно попробовать применить какой-нибудь преобразователь напряжение-частота. Есть автономные генераторы импульсов для ШД.

Не знаю правда, какой скважности должны быть эти импульсы
Как правило любой. Ограничение только по минимальной длительности импульса, который может понимать драйвер ШД. Обычный дешевый драйвер как правило понимает от 5-10 микросекунд.
Если нужно точное позиционирование, то придется смотреть в сторону ПЛК110.М02, или другой, не Овен.

Андрей Михайлович
27.06.2020, 20:55
Дело в том, что я не упомянул в условиях задачи, что мне необходимы ооочень маленькие обороты. Выходные обороты пары мотор-редуктор, должны быть - 1 оборот за 12 минут и регулироваться в стороны от этого значения, но не на слишком большую величину. В общем то идея использовать шаговый двигатель с энкодером и появилась из за этого. когда попробовали червячный редуктор с асинхронным двигателем управляемым частотником, выяснилось, что даже при частоте частотника 10 герц, скорость очень велика. хотя редуктор (и даже пробовали два) с большим коэффициентом редукции.
Тут и возникла мысль обратиться к шаговым двигателям. А так, как скорость его должна быть не велика, даже учитывая, что после него будет стоять опять червячный редуктор 1:60, то думаю, что той частоты, что выдает ПР200, хватит. Вот только я пока не знаю, а сколько же он способен выдавать? Действительно по минимальному значению цикла? То есть 1мсек или это 1000 герц. если бы все значения имелись, я бы просто посчитал а не строил бы схему, что бы проверять полученные результаты.

rovki
27.06.2020, 21:18
Дело в том, что я не упомянул в условиях задачи, что мне необходимы ооочень маленькие обороты. Выходные обороты пары мотор-редуктор, должны быть - 1 оборот за 12 минут и регулироваться в стороны от этого значения, но не на слишком большую величину. В общем то идея использовать шаговый двигатель с энкодером и появилась из за этого. когда попробовали червячный редуктор с асинхронным двигателем управляемым частотником, выяснилось, что даже при частоте частотника 10 герц, скорость очень велика. хотя редуктор (и даже пробовали два) с большим коэффициентом редукции.
Тут и возникла мысль обратиться к шаговым двигателям. А так, как скорость его должна быть не велика, даже учитывая, что после него будет стоять опять червячный редуктор 1:60, то думаю, что той частоты, что выдает ПР200, хватит. Вот только я пока не знаю, а сколько же он способен выдавать? Действительно по минимальному значению цикла? То есть 1мсек или это 1000 герц. если бы все значения имелись, я бы просто посчитал а не строил бы схему, что бы проверять полученные результаты.

Давно вроде делал - не более 75гц ,если не ошибаюсь ...

Андрей Михайлович
27.06.2020, 21:22
Давно вроде делал - не более 75гц ,если не ошибаюсь ...

Ну так поделись если не жалко :-)

Сергей0308
27.06.2020, 21:27
Может контроллер ШД с интерфейсом RS485 решит ваши проблемы, типа такого: https://stepmotor.ru/wp-content/uploads/2013/06/datasheet_OSM88RA_rev.2.pdf
https://electroprivod.ru/smsd-1.5Modbus.htm


https://www.youtube.com/watch?v=RWr0TiaQumk

rovki
27.06.2020, 22:40
Ну так поделись если не жалко :-)

Я ж поделился ...данными .

Sulfur
27.06.2020, 22:57
Андрей Михайлович
Допустим делитель 1\16, т. е. 3200 импульсов на оборот. Оборотов надо 60, что бы после редуктора получить один оборот, т. е. 192000 импульсов. 12 минут это 720 секунд. 192К\720 = 266.6 имп\сек. Т. е. примерно 4 миллисекунды на всю программу. В принципе делитель 1\16 для данной задачи излишен, можно даже 1\1 или 1\2 использовать, редуктор нивелирует скачки ШД. Получается что 60 или 30 миллисекунд на импульс. Думаю даже ПР справится. При таких скоростях даже разгон\торможение не нужно. Надо пробовать.
И еще нескромный вопрос - задачу решаете для себя лично, или для производства? Если для себя, то есть одно интересное и довольно малобюджетное решение.

Андрей Михайлович
28.06.2020, 00:12
Может контроллер ШД с интерфейсом RS485 решит ваши проблемы, типа такого: https://stepmotor.ru/wp-content/uploads/2013/06/datasheet_OSM88RA_rev.2.pdf
https://electroprivod.ru/smsd-1.5Modbus.htm


https://www.youtube.com/watch?v=RWr0TiaQumk

Спасибо большое, посмотрел видео, интересно. Подумаем.

Андрей Михайлович
28.06.2020, 00:13
Я ж поделился ...данными .

Ммм.... 75 герц это конечная скорость ПР200? что то не пойму.... Поясни плиз.

Андрей Михайлович
28.06.2020, 00:19
Андрей Михайлович
Допустим делитель 1\16, т. е. 3200 импульсов на оборот. Оборотов надо 60, что бы после редуктора получить один оборот, т. е. 192000 импульсов. 12 минут это 720 секунд. 192К\720 = 266.6 имп\сек. Т. е. примерно 4 миллисекунды на всю программу. В принципе делитель 1\16 для данной задачи излишен, можно даже 1\1 или 1\2 использовать, редуктор нивелирует скачки ШД. Получается что 60 или 30 миллисекунд на импульс. Думаю даже ПР справится. При таких скоростях даже разгон\торможение не нужно. Надо пробовать.
И еще нескромный вопрос - задачу решаете для себя лично, или для производства? Если для себя, то есть одно интересное и довольно малобюджетное решение.

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

Андрей Михайлович
28.06.2020, 00:26
Блин лет 30 назад, такие объемные схемы запросто рисовал на логических элементах. Применял и регистры сдвигов и счетчики и шифраторы - дешифраторы, уж не говоря об измывательстве над И и Или и НЕ.
Все забыл блин. сейчас смотрю.... как собака, все понимаю, сказать не могу :-). не вижу в голове готового решения как раньше. Да и отличается построение радиотехнических схем, от программирования в OWEN Logic.
Я просто удивился возможности записывать в переменную сразу десятичное число, да еще и с плавающей запятой. Мы все решали двоичным кодом.

Андрей Михайлович
28.06.2020, 00:30
Так, решение как считать обороты и выдавать их на экран пользователю, я уже кажется придумал. Остается проблема регулировки частоты генератора внешним потенциометром. Как тут решается этот вопрос?

Подскажите, может макрос уже существует?

Андрей Михайлович
28.06.2020, 00:31
Ну придумал, громко сказано, меня на мысль навели Ваши сообщения. Спасибо Вам за это :-)

petera
28.06.2020, 09:48
https://owen.ru/forum/attachment.php?attachmentid=16915&d=1425224217 ...........

https://www.youtube.com/watch?v=cJurgHmq-So
https://www.karaoke.ru/song/98.htm
:cool:

Ревака Юрий
28.06.2020, 14:38
Здравствуйте!
Я недавно начал общение с программируемыми реле, есть задача, но маловато опыта для ее реализации.
Надо составить программу, что бы с аналогового выхода ПР200-220.24.2.1.0 выходили импульсы +5В с регулируемой частотой. Импульсы будут поданы на пульс вход драйвера, управляющего шаговым двигателем. Там на этом входе внутри драйвера, стоит оптопара и этот сигнал подается как управляющий на светодиод этой оптопары.
Хотелось бы так же наблюдать за значением частоты импульсов на мониторе ПР200. Внешним резистором надо управлять этой частотой, а одним дискретным входом управлять включением вращения и его отключением.

Какой частоты вообще импульсы возможно получить? Я так понимаю, что если цикл исчисляется минимум 1 мсек, то частота не может быть больше 1000 Герц? Существуют возможности умножения этой частоты для аналогового выхода?

В общем понятно, что необходим генератор, с регулируемой частотой работы. Выход его должен записываться в переменную булевского типа. Эта переменная потом через логический элемент И, будет прерывать сигнал от константы со значением 0.5, что даст на аналоговом выходе сигнал амплитудой 5В. Не знаю правда, какой скважности должны быть эти импульсы. Может генератор меандр подойдет, может надо, что бы длительность импульса отличалась от паузы.
А вот как реализовать управление частотой генератора с внешнего резистора в заданных пределах, туго себе представляю. А так же как реализовать отображение частоты на экране ПР200, а лучше наверное пересчитать ее сразу в обороты двигателя, так как известно число импульсов необходимых для одного полного оборота двигателя. Это количество импульсов выставляется на драйвере, переключателями. от 800 имп/об, до 40 000 имп/об.

Как правильно организовать такие вещи? Опытных людей много, прошу совета и помощи.

С уважением....

Частота на выходе дискретных сигналов ограничена 500 Гц, это в идеальных условиях, с учетом программы обычно меньше, для аналогового выхода скорее всего еще меньше. Какой мощности ШД?, идеальный вариант, как предлагали это готовый драйвер с RS-485, а так можно пробовать управлять выходом через BLINK управляя заданием частоты с резистора, но не уверен что для аналогового выхода будет такая же частота как и для дискретного, если взять модель ПР200 с транзисторным выходом, должно быть проще.

Андрей Михайлович
28.06.2020, 15:07
Пожалуйста разъясните. Почему в свойствах генератора BLINK, длительность во включенном и выключенном состоянии, может быть прописана как в целых единицах, так и в дробных и OWEN Logic не ругается ничуть. спокойно рисует около Th и T1 циферки какие угодно. Но считает он только когда нарисован 0. при этом считает на максимальной частоте, 500 Гц. Это если не создать блок записи в ФБ и для Th и для T1. Но они только целочисленные! очень неудобно. Получается изменить частоту генератора можно только на частоты, которые делятся от 500 Гц на целые числа? То есть например частоту 200 Гц, уже никак не получить :-(

Андрей Михайлович
28.06.2020, 15:16
Я тут нарисовал некоторую схемку, но обломался от выше приведенного факта.49906

Андрей Михайлович
28.06.2020, 15:24
Частота на выходе дискретных сигналов ограничена 500 Гц, это в идеальных условиях, с учетом программы обычно меньше, для аналогового выхода скорее всего еще меньше. Какой мощности ШД?, идеальный вариант, как предлагали это готовый драйвер с RS-485, а так можно пробовать управлять выходом через BLINK управляя заданием частоты с резистора, но не уверен что для аналогового выхода будет такая же частота как и для дискретного, если взять модель ПР200 с транзисторным выходом, должно быть проще.

Про ограничение в 500 Гц я сегодня уже понял, спасибо.
У меня модель ПР200.
ШД уже крутится, только очень медленно, Транзисторный аналоговый выход, справляется. После ПР 200 просто поставлю умножитель частоты на х4. Генератор справляется, только проблему я уже описал чуть ранее. Блоки записи в ФБ только целочисленные. Посмотрите, я выложил картинку симуляции. блин, как на не целое число сместить частоту генератора?

Ревака Юрий
28.06.2020, 16:18
Пожалуйста разъясните. Почему в свойствах генератора BLINK, длительность во включенном и выключенном состоянии, может быть прописана как в целых единицах, так и в дробных и OWEN Logic не ругается ничуть. спокойно рисует около Th и T1 циферки какие угодно. Но считает он только когда нарисован 0. при этом считает на максимальной частоте, 500 Гц. Это если не создать блок записи в ФБ и для Th и для T1. Но они только целочисленные! очень неудобно. Получается изменить частоту генератора можно только на частоты, которые делятся от 500 Гц на целые числа? То есть например частоту 200 Гц, уже никак не получить :-(

Задавать уставки таймеров, BLINK через запись извне, а именно это вам нужно для управления через резистор, можно только в мс, в целочисленном формате, задавая через свойства блока в виде константы можно в разных форматах, выбирается там же. 1 мс минимальная дискрета для задания, далее в зависимости от диапазона, можно домножить на нужный коэффициент, и выводить/задавать в требуемых единицах, тут пример:https://www.youtube.com/watch?v=7XlMjFgQkoA

Сергей0308
28.06.2020, 20:41
Блин лет 30 назад, такие объемные схемы запросто рисовал на логических элементах. Применял и регистры сдвигов и счетчики и шифраторы - дешифраторы, уж не говоря об измывательстве над И и Или и НЕ.
Все забыл блин. сейчас смотрю.... как собака, все понимаю, сказать не могу :-). не вижу в голове готового решения как раньше. Да и отличается построение радиотехнических схем, от программирования в OWEN Logic.
Я просто удивился возможности записывать в переменную сразу десятичное число, да еще и с плавающей запятой. Мы все решали двоичным кодом.

Я не раз слышал подобные слова, когда человек абсолютно не разбирается в сути вопроса и ему нечего сказать, начинает говорить, что мол очень крут был 50 лет назад и ещё не такое делал, короче, голой попой ежей давил! Даже если это и правда, что 50 лет назад что-то полезное сделал, то это скорей минус, чем плюс, так отстать от жизни надеясь на преждние заслуги!

Андрей Михайлович
28.06.2020, 20:45
так может перестать пользоваться блинк, а взять генератор импульсов?
И да если программа будет сложная то не факт что цикл программы будет 1мс, может и 2 и 3 и более, с этим ни один таймер не справиться, стоит перейти на МК или плк110М02 с его PRU

Ммм... простите нуба. А, сто Блинк это не генератор импульсов? А где взять именно генератор? И чем он отличается? Пожалуйста, разъясните.

Андрей Михайлович
28.06.2020, 21:08
Я не раз слышал подобные слова, когда человек абсолютно не разбирается в сути вопроса и ему нечего сказать, начинает говорить, что мол очень крут был 50 лет назад и ещё не такое делал, короче, голой попой ежей давил! Даже если это и правда, что 50 лет назад что-то полезное сделал, то это скорей минус, чем плюс, так отстать от жизни надеясь на преждние заслуги!

Честно, не ожидал такой реакции :-(
Да, мне 57 лет, и что? Да, я отстал, но не от жизни, а от конкретного направления, с которым не приходилось сталкиваться столько лет. Да, тогда была только ТТЛ логика. Теперь Вы пользуетесь контроллерами. Мои приборы, еще и на лампах работали и я создавал передатчики на этих лампах.
Но что Вас так именно задело?
Что я сам с собой по секрету всему свету разговаривал? Устал просто в тот день, дело было вечером поздним. На дату посмотрите. Один пошутил даже песней на этот счет :-)
И ни на какие заслуги я не надеюсь, а просто хочу догнать и научиться, раз уж столкнулся с необходимостью.
А, абсолютно не разбираюсь в сути вопроса, только лишь потому, что купил Реле ПР200 только три дня назад. И впервые открыл программу OWEN Logic.
А зачем тогда существуют подобные форумы, если не для того, что бы общаться, набираться опыта и слушать более опытных товарищей?
Я как нуб, задаю вопросы, Вы как более опытные, поможете, если считаете нужным. А оскорблять в постах, не этично.

Андрей Михайлович
28.06.2020, 21:20
ну потому что у блинк две переменные времени, если Вы поставите на одно 2мс а на другое 3мс, Вы вроде как должны получить свои заветные 200Гц. Но раз уж Вы оба параметра хотите менять от одного значения многие герцы не получиться задать, поэтому стоит присмотреться к блокам выдающим только один импульс на заданный период

Эээ... вообще я завис:-( Я понимал две переменные которые записываются в ФБ как регулировку просто скважности импульсов. Каким таким образом изменяя значения этих переменных, можно получить увеличение частоты? Отношение длительности импульса к его паузе всегда говорило только о скважности.
Я не хочу менять оба параметра от одного значения, просто если не знаешь точно, какой длительности должен быть импульс, для надежного срабатывания следующего блока, лучше всего Меандр. Если бы знать, что достаточно импульса в 1 Мксек, остальное время можно было бы пустить на паузу. Но в моем случае, я применил равное количество времени как к длительности импульса так и к его паузе, получив Меандр, который точно ничего не испортит.
Сейчас я стабильно получаю 500 Гц, и регулирую эту частоту вниз кратно целым числам из за того, что блоки записи в ФБ только целочисленные. Но чем ниже частота, тем точнее регулировка получается. например я спокойно получаю 10 Гц, 4 Гц, и 3 Гц. Сам не ожидал, но прибор это отображает на экранах. Я вывел переменные на них.

Sulfur
28.06.2020, 21:23
Андрей Михайлович
Посмотрите личные сообщения.

Андрей Михайлович
28.06.2020, 21:25
capzar писал - Поэтому стоит присмотреться к блокам выдающим только один импульс на заданный период.

Что эта фраза означает? Поясните пожалуйста.
Где на них взглянуть на эти блоки? И что значит только один импульс, на заданный период? А разве генераторы за такт выдают больше или меньше?

Андрей Михайлович
28.06.2020, 21:27
Андрей Михайлович
Посмотрите личные сообщения.

Сейчас нет ничего в личных сообщениях. Пару дней назад я на одно ответил. С тех пор не было. Да мне и на телефон приходит оповещение о наличии сообщений в личку.

Андрей Михайлович
28.06.2020, 21:38
документацию прочтите еще раз тех блоков которые Вы использовали. Здесь 49910 все елементы что счетчик, что выход блинка обрабатываются только по переднему фронту что означает импульс длинною в один цикл контроллера

Документация на китайские поделки, к сожалению очень бедна. Во всяком случае там не оговариваются длительности импульсов. Только необходимая амплитуда и объясняется полярность подключения. У них вообще, каждый блок, предназначен для использования со своим собратом по производителю, который за тебя подумал о тонкостях. Это мы в России, кулибничаем, соединяя белое с серым, а затем можно и на черное перейти. У них так не принято.

Я не знал, что все обрабатывается только по переднему фронту. Как Вы видите, я даже поставил элемент, для выделения переднего фронта в нужном мне случае.
Но если все так как Вы сказали, зачем тогда переменная паузы? Да и вообще тогда зачем эти переменные, если обрабатываясь только по переднему фронту генератор будет выдавать импульс длительностью в цикл?
А как же тогда у меня происходит все таки регулировка частоты генератора, когда я меняю переменные?

Андрей Михайлович
28.06.2020, 22:14
О чем Вы? Вы точно познаете ОЛ или параллельно что то еще. Открыли ОЛ зашли в справку и прочли в данном случае Библиотеки->Функциональные блоки


PS или так 49911

Ой, простите, я Вас не так понял. Я думал вы советуете прочитать параметры импульсов требуемые для драйвера. А он как раз Китайский :-)

Андрей Михайлович
28.06.2020, 23:20
Вот попробовал 49912 Почему то раньше с Блинк, получалось фиксировать той же схемой 500 Гц. А тут только 334 Гц.

Андрей Михайлович
29.06.2020, 14:46
Вы же писали что 200 нужно было

Я просто констатировал факт понижения частоты. Только мне не понятно почему это происходит. Ведь тут просто реализована положительная обратная связь, которая приводит к генерации и импульс формируется так же с каждым тактом. Почему понижение?

capzap
29.06.2020, 15:14
Я просто констатировал факт понижения частоты. Только мне не понятно почему это происходит. Ведь тут просто реализована положительная обратная связь, которая приводит к генерации и импульс формируется так же с каждым тактом. Почему понижение?

для того чтоб получить 500Гц при абстрактном значении цикла программы в 1 мс, не нужны ни какие генераторы, достаточно инвертировать булеву переменную в каждом скане (https://studfile.net/preview/1862107/page:11/)
а в случаях когда время срабатывания таймера равно этому циклу, то выход обработается уже в следующем, поэтому совершенно нормально что часть импульсов пропадает

Андрей Михайлович
29.06.2020, 20:55
для того чтоб получить 500Гц при абстрактном значении цикла программы в 1 мс, не нужны ни какие генераторы, достаточно инвертировать булеву переменную в каждом скане (https://studfile.net/preview/1862107/page:11/)
а в случаях когда время срабатывания таймера равно этому циклу, то выход обработается уже в следующем, поэтому совершенно нормально что часть импульсов пропадает

Не совсем понятно, но я понял, что в таймере есть задержка времени срабатывания, и значение внутри сохраняется, следовательно только на следующем цикле будем получать значение уже опоздавшее на цикл. Странно, что оно не 250 Гц, а больше.
Не понятно, что означает фраза абстрактное значение цикла.
Подразумевается, что при нагрузке на процессор большим количеством переменных, экранов и тому подобное, это значение может меняться?

Еще вопрос, - " в каждом скане" Это имеется в виду каждый цикл?

Sulfur
29.06.2020, 21:16
Подразумевается, что при нагрузке на процессор большим количеством переменных, экранов и тому подобное, это значение может меняться?
Выполнить 1000 или 2000 команд - есть разница?

Еще вопрос, - " в каждом скане" Это имеется в виду каждый цикл?
Да.

Ревака Юрий
30.06.2020, 10:56
Не совсем понятно, но я понял, что в таймере есть задержка времени срабатывания, и значение внутри сохраняется, следовательно только на следующем цикле будем получать значение уже опоздавшее на цикл. Странно, что оно не 250 Гц, а больше.
Не понятно, что означает фраза абстрактное значение цикла.
Подразумевается, что при нагрузке на процессор большим количеством переменных, экранов и тому подобное, это значение может меняться?

Еще вопрос, - " в каждом скане" Это имеется в виду каждый цикл?

Может поможет понять специфику https://www.youtube.com/watch?v=qC5uuBg-eBc, делал анализ для дискретных входов, по выходам и другим блокам, будет аналогично.