Такие двигатели разработаны для применения в механизмах, где детали поворачиваются точно на требуемый угол. Вращение вала шагового двигателя состоит из малых перемещений – шагов. 28BYJ-48-5V – шаговый двигатель низкой мощности. Чаще всего мы видим результат работы маломощного шагового двигателя, интересуясь который час, глядя на стрелки циферблата электромеханических часов. Работа более мощных шаговиков нам видна, когда мы следим за перемещением каретки матричного или струйного принтера.
Одно из множества применений 28BYJ-48-5V в любительской робототехнике – использование для привода колес шасси. Используя 28BYJ-48-5V легко получить модель электропривода робота, относящегося к классу мотор-колесо. Это позволяет собирать роботов, способных развернуться на месте и обладающих точным позиционированием в пространстве благодаря цифровому управлению двигателем.
Вместе с двигателем идет модуль драйвера на ULN2003 – матрице из семи транзисторов Дарлингтона. Подключать шаговые двигатели к плате Arduino или любым микроконтроллерам рекомендуется только через подобные драйверы.
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
#define IN1 2 #define IN2 3 #define IN3 4 #define IN4 5 int Steps = 0; boolean Direction = true; unsigned long last_time; unsigned long currentMillis; int steps_left=4095; long time; void setup(){ Serial.begin(115200); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); // delay(1000); } void loop(){ while(steps_left>0){ currentMillis = micros(); if(currentMillis-last_time>=1000){ stepper(1); time=time+micros()-last_time; last_time=micros(); steps_left--; } } Serial.println(time); Serial.println("Wait...!"); delay(2000); Direction=!Direction; steps_left=4095; } void stepper(int xw){ for (int x=0;x<xw;x++){ switch(Steps){ case 0: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break; case 1: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH); break; case 2: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break; case 3: digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break; case 4: digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; case 5: digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; case 6: digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; case 7: digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break; default: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; } SetDirection(); } } void SetDirection(){ if(Direction==1){ Steps++;} if(Direction==0){ Steps--; } if(Steps>7){Steps=0;} if(Steps<0){Steps=7; } } |
Документация 28BYJ-48
Документация ULN2003
Библиотека AccelStepper