Opis
Niezwykle popularny silnik krokowy 28BYJ-48 z zintegrowaną przekładnią. Przeciętna cena sprawia, że ten silnik krokowy jest dostępny dla każdego a dzięki sterownikowi i podpięciu pod mikrokontroler daje mnóstwo możliwości sterowania tym silnikiem. Dostępna jest również biblioteka, która upraszcza sterowanie silnikiem tylko do podania prędkości, kierunku obrotu, i możliwości wykonania określonej ilości kroków. Tak więc silnikiem sterujemy bez najmniejszego problemu. Silnik krokowy jest dokładny a więc można wykorzystać go w projektach gdzie potrzebna jest duża dokładność np. drukarka 3D lub innych.
Specyfikacja silnika
- Napięcie znamionowe: 5 V
- Pobór prądu na cewkę: 100 mA
- Przełożenie: 64:1
- Rezystancja cewki: 50 Ω
- Moment trzymający na wyjściu przekładni: 0,3 kg*cm (0,03 Nm).
- Wyprowadzenia: pięć przewodów)
- Średnica wału: 5 mm ze ścięciami
- Masa: 35 g
- Odległość pomiędzy otworami montażowymi: 35 mm
- Wymiary: ϕ28 x 19 mm (bez wału)
Specyfikacja sterownika
- Napięcie pracy: 5 V
- Zastosowany układ: ULN2003
- Złącze zgodne z dołączonym do zestawu silnikiem
- Diody LED wskazujące aktualną fazę
- Siedem pinów wejściowych - IN1...IN7
- Wymiary płytki: 35 x 32 mm
Schemat połączenia silnika ze sterownikiem
Połączenie z Arduino
IN1 >> D8
IN2 >> D9
IN3 >> D10
IN4 >> D11
VCC >> 5V
Gnd >> Gnd
Przykład kodu programu
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
int Steps = 0;
boolean Direction = true;// gre
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; }
}
Datasheet silnika krokowego:
http://robocraft.ru/files/datasheet/28BYJ-48.pdf
Datasheet sterownika: