Проблемы с управлением шаговым двигателем
 

Проблемы с управлением шаговым двигателем

Автор iartemov, 17 марта 2014, 18:05:05

« назад - далее »

iartemov

Здравствуйте!

У меня возникла проблема с управлением шаговым двигателем AD-200-32 с помощью контроллера SMSD-4.2. Проблема следующая: мне необходимо, что шаговый двигатель мог в любой момент стабильно поменять направление вращения. Я с помощью программы SMC_Program поочередно записываю следующие программы:

Начать загрузку: 3 канал
Начало программы
Установить сигнал РАЗРЕШЕНИЕ
Движение влево
Скорость 1000 шагов/сек
Выполнить 1000 шагов
Завершить загрузку
Начать/закончить работу: 3 канал

Начать загрузку: 3 канал
Реверс
Скорость 1000 шагов/сек
Выполнить 1000 шагов
Снять сигнал РАЗРЕШЕНИЕ
Завершить загрузку
Начать/закончить работу: 3 канал

После прошивки второй программы двигатель несколько раз меняет направление вращения. Если после окончания выполнения программы нажать кнопку СТАРТ, то меняет направление один раз, но при этом делает заметно меньше шагов в обе стороны.

Не могли бы Вы подсказать почему так происходит?

Ирина

Здравствуйте.

Был проведен эксперимент с блоком SMSD-4.2, в который была записана Ваша программа, работает так как нужно.
Вы записываете сначала в блок такую программу:

Начать загрузку: 3 канал
Начало программы
Установить сигнал РАЗРЕШЕНИЕ
Движение влево
Скорость 1000 шагов/сек
Выполнить 1000 шагов
Завершить загрузку
Начать/закончить работу: 3 канал


После того как Вы нажимаете кнопку "отправить" в SMC_Program, двигатель у Вас делает 1000 шагов со скоростью 1000шагов/сек в одну сторону.

Когда Вы отправляете следующую программу:

Начать загрузку: 3 канал
Реверс
Скорость 1000 шагов/сек
Выполнить 1000 шагов
Снять сигнал РАЗРЕШЕНИЕ
Завершить загрузку
Начать/закончить работу: 3 канал


Она дозаписывается к предыдущей, так как не имеет команды  "Начало программы".  И теперь, после того как Вы нажимаете кнопку "отправить" в программе SMC_Program, двигатель совершает 1000 шагов в одну сторону и 1000 шагов в другую сторону и с него снимается питание.

Теперь сколько раз Вы будете нажимать кнопку "отправить", столько раз у Вас данная часть программы будет дозаписываться к уже имеющейся в блоке программе. Если записать эту часть 3 раза. То у Вас будет в блоке получится следующая программа:


Начало программы
Установить сигнал РАЗРЕШЕНИЕ
Движение влево
Скорость 1000 шагов/сек
Выполнить 1000 шагов
Реверс
Скорость 1000 шагов/сек
Выполнить 1000 шагов
Снять сигнал РАЗРЕШЕНИЕ
Реверс
Скорость 1000 шагов/сек
Выполнить 1000 шагов
Снять сигнал РАЗРЕШЕНИЕ
Реверс
Скорость 1000 шагов/сек
Выполнить 1000 шагов
Снять сигнал РАЗРЕШЕНИЕ


Каждый раз двигатель будет делать 1000 шагов и реверс. И если после выполнения программы нажать кнопку "Старт" на самом блоке управления, двигатель выполнит снова всю ту последовательность команд, которая в него записана.

Объясните пожалуйста более подробно какое движение должен совершать двигатель. Знаете ли Вы заранее, когда у Вас должен быть реверс, или Вы этого не знаете, и хотите задавать данную команду в нужный Вам момент?


iartemov

Теперь сколько раз Вы будете нажимать кнопку "отправить", столько раз у Вас данная часть программы будет дозаписываться к уже имеющейся в блоке программе.
Нажимаю один раз для обеих программ.

Объясните пожалуйста более подробно какое движение должен совершать двигатель. Знаете ли Вы заранее, когда у Вас должен быть реверс, или Вы этого не знаете, и хотите задавать данную команду в нужный Вам момент?
Мне необходимо синхронизовать шаговый двигатель и камеру, т.е. в зависимости от того какая информация поступает с камеры определяется направление вращения двигателя и заранее это неизвестно.

iartemov

Проблема не в софте, я отправил примерно ту же последовательность команд (в одной программе) через программу управления двигателем, которую написал сам, но проблема не решилась.
Вот последовательность, которую отправлял:
LD3*
BG*
EN*
DL*
SD1000*
MV1000*
RS*
SD1000*
MV1000*
DS*
ED*
ST3*

Ирина

По той программе что Вы написали, у Вас команда на реверс присутствует один раз. Причем в самом начале работы Вы четко определяете направление вращения.  У Вас начинается движение "влево", двигатель делает 1000 шагов, делает реверс, и сновы выполняет 1000 шагов, останавливается, с обмоток двигателя снимается питание - программа завершена. Если Вы заранее не знаете в какую сторону будет движение, может быть Вам удобно было бы использовать физический вход РЕВЕРС. В самой программе Вы однозначно задаете определенное направление вращение, когда Вам необходимо сделать реверс, то замыкаете GND и РЕВЕРС на блоке. Сигнал активируется по переднему фронту, и двигатель сделает реверс.

Если Вы блок прибретали недавно, то там теперь есть режим покомандного управления - как только отправляется в блок команда, двигатель ее сразу же отрабатывает. Но это требует постоянного подключения к компьютеру. Когда Вам нужно переместиться то подаете в блок последовательность команд DL* (или DR*), SDxx*, MVxx*, если во время движения необходимо сделать реверс, то отправляете команду RS* и двигатель тут же сменит направление вращения.

iartemov

Это была просто тестовая программа, чтобы отследить реакцию двигателя на команду реверс. Реакция неадекватная: он меняет направление вращения несколько раз. Я хотел бы узнать почему может возникнуть такая ситуация.

Если Вы блок прибретали недавно, то там теперь есть режим покомандного управления - как только отправляется в блок команда, двигатель ее сразу же отрабатывает.
Этот режим как то включается? У меня до записи команды завершения ничего не двигается.

Ирина

Цитата: iartemov от 18 марта 2014, 17:08:42
Реакция неадекватная: он меняет направление вращения несколько раз.

У Вас направление вращения меняется несколько раз во время выполнения заданных 1000 шагов ? И выполняет неравное количество шагов? Визуально если попробовать определить.

Цитата: iartemov от 18 марта 2014, 17:08:42
Этот режим как то включается? У меня до записи команды завершения ничего не двигается.

Режим уже включен в режиме контроллера. Если у Вас поддерживается данный режим работы, то после отправки в блок такой последовательности команд, например:
EN*
SD500*
MV1000*

двигатель у Вас сразу начнет двигаться. Команды  LD*, BG*, ED* в данном случае использовать не нужно.

iartemov

У Вас направление вращения меняется несколько раз во время выполнения заданных 1000 шагов ? И выполняет неравное количество шагов? Визуально если попробовать определить.

Направление несколько раз меняется в ходе выполнения всей программы. Визуально количество шагов равное, но меньше 1000 (количество шагов до смены направления).

Режим уже включен в режиме контроллера. Если у Вас поддерживается данный режим работы, то после отправки в блок такой последовательности команд, например:
EN*
SD500*
MV1000*

двигатель у Вас сразу начнет двигаться. Команды  LD*, BG*, ED* в данном случае использовать не нужно.

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

Ирина

Вам на электронную почту была отправлена новая версия программы, с помощью нее считайте пожалуйста ту программу которая записана у Вас в блоке и пришлите это в ответ.

Что касается концевика, то использовать его для сигнализации не получится. Как вариант можно использовать команды ML* или MH* (движение до поступления сигнала на ВХ1 или ВХ2). И к нужному входу подключить датчик (пример схемы подключения датчика приведен в паспорте на блок управления). Тогда у Вас двигатель будет вращаться пока не получит сигнал от датчика, после чего остановится.


iartemov

А Вы не могли бы мне скинуть на почту часть кода smc_program, отвечающую за команды ML* и MH*?

iartemov

RD1*BG*EN*DL*SD1000*MV1000*RS*SD1000*MV1000*DS*ED* - программа, считанная из памяти.

Ирина

Вам на электронную почту была направлена методика проверки блока управления.

Код самой программы SMC_Program я Вам отправить не могу.

Если Вы в блок отправите последовательность команд в программе:
SD500*
MH*

то двигатель будет вращаться со скоростью 500шагов/сек пока не будет подан сигнал на ВХ2 блока управления (пока ВХ2 и GND не будут замкнуты - работает по переднему фронту).

Если Вы в блок отправите:
SD500*
ML*

то двигатель будет вращаться со скоростью 500шагов/сек пока не будет подан сигнал на ВХ1 блока управления (пока ВХ1 и GND не будут замкнуты - работает по переднему фронту).