BLDC SERVO MOTOR KULLANIMI – 2

Bu yayının ilk bölümünde genel bir giriş yaparak BLDC Servomotor sürüm sinyalleri hakkında bilgi vermiştim. İlk bölüme gitmek için burayı tıklayabilirsiniz.

Şimdi Nucleo STM32F302R8 Motor Kontrol kitimize STSPN7 yazılımını yükleyerek motorumuzu çalıştıracağız.

Bu paket ile Six Step Algorithm (6 adım algoritması) kullanılıyor, pozisyon belirleme ve izlemesini sensörsüz olarak yapacağız. Yani motorun hall effect sensörlerini kullanmıyoruz, onun yerine o adımda yüksek empedans konumunda olan faz bobini ucundaki BEMF gerilimini ölçerek rotorun konumunu algılayacağız. ST bu işi yapmak için gereken kodları pakete koymuş, bizim bunun için bir program yazmamıza gerek yok.

Konuyu daha ayrıntılı öğrenmek için ST Microelectronics’in şu dokümanlarına başvurulabilir. Sıfırdan başlanılacakmış gibi bir okuma sırasına koymaya çalıştım :

ST Microelectronics in WEB sitesinde çok daha fazlası var, hepsini burada listelemeye gerek görmüyorum. Bence yukarıdakiler başlangıç ve ilk motoru döndürebilmek için yeterliler.

Önce STSPN7 Motor kontrol paketini STM32 CubeIDE geliştirme platformuna yüklememiz gerekiyor. Bunu anlattığım yayına ulaşmak için buraya tıklayınız. (Başka platformlardan STM32 cube IDE ye program aktarmak)

İlk bölümün sonunda STSPN7 paketini CubeIDE ye aktararak hatasız olarak derlemiştik. Ancak bunu Nucleo ya olduğu haliyle yüklersek motorumuzu çalıştırmayacaktır. Zira programın motorumuza uygun parametrelerle uyarlanması gerekiyor. Varsayılan parametreler büyük ihtimalle bizim motorumuza uymayacaktır, benimkine uymadı örneğin.

Ayrıca, bu paket bir kütüphane, ana program içine motoru başlatan durduran birkaç komut da eklemek lazım ki çalışıp çalışmadığını görelim.

Aslında ST nin Motor Parametrelerini ölçen bir firmware paketi de var, ama benim motorun bobin dirençleri küçükmüş, o paketin ölçüm yeteneklerinin dışında kaldığından ben kullanamadım. Ben motor üreticisinin verdiği parametrelerden yararlandım, başlatma ivmesi, atalet, sürtünme gibi bazı parametreleri de deneme yanılma yöntemiyle belirledim.

Motorumun data sheetleri aşağıdaki gibi:

MOTOR PARAMETRELERİNİN STSPN7 İÇİNDE AYARLANMASI

Motor parametreleri MC_SixStep_param.h adlı başlık dosyasında bulunuyor. Bunları aşağıdaki gibi ayarladım. Parametrelerin büyük bölümünü varsayılan değerlerde bıraktım, sadece 4-5 kritik parametreyi değiştirmek yetti.

Bu bölümde varsayılanda 7 olan motor kutup sayısını 2 olarak, maksimum hızı da 3000 devir/s olarak değiştirdim.
Bu bölümde ACC yani mekanik ivmelenme değerini 600.000 den 300.000 e indirdim. (Deneme yanılma)
Ayrıca Max Pot speed ve Min Pot speed değerlerini kendi motoruma uyacak biçimde ayarladım.
Advanced Parameters paragrafının bu devam kısmında herhangi bir değişiklik yapmadım.

SÜRÜCÜ MODÜL ÜZERİNDEKİ KÖPRÜLER

Aşağıdaki testleri yapmaya kalkışmadan önce IHM07M1 kontrol modülü üzerindeki köprülemelerin 6 adım metodu, tek şönt akım ölçümü vb. gibi konumlarda olduğundan emin olmak gerekiyor. Bu ayarlar UM1946 STSPN GettingStarted – User Manual dokümanında anlatılıyor. Ben aşağıya kopyalıyorum:

IHM07M1 Modülü köprülemeleri – SixStep ve Single Shunt yönetmene uygun olmalı
Köprülerin durumları

MOTORU PROGRAM İÇİNDEN SÜRMEK İÇİN YAPILAN İLAVELER

Yukarıdaki parametre ayarlamalarından sonra motorumuzu çalıştırmayı deneyebiliriz. Bunun için iki yöntem var.

Birincisi benim tercih ettiğim yöntem. Motoru başlatan, hızını ayarlayan, durduran komutları program içine yazıp derleyip çalıştırmak.

İkinci yöntem ise Nucleo’yu seri port üzerinden PC ye bağlayarak, bir seri terminal uygulaması vasıtasıyla göndereceğimiz komutlarla çalıştırmak.

PROGRAM İÇİNDEN KOMUTLARLA ÇALIŞTIRMAK

STSPN7 PAKETİ İLE BİZE SAĞLANAN API FONKSİYONLARI

Bu paket ile ST bize aşağıdaki arayüz komutlarını sunuyor. Bu komutları kullanarak programımızın içinden motorumuzu istediğimiz gibi kullanabiliyoruz.

  • MC_SixStep_INIT();
  • MC_SetSpeed(hiz);
  • MC_StartMotor();
  • MC_StopMotor();

Ben ana program içine koyduğum aşağıdaki komutlar ile sistemimi test ettim :

Ana programa ilave satırlar.

Yukarıdaki değişikliklerden sonra programı COMM konfigürasyonunda derleyip Nucleo’ya yükleyince motorun çalıştığını görebilirsiniz. Bu program motoru 4000 devirden başlatıp beşer saniye aralıklarla hızını 500 devire kadar düşürüyor.

SERİ PORT ÜZERİNDEN GÖNDERİLECEK KOMUTLAR İLE KONTROL

Bu durumda yukarıdaki paragrafta anlattığım komutlara gerek yok. Motoru seri porttan göndereceğimiz komutlar ile çalıştırıp durduracağız.

Ana programa herhangi bir komut eklemeden, derleyip Nucleo’ya yüklememizi yapıyoruz.

PC üzerinde bir terminal programı örneğin Windows da Termite kullanılabilir. Ben Mac da SerialTools kullandım. Ayarları 19200/8 Bit/ Oda parity/ 1 Stop bit olarak ayarlayıp terminalimizi bağlayalım. Terminal programımızda Nucleo’ya bağlı portu seçip bağlantıyı kuruyoruz.

Nucleo’da RESET butonuna basınca yukarıdaki gibi bir karşılama mesajı geliyor. Bu ekranda kullanabileceğimiz komutlar listelenerek “>” prompt ile beklemeye başlıyor.
STARTM yazıp Enter bastığınıda motor çalışmaya başlıyor, STOPMT verdiğinizde de duruyor.

Ancak hatalı komut girerseniz kilitleniyor, ondan sonraki komutları algılamıyor, bazan da hata yapmasanız da kilitlenip gene komut kabul etmiyor. Neden böyle olduğunu araştırmak için kod içine girip hata izlemesi yapmak lazım, onunla da uğraşamadım.

Onun için ben bu yöntemi sevmedim.

SONUÇ

Bundan sonrası için; motoru başlatıp istenen sayıda devirden sonra durduran bir algoritma geliştirmeyi hedefliyorum. Fakat motorun başlangıç konumunu belirlemekte güçlükler var. Zira motor ilk harekete geçeceği anda hangi konumda olduğunu bilmiyor, çünkü BEMF sıfır. Önce açık çevrimde ivmeleniyor, sonra kapalı çevrime geçiyor. Bu yöntem pozisyon kontrolu için uygun değil. Epeyi uğraştıracağa benzer, hall encoderleri kullanmak zorunlu olacak. İlk denemelerimde motorun frenlemesini de sağlayamadığımdan istediğim noktada durdurmakta başarılı olamadım. Biraz daha çalışmam gerekiyor. Bu haliyle devir sayısının önemli olmadığı fan, pompa vb. gibi uygulamalarda kullanılabilir.

Bu yayının sonu. S. Özbayraktar Mayıs 2020

2 Replies to “BLDC SERVO MOTOR KULLANIMI – 2”

  1. Merhaba hocam,
    Böyle güzel içerikli bir blog hazırladığınız için elektronikçi tüm arkadaşlar adına teşekkür ederim.
    BLDC’de STOP durumundan belli bir hıza ulaşıncaya kadar rotorun pozisyonunu bilemiyoruz.
    En azından bu durum BLDC’nin konum geri beslemesi olmadan SERVO gibi kullanılmasını imkansız hale getiriyor.

    Saygılarımla,

    1. Haklısınız Erol Bey (sanırım adınızı doğru anladım. :)),
      Bu nedenle bu sorunu hall effect, optik ya da Resolver encoderlerle aşmak zorundayız. Ama bu konuya bu günlerde el atamayacağım.

      Selamlarımla,

Comments are closed.