FPGA Tabanlı Gerçek Zamanlı Çoklu Servo Motor Sürücü
Merhaba arkadaşlar. Bu yazımda sizlere staj sürecinde yaptığım çalışmaları anlatmaya çalışacağım.
Staj dönemi içerisinde öncelikle staj projem olan FPGA tabanlı gerçek zamanlı çoklu servo motor sürücü üzerine çalıştım. Bu projenin çalışır hale getirilmesinin ardından kalan sürede anten çizim programı FEKO ve yaygın kullanılan bazı antenler hakkında araştırma yaparak şirket çalışanlarına program tanıtımı yaptım. Şimdi ayrıntılı olarak staj döneminde yaptığım çalışmalara bakalım.
FPGA tabanlı gerçek zamanlı çoklu servo motor sürücü
Projeyi anlatmadan FPGA’ler hakkında kısaca bilgi vermek istiyorum.
Blok diyagramda görülen her blok kendi içerisinde programlanabilir. Bu sayede FPGA’ler tamamen programlanabilir bir yapı olmaktadır. CLB olarak isimlendirilen bloklar, oluşturulacak sistemin temel algoritmasını içerir. Bu bloklar programlanabilir anahtarlama kısımları ile birbirine bağlanmaktadır. Burada önemli nokta, bağlantıların seri ya da paralel yapılabilmesidir. Çünkü, paralel bağlama imkanı paralel işlem kapasitesini ortaya çıkarmaktadır.
Piyasada bulunan entegrelerle eş zamanlı işlem yaptırmak uğraştırıcı iken paralel işlem kapasitesi yüksek olan FPGA’ler ile bu işlemler kolaylıkla yapılabilmektedir. Bu yüzden FPGA’ler sinyal/görüntü işleme uygulamaları, yapay zeka uygulamaları ve çoklu motor sürücü gibi paralel işlem ve yüksek hız gerektiren uygulamalarda tercih edilmektedir.
FPGA’in birim maliyetinin yüksek olması ve programlama dilinin (VHDL) zor olması gibi bazı dezavantajları olmasına rağmen yapmak istediğimiz projede çok sayıda servo motorun eş zamanlı çalışması amaçlandığı için bu sistemin kullanımını uygun gördük.
Bu ön bilgilerden sonra sistemimizin nasıl çalıştığına birlikte bakalım.
Projemizde kullanacağımız sistemin temelinde PWM üretici blok bulunmaktadır. Bu blok servo motoru istediğimiz konuma getirecek uygun PWM sinyalini üretmektedir. Şekil 2’de bu bloğun simülasyon sonucu görülmektedir.
Simülasyon sonucunda görünen “data” değişkeni kullanıcıdan konum bilgisini almak için kullanılmıştır. 8 bitlik bu değişken ile 256 adımlık hassasiyet elde etmiş oluyoruz. Bu değerin sistemimiz için yeterli olduğunu düşündük ama bit sayısını artırarak hassasiyeti de artırabiliriz. Ayrıca simülasyon sonucunda görülen “PWM Signal” sistemin çıktısını göstermektedir. Simülasyon sonucunda gördüğümüz gibi “data” girdisinin değişikliğine göre “PWM Signal” yani motorun konumu değişmektedir.
Proje kapsamında, motorların hızının da kontrol edilebilmesi için sistemin kodlama kısmına değişkenler eklendi, böylece motorun hız kontrolünün de yapılabildiği sistem oluşturuldu. Hız kontrolü için 2 bit ayrıldı ve kullanıcıya 4 farklı hız seçeneği sunuldu.
PWM üretici blok tasarımından sonra bu bloklar birbirine paralel bağlanarak her birinin çıktısı bir motoru sürecek şekilde ayarlandı. Bu sayede belirli bir motorda olacak konum/hız değişikliği diğer motorları etkilemedi ve bütün motorlar eş zamanlı olarak çalıştı. Tasarım 16 motoru sürecek şekilde yapıldı ancak paralel blok sayısı artırılarak motor sayısını artırabiliriz. Şekil 3’de 16 motor için tasarlanan sistemin simülasyonu görülmektedir.
Şekilde görüldüğü gibi bütün PWM sinyalleri eş zamanlı olarak aktifleşmektedir ve görev sürelerinin farklılığı birbirini etkilememektedir.
Bu bağlantılar bitmesiyle sistemimizin sürücü kısmı tamamlandı. Sürücünün, kullanıcıdan bilgi alması için FPGA’e UART haberleşme blokları eklendi. Ayrıca kontrol verisini almak ve kaydetmek için 256 bit shift register tasarımı yapıldı, bu sayede UART üzerinden gelen veriler 8 bitlik paketler halinde 256 bitlik registera yazıldı. Kullanıcının bilgi göndermesi kısmında ise Arduino kullanıldı. Bu sistemin tamamlanması ve çalışması ile staj projesi başarılı şekilde bitti.
Sistemin geliştirilme aşamaları ve çalışır haldeki son durumu videoda görülmektedir…
Anten tasarım programı: FEKO
Stajımın son 2 haftasında anten tasarım programı FEKO ve piyasada yaygın kullanılan bazı antenleri araştırdım. Bu kapsamda istenen frekanslarda çalışacak şekilde dipole, horn (huni), PCB ve NFC anten tasarımı yaptım. Ayrıca elimizde bulunan bir anteni, programda çizerek çalışma özelliklerini gözlemledim. Bu noktada amacım elimizde bulunan antenlerin ne amaçla kullanıldığını anlamak, anten hakkında yorum yapabilmek ve geliştirilmesine yönelik çalışma yapabilmekti.
FEKO aracılığıyla çizilmiş bazı antenler, çizim parametreleri ve simülasyon sonuçlarına bakalım…
1) Dipole anten
2.4 GHz frekansında çalışması için tasarlanan antenin toplam uzunluğu 61.2 mm olarak belirlenmiştir.
2) Horn (Huni) Anten
3) PCB Anten
Özel kullanım için tasarlanan ve şirkette bulunan anten, analiz etme amacıyla programda çizildi. Bu antenin çalışma frekansları, kazanç oranları, yansıma katsayısı ve empedans eşitlemeye yönelik parametreleri tespit edildi.
4) NFC Anten
NFC antenler bobin/indüklenme mantığı ile çalışmaktadır. Bu yüzden yansıma katsayısı, kazanç gibi anten parametrelerinin NFC antenlerde uygun değer vermediğini gördük. Ancak FEKO aracılığıyla NFC antenin yakın alanlarda nasıl tepki vereceğini gözlemledik. Bu sayede kendi tasarlayacağımız NFC antenin nasıl çalışacağı hakkında fikir edinmiş olduk.
Bu çalışmalar yapıldıktan sonra tasarım programı FEKO’nun kullanımına yönelik tanıtım toplantısı yapıldı. Bu toplantıda daha önceden bildiğim ve yeni çalışmalar sırasında öğrendiğim bilgileri katılımcılarla paylaştım. Bu program ile staj dönemimi bitirdim.
Ahmet AK
Hacettepe Üniversitesi Elektrik-Elektronik Mühendisliği
ahmet_ak@hacettepe.edu.tr
Kaynaklar
1. Lojik Prob, FPGA nedir ne işe yarar, http://www.lojikprob.com/, 01.09.2019.
2. Serhat Sefer, UART Modülü Tasarımı, https://serhatsefer.cf/, 01.09.2019.
3. ECE of University of Washington, Quartus II Testbench Tutorial, https://class.ece.uw.edu, 01.09.2019.