STM32-A4988 İLE STEP MOTOR SÜRÜLMESİ

Adım motoru sürmek için ST nin L298N tümleşik devresini kullanıyordum. Ancak, bipolar teknoloji kullanan bu tüm devre, daha modern MOSFET yapıdaki rakiplerine göre verimsiz kalıyor.

Ayrıca, kullanmakta olduğum yarım adım (half-step) sürüm yöntemini de L298 ile hakkını vererek uygulayamıyordum. Bu, başlangıçta işin kodlama tarafına ağırlık verdiğimden öncelik vermediğim bir konuydu.

Bir süre sonra, malzeme kutularımda beklemekte olan A4988 sürücü kitini cepheye sürerek daha gelişmiş motor sürüm tekniklerini kullanmaya karar verdim.

Bu yayının konusu bu; A4988 ile adım motoru sürülmesi – L298 ile karşılaştırmalı olarak.

BU GÜNE KADAR KULLANDIĞIM MOTOR SÜRÜCÜLER

Adım motorlarını elime ilk aldığımda ULN2003 tabanlı sürücü kit ile işe başlamıştım. Bunun hemen ardından ST nin L298 tüm devresine geçtim ve uzun süre onu kullandım.

İlk göz ağrım sağdaki ULN2003 kiti. İlk DC motorumu sağa sola onunla döndürmüştüm. İlk unipolar adım motorumu da onu kullanarak çalıştırmıştım.

Sol üstteki kırmızı modül, CNC projelerime başladığımda kullandığım L298 kiti. Bipolar adım motorlarını sürmeye kalktığımda gerekli olan H köprüleri için ilk elime geçen kit bu olmuştu.

Alttaki de bugün kullanmakta olduğum A4988 sürücü kiti. Aynı akım kapasitesine sahip bipolar L298 ile MosFet A4988 arasındaki boyut farkı dikkat çekiyor. A4988 in işlevsellik ve verim açısından üstünlükleri de cabası.

DİĞER SÜRÜCÜ SEÇENEKLERİ

L298 ile tam adım (full step) ve yarım adım (half step) tekniklerini uzun süre kullandım. Aşağıda anlatacağım gibi yarım adım tekniğini biraz eksiği ile uygulamış da olsam başlangıçta işimi gördü. L298 i daha verimli, yani akım kontrolu ile, tam ve yarım adım tekniklerinin ötesinde kullanmak için ST nin L297 kontrolcüsü ile kontrol etmek de mümkün. Ancak, L298 in 3 dolar, L297 nin 6 dolarlık -Özdisan fiyatları- fiyatlarına bunların çevresine koyacağınız kondansatör, konnektör, PCB vb. maliyelerini de ekleyerek düşünmek gerekiyor. Tek motorluk bir L297/L298 çiftini içeren bir sürücü kiti Ali express de 14 dolar’a satılıyor. Üstelik hala ısıl performansı düşük, elektrikli ısıtıcı gibi çalışan bipolar teknoloji kullanıyor oluyorsunuz. Bu fiyatın yarısına 4 motor sürebilen DMOS sürücü kitleri bulunabiliyor.

Texas’ın DRV8824 ve DRV8825 tüm devreleri de fiyat-performans açısından uygun görünüyordu. Ben malzeme kutumda hazırda bulunan A4988 tabanlı kitte karar kıldım.

Haziran 2022 güncellemesi: A4988 li bu uygulamadan sonra L297/L298 tabanlı yeni bir model geliştirdim. Böylece L298 in A4988 e göre eksik kalan yönlerini tamamlayarak yüksek performanslı ve yapısına daha fazla hakim olabildiğim bir yapı elde ettim. Onunla ilgili yayınım için burayı tıklayabilirsiniz : AKIM SINIRLAMASI İLE ADIM MOTORU SÜRMEK.

TANIMLAR – ADIM/PERİYOD

Öncelikle, kafa karışıklığına yol açabilecek “adım” tanımlarını yaparak başlamakta yarar var.

Bilindiği gibi motor bobinlerine belirli bir sıra ile ters-düz yönlerde akımlar uygulayarak adım adım ilerlemesini sağlıyoruz.

Tam adım dediğimiz en basit ve ilk seviyede akım uygulama aşamaları şöyle (Şekil ST AN435 dokumanından alınmıştır):

Buradaki her bir aşamaya bir “motor adımı” ya da kısaca adım diyoruz. Her adımı 1.8 derece olan bir adım motoruna bir tur döndürmek için bu sırayı tekrarlayarak uygulayan 200 adet adıma gerek oluyor.

Bu dört adımlık çevrime “periyod” adını veriyorum.

“Yarım adım” sürüm tekniğinde bu adımların her birini ikiye bölüp, yarım adımlarla ilerliyoruz. Bu durumda her bir adım, 2 adet yarım adımdan oluşuyor. Bir periyod da 8 yarım adımdan oluşuyor. Motor artık 400 adet yarım adımda dönüyor.

Yarım adım (half step) tekniği ile adım motoru sürmek için bobinlere uygulanan akımlar.

Diğer tekniklerde, dalga şekillerini aşağılarda vereceğim gibi, her bir tam adım 4,8,16 ve 32 küçük adıma bölünüyor. Bu mini adımlara da “mikro adım” (microstep) adını veriyoruz.

Bu tanımlardan hareketle, motor her zaman aynı sayıda adımla bir tur atıyor, Farklı sürüm tekniklerini kullanarak her bir adımın daha küçük olan yarım adım ve mikro adımlara bölünmesini sağlıyoruz.

YARIM ADIM SÜRÜM TEKNİĞİ

Farklı sürüm teknikleri ile her bir tam adımı yarım ve mikro adımlara bölüyor da olsak, şahsen motoru ilerletip durdurduğum açılar tam ve yarım adım konumlarına karşı düşen adımlar oluyor. Yani, 16 mikro adım tekniğini uyguladığımızda motoru her seferinde 16 nın katları olan mikro pozisyonlara ilerletiyorum. Bu, mikro adımlardaki konum doğruluğunu ve tutunma stabilitesini henüz test etmemiş olmamdan kaynaklanıyor.

Bu nedenle genelde kullandığım yarım adım tekniği ile anlatmaya başlayayım. Motorun daha sessiz ve rezonansa girmeden çalışmasını sağlayan 4, 8 ve 16 mikro adım yöntemlerini de kullanıyorum, onlardan da söz edeceğim.

Yarım adım (half step) tekniğinde bobinlere uygulanan akımlar aşağıdaki gibi. Çizimi ST nin AN235 uygulama notundan aldım.

ŞEKİL 1 – Yarım adım tekniği ile bobinlere uygulanan akımlar (ST AN235 Application note)

Bu yöntemi uzun süre L298 sürücü ile kullandım, iki faz bobinine uyguladığım akımlar aşağıdaki gibi:

ŞEKİL – 2 : Yarım adım (half step) tekniği ile bobinlere uyguladığım akımlar

L298 İLE UYGULADIĞIM YARIM ADIM TEKNİĞİNİN KUSURLARI

Yukarıda ŞEKİL 2 de verdiğim dalga şekilleri ile ŞEKİL 1 deki senaryo uyumlu görünüyor ama aşağıdaki önemli noktayı gözden kaçırıyoruz:

Şekil-2 deki gri bölgelerde iki faz bobininden sadece birisi enerjilenmiş durumda oluyor. Yani bu sürelerde statorun manyetik akı yoğunluğu diğer periyotlara göre düşük durumda. Bu da bu yarım adımlarda motorun torkunun düşeceği ve çalışmasının titreşimli olacağı anlamına geliyor. Bunu düzeltmek için bu aralıklarda motor akımının 1,414 kat arttırılması gerekiyor, yani akım dalga şekillerinin aşağıdaki gibi olması lazım:

Bunun için akım kontrolü gerektiği açık. Ama ben basitçe sabit gerilim uygulamaktaydım. Bırak akımı belli periyodlarda 1.4 katına çıkarmayı, normal periyodlarda dahi gereken düzeyde tutmaktan uzaktaydım.

Kısaca elimiz mahkum, doğru düzgün bir motor sürüm tekniği uygulamam zorunlu.

A4988 ARDUINO KİTİ

İnternet üzerinden böyle bir kit 7-8 dolara satın alınabiliyor. Ben de zamanında alıp malzeme kutuma atmıştım. 4 adet minik -ama 2A akım kapasiteli- A4988 modül, soğutucular, Arduino uyumlu konnektörleri olan bir adaptör kartı için inanılmaz bir fiyat. Burada kullanılan malzemeleri tek tek almaya kalksam 5 katını veririm her halde.





Önemli uyarı : Ucuz etin yahnisi yavan olur. Ucuz Çin mallarını kullanırken dikkatli olmak gerekiyor. Bu kitin elime aldığım ilk örneğinde beni iki gün uğraştıran bir kısa devre çıktı. Y_dir ve z_step hatları arasında gözden ırak bir yerde kısa devre varmış, sistemin kararsız çalışmasına yol açıyordu. O kadar ki, neredeyse A4988 denemesi bir fiyasko olarak sonuçlanıp bir kenara atılacaktı. Osiloskop ile tüm sinyalleri tek tek kontrol ederek sorunu belirleyebildim. Kısa devrenin nerede olduğunu bulamadım, komponentlerin altında bir yerlerde idi. Su yollarını kesip, tellerle atlama yaparak sonuca ulaşabildim. Türkiye'de 15 liraya satılan bir kart için bu kadar uğraşmaya değer mi diyeceksiniz, ama iş inada binince böyle oluyor.
Çin yapımı malzemeler ile ilk olumsuz tecrübem değil bu. PCB üzerindeki beyaz baskılarda, bağlantı kablolarının renk kodlandırmalarında sık sık yanlış yönlendiren hatalarla karşılaşıyorum. Önceleri ilk olarak kendimden şüphe ediyordum, artık önce malzemeden şüphe ederek hareket ediyorum. 

Şimdi bunu STM32F103 e bağlamak için bir Arduino uyumlu adaptör lazım. O da benim CNC ana kartımda var.

Bu yayındaki uygulamayı bir Nucleo kiti üzerinde de yapabilirdim, orada da Arduino uyumlu bir konnektör dizisi var çünkü. Ama benim elimdeki Nucleo kitlerinde STM32F401 ve STM32F302 var, halbuki ben bu yayın için STM32F103 kullanmak istiyorum.

CNC kontrol modülümdeki Arduino uyumlu soketler kırmızı STM32 modülün alt ve üst taraflarında görünüyor.

Aslında CNC Kontrol kartımdaki Arduino uyumlu konnektörleri, paralel girişli TFT leri takarak kullanmak üzere koymuştum, bilmeden çok da iyi yapmışım, zira bunlardan yararlanarak sadece ekran değil, Arduino uyumlu bir sürü modülü kullanabiliyorum.

Arduino konnektörleri adım motor sürücüsüne tahsis edince, ekran olarak SPI ya da I2C arayüzlü bir ekran kullanabilirim.

CNC kontrol kartımda, önceki uygulamama ait L298 sürücüler fotonun üst tarafında görünüyor. Şimdi onlar devre dışı kalacaklar.

Arduino uyumlu A4988 motor sürücü kartını CNC kontrol kartıma takınca görünüm böyle oluyor.

Adım motor kontrol kitini bu konnektörlere takınca görünüm soldaki gibi oluyor. Şimdilik tek motorla deneme yaptığımdan A4988 modüllerden birinin soğutucusunu yapıştırdım. Bu yapıştırma tekniği pek güvenilir değil, soğutucu ikide birde düşüyor. Bir çaresini bulmak gerek.

A4988 kartı, 5V beslemesini CNC kontrol kartından alıyor. Motor beslemesi için de 20V 6A lik NoteBook adaptörü kullandım. Motor NEMA17 bipolar tipte, 1 Amperlik.

Çalışma modunu (tam, yarım, 1/4, 1/8, 1/16) seçmeye yarıyan M0, M1, M2 köprüleri A4988 modülün altındaki alanda kalıyor Yarım adım modu için bunlardan M0 ın köprüsünü takıyoruz, diğer ikisi açık kalıyor. Tam adım modunda hepsini açık bırakıyoruz.

A4988 MOTOR SÜRÜCÜ MODÜLÜ

Esas oğlan bu. Allegro A4988 DMOS sürücü, boyutlarından umulmayacak şekilde her bir fazda 2 amper akım taşıma kapasitesine sahip, tabi soğutucusu ile, bir fan konursa daha da güvenli olur..

AKIM SINIRLAMA AYARLARININ YAPILMASI

Bu konu çok önemli. Tümleşik devrenin akım ve sıcaklık korumaları olduğu belirtiliyor ama buna fazla bel bağlamamakta yarar var. Bu ayar doğru yapılmazsa tümleşik devreye de, motora da zarar verme riski çok yüksek.

Sağdaki trimmer akım sınırlaması için. A4988 Motora PWM modunda akım verdiğinden, motor besleme kaynağından çekilen akım ile motor bobininden geçen akım aynı değil. Bu nedenle besleme kaynağından çekilen akımı ölçerek ayar yapamayız.

Akımı algılayan S1 ve S2 (0,1 Ohm) dirençlerinin uçlarına erişmek de çok zor, oralara osilokop probunu değdirmeye kalkıştığımda modüllerimden birisini yaktım ve bu yöntemden vazgeçtim.

Kesin çözüm olarak : Motor bobin uçlarından birinden araya ampermetre ile girdim, bobin akımını gözlerken trimmeri çevirerek istediğim akıma getirdim.

Bunu yapabilmek için A4988 tam adım (full step) modunda iken, programı debug modunda adım adım çalıştırarak, herhangi bir adımda durdurmak yeterli. Çünkü her adımda bobinden bu yönde ya da tersi yönde bir akım mutlaka akıyor oluyor.

Dikkat : Zannediyordum ki, trimmer maksimum konumda dahi olsa en azından tümleşik devreye zarar vermeyecek bir akım ile sınırlama yapıyordur. Oysa öyle değil, trimmer maksimumda iken 3 amperin üzerinde akım geçişine izin veriyor. Allegro’nun data sheetinde ise 2.1 amperde sınırlama olduğu yazıyor. En azından benim kullandığım yongalarda bu doğru değil. Çin malı bunlar, klon da olabilir. Yani, akım ayarını yapmadan motoru çalıştırıp bir noktada beklemeye alırsanız motordan da devreden de dumanlar/kokular yükselmeye başlayacaktır. Trimmer ortalarda iken başlayıp ayar yapmak gerekiyor.

Dikkat edilmesi gereken ikinci nokta : Bu yöntemle ayarladığımız akım, full stepdeki nominal akım seviyesi, yani yukarıdaki Şekil 1 ve Şekil 2 deki %100 seviyesi. Yarım adım (half step) yönteminde ve diğer mikro adım yöntemlerinde bunun 1,41 katı akım geçecek zaman dilimleri olacağını unutmamak gerekiyor. Benim motorumun nominal akımı 1.2 amper idi, ayarımı bu akıma uygun yaptım. Sözünü ettiğim %141 akımlı adımlarda bu akım 1.7 ampere çıkıyor. Bu akım sürekli değil, her dört adımda bir aktığından motora bir zarar gelmez. Ama bu akım 2 Amperin üzerine çıkacak olursa tüm devreye zarar verme riski çok yüksek olurdu.

AKIM KONTROLUNU A4988 E BIRAKIYORUZ, BUNU PWM İLE YAPIYOR

Bu sistemde biz sadece motoru ilerleten adım ve yön sinyallerini üretip A4988 e veriyoruz. Gerisini A4988 kotarıyor. Akımı, modül üzerindeki trimmer ile ayarladığımız maksimum değeri aşmayacak PWM akım darbeleri ile ayarlıyor.

Eğer osiloskop ile motor bobinlerindeki gerilim ya da akımları gözlemeye kalkarsak burada verdiğim güzel kare ve sinüs simülasyonu dalga şekillerini değil, bakarak ne olduğunu anlamak imkansız diyebileceğim bir darbeler silsilesi göreceğimizi belirtmeliyim.

Örneğin yarım adım sürüm tekniğindeki bobin akım darbeleri :

Üstteki iki iz, kırmızı ve sarı olanlar, bir bobinin iki ucundaki gerilimler, alttaki de bunların aritmetik farklarından oluşan bobin uçları arasındaki gerilimler. Anlık olarak akmakta olan akımdan gelen geri beslemeye göre ayarlanmış yön ve genişliklerde darbeler gürülüyor. Bunun sonucu, ortalaması yaklaşık olarak bir sinüse karşı düşen akım oluşturan sürüm gerilimleri.

Burada göz ile ayırt edebildiğimiz yegane bölgeler, akımın kesintisiz olarak verildiği kesimler. Bu zaman dilimleri, akımın yüksek ortalama değerlerle aktığı, sinüsün tepe bölgelerine karşı düşüyor.


Bu da tam adım sürüm tekniğine ilişkin olarak aynı akım sinyallerinin görünümü. Burada darbe genişliklerinin bir sinüs ortalaması oluşturduğu biraz daha algılanabilir durumda :

DEVRE ŞEMASI

ALLEGRO’nun A4988 data sheetinde verdiği motor bağlantı diyagramı ve blok şeması :

Pololu sitesinden aldığım devre şeması aşağıdaki gibi, ama benim kullandığım modülde bu şemaya göre farklılıklar olabilir. En azından S1 ve S2 dirençlerinin buradaki gibi 50 miliohm değil, 100 miliohm olduğunu biliyorum.

TEST PROGRAMI

Test için kullandığım kod aşağıdaki gibi. Açıklamaya gerek bırakmayacak kadar basit olduğunu düşünüyorum. 800 µs ilk minimum adım süresini bağladığım NEMA 17 minbea K435 motor için deneyerek belirledim.

Test programı, 1.8 derece adımlı, minimum 800µs adım süreli motor için, yarım adım modunda

Burada kullanılan motora göre tam devir adım sayısı 200 den farklı olabilir. Çalışılacak moda göre step_mode parametresini 1,2,4,8 ve 16 olarak seçebiliyoruz. Verdiğim örnek kod yarım adım modunda çalışmaya yönelik, onun için step_mode 2 olarak seçilmiş.

4, 8 ve 16 MİKRO ADIM YÖNTEMLERİ İÇİN AKIM DİYAGRAMLARI

Motorun tek adım ve yarım adım yöntemlerine göre daha da sarsıntısız çalışmasını istersek bu teknikleri kullanabiliriz. Ancak ben çalışmalarımda motorun mikro adım konumlarında durdurulması halindeki açısal doğruluk ve tekrarlanabilirliğini test etmedim.

Test ettiğimde sonuçları paylaşırım.

Aşağıdaki diyagramlarda %100 olarak gösterilen seviyenin benim yukarıdaki anlatımımdaki %141 e, %71 olan seviyenin de %100 e karşı düştüğünü göz önüne alarak inceleyiniz. Akım sınırlaması ayarlarını yaparken yukarıdaki paragraflarda vermiş olduğum uyarılar dikkate alınmalıdır.

Bu diyagramları ALLEGRO nun data sheetinden aldım.

1/4 mikro adım yönteminde bobin akımları.
1/8 mikro adım yönteminde bobin akımları
1/16 mikro adım yönteminde bobin akımları.

SONUÇ

A4988 kullanarak yukarıda anlattığım yarım adım sürüş tekniğini kullandığımda belirgin bir iyileşme gördüğümü belirtmeliyim. Motor çok daha hızlı, güçlü, sessiz ve titreşimsiz çalışıyor. Motorun gücündeki farkı milini elimle tutarak durmaya zorladığımda anlayabiliyorum, kaba bir karşılaştırma yöntemi ama iş görüyor. Motoru sürebildiğim hız da iki katına çıkmış görünüyor ama yük altında biraz daha test yapmam lazım.

Bu güç artışının iki nedeni var.

Birincisi; önceden bu motoru 5V sabit besleme kaynağından besliyor, içinden akan akımın ne olduğuna bakmıyorum bile. Konnektörlerde, kablolarda ve özellikle L298 in bipolar çıkış tranzistorlarındaki gerilim düşümlerinden geriye motora pek bir şey kalmadığından eminim.

İkincisi; tek bobinin enerjilendiği adımlardaki akımın, tork kaybını telafi edecek biçimde 1.4 katına çıkartılıyor olması. Ben daha önce bunu yapmıyordum.

4,8, ve 16 adım modlarında da çok sessiz ve titreşimsiz, güçlü bir sürüş elde ettim.

Şimdi sırada bunu CNC ye uyarlamak var. CNC deki motorlar biraz daha büyük, NEMA23. Donanım olarak sorun görünmüyor ama yazılımda bazı adaptasyonlar yapmak gerekecek.

2021 Güncellemesi : Bu çözümün CNC ye uygulanması konusundaki yayınıma buradan ulaşabilirsiniz : A4988 tabanlı yeni model CNC (2021).

Bu yayının sonu – Selçuk Özbayraktar Ağustos 2020