SAYISAL DEVRE TASARIMI_4 MOTOR KONTROL

Bu yazımda, Mikroişlemci olmadan sayısal devrelerle, nasıl motorları kontrol edebiliriz. Sorusuna cevap arayarak başlayalım.
Genelde kullandığımız 3 çeşit motor var. DC motorları ve AC motorları saymıyorum popüler olanları söylüyorum.
Bunlar,
Step Motorlar,
Servo Motorlar (enkoderli),
Servo Motorlar (PWM Örnek SG-90)

Bu 3 tip motoru sayısal devrelerle, kolaylıkla kumanda edebiliriz. Kontrol de edebiliriz.
Fakat bu yazı dizimizde nihai hedef, Mikroişlemci devrelerin işini rahatlatabileceğimiz modüller tasarlamak.
Bu modüller Mikroişlemcilerden komutu alıp, motorları kumanda edecek ve sonrasında da geri bildirim verecek.
Diyeceksiniz ki Mikroişlemci neden kendi kontrol etmesin?
Mikroişlemci ile kolay kontrol edebilirsiniz.
Fakat şöyle düşünün.
X ekseninde motoru çalıştırdı ve durasıya kadar onu kontrol etmek zorunda. Enkoderden gelen bilgileri kaçırmadan saymak zorunda. Tabii ki bu sırada yapması gereken işleri ise ASKIYA almak zorunda.
Çünkü sadece motorun düzgün bir şekilde istediği noktaya gelmesini beklemekle meşgul olacak.

Yapmak istediğimiz ise, motor gitmesi gereken noktaya giderken, Mikroişlemci diğer işlemlere gidebilsin. Hatta X motoruna hareket verdikten sonra Y motoruna da hareket versin. Nasıl olsa hazırladığımız modül kart gideceği yere geldikten sonra durduracak ve Mikroişlemciye istenen noktada hazır diye bilgi verecek. O zaman Mikroişlemci programın diğer işlevlerini devreye alabilecek. Tabii ki bu sırada Mikroişlemci switch ve sensörlerden gelen hata mesajı olursa onları da değerlendirebilecek.

O zaman bu modül kartın, Mikroişlemciden gideceği koordinatı veya adım sayısını öğrenmesi gerekiyor. Motoru o noktaya göndermesi ve durdurması gerekiyor. Sonrasında da Mikroişlemciye bilgiyi vermesi gerekiyor. Bu haberleşme Mikroişlemcilerin PİM sayısı az olacağından tek ya da 3 kablolu seri haberleşme yöntemleri ile yapılabilir. Ya da başka haberleşme şekilleri kullanılabilir.

Buraya kadar ne yapmak istediğimizi ortaya koyduk. Şimdi de nasıl yapacağımıza bakalım.

Öncelikle endüstriyel bir makinede eksenlerin temeline bakalım. İlk enerji verdiğimizde Motor nerededir? Tabla nerededir?
Mikroişlemcinin ve hazırladığımız modül kartın bunu bilmesi olanaksızdır. Bundan dolayı
ZERO( Sıfırlama işlemi yapılmalıdır.)
Bu işlemde ZERO butonuna basılır ve motor tasarımcının belirlediği yönde çalışır ve aşağıdaki resimdeki gibi ZERO SW 0 noktası anahtarına basar. Fakat bu basma gerçek sıfır noktasını göstermez. Gerçek sıfır noktası Enkoderin sıfır noktası geldiğinde ikisinin de sıfır olması durumunda gerçekleşir ve motor diğer yöne hareket eder.
Tabii ki bu hareketi yaparken enkoderin adımlarını sayarak nerede olduğunu bilir.
Step motorda enkoder yok. İstenirse de takılabilir. Fakat onun da sıfırlamaya ihtiyacı var. O da aynı mantıkla ilk hareketini, ZERO SW. anahtarına doğru yapar ve bu sırada adım sayılmaz. Sonrasında ise bu SW basıldığında motor tersine dönerek adımları sayar. Bu şekilde Mikroişlemci tablanın hangi eksende, nerede olduğunu bilir. Bu resme bakarsanız 3 çalışma bölgesi vardır.
Birincisi Limit SW lere kadar olan bölge bu anahtarlara basıldığında durur.
İkincisi Zero sw bölgesidir. Tabla bu anahtara kadar giderek zero işlemini tamamlar.
Üçüncü bölge de Çalışma bölgesidir. Bu da Z eksenini veya diğer parçaları tehlikeye atmadan çalışacağı bölgedir.

En alttaki videoda bir makinenin ZERO işlemini göreceksiniz. Tablanın boş olan kısımları çalışma bölgesini göstermektedir.

SG-90 servo motorun sıfırlama ihtiyacı yoktur. Direkt olarak kod verilerek istenen noktaya gelir. Çünkü yarım turdan fazla dönmüyor. Şayet 1 turdan fazla dönmüyorsa ona ZERO işlemi gerektirmez.

Öncelikle en kolayı olan SG-90 servo motor (PWM) tipini ele alalım.
Bu normalde kaba işlemler için kullanılır. Yani 1 derecelik hassasiyet pek kullanılmaz. Bu -90 0 90 olarak çalışacak demek de değildir. Fakat modül kartımızda, Mikroişlemci ile dijital bir kodlama vasıtasıyla çalışıyorsak, bu kodu analog gerilime dönüştürmemiz gerekir. Bu da 8 bitlik bir sayı olacağından çok hassas bir gerilim olamayacaktır. Yani bir POT gibi hassas bir gerilim elde edilemeyecektir. Bununla birlikte istediğimiz miktarda ara gerilim de olduğundan, ara değerlere de yer verilecektir.

DAC dediğimiz Dijital Analog çevirici devreleri bu yazımda anlatmıştım.
https://www.mikrobotik.com/wp2/2023/05/12/sayisal-devre-tasarimi_2_adc/

Bu yazıda temelini anladıktan sonra, kullanılan entegrenin içinin benzer olduğunu ve çalışma şeklini anlarsınız. Bu entegre Mikroişlemciden gelen koda göre bir analog gerilim üretir. Bu analog gerilim OPAMP devresiyle ayarlanır ve çıkışa aktarılır. Burada RV1 potansiyometresi çıkıştaki gerilimin fazla olan kısmını keserek PWM sinyalinin doğru bir şekilde çıkmasını sağlar. Ayrıca 555 entegresinde resimde gösterilen ayar yerlerinden frekansın değiştirilmesi sağlanarak istenen frekansın ve PWM sinyalinin elde edilmesini sağlar. Bir de OPAMP geri beslemesi R1 direncini ayarlayarak Dijital sayıya karşılık gelen gerilimi ayarlayabilirsiniz. Mesela bu haliyle 0-1V arası çalışırken 1-2V arasına getirebilirsiniz. Tabii ki PWM sinyalinin ayarını da yapmalısınız.

Peki SG-90 servo motor nasıl çalışır. Detaylara bu yazımdan bakabilirsiniz.
https://www.mikrobotik.com/wp2/2019/03/06/kutuphanesiz-servo-motor-kullan/

Kısaca özetlersek motorun sola 90 derece dönmesi için 1ms HIGH verilmesi yeterli. 0 derecede olması için 1.5ms verilmesi gerekir. Sağa 90 derece için ise 2ms HIGH seviyesi verilmesi gerekir. Tabii ki bu HIGH seviyesinin maksimum 20ms içinde tekrarlanması gerekir.

Benim tasarımımda toplam süre 13.5 ms olduğundan, her 13.5ms de bir HIGH sinyali verilmektedir. Burada 555 devresi VCO (Voltage controlled oscillator) olarak çalışmaktadır. Mikroişlemcinin verdiği koda göre gerilim oluşur bu gerilime göre de frekans oluşur.
Çalışma şeklini videoda görebilirsiniz.


Bu kart sadece motor dönüşünü sağlıyor.
Neler eklenebilir.
Motor gideceği yere komut alsa bile gidemiyorsa, sorun Mikroişlemciye bildirilir. Ya da bir limit sw. Basıldıysa hata bildirilir. Ya da ne kadar döndüğü geri bildirim olarak verilecekse bir POT motora bağlanır ve ADC devresiyle POT konumu Mikroişlemciye bildirilir. Bu kısımlar sizin isteğinize kalmış seçimlerdir.

  1. motor çeşidimiz STEP MOTOR.
    Bu motorlarda tek faz, çift faz çalışma, ayrıca tam adım ve yarım adım çalışma şekilleri vardır.
    Step motorlar konusunda daha detaylı bilgiyi de BU yazımdan okuyabilirsiniz.
    https://www.mikrobotik.com/wp2/2022/06/04/step-motor-nedir-nasil-calisir-ve-projelerde-nasil-kullanilir-kutuphanesiz/

Ben burada basit olsun diye tek faz çalışmayı göstereceğim. Bu tip çalışmanın avantaj ve dezavantajlarını step motor yazımda okuyabilirsiniz.

Bu motorunda ZERO işlemine tabi tutulması gerektiğini yukarıda belirtmiştim. Resmin üst solunda ZERO butonuna basılarak ZERO işlemi başlatılır ve motor sola dönmeye başlar bu sırada en sağdaki sayıcı saysa bile önemsizdir. Sonrasında motor tablayı taşıyıp zero anahtarına bastığında (ZERO butonunun hemen altında olan) Motor sağa dönmeye başlar ve zero anahtarı kapandığında en sağdaki sayaç LOAD girişiyle sıfırlanır. Bu şekilde motor sağa dönmeye başladığında sayaç yukarı doğru saymaya başlar. STEP motorun sağa ve sola dönüşünü U8A ve U8B Flip flopları ile 2 adet VE kapısı belirler. Bu şekilde son kısımdaki sayacın Yukarı doğru sayması ve aşağı doğru sayması ayarlanmış olur.

Peki mikroişlemci ile nasıl bağlantı kurarız? İsterseniz bu sayaç çıkışlarını direkt gönderebilirsiniz. Ya da benim saü altta yaptığım gibi bir karşılaştırıcı entegre koyarak Mikroişlemciden alacağınız adım kodunu karşılaştırıcıya verirsiniz. Sonrasında step motor dönerken sayacın saydığı sayıyla karşılaştırırsınız. Bu şekilde 2 sayı eşitlendiğinde osilatör durdurularak motorun durması sağlanır. Aynı zamanda Mikroişlemciye belirlenen koordinata geldiğini geri bildirim olarak iletebilirsiniz. Burada 8 bit işlem yaptım fakat sayısal tasarım yazılarımda hem karşılaştırıcı hem de 16 bitlik sayıcı entegrelerinin nasıl beraber kullanılabildiğini gösterdim. Siz isterseniz sayıcı entegrenizi 4 tane kullanarak birbirine bağlayıp 16 bitlik bir kodlama oluşturabilirsiniz. Tabii ki 16 bitlik kodlama yapılıyorsa 16 bitlik de karşılaştırma yapmanız gerekecektir.

Bu devrede U3,U1,U4,U2 entegreleriyle 3 değişik şekilde motorun sürülmesini gösterdim. Entegre çıkışları birbirini etkilemesin diye 4 bitlik çıkışı Dip sw. ile birbirinden ayırdım. U3 entegresi 74194,  4 bit bidirectional Universal Shift register entegresidir. Kullanımı için datasheet tablosuna bakın. Sadece söyleyeceğim ilk çalıştırmadan önce S0 ve S1 pimleri önce HIGH olacak sonra ise hangi yöne dönecekse orası LOW olacaktır. İleri geri sayabilir.
U1 entegresi 4017 entegresidir. Aslında kendi başına sadece ileri sayar. Fakat 2. Bir 4017 daha kullanılıp çıkışlar terslenirse geri doğru da sayabilir.
U4 ve U2 entegreleri birlikte kullanılıyor. U4 40193 entegresi yukarı aşağı sayan bir entegredir. Bu çıkışlar binary çıkışlar olduğundan U2 4028 binary den desimale çeviren entegre kullanılmıştır. 40193 entegresinin çıkışını step motor girişine uygun hale getirir. Bu şekilde yukarı aşağı sayarak ileri geri doğru dönmesini sağlar.

Bu 3 devre de DİP sw ile birbirinden ayrıldığı için proteus ta deneme yaparken dip sw leri ayarlamanız gerek.
Ayrıca ben ZERO buton ve zero sw kısımlarını U3 entegresine göre ayarladığımdan tüm devreyi çalıştıracaksanız Videodaki gibi U3 entegresinin dip sw lerini ayarlamanız gerekiyor.
Step motor sürmek için L298D modülünü kullandım. Bu modülün kullanılmasını da STEP motor DETAY yazımda anlattım. Oradan bakabilirsiniz.

U4 entegresinin hemen solunda bulunan yön değiştirme işlemi sadece U4 entegresi içindir. En soldaki tüm işlemler U3 entegresinin çalışmasına aittir.

Burada diğer yazılarımda ve devrelerimde gördüğünüz gibi diyotlar göreceksiniz. Ve bir uyarı göreceksiniz. Yön değiştirme kısmında. Bu diyotlar 2 çıkışın 1 girişe erişmesi durumunda kullanılır. Buradaki gibi LOW kontrolü yapılabilir ya da diyotlar ters bağlanarak HIGH kontrolü yapılır. Diyotlar LOW kontrolü yapılıyorsa HIGH durumunda beklemelidir. Nedeni ise LOW konumunda beklediğinde diyot doğru polarmalandığı için gelen gerilim diyot üzerinden GND ye ulaşacağından INPUT girişi tetiklenmez. Bundan dolayı Bu tip bağlantıda 2 çıkışta HIGH durumunda bekler kontrol etmek istediğinde LOW durumuna düşer ve yeniden HIGH durumuna geçerek bekler.

Devrede J-K Flip floplar işlemin devamlılığını sağlarlar. FLİP FLOP ları tasarımlarımda oldukça fazla kullandığımdan, Flip flop konusunda ayrıca bir yazı yazacağım. O zaman daha iyi anlamış olacağınızı düşünüyorum.

  1. motor ise enkoderli servo motor kullanımıdır.

Öncelikle enkoder için bu yazımı okuyabilirsiniz. Nasıl çalıştığını detaylıca anlattım.
https://www.mikrobotik.com/wp2/2020/09/24/arduino-pic-ve-diger-gomulu-sistemlerle-enkoder-kullanimi/

Bu konu ikiye ayrılır. Birincisi servo motor kontrolü. İkincisi ise enkoder hesaplama ve geri bildirim.


Motor çalıştırmak için H-Bridge denilen bir Mosfet bağlantısı kullanıldı. Bu mosfet bağlantılarında her yöne 2 transistörle hareket eder. Transistörler çapraz bağlıdır. Bu şekilde motordan geçen akım yön değiştirmektedir.
Bunların kontrolünü ise U2:B J-K FF sağlar. Zero butonu burada kullanmadım fakat burada da prensip aynıdır. Zero butonuna basıldığında motor sola döner. Sonrasında eksen tablası ZERO sw. bastığında motor ters yöne dönmeye başlar.  Tabii ki sadece ters yöne dönmeyi sağlamaz. ZERO SW basıldığında en sağdaki sayıcılar LOAD pimi tetiklendiği için Sayıcılar sıfırlanır. Sağa dönmeye başladığında sayıcılar yukarı yönde saymaya başlar. Resimden de görüleceği gibi motorun dönüş yönünü enkodere göre devremizdeki kapılar beliler. Bu şekilde sayıcıların CLKU ve CLKD saat girişleri tetiklenerek sayma sağlanır.

Resmin en altında bir FF bulunmaktadır. Bu FF enkoderin A ve B girişlerine göre sağa ve sola dönüşleri için kontrol zamanını belirliyor.

Aşağıdaki resmi incelerseniz, A sinyaline göre B sinyalinin durumu size yön hakkında fikir verecektir.


Bu sinyalin 1 den 0 durumuna düşmesi, bizim B kanalını kontrol edeceğimiz anlamına gelir. Bu kontrolde A=0 iken B=1 ise  Clockwise (saat yönünde ) döndüğü sonucunu çıkarırız.
Şayet A=0 iken B=0 ise bu da Counter Clockwise  (saat yönünün tersi) döndüğü sonucunu çıkarırız.

SAĞA DÖNÜŞ. Mavi A kanalı, Kırmızı ZERO noktası, Yeşil B kanalıdır.

 

SOLA DÖNÜŞ. Mavi A kanalı, Kırmızı ZERO noktası, Yeşil B kanalıdır.

 

Bu şekilde kapı devrelerimiz bize U13A  FF ile kontrol zamanını seçerek hangi yön olduğunu bulmamızı sağlar. Burada U12A 4030 entegresi XOR kapı devresidir. Bu kapı devresinin gerçekleme tablosu aşağıdaki gibidir. Bu kapı devresi sadece U13A FF nun doğru zamanda kontrol etmesini sağlar. Yani A sinyali 1 den sıfıra düşerken. Bu şekilde Yön değişimi belli olacaktır.


Yönleri de belirlediğimize göre Sayıcı devrelerin CLKU ve CLKD uçlarını tetiklemek kalıyor.

Sonrasında bu çıkışları ne yapmamız gerekiyor derseniz,
İsterseniz step motorda olduğu gibi kendiniz bir karşılaştırma devresi yapabilirsiniz.
İsterseniz bu çıkışları anlık olarak Paralel seri çevirici devrelerle Mikroişlemciye iletebilirsiniz.

Mikroişlemci ise doğru yere geldiğinde DUR bilgisini vererek durdurabilir. Siz nasıl isterseniz öyle sonlandırabilirsiniz.

Aşağıda sizlere bazı kart örnekleri vereceğim. Acaba endüstriyel kart üreticisi makinelerin DAC kartlarını nasıl yapmış. Nerede sonlandırmış. Bunlara bakabilirsiniz. Çıkış kısmı çok pimli olan taraftır. Entegreleri incelerseniz benzer bir yapıyı size gösterecektir.

Endüstriyel DAC FDBK kartı. Tek eksenli:


Endüstriyel DAC FDBK DUAL ( Çift eksenli ) :

 

 

TÜM DOSYALARA BURADAN ULAŞABİLİRSİNİZ

Not: Tüm proteus çizimleri Proteus 7.10 ile çizilmiştir. L298 kütüphanesini de dosyalar arasından alıp, proteus library dizinine çıkarmanız gerekecektir. TÜM PROTEUS versiyonlarıyla çalışır.

Proteus olmayan kişiler, resim dosyalarının ayrıntılı olanına, PDF dosyalarından ulaşabilirler.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.