Оглавление:

Угловое позиционное управление шагового двигателя 28BYJ-48 с Arduino и аналоговым джойстиком: 3 шага
Угловое позиционное управление шагового двигателя 28BYJ-48 с Arduino и аналоговым джойстиком: 3 шага

Видео: Угловое позиционное управление шагового двигателя 28BYJ-48 с Arduino и аналоговым джойстиком: 3 шага

Видео: Угловое позиционное управление шагового двигателя 28BYJ-48 с Arduino и аналоговым джойстиком: 3 шага
Видео: Шаговый двигатель с энкодером как серво удерживает положение #industrialcontrol #steppermotor #асу 2024, Ноябрь
Anonim
Угловое позиционное управление шагового двигателя 28BYJ-48 с помощью Arduino и аналогового джойстика
Угловое позиционное управление шагового двигателя 28BYJ-48 с помощью Arduino и аналогового джойстика

Это схема управления шаговым двигателем 28BYJ-48, которую я разработал для использования в рамках моей дипломной работы на последнем году обучения. Я не видел этого раньше, поэтому подумал, что выложу то, что обнаружил. Надеюсь, это поможет кому-то еще!

Код в основном позволяет шаговому двигателю «копировать» угловое положение аналогового джойстика, то есть, если вы нажимаете джойстик вперед, двигатель указывает на «север». нажмите джойстик на запад, двигатель вращается в том же направлении.

Для моей реализации я требовал, чтобы, если джойстик отпущен, т.е. не имеет углового положения, мотор возвращался в «исходное» направление. Начальное направление обращено на восток, и двигатель (или, по крайней мере, любой указатель / устройство, которое вы прикрепили к выходному валу!) Также должен быть обращен в этом направлении при включении.

Запасы

Arduino Uno или аналогичный

макетная плата и выбор перемычек (мужчина к мужчине, мужчина к женщине)

Источник питания 5В

Модуль аналогового джойстика (в идеале с функцией мгновенного нажатия кнопки, это упрощает выход из «исходного» положения

Шаговый двигатель 28BYJ-48 и шаговый драйвер ULN2003

Ручка, бумага и blu-tac (или любое другое указательное устройство, которое можно прикрепить к двигателю!)

Шаг 1: Шаг 1: Настройка

Подключите шаговый двигатель к драйверу шагового двигателя и соедините контакты следующим образом:

IN1 - вывод 8 Arduino

IN2 - вывод 9 Arduino

IN3 - вывод 10 Arduino

IN4 - вывод 11 Arduino

Подключите источник питания 5 В к шинам питания на макетной плате и подключите входы 5 В ULN2003 к шинам питания. подключите шину заземления к земле на вашем Arduino.

для джойстика подключите следующим образом:

Вывод переключателя - вывод 2 Arduino

Ось X - Arduino A0 (аналог в 0)

Ось Y - Arduino A1

+ 5V - выход Arduino 5V

GND - Arduino GND

Наконец, подключите заземление макета к другому контакту Arduino GND.

Шаг 2: Шаг 2: объяснение кода

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

Теория, лежащая в основе этого кода, заключается в том, что пространство, занимаемое джойстиком, разделено на график с 0, 0 в центре. однако входы джойстика находятся на (приблизительно) 512 в центре, поэтому для преодоления этой проблемы используются две функции, чтобы «обнулить» значение, считываемое с осей X и Y. В зависимости от используемого источника питания вам может потребоваться изменить значения функций ZeroX и ZeroY, чтобы ваш джойстик выдавал надежное значение 0 в состоянии покоя.

Когда значения X, Y считываются, они сначала преобразуются в радианы с помощью функции atan2 () в библиотеке math.h. Объяснение этой функции выходит за рамки данной инструкции, но, пожалуйста, найдите ее - это довольно простой геометрический трюк!

Наконец, чтобы облегчить жизнь тем из нас, кто привык работать в градусах, а не в радах, значение рад, вычисленное с помощью atan2 (), конвертируется в градусы.

В верхней части цикла находится небольшой фрагмент кода, который позволяет щелкнуть кнопку мгновенного действия на джойстике, чтобы переместить «домашнее» местоположение. Это было невероятно полезно при тестировании кода, но я оставил это, так как вижу, как это может быть полезно в некоторых случаях.

Теперь перейдем к основной части кода! мы начинаем с считывания координат X, Y джойстика, дважды разделенных задержкой 10 мс, а затем проверки, совпадают ли они - я обнаружил, что джойстик иногда выдавал спорадические показания, и этой небольшой задержки было достаточно, чтобы остановить вращение двигателя на основе этих. Это также достаточно короткая задержка, чтобы не мешать преднамеренному вводу.

Остальная часть кода говорит сама за себя, и я приложил все усилия, чтобы задокументировать ее; Серия операторов IF сравнивает текущий угол джойстика с углом двигателя и перемещает двигатель на этот угол. 28BYJ-48 имеет 5,689 шагов на градус, поэтому мы умножаем необходимое перемещение на это, казалось бы, нечетное число!

Одна часть кода, которая требует наиболее подробного объяснения, - это то, что я назвал «циклическим случаем». В то время как джойстик и мотор были, например, + 175 °, а затем джойстик переместился на -175 ° (движение джойстика всего на 10 °, с севера на запад к югу от запада), двигатель двигался В НЕПРАВИЛЬНОМ НАПРАВЛЕНИИ на 350 °! для объяснения этого был написан специальный случай.

Случай обхода начинается с проверки того, что двигатель и джойстик имеют противоположные знаки, то есть двигатель положительный, а джойстик отрицательный, или наоборот. Он также проверяет, что сумма абсолютных (то есть положительных значений) джойстика и двигателя превышает 180 °.

Если оба эти утверждения верны, функция затем проверяет, должен ли двигатель двигаться по часовой стрелке (значение двигателя отрицательное) или против часовой стрелки (если значение двигателя положительное).

Абсолютные значения угла мотора и угла джойстика суммируются и вычитаются из 360 °, чтобы определить расстояние, на которое нужно переместиться. Наконец, угол мотора (который теперь отражает угол джойстика) обновляется как таковой.

Шаг 3: ЗАВЕРШЕНО

Итак, все, что осталось сделать, это загрузить код в Arduino и запустить его! Посмотрите видео выше, чтобы получить хорошее представление о том, как работает проект. Это было бы полезно для подвесов камеры, роботизированного оружия и многих других приложений!

Если вы используете код, дайте мне знать, и если вы увидите, что код можно улучшить, я хотел бы услышать ваш отзыв.

Рекомендуемые: