Съдържание:

Ъглово позиционно управление на стъпков двигател 28BYJ-48 с Arduino и аналогов джойстик: 3 стъпки
Ъглово позиционно управление на стъпков двигател 28BYJ-48 с Arduino и аналогов джойстик: 3 стъпки

Видео: Ъглово позиционно управление на стъпков двигател 28BYJ-48 с Arduino и аналогов джойстик: 3 стъпки

Видео: Ъглово позиционно управление на стъпков двигател 28BYJ-48 с Arduino и аналогов джойстик: 3 стъпки
Видео: Пневмораспределитель - устройство и принцип работы. 2024, Юли
Anonim
Ъглово позиционно управление на стъпков двигател 28BYJ-48 с Arduino и аналогов джойстик
Ъглово позиционно управление на стъпков двигател 28BYJ-48 с Arduino и аналогов джойстик

Това е схема за управление на стъпковия двигател 28BYJ-48, която разработих, за да използвам като част от моя проект за дисертация за последната година. Не съм виждал това да се прави преди, затова реших да кача това, което открих. Надяваме се, че това ще помогне на някой друг там!

Кодът по принцип позволява на стъпков двигател да „копира“ъгловата позиция на аналогов джойстик, тоест ако натиснете джойстика напред, моторът сочи към „север“. натиснете джойстика на запад, моторът се върти, за да сочи в същата посока.

За моето изпълнение изисквах, ако джойстикът е пуснат, т.е. няма ъглово положение, моторът да се върне в посока "начало". Посоката на дома е обърната на изток, а моторът (или на лизинг какъвто и да е показалец / устройство, което сте прикрепили към изходния вал!) Също трябва да е обърнат в тази посока, когато е включен.

Консумативи

Arduino Uno или подобен

макет и избор на джъмперни проводници (мъжки към мъжки, мъжки към женски)

5V захранване

Аналогов джойстик модул (в идеалния случай с моментна функция на бутон, това улеснява почивката на позицията "вкъщи"

28BYJ-48 стъпков двигател и ULN2003 стъпков драйвер

Химикалка, хартия и blu-tac (или всяко друго устройство с показалец, което да се прикрепи към двигателя!)

Стъпка 1: Стъпка 1: Настройка

Свържете стъпковия двигател към стъпковия драйвер и свържете щифтовете, както следва:

IN1 - Arduino щифт 8

IN2 - Arduino щифт 9

IN3 - Arduino щифт 10

IN4 - щифт 11 на Arduino

Свържете вашето 5v захранване към захранващите шини на вашата дъска и свържете 5V входовете ULN2003 към захранващите шини. свържете земната релса към земята на вашия Arduino.

за джойстика, свържете както следва:

Превключващ щифт - Arduino щифт 2

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

Оста Y - Arduino A1

+5V - 5V изход на Arduino

GND - Arduino GND

Накрая свържете земята на вашата дъска към другия щифт на Arduino GND

Стъпка 2: Стъпка 2: Обясняване на кода

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

Теорията зад този код е, че пространството, заето от джойстика, е разделено на графика, с 0, 0 в центъра. обаче входовете на джойстика се намират на (приблизително) 512 в центъра, така че за преодоляване на това две функции се използват за "нулиране" на стойността, отчетена от оста X и Y. в зависимост от захранването, което използвате, може да се наложи да промените стойностите във функциите ZeroX и ZeroY, така че вашият джойстик да дава надеждно отчитане на 0, когато почивате.

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

И накрая, за да улесним живота на онези от нас, които са свикнали да работят в градуси, а не в радове, стойността на rad, изчислена от atan2 (), се преобразува в градуси.

В горната част на цикъла има малък фрагмент от код, който ви позволява да щракнете върху моменталния бутон на джойстика, за да преместите „домашното“местоположение. Това беше изключително полезно при тестването на кода, но го оставих, тъй като виждам как може да бъде полезен в някои случаи.

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

Останалата част от кода е доста ясна и аз направих всичко възможно да го документирам; Поредица от IF изявления сравняват текущия ъгъл на джойстика с ъгъла на двигателя и преместват двигателя до този ъгъл. 28BYJ-48 има 5.689 стъпки на градус, затова умножаваме необходимото движение с това на пръв поглед нечетно число!

Единствената част от кода, която изисква най -много обяснения, е това, което нарекох "опаковъчен случай". Дори когато джойстика и мотора бяха при напр. +175 °, а джойстикът впоследствие се премести на -175 ° (движение само с 10 ° на джойстика, от северозапад до юг от запад), моторът ще се движи В ГРЕШНА ПОСОКА с 350 °! за да се обясни това, е написан специалният случай.

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

Ако и двете твърдения са верни, тогава функцията проверява дали двигателят трябва да се движи по часовниковата стрелка (стойността на двигателя е отрицателна) или обратно на часовниковата стрелка (ако стойността на двигателя е положителна).

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

Стъпка 3: ЗАКЛЮЧЕНО

Така че, остава само да качите кода във вашия Arduino и да го стартирате! Вижте видеото по -горе за добра представа как функционира проектът. Това би било полезно за карданите на камерите, роботизираните ръце и много други приложения!

Ако използвате кода, моля, уведомете ме и ако видите някой, където кодът може да бъде подобрен, ще се радвам да чуя отзивите ви.

Препоръчано: