Bildiğiniz üzere internet ortamında USB HID, Serial Port, Ethernet gibi somut bir bağlantı gerektiren ve arayüz üzerinden bir takım komutlar doğrultusunda mikrodenetleyicilerle hazır modüller olmadan (Arduino, Rasperry Pi, Netduino, STM32F4 vs.) çalışmalar yapmak kaynak azınlığından dolayı sıkıntılıdır. İyi yönünden bakmak gerekirse, türkçe kaynaklar günden güne çoğalmaktadır. Gerek teknik kitaplar gerekse paylaşmayı bir borç bilen bloggerlarda buna dahil.

Günümüzde bilgisayarlarda karşımıza çıkan klavye, mouse, yazıcı gibi HID (Human Interface Device = İnsan Arayüz Cihazı)  aygıtları, direkt olarak insanla etkileşime geçer ve kimisi de komut bekler. Biz de aynı şekilde USB ile motor kontrolü, sensör kontrolleri gibi birçok projeye adım atma potansiyeli oluşturacağız. Şimdi ise projemizde basit olarak C# arayüzüyle 8 adet çıkışı kontrol edip, bu çıkış bilgilerini ise LCD üzerinden okuyacağız. Ayrıca 1 adet step motorun adım-hız kontrollerini yapan kontrol ünitesini oluşturacağız.

STEP MOTORUNUN ÖZELLİKLERİ:

step-motor-ozellikleri

Step motorlar, özellikle gömülü sistemlerle kararlı çalışabilen, ucuz ve kaliteli elektromekanik bir malzemedir. Günümüz endüstride step motorlar; SCARA robotlar, CNC cihazları, harddiskler, yazıcılar gibi yüksek hassasiyetli cihazlar da büyük bir önem arzetmektedir.  Bu motorlar adım sayısına, çalışma gerilimine, maksimum çektiği akıma ve özellikle tork gücüne bağlı olarak piyasada satılmaktadır. Sistemdeki ani hız ve yön değişimlerine, yapılan adımların maruz kaldığı yüke en hızlı şekilde cevap verecek bir motor tercih edilir. Dişli ve kayış hesaplarının sistemdeki yükle, motorun tahrik edilen çekme gücü baz alınarak bir yol çizilir.

nema-17-bipolar-stepper-motor-w-1m-4-pin-cable-40mm-62-oz-in-3433e51c187e819a5d9c62e22ddf9a7aŞekil 1. Bipolar Step Motor

Bahsettiğimiz motorun çeşitleri çokca mevcuttur. Fakat biz devremizde bipolar bir step motor kullanacağız. Bipolar step motorları; iki fazlıdır ve sargılarından geçen gerilim ile yön kontrolü yapılır. Dört adet ucu bulunan motorun, ayrı bobinleri üzerine uygulanan (A ile C, B ile D uçları) gerilim, kutupları arasında tersleme yapar. Bu uçların sağlamlık kontrolü ise multimetrenin oHm kademesi ayarlanarak A ile C ve B ile D uçlarının bobin değerleri ölçülür. Nema 17 step motoru üzerinde yaptığım ölçümde A-C uçlarından 119 oHm, B-D uçlarından 117 oHm değeri gördüm.

3300_0_4wire  

Şekil 2. Bipolar Step Motor Bağlantı Uçları (A,B ve C,D)

L239D MOTOR SÜRÜCÜ ENTEGRESİNİN ÖZELLİKLERİ:

Bu motorun diğer motorlardan farkı; tork gücünün yüksek olması, geri besleme almadan kesin hassasiyette çalışması ve genellikle H-köprüsü devresiyle kullanmasıdır. Devrede L239D motor sürücüsü kullandım.

2
Şekil 3.
L239D Entegresi (DataSheet)

L239D entegresi Yarım-H-köprüsü entegresi olup, bize en uygun pwm sinyalini üretecek ve motorumuza istediğimiz yönde, adım-hız kontrolü yapabileceğiz. Diğer bir aşamada ise motorumuz için 12V besleme gerekmektedir.l239d

Şekil 4. L239D Motor Sürücüsünün İç Yapısı (Diyot)

Ayrıca L239D entegresi üzerinden maksimum 1A akım geçiriyor ve enerji kesildiğinde ters elektromanyetik kuvveti emen flyback diyotlarına sahip. Açıkcası güvenilir bir entegre.

DEVRENİN PROTEUS SİMULASYONU:

devre_usb_led_motor

Şekil 5. PIC18F4550 ile USB Haberleşme

PIC18F4550 entegresini 20 mHz olarak ayarlayalım (20 mHz ile güzel sonuç aldım). Neden 20mHz bir kristal kullanıyoruz ki? Daha iyi bir hızda haberleşme yapamaz mıyız? İşte kullandığımız entegre bizim imdadımıza yetişiyor ve 48 mHz’e kadar hız aşırtma (overclock) işlemi yapmamıza müsade ediyor. USB 2.0 kullanıyorsanız, en fazla 48 mhz (48 mhz * 10 = 480 mbit/sn * 122 kilobyte = 58.560 MB  veri aktarımı demektir. Dipnot geçelim: PIC18F4550 32 kB flash belleğe sahip.)  hızında veri aktarılabilir. Sonuç olarak faz bazlı hızlarda (PLL) yapacağımız işlemler daha kararlı olmasıyla beraber, haberleşmede yeterli bir frekans ortamı oluşturacak.

usb-error

Şekil 6. USB Aygıtı Tanınmadı Hatası

Sigorta ayarlarında yapılan hatalar veya frekansın uygun değerlere ulaşmadığı durumlarda usb bağlantısına dair hata alabiliriz veya hiçbir tepki dahi alamayabiliriz (bkz: Şekil 6.). PIC üzerinde bulunan VUSB portuna bağlanan 470uF’lık  kondansatör topraklandığında “USB Voltaj Regülatörü” aktif olur. (USB çıkışından aldığımız ~5V olan gerilimi, sadece haberleşmeyi sağlayacak olan veri uçları için 3.3V’a regüle eder.) Ayrıca frekans dalgalanmalarını filtrelemek ve uzun mesafede yapılacak haberleşmelerde besleme gerilimine kondansatör atılmalıdır. (100uF). Şimdi, MicroC üzerinden bir proje oluşturarak elektronik devremiz için programlamayı yapalım.

MICROC PIC AYARLARI:

1-new-project
Şekil 7. MicroC ile PIC18F4550 Projesi Oluşturma

MicroC programı yazmadan önce bir takım ayarlar yapacağız. Öncelikle “New Project Wizard” kısmından frekans saatimiz ile entegremizi seçerek işlemlerimize başlayalım.

2-fuses-settings

Şekil 8. MicroC ile PIC18F4550 için Sigorta Ayarlarının Yapılması

Devre üzerinde external (harici) olarak kullandığımız 20 mHz’lik kristalimizi 5’e bölmemiz gerekmektedir. PIC, Primary (birincil) osilator kaynağımızdan 4 mHz kullanır. Bu bağlamda PLL donanımına ulaşır. PLL donanımı sabit bir katsayı uygulayarak 96 mHz’e çıkartır. Daha sonra da 2’ye bölerek, 20 mHz olan kristalimiz (96/2) 48 mHz’e hız aşırtma yapılır. Daha fazla bilgi için, MicroChip’in 18F4550 entegresine ait DataSheet’in 2.1. şemasını incelemenizi tavsiye ederim.

3-library

Şekil 9. MicroC ile PIC18F4550 için Kütüphanelerin Seçilmesi

MicroC içerisinde bulunan kütüphaneleri projemize dahil edelim. USB ile yapacağınız farklı projeler için dahil edebileceğiniz kütüphanelerle birlikte, kendi içerisinde kullanmanız gereken kodlarında bulunduğu yardım bölümü vardır. İlgili kütüphaneye sağ click yaparak yardım bölümüne ulaşabilirsiniz.

4-1-hid-terminal

Şekil 10. MicroC ile HID Terminali’ne Giriş

USB HID aygıtımızın genel ayarlarını yapmamız için MicroC Elektronika tarafından hazırlanan, “Hid Terminal” arayüzünü kullanacağız.

4-2-hid-terminal

  Şekil 11.  MicroC ile USB HID Aygıtı Ayarları

Buradan VID (Vendor ID = Satıcı Kimliği) ve PID (Product ID = Ürün Kimliği) adlı iki adet oluşturacağımız USB aygıtına ait kimlikler bulunmaktadır. Bilgisayarımız, içerisinde sadece bu ID’lere ait USB aygıtını görür ve projemizin sabit bir porttan haberleşmesini sağlar. “Report Length”  kısmıysa, giden ve gelen buffer’ların(veri sahaları) uzunluk ayarlarını yapmamızı sağlar.    usb-pic18f4550-usb-ram-memory


Şekil 12.  USB RAM Hafızası

USB HID aygıtları bizlere hem yazıp hem de okuyabileceğimiz 0x500h – 0x7FFh adress register’ları arasında bir alan verir.

5-project-manager

Şekil 13. Projeye Usbdisc.c Dosyasını Dahil Etme

Daha sonra ayarlarımızı kaydederek “Usbdisc.c” dosyasını oluşturup, projemize dahil edelim ve compile edelim.

MICROC PIC PROGRAMI:

Simulasyon üzerinde hesapladığım adım değerleri “adim” dizisi içerisindedir.

adimlar_1
Şekil 14. Step Motor Adım-Yol Haritası (L239D)

Programımızda motorun adım kontrolü, belirlediğimiz yol haritasıyla bir dizi sıra oluşturuluyor. Simülasyonda motor dişlisinin adım hesabı “ToplamAdım/8” dir. Yani sağa doğru 8.adım atıldığında + yönde 1˚ ilerliyor. Fakat programımızda biz bu “ToplamAdım” değerini 8 ile çarpıp “1 adım” gibi göstereceğiz. USB-HID aygıtımızın buffer’ı üzerinden 1 bilgisi gönderdiğimizde 1 adım = 1˚ ilerleyecektir. Bu hassasiyeti simulasyonda değiştirebilirsiniz. Board üzerinden kurulan devrelerde ise, motorun etiketi üzerinde adım açısı yazmaktadır. Bu açıyı referans alarak, örneğin; 1.8˚ adım açısına sahip bir motor, 200 adımda tam tur dönecektir.  

C# ARAYÜZ PROGRAMI:

program

Şekil 15. Devrenin Arayüz Programı

Programda motoru home (başlangıç) konumuna getirmek için bir algoritma yazdım. Sağ veya sol tarafa döndüğü her adımda tanımladığım “baslangic” değişkeni üzerinden bir takım değerler alacağız. Bu değerler ışığında eğer mil sağ tarafta kaldıysa 0’a kadar geri döndürmemiz gerekiyor. Ayrıca motor tam tur veya tam turdan fazla dönerse, başlangıç konumuna da geri döndürebiliyoruz.

Dipnot: UsbLibrary.dll kütüphanesini programla aynı dizinde kullanmayı unutmayın.
Makalemizin sonuna geldik. C dili tabanlı, USB haberleşme programımızı bitirdik. Program benim tarafımdan yazılmış olup, eğitim amaçlı bir projedir. Altta linkini vereceğim bu projeyi, ödevlerinizde ve geliştirme projelerinizde kullanabilirsiniz. Benimle irtibata geçmek için iletişim kısmından ulaşabilirsiniz veya yorum yapabilirsiniz. Takipte kalın.

Programın çıktısı ve simülasyonu:

Program İndir

Erhan ULMAN

1995 doğumlu, Kocaeli Üniversitesi Mekatronik Mühendisliği Öğrencisi, NEFES Doğa Kulübü Yöneticisi. #android #csharp #teknoloji #bilişim #astronomi

2 Yorum

  1. halilBİLİR diyor ki:

    gerekli bütün herşeyi paylaştığınız için teşekkür ederim..

  2. Ben teşekkür ederim, iyi çalışmalar.

Yanıt Bırak

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir