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

Leave a Reply

Your email address will not be published. Required fields are marked *