Bu yazıda ne yapacağız?
- Step motorun içinde bobinlerin sırayla nasıl yandığını göreceğiz.
- Tam adım, yarım adım ve mikro adım farkını öğreneceğiz.
- 28BYJ-48'i ULN2003 ile, büyük motoru A4988 ile Arduino'ya bağlayacağız.
- Hesaplayıcıyla tur başına adımı ve gereken darbe hızını bulacağız.
Neden işe yarar? Step motor, sensör kullanmadan "tam 90 derece dön" ya da "5 mm ilerle" demenin en kolay yoludur. 3D yazıcılar ve CNC tezgâhları bu yüzden step motor kullanır.
Step motor nedir, ne işe yarar?
Step motor, her elektrik darbesinde belirli bir açı (bir adım) dönen motordur. Darbeleri sayarak milin nerede olduğunu bilirsiniz, ayrıca sensör gerekmez.
Nerelerde kullanılır? 3D yazıcı ve CNC eksenleri, lazer kesiciler, kamera kaydırıcıları, döner tablalar, tarayıcılar.
Step motor nasıl çalışır?
Rotor bir mıknatıstır, çevresinde bobinler vardır. Akım verilen bobin mıknatıslanır ve rotoru kendine çeker. Bobinleri sırayla açıp kapatınca rotor adım adım döner.
Gerçek motorda rotor ve stator ince dişlidir, adımlar çok küçüktür: yaygın motorlarda bir adım 1,8°, bir tur 200 adım.
- Kaç derece döneceği: darbe sayısına bağlı.
- Ne kadar hızlı döneceği: darbelerin sıklığına bağlı.
Tam adım, yarım adım, mikro adım
- Tek bobin (wave): her adımda bir bobin açık. Az akım çeker, tork düşüktür.
- Tam adım: iki komşu bobin birlikte. Tek bobine göre yaklaşık 1,4 kat tork, iki kat güç.
- Yarım adım: bir tek, bir çift bobin. Adım sayısı iki katına çıkar (200 yerine 400).
- Mikro adım: A4988 gibi sürücüler bobin akımlarını kademeli ayarlayıp bir adımı 16'ya kadar böler (200 yerine 3200). Hareket yumuşar.
Kendiniz deneyin
Sürüş türünü seçip 1 adım ya da Oynat'a basın: hangi bobinin yandığını ve rotorun nereye döndüğünü izleyin. Altta kendi mekanizmanızı hesaplayın.
Burada bobinleri sırayla enerjileyip rotorun nasıl adım attığını izleyebileceğiniz bir simülatör ve tur başına adım, darbe frekansı, mm başına adım hesaplayıcısı var; JavaScript ile çalışır. Açılmadıysa yukarıdaki görseller aynı sırayı gösteriyor.
Deneyin: yarım adımda sekiz kez basın, model rotor tam tur atar. Sonra hesaplayıcıda 1,8° motor, 1/16 ve 20 dişli GT2 kasnak seçin: bir adım 0,0125 mm, yani 1 mm için 80 darbe.
Unipolar ve bipolar step motor
| Unipolar | Bipolar | |
|---|---|---|
| Kablo | 5 ya da 6 (bobinlerin orta ucu var) | 4 |
| Sürücü | Basit: ULN2003 gibi transistör dizisi | Her bobine bir H köprüsü: A4988, L298N |
| Örnek | 28BYJ-48 (5 telli) | 1,8° motorlar (3D yazıcılardaki NEMA 17 boy) |
Bipolar motorda akımın yönü değişmeli; bu yüzden her bobine DC motor yazısındaki H köprüsünden bir tane gerekir.
Step motor sürücü nedir? ULN2003 ve A4988
Bobinler Arduino pininin veremeyeceği kadar akım çeker; sürücü bu akımı Arduino'nun komutuyla anahtarlar.
- ULN2003: yedi transistör çifti, her çıkış 500 mA'e kadar. 28BYJ-48'in dört bobinini açıp kapatır.
- A4988: bipolar sürücü; 8-35 V, soğutmasız faz başına yaklaşık 1 A, 1/16 mikro adım. Arduino yalnız STEP (her darbe bir adım) ve DIR (yön) sinyali verir.
28BYJ-48 ve ULN2003 nasıl bağlanır?
// 28BYJ-48 + ULN2003: Stepper kütüphanesiyle bir tur ileri, bir tur geri
#include <Stepper.h>
const int ADIM_TUR = 2048; // tam adımda bir tur (katalog değeri)
// Sıra önemli: IN1, IN3, IN2, IN4 -> pin 8, 10, 9, 11
Stepper motor(ADIM_TUR, 8, 10, 9, 11);
void setup() {
motor.setSpeed(10); // rpm; 28BYJ-48 için 10-15 arası
}
void loop() {
motor.step(ADIM_TUR); // bir tur ileri (bitene kadar bekler)
delay(1000);
motor.step(-ADIM_TUR); // bir tur geri
delay(1000);
}
- Neden 8, 10, 9, 11? Kütüphane pinleri kendi sırasıyla sürer; bu yazımla bobinler A, B, C, D sırasıyla çift çift yanar. 8, 9, 10, 11 yazarsanız motor titrer.
- 2048 mi, 2038 mi? Datasheet'teki 1/64 oran tam adımda 2048 adım/tur eder. Dişlileri sayanlar gerçek oranı 63,68:1 bulmuş, yani yaklaşık 2038 adım. Saat gibi uzun dönen projelerde fark birikir: 10 tur deneyip ölçün.
- Hız: datasheet boşta kalkış frekansını yalnızca "600 Hz'den büyük" diye verir. 10-15 rpm ile başlayın (15 rpm = 512 adım/s).
A4988 ile step motor nasıl bağlanır?
// A4988 + 1,8° bipolar step motor: STEP/DIR ile tur
const int STEP_PIN = 3;
const int DIR_PIN = 2;
const int ADIM_TUR = 200; // MS1-MS3 boş: tam adım
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
}
// adim kadar darbe gönder; aralikUs: iki darbe arası süre
void git(int adim, bool ileri, unsigned int aralikUs) {
digitalWrite(DIR_PIN, ileri ? HIGH : LOW);
for (int i = 0; i < adim; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(aralikUs / 2); // datasheet: en az 1 µs
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(aralikUs / 2);
}
}
void loop() {
git(ADIM_TUR, true, 5000); // 200 Hz = 60 rpm
delay(1000);
git(ADIM_TUR, false, 5000); // geri
delay(1000);
}
- Akım sınırı: kart üstündeki trimpotla ayarlanır. Pololu kartında formül Vref = 8 × I × Rcs; Rcs = 0,068 Ω ise 1 A için Vref ≈ 0,54 V. Başka kartlarda direnç farklı olabilir, kartınıza bakın.
- Kondansatör: VMOT ile GND arasına, karta yakın en az 47 µF. Gerilim sıçramaları sürücüyü bozabilir.
- Mikro adım: MS1, MS2, MS3 boşsa tam adım, üçü de HIGH ise 1/16. O zaman
ADIM_TUR3200 olur. - Motoru güç varken takıp çıkarmayın: sürücü yanabilir.
Step motor kaç volt ile çalışır?
- 28BYJ-48: datasheet'teki sürüm 5 V'tur. Motorun üstünde yazan gerilime bakın.
- Bipolar motorlar: etiketteki gerilim çoğu zaman düşüktür; A4988 gibi akımı sınırlayan sürücüyle daha yüksek beslemeyle (8-35 V) sürülür ve böylece daha hızlı adım atar. Akım sınırı motorun anma akımını aşmamalı.
Step motor dururken de konumunu tutmak için bobinlerinden akım geçer, bu yüzden beklerken de ısınır.
Step motor uçları nasıl bulunur?
Multimetreyi ohm kademesine alın:
- 4 telli (bipolar): iki tel arasında direnç okunuyorsa aynı bobindir, okunmuyorsa farklı bobinlerdir. İki çift bulursunuz: biri 1A-1B'ye, öbürü 2A-2B'ye.
- 5 telli (28BYJ-48): kırmızı tel ortak uçtur; kırmızı ile diğer her tel arasında aynı direnç okunur.
- Motor ters dönüyorsa: bir bobinin iki ucunu kendi arasında değiştirin ya da DIR'i kodda çevirin.
Step motor ile servo motor arasındaki fark
| DC motor | Servo motor | Step motor | |
|---|---|---|---|
| Hareket | Sürekli döner | Belirli açıya gider, çoğu 0-180° | Adım adım, sürekli de döner |
| Konumu nasıl bilir? | Bilmez, enkoder gerekir | İçinde ölçer | Darbeleri sayarak, ölçmeden |
| Sürüş | H köprüsü + PWM | Tek sinyal teli | Sürücü + darbe dizisi |
| Zayıf yanı | Konum için sensör ve PID | Sınırlı açı | Aşırı yükte adım kaçırır ve fark etmez |
Ayrıntılar: servo motor nedir?
Sık yapılan hatalar
| Belirti | Sebep | Çözüm |
|---|---|---|
| 28BYJ-48 titriyor, dönmüyor | Kodda pin sırası 8, 9, 10, 11 | Stepper motor(2048, 8, 10, 9, 11) |
| Bipolar motor titriyor | Bobin çiftleri karışmış | Multimetreyle çiftleri bulun |
| A4988 hiç tepki vermiyor | RST boşta | RST ile SLP'yi birleştirin |
| Konum zamanla kayıyor | Fazla hız ya da yük, düşük akım sınırı | Yavaşlatın, yavaş hızlanın, Vref'e bakın |
| Motor ve sürücü çok ısınıyor | Akım sınırı yüksek | Vref'i motorun anma akımına göre ayarlayın |
| 28BYJ-48 tam turu tutturamıyor | Gerçek dişli oranı 63,68:1 | 2048 yerine ölçtüğünüz değeri kullanın |
Kaynaklar
Erişim: 17 Ekim 2026
- Douglas W. Jones (University of Iowa), Control of Stepping Motors: Stepping Motor Types: unipolar ve bipolar, tek bobin, tam ve yarım adım, yaklaşık 1,4 kat tork.
- Kiatronics, 28BYJ-48 5V Stepper Motor datasheet (CERN kurs kopyası): 5 V, 4 faz, 1/64, 5,625°/64, boşta kalkış frekansı > 600 Hz.
- Arduino Forum, Geared Stepper Motor: dişli sayımı ve 63,68395:1 oranı.
- Arduino, Stepper kütüphanesi ve kaynak kodu: 4 telli sürüş sırası,
setSpeed()vestep(). - Pololu, A4988 Stepper Motor Driver Carrier: 8-35 V, faz başına yaklaşık 1 A, MS tablosu, RST-SLP, 47 µF, akım sınırı formülü.
- Allegro, A4988 datasheet: STEP darbesi en az 1 µs.
- Texas Instruments, ULN2003A datasheet: Darlington dizisi, çıkış başına 500 mA.
- Prusa Research, RepRap Calculator: GT2 kayışın 2 mm diş adımı.