Elektronik Devreler Projeler Elektronik ve biraz daha fazlası İletişim - Araçlar - Dikkat - Topluluk
Elektronik / Mikrodenetleyici Projeleri/

PIC16F628A L297 L298 ile Step Motor Sürücü

Sponsorlu Bağlantılar

Merhabalar arkadaşlar.

Bir hocamın isteği üzerine tasarlamış olduğum step motor sürücüsünü sizlerle paylaşmak istiyorum. Sistemi yapmaya başlayalı aslında epeyce oluyor. Fakat işlerin yoğunluğundan dolayı anca bitirebildim.

Yaptığım sürücü genel olarak tasarlandı. Yani herhangi özel bir amaca hizmet etmiyor. Kısacası Step motorların çalışmasını gözlemlemek amacıyla yapıldı diyebilirim. Yapmış olduğum sürücü ile 1.8 veya 7.5 adım açısına sahip step motorlarda kullanılabilir. Motoru Tam ve Yarım sürüş modunda sürebilirsiniz. Ayrıca daha önce set edilen devire tek tuşla çıkartabilirsiniz. Veya motoru adım adım hareket ettirebilirsiniz.

Buna benzer birkaç özellik ekledim :)

Başlıktan da anlaşılacağı üzere Sürücü kısmında L297 ve L298 ikilisini kullandım. Bu iki entegre sayesinde step motor üzerinde birçok işlem yapabiliyoruz/

L297 adım motor kontrol entegresidir, Girişine uygulanan kontrol ve clock sinyalleri ile çıkışında adım motorun faz sinyallerini üretmektedir.

L298 ise H-bridge motor sürücü entegresidir. içerisinde iki adet H köprüsü bulunup birçok alanda kullanılabilir. Max 2A/phase akım verebilir.

Ana kontrolcü olarak her zamanki gibi pic16f628 :) ve yapılan işlemleri görüntülemek içinde 2X8 LCD kullandım. L297 nin clock frekansını pic16F628 ‘in RB3 pini yani Donanımsal PWM modülünden veriyorum. Ayrıca L297’nin Enable, CW-CCW ve HALF/FULL pinlerinide 16F628 ile kontrol ediyorum. Donanımım genel olarak böyle.

Sistemin Şeması aşağıdaki gibidir.

l297-l298-step-motor-surucu-devresi

Sistemi kurarken L297′ nin ilk sayfasında verilen şemayı birebir uyguladım. Buna Rağmen sürüş şeklinden pek memnun kaldığım söylenemez. Bu durumda L298 ile birlikte çalışırken L297′ nin akım değerini düşürmeme rağmen akım kontrolünü iyi yapamadı. Düşük devirlerde motoru titretiyor.Bu konu üzerinde epeyce ugraştim ama pek bir gelişme kaydedemedim.

Devrenin beslemesinde Lm2575 kullandığım için 40V a kadar besleme gelirimi verebilirsiniz. Ben testlerimde 39V’ un üzerine çıkmadım. Tüm testlerim de bu seviyede yaptım. Buna rağmen yüksek devirlerde gerçekten problem oluyor. 1.8 dereceli motorlarda 200 – 250 rpm e kadar, 7.5 adım açılı motorlarda ise 300-400 rpm’ye kadar problemsiz çıkabiliyorum. Bu devirlerden sonra motor rezonansa giriyor ve duruyor. Bunu bir türlü aşamadım. Yaptığım sistemdeki en büyük sorunlardan biride bu olacak ki sanırım besleme voltajını dahada arttırmak gerekiyor.

Dediğim gibi Sistemin testlerini yaparken çeşitli step motorlarda denedim. Bunların hepsi 1.8 ve 7.5 adım açısına sahip, yazıcılardan tarayıcılardan söktüğüm ve daha önce CNC için satın almış olduğum bipolar ve unipolar motorlardı. L297 nin Clock palsini 16F62’in HPWM donanımı ile elde ettiğim için 4 Mhz osc frekansı ile min 250Hz alabiliyorum. Maximun frekans ise benim elimde olmasına rağmen şimdilik ben 3333hz ile sınırladım. Bu frekansın yeterli olduğunu düşündüm.

Yeri Gelmişken söylemek isterim. Simülasyon denemelerimi isis ortamında yaptım. İsiste 2×8 LCD bulunmadığı için 2X16 kullandım. Boyut dışında aralarında hiçbir fark yoktur. Niye ekranın yarısını kullandın diye sormayın sakın :)

Sistemin kullanımı şöyledir.

Normal çalışmada ekran görüntüsü yan şekildeki gibidirResim1

Burada üst satırda Motorun devri gösterilir. işlemcinin PWM donanımından çıkan frekansı bildiğimiz için Motoru devrini motoun adım açısını ve sürüş modunu baz alarak hesaplayabiliyoruz. Örneğin. resimdeki gibi 7.5 derecelik bir motoru tam adımda sürdüğümüzü düşünelim. Motor 360 derecelik bir turunu 48 adımda tamamlar. Bu elde edilen değerlerden sonra devri hesaplamanın birkaç yolu var. Örneğin dakikadaki clock sayısını hesaplayıp 1 turdaki adım sayısına bölerseniz devir bilgisini elde etmiş olursunuz. Fakat frekans değeri büyüdükçe sayılarda büyüyeceği için ben dakikada 1 tur döndüğünü varsayarak sn kaç tur döneceğini hesapladım. Bu elde ettiğim katsayıyı frekans değeriyle çarparsanız yine devri elde etmiş olursunuz. Yani Devir=PWM_Freq*(60/1 Turdaki Adım sayısı)

250hz için hesaplarsak 250*(60/48)=312.5 dev/dak olarak bulunur. Aynı hesabı 1.8 derece için yaparsak 250*(60/200)=75 dev/dak olarak bulunur. Eğer Sürüş Modu FULL yerine HALF seçilirse bu değerler yarı yarıya düşer.

Devrede 6 adet buton var. Bunlar Sırasıyla Start, Stop, Up, Down, DRC, ve Set Butonlarıdır.

Up Butonu ile motor devri arttırılır. 1.8 derecelik motorlarda max. değer 1041, 7.5 derecelik motorlarda ise max. değer 4339 RPM dir.

Down Butonu ise Up butonunun tam tersi iş görür. 1.8 derecede min. RPM değeri 75 devir, 75 Derecelik motorlarda ise 312 devir/dakikadır.

Start Butonu Önceden set edilmiş bir devire rampalı bir şekilde çıkılmasını sağlar.

Stop Butonu ise Motoru rampalı bir şekilde yavaşlatıp durdurur.

DRC Butonu Motor devir yönünü değiştirmeye yarar. Motoru yumuşak bir şekilde durdurup devir yönünü değiştirdikten sonra eski devrine yumuşak bir şekilde çıkartır.

Set Butonu ise Motorla ilgili parametrelerin girileceği menüye girilmesi sağlanır.

Şimdi Parametrelere bakalım.

İlk Menü Step_Ang Menüsüdür Buradan Motorun Step açısı seçilir. Şimdilik 1.8 ve 7.5 olmak üzere 2 seçenek var. Menüler arası gezme sadece set butonu ile olur.

Bir Sonraki adım Driv_Mod parametresidir. Görevi belli zaten. Motorun Tam adımdamı yoksa Yarım adım modundamı sürüleceğini belirliyorsunuz.

Daha Sonra Soft_Strt RPM Menüsü Gelir. Bu menüde Ana Çalışma modunda Start butonunabastığınızda motorun hangi devire çıkacağını belirlediğiniz menüdür.

Bir Sonraki Adımda ise Soft_Strt Acc Menüsüne gelirsiniz. Start butonuna bastığınızda motor istenilen devire birden çıkamaz. Belli bir rampayı tırmanarak çıkması gerekir. İşte bu menüde rampaya tırmanış hızını belirlersiniz. 1 ile 10 arasında bir değer vermeniz gerekir. 1 değerini verdiğinizde motor hızlı, 10 değerini verdiğinizde ise motor yavaş bir şekilde istenilen devire çıkar.

Ayarlar Bunlardan ibaret. Bu menüden sonra çıkmak için set butonuna basmanız yeterlidir. Ayarlar kaydedilip ana çalışmaya dönülür.

Yeri gelmişken söyliyeyim. PWM donanımının yapısından dolayı Yüksek frekanslarda PWM çözünürlüğü düşüyor. Aynı zamanda frekans artışındaki lineerlikde bozuluyor. Bu durumdan dolayı frekans yükseldikçe motor daha hızlı hızlanmaya başlıyor. Bu dengesizlik düzetilebilir fakat şuanda işlemcinin hafızasında yer kalmadığı için uğraşmadım.

Son olarak birde Step_Mod menüsü vardırki bu menüye girmek için Ana çalışma modunda Set butonuna yaklaşık 2 sn boyunca ekranda Step_Mod Yazısını görünceye kadar basmanız gerekmektedir. Step Mod özelliği aslında son anda aklıma geldi. Dedim bari yapmışken motoru adım adımda sürebilelim. :) Bu menüde Up ve Down Butonlarıyla Motoru adım adım hareket ettirebilirsiniz. DRC butonuna basıp motorun sürüş şeklini değiştirebilirsiniz. Menüden çıkmak için yine Set butonuna basmanız gerekir. Genel olarak ayarlar böyle. Yazı sonundaki videoda daha net görebilirsiniz.

Baskı devre aşağıdaki gibidir.

l297-l298-pcb

Görüldüğü üzere Beslemede Lm2575 kullandım. Bu yüzden en fazla 40V ile besleyebilirsiniz. L298 max. 46V gelirimle çalışır Eğer LM2575HV serisini kullanırsanız 46V a kadar verebilirsiniz. Baskı devrede LM2575 in altında giriş kondansatörü var. Bu min. 50V luk olması gerekiyor. Yazmayı unutmuşum.

PCB konusunda biraz uğraştım gerçekten. Çizimi devam ettirirken özellikle L297 ve L298 Çevresini tamamlamak bayağı vaktimi aldı. Birçok yerde padlar arasından 1-2 yol geçirmem gerekti. Durumun böyle olması tabi PCB basımını birazcık zorlaştırıyor. Bu konuda biraz tecrübeli olmak gerekiyor sanırım.

L298 e Mutlaka soğutucu bağlanmalıdır. Ben denemelerimde aşırı akım yüzünden 1 tanesini bozdum. Çok kolay bozulabilen bir enteğre olduğu için iyi soğutulması gerekiyor. Benim kullandığım soğutucu PCB üzerine çizdiğimle aynıdır. Normalde bir anakart üzerinden sökmüştüm. Dedim bari boşa gitmesin burada değerlendireyim. Öylede oldu. Birde PCB ye Fan yeri koydum. Fakat buradada ufak bir tasarım hatası yapmışım. Fanlar 12V ile çalışır. Eğer cihazı 12V ile besliyorsanız sıkıntı yok ama 30-40V ile besliyorsanız mutlaka fan üzerinde yine LM2575 li bir devre kurarak voltajı sabitlemelisiniz.

microchip-projects-l297-l298-stepper-motor-driver-1

microchip-projects-l297-l298-stepper-motor-driver-2 microchip-projects-l297-l298-stepper-motor-driver-3 microchip-projects-l297-l298-stepper-motor-driver-4

Gördüğünüz üzere Soğutucu Oldukça cins bir yapıya sahip. :D Piyasada bulmanız pek mümkün görünmüyor.

Yazılımda bayağı bir uğraştırdı. Aslında yazılımın hiç zor bir tarafı yok. Herşey açık yapılan iş belli. Sorun lanet olası şu 16F628 ‘in hafızasının az olması. :D Çok güzel abileri var ama elimde çok sayıda olduğu için değerlendirmek elimden çıkarmak istiyorum. Yapılan işlemleri hafızaya sığdırtmak için 40 türlü dereden su getiriyorum :) Ama bu işinde iyi bir yanı var. Hafızada 1byte alanın hesabı yapmak zorunda kalınca kod optimizasyonunda kendimi bayağı geliştirdim :)

Birde video çektim. Videodaki motor 1.8 derecelik ve 2.2nm lik bir step motor. Eski bir cihazdan sökmüştüm. Elimde buna benzer birçok motor var. Bende birçok test yaptım.

Ekteki videoda sistemin tüm özelliklerini görebilirsiniz.

Videodaki motor 6 uclu unipolar bir motordu. Fakat motorun ortak uclarına enerji verince düşük devirlerde çok akım çektiği için bende motoru bipolar olarak çalıştırdıdm. Yani sürücüye sadece motorun faz ucları bağlı.

Buradaki videoda ise motoru 1000 rpm ye kadar çıkardım. Ama genelde bu devirlerde çalışmıyor. Rezonans frekansını geçtikten sonra motor milini hafif elimle çevirirsem hemen senkronizasyon yakalanıyor ve motor dönmeye başlıyor.
7.5 derecelik motorlarla da max devir olan 4339dev/dak kadar çıkabildim. Tabi yukarıda bahsettiğim teknikle. Yoksa aynı durum onlar içinde geçerli.

Yaşadığım problemlere rağmen benim için step motorlar konusunda çok iyi bir tecrübe kaynağı oldu

PIC16F628A L297 L298 ile Step Motor Sürücü dosyalar: pic16f628a-l297-l298-ile-step-motor-surucu.rar

Bir sonraki yazımda görüşmek dileğiyle..

  • niko

    paylaşım için çok teşekkürler

  • fatih

    hocam paylaşımınız çok güzel. tez için yapmayı düşünüyorum proteusa aktarmada sıkıntı çektim. motor 44,4 e kadar gelıp duruyor harhangi bir şekide mudahale edemıyorum. yardımcı olursanız çok sevinirim. ffatihcelikk@gmail.com mail adresim.

  • sefa aydoğdu

    arkadaşlar lcd yi bulamıyorum hep 14 bacaklı 2*8 var bulabilenniz oldumu adres verebilrmisiniz

  • gölge

    merhabalar benim bir sorun olacaktı bu devrenin programı hangi dilde yazılmıştır.hangi programı kullanarak yazdınız acaba yardımcı olursanız çok sevinirim.saygılarımla

  • hasan

    paylaşım çok güzel eline sağlık kardeşim yanlız preteus ve ares dosyalarını atma ihtimalin varmı kardeşim atarsan çok sevinirim teşekkür ler

  • yasin akbaba

    hocam öncelikle ellerinize sağlık güzel bir çalışma olmuş.aynı devreyi ben yaptm fakat yazılımı da yükledim ama sistem çalışmadı lcd de yazı çıkmıyor. yani sunu düşündüm sisin atmış olduğunuz hex dosyası 11kb fakat 16f628a nın hafızası 3kb burada yanlışlık var diye düşünüyorum.pic e yükleyeceğimiz program ıgönderme şansınız olursa akbaba.yasin@hotmail.com