HALL EFFECT SENSORLER iLE DEVİR ÖLÇÜMÜ

STM32 ile BLDC servo motor kontrolu çalışmalarımın bu aşamasında sıra, rotor konumunun hall effect sensörlerle algılanmasına geldi.

Bu aşamaya kadar motorumu sensörsüz modda 6 adım yöntemi ile çalıştırmıştım. Bu işlemleri anlattığım iki yayın için bu linkleri tıklayabilirsiniz : Bölüm 1 , Bölüm 2

Bu bölümde; motorumuz ilk aşamadaki sürücü ve yöntem ile çalışır durumdayken, bir ikinci mikro denetleyici kullanılarak motorun hall effect sensörlerinden gelen sinyallerin algılanması, hız ve devir sayısı ölçümlerinin yapılışını göreceğiz.

PROJENİN GENEL YAPISI HAKKINDA

Bundan önceki aşamada ST firmasının STSPN7 Firmware paketini, IHM7 motor sürücü kiti ve Nucleo64 STM32F302 kontrol modülü üzerinde kullanarak motorumuzu çalıştırmıştık. Aşağıdaki gibi bir kurulumumuz vardı :

Burada motordan kontrol birimine herhangi bir sensör bağlantısı bulunmuyordu. Rotor pozisyonu için geri bildirim, iki faz bobini enerjilenmiş durumdayken, boşta kalan üçüncü faz bobininin ucundaki BEMF, yani dönmekte olan rotorun bu bobinde endüklediği gerilim ölçülerek elde ediliyordu.

Bu kurulum; fan, havalandırma, power tool, CNC spindle motoru vb gibi rotorun açısal konumunu anlık olarak bilmenin önemli olmadığı uygulamalarda bu haliyle kullanılabilir. Ancak, CNC eksenleri, robotik konumlandırma gibi uygulamalarda kullanılamaz. Zira bu uygulamalarda rotorun kaç tur ya da derece döndüğünü kesin bir biçimde bilerek kontrol altında tutmak gerekir.

Yani bir sonraki kaçınılmaz adım, motor rotorunun o ana kadar kaç tur dönmüş olduğunu, dönüş hızını sensörler yardımı ile okumak olacak.

Yukarıdaki fotodan da görüldüğü gibi, motorumuzun hall effect sensörleri var, ama kablo uçları boşta duruyor. Şimdi o uçları bir ikinci mikro denetleyiciye bağlayarak hız ve devir sayılarını ölçeceğiz.

Nihai durumda bu işleri de motor kontrol mikro denetleyicisine yaptırmak gerekecek ama bu seferlik işi basitleştirmek için ikinci mikroişlemciyi kullanacağım. Çünkü bu adımda sadece ölçüm yaptırmayı düşünüyorum. Ölçüm sonuçlarına göre motoru durdurup kaldırmak sonraki adım olacak.

HIZ ve DEVİR ÖLÇÜMÜ İÇİN KULLANACAĞIMIZ MİKRODENETLEYİCİ

Hız ve devir sayısı ölçümü için olabildiğince alt kategoride bir mikro denetleyici seçtim. 48 pinli STM32F103C8T tabanlı bir Mapple Leaf kiti ile, sonuçları görüntülemek üzere SPI arayüzlü bir TFT kullanacağım.

Hız ve devir sayısı ölçümünde kullandığımız STM32F103C8T Mapple Leaf modülü adaptör kartına takılı durumda
STM32 Mapple Leaf adaptör kartının üst görünümü. 240×320 SPI TFT ekran ile.

Genel kurulum biraz dağınık, aşağıdaki gibi. Malesef daha temiz bir test düzeni kuramadım. Dalga şekillerini de görüntülediğim lojik analizör ve PC de kalabalığa katılınca, yukarıda en üstteki kapak fotosunda görülen masa üstü ortaya çıkıyor.

Hall effect sensörler ile hız ve devir sayısı ölçme kurulumu.

HALL EFFECT SENSÖR ve MİKROİŞLEMCİ ALGILAMA SİNYALLERİ

Nucleo Controller+IHM07 sürücü grubuna beslemelerini verip motoru çalıştırdığımızda hall effect sensörlerden sinyaller gelmeye başlıyor. Sürücü modül üzerindeki potansiyometre ile motor devrini 200 ila 3000 arasında değiştirebiliyoruz.

Ön ortadaki küçük beyaz bread board üzerinde hall effect sensörlerin besleme, toprak ve pull-up dirençleri var.

STM32 mikrodenetleyicilerinin Timer’larının çoğunda hall sensör çalışma modu bulunuyor. Ben bu uygulamada TIM1 timeri kullandım. Timer, üç hall sensörün her birinden gelen sinyaldeki 0-1/1-0 geçişinde bir interrupt üretiyor, olay zamanını da kaydediyor. İki kutuplu motorumuzdan dolayı her devirde 12 interrupt oluşuyor. Yani bir turda her bir sensörde 4 geçiş oluyor.

Sinyalleri ve bunlara karşı düşen interruptları lojik analizör ile izleyebilmek için, her bir interrupt gelişinde mikro işlemcinin PB8 pinini eviriyorum.

Sonuçta sinyal görüntüleri maksimum motor hızında aşağıdaki gibi oluyor :

Motordan gelen hall effect sinyalleri (mavi, sarı,kırmızı) ve mikroişlemcinin ürettiği interruptlar (yeşil)

Burada motorun 1 devrinin 25.3ms olduğu, yani ~2371 devir/ dk hızla döndüğünü görüyoruz. Aşağılardaki paragraflarda bu hesaplamayı mikroişlemciye de yaptırarak sonuçları karşılaştıracağız.

Lojik analizörde yukarıdaki sinyalleri izlerken mikroişlemcinin ölçtüğü değerler şöyle:

Motor maksimum hızda dönerken mikroişlemcinin ölçüm sonuçları

Burada “darbe süresi” olarak görüntülenen rakam, zaman değil, timer counter değeri. Her gelen yeni interrupt ile okuyup kaydediyor, ardından sıfırlıyoruz ki bir sonraki interrupt gelene kadar geçen süreyi hesaplayabilelim.

Önce 1 timer counter süresini hesaplayalım. Timer’i 36 MHz sistem saatini prescaler değerimiz olan 256 ya bölerek sürüyoruz.

Yani TIM1->CNT sayacı (1/36E6)*256 saniyede bir, 7.11 mikrosaniyede bir ilerliyor.

Yukarıdaki ekranda darbe süresini 290 sayaç adımı olarak görüyoruz. Her bir motor devrinde 12 darbe olduğuna göre 12×290*7.11 uS/devir süresini hesaplayabiliyoruz. Bu da 24.74 ms/devir süresini verir. Buradan motor hızını 40 devir/sn, 2400 devir/dk olarak hesaplayabiliriz. Bu hesabı mikrodenetleyiciye yaptırıp ekrana öyle yazdıracağım ama bu aşamada ham veriler ile çalışmak olan biteni izlemek için daha iyi oluyor.

Burada mikrodenetleyicinin ölçümleri ile hesapladığımız 2400 d/dk ile, lojik analizörde görüntüleyerek bulduğumuz 2370 d/dk değerleri tatminkar derecede uyumlu, aradaki fark motorun mekanik devir hızının %100 stabil olmamasından kaynaklanıyor. Tekrarlanan ölçümlemelerdeTFT ekranda görülen darbe süreleri 270-300 arasında salınımlar gösteriyor.

TFT ekranda görüntülenen darbe sayısı yazılım içinde set ettiğim bir başlangıç anından itibaren geçen sürede motorun kaç tur döndüğünü gösteriyor. Şu an için anlamlı bir değer değil, ama motoru konumlama kontrolunda kullanacağımız zaman çok önemli olacak.

Burada motor çok daha yavaş dönüyor. Lojik analizöre göre bir devir 192 ms. Bu da 5.2 devir/sn, 312.5 devir/dk anlamına geliyor.

Aynı değeri mikroişlemci ekranından aldığımız verilerle hesaplayalım. Devir süresi :

2282x12x7.11 us = 194.7 ms olarak bulunur.

Bu da 5.14 devir/sn, 308.4 devir/dk dönüş hızı verir. Sonuçlar yine uyumlu görünüyor.

STM32 CubeIDE İLE MİKROİŞLEMCİ KODLARININ OLUŞTURULMASI

Bu noktada, yukarıdaki sonuçları veren sayaç ve ölçüm kodlamalarını kayda geçirmekte yarar var.

Bunun için SMTM32 CubeIDE platformunda STM32F103C8 için bir proje yaratıyoruz. Bu esnada gereken I/O, TIMER, Interrupt ve diğer proje yaratma adımlarını ard arda ekran görüntüleri ile veriyorum.

CubeIDE içinde CubeMX ile I/O pinleri görüntüsü. Buradaki pin ayarları TIMER, SPI, I2C, SWD tercihleri ile oluşuyor.
Saat ayarları
TIM1 ayarları
SPI ayarları – TFT için
Project Manager ayarları

Burada, STM32 CubeIDE kullanımının bilindiği varsayımı ile proje yaratma ve bu ayarların yapılması detayına girmeyeceğim. Bunlar için ayrı bir yayınım olacak.

Bu yayının sonu – S.Özbayraktar Haziran 2020

7 Replies to “HALL EFFECT SENSORLER iLE DEVİR ÖLÇÜMÜ”

  1. Selçuk hocam, merhaba

    Bldc motorla ilgili teorik bilgileri araştırıyorum,
    rotor konumunun tespiti için eniyi sensörün resolver olduğu görüşündeyim ancak rotor dönmediği zamanlarda resolver , rotor milinin konumunu algılayabiliyor mu, Hall sensörün yaptığını yapabiliyor mu

    resolver için devir sayısı enfazla 5000 dev/dakika imiş,bu benim için yeterli ancak,resolver sargılarından birine uygulanan KHz seviyesindeki frekansın değerini neye göre belirleyeceğiz,Akla ilk gelen devir sayısı ama hesabı düz mantık mı,yani 5000 rpm ise 5 KHz, 2500rpm ise 2,5KHZ, 1000 rpm ise 1 KHz mi

    Yoksabir hesabı var mı?

    Selçuk hocam,zaman ayırıp yazabilirseniz sevinirim,Hoşçakalınız.

    1. Mehmet Aydın Bey merhaba,
      Resolver’in motor hareketlerini izlemek için çok iyi bir seçim olduğu doğru, ama her şeyin bir bedeli var. Birincisi, resolverler en pahalı olanları. İkincisi de ürettikleri sinyali yorumlamak için daha fazla CPU işlemine ve elektroniğe gereksinim olması.

      Ben emekli-amatör bütçemin sınırlamaları içinde resolver’e hiç yanaşmadım, kullanmadığım için kullanımı konusunda sizden daha ileri bir konumda olduğumu sanmıyorum.
      Ama hali hazırdaki bilgilerimle bazı sorularınızı yanıtlayabilirim.
      Hareketsiz iken konum bilgisi verip vermediği konusu : Multispeed resolverlerden hareketsizken konum bilgisi alamazsınız. Tek hızlı olanlardan alınabiliyor. Hall sensörler de rotor kutbunun sensör hizasında olup olmadığnıı bildirir, ama bunun hangi kutup olduğunu anlayamazsınız. Bu kadarına pozisyonu bilmek diyorsanız hall effect sensörler ve tek hızlı resolverler bunu yapabiliyor.
      Multiple speed resolverler de hall effect sensörler gibi motor açısını mutlak olarak bildiremiyor, bunun için absolute encoder ya da tek hızlı Resolver kullanmanız gerekiyor. Resolverda da bir indeks /referans pozisyonundan ne kadar uzakta olduğunuzu anlayabiliyorsunuz. Bir başlangıç noktasına gidip burası ‘0’ diyeceksiniz, ondan sonra oradan ne kadar uzaklaşıp yaklaştığınızı kayıt altında tutacaksınız.

      Resolver bobinlerine uygulanacak frekansa gelince : Resolverlerde rotorun dönüşü ile resolvere uygulanan yüksek frekanslı sinyali modüle ediyoruz ve modüle edilmiş sinyalin zarfına bakıyoruz. Bu demektir ki uyguladığınız sinüs/cosinüs sinyalinin frekansı rotorun modülasyon zarfından epeycene yüksek olmalı. Bunun nasıl belirleneceğini anlatan epeyi yayın olmalı, onlara bakmanız gerekiyor. Ama ben, biraz el yordamıyla bunu devir hızının 5 katı kadar ya da daha yüksek olması gerektiğini söyleyebilirim. Bu dediğim gerçekten bir hesaplama ya da resolverler tecrübeme dayanmıyor, sadece Telekomunikasyon mühendisliği dönemimden kalan hatıralara dayanıyor. O zamanlar 4 KHz lik ses sinyallerini 12 KHz lik taşıyıcılarla modüle ederdik, fark ne kadar büyükse, modüle edilmiş sinyalin ayıklanıp işlenmesi o kadar kolay demekti.
      Malesef bu kadar, daha uzman kaynaklardan bilgi almanız gerekiyor, ama bulmakta güçlük çekmezsiniz.

      Kolay gelsin, selamlarımla.

  2. Selçuk hocam,
    cevabınız için teşekkür ederim,
    manned Drone ,hayalim var, enzaından projesini olsun hazırlamak…

    hall sensorler,korozyana karşı zayıfmış,
    havada bu sensörün işini yapmadığını düşünürsek, vay halime.
    optik encoderler ise rotor hızını hatalı takip ediyor,
    ingilizce bilmiyorum,bu sebeple kaynak sıkıntım var.

    1. Mehmet Ali Bey merhaba,
      Siteme ilginiz ve yorumlarınız için teşekkür ederim. Uzun bir yanıt olacak, umarım faydalı olurum.

      Bu yayınlarda anlattıklarımı mutlaka çalıştırıp deneyip sonuca ulaştıktan sonra yazıyorum. Bu da demek oluyor ki, bütçem dahilinde satın alabileceğim malzemelerle yapılabilen işler olmalı. Absolute encoderlar olsun, resolverler olsun çok pahalı şeyler, bunlara erişmem çok zor.

      Ancak, resolverler ile birşeyler yapmayı ben de çok istiyorum. Kendim derme çatma bir resolver yapabilir miyim diye düşünmeye başladım, sanki birşeyler yapabilirmişim gibi geliyor. Başka işlerle de meşgul olduğumdan bu haftalar, aylar alan bir çalışma olabilir. Vaktiniz varsa bekleyip bu konudaki yayınlarımı görebilirsiniz, hatta bir gelişme olduğunda size mail atıp haber de veririm.

      “Hall effect encoder’er tozdan kirden etkileniyormuş” yorumunu nereden aldınız bilmiyorum ama bu tümüyle yanlış. Hall sensörler en dayanıklı ve toza, kire en dirençli olan seçenek. Resolverler bunları ölçüm çözünürlüğü ve sıcaklık değişimleri vb. konularda geçiyor.

      Optik encoder’ler ise 1 derece çözünürlüğe kadar inebiliyor, ama hız açısından sorun çıkabiliyor, zira diğer encoder’lerın tur başına üç beş darbe üretmesine karşılık bunlar 100-400 darbe üretiyorlar, motor 4000 devir/dk ile döndüğünde 6700 darbe/sn den başlayan 75 µs lik darbeler söz konusu, mikro denetleyicinin buna yetişip işlemesi kolay değil, yapacak başka işleri de var. Ayrıca resolver’lar kadar kompakt değiller, sıcaklık değişimlerine, şok ve titreşimlere dayanıklı değiller, yapılarındaki elektronik de başka bir zaaf yaratıyor.

      Sonuç olarak, eğer rotor açısını yüksek çözünürlükle bilmek önemli ise Resolver ve optik encoder, yok motorun yarım ya da tam tur attığını bilmek yeterli ise hall sensör derim, sizin projeniz de buna uygun düşüyor. Sıcaklık değişimi ve titreşim de sorun olmamalı zaten. -50 derecedeki yüksekliklere çıkacak değilsiniz.

      Size önerim, ilk aşamada resolver’a gitmek yerine işe hall effect encoder ile başlamanız. Zira seçtiğiniz iddialı projede encoder konusu en basit halledilecek bir konu. PID kontrolunda hızı çok doğru ölçemeseniz de felaket olmaz, zira sistem geri beslemeli olduğundan drone yan yattığında, istenen hızda ilerlemediğinde “biraz daha hızlı”, “biraz daha yavaş” dönsün şeklinde komutlar üretecek, “daha doğrusu %20 daha hızlı/yavaş dön” diyecek, “hız 2300 devir olsun şimdi” demeyecek. Drone motorları yüksek devirle dönüyor, her devirde yüzlerce konum bilgisi alıp rotor açısını tam olarak bilmek gibi bir kaygınız yok.

      Drone kontrol yazılımını hazır alıp kullanacaksanız onu bilemem ama, eğer kodu kendiniz geliştirecekseniz -ki öğrenmeniz için öyle yapmanız gerek- önünüzde çetin bir yol var. Resolvere en sonunda geçersiniz.

      Genç ve meraklı bir arkadaş olduğunuzu anlıyorum, beni mesleğe meraklı arkadaşları destekleyip teşvik etmekten fazla motive eden bir şey yok. Ancak size en önde gelen önerim teknik İngilizce’nizi geliştirmeniz. Madem bu alanda bir şeyler yapmak istiyorsunuz, alın önünüze ilgilendiğiniz konudaki bir yayını, sözlüğü de açın, inatla satır satır, kelime kelime çözüp anlayın. Benim İngilizce’mi teknik düzeyde geliştirmemin ilk adımı böyle olmuştu. Televizyon ekranına saat yazdırmayı aklıma koymuştum. Elektor dergisinde bu konudaki 6 sayfalık yazıyı haftalarca sökmeye çalışmıştım. Arkası çorap söküğü gibi geldi.

  3. Hocam,
    bende yazınızı okumadan size gmail’den yazdım , affediniz,
    Hall sensörün korozyona karşı dayanıksız olduğunu biyerde okudum, ama hatırlamıyorum,korozyondan benim anladığım titreşim,sıcak-soğuk farkı gibi hall sensörün maruz kaldığı dış etkiler,

  4. Selçuk Hocam merhaba.Bitirme ödevim bu konu ile ilgili.Sizler ile nasıl irtibata geçebilirim?teşekkürler.

Comments are closed.