Blog yayınlarımın amacı – bunu neden yapıyorum?

2017 de emekli olunca artık keyif aldığım şeyleri yapmaya kararlıydım. Keyif aldığım şeylerin başında da elektronik tasarım çalışmaları geliyor.  

İş hayatımın ilk 10 yılında ARGE mühendisi olarak tam bir iş tatmini ile zevkle çalıştım. Maalesef bu mutlu 10 yılın ortalarından itibaren başlayan yöneticilik görevleri hızla artıp ağırlık kazanarak meslek hayatımın geri kalanını domine etti.

Şimdi evdeki köşemde, mikroişlemci tabanlı elektronik cihazlar geliştiriyorum. Bunu yapabilmek için sürekli olarak yeni şeyler öğrenmem gerekiyor. İlginçtir, orta okuldan bu yana hayatımı bu alanda geçirmiş olmama rağmen bildiklerim bilmediklerimin yanında çok güdük kalıyor. Hani derler ya, muhasebeciye sormuşlar “bir daha dünyaya gelseydin ne olmak isterdin ?” diye, “imam olmak isterdim” diye yanıtlamış. Sebebini sorunca “mevzuat hiç değişmiyor, bir öğrendin mi ömür boyu yetiyor !” demiş. İşte o muhasebeci eğer elektronik mühendisi olsaymış da esas değişimin ne olduğunu görseymiş diyorum.

Continue reading “Blog yayınlarımın amacı – bunu neden yapıyorum?”

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 bunu için bir program yazmamıza gerek yok.

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

  • en.introduction_to_electric_motors_pres
  • UM2374 STM32 Motor Controller SDK Getting started-User Manual-DM00484271
  • UM2124 Getting Started 6 step en.DM00334922
  • UM1943 Getting started IHM07M1

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.

İ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ümdevarsayı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ı ayarlayana 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

STM32 CubeIDE den INTEL HEX çıktısı almak

STM32 CubeIDE platformu, varsayılan ayarlar ile çalışıldığında, derleme sonrasında sadece bir .elf dosyası oluşturuyor.

Bu dosya, CubeIDE den işlemciye ST Link V2 adaptörü ile yükleme yapmak için yeterli.

Ancak bazan CubeIDE platformundan değil de doğrudan, sadece ST Link V2 ve STLink Application aracını kullanarak kod yüklememiz de gerekiyor, o zaman bir Intel .hex dosyasına ihtiyaç oluyor.

Bu yayında .hex çıktısını da CubeIDE den alabilmek için yapılacak ayarı gösteriyorum.

Continue reading “STM32 CubeIDE den INTEL HEX çıktısı almak”

Başka platformlardan Cube IDE ye program aktarımı

ST firması ürettiği mikroişlemciler ile kullanılmak üzere neredeyse sayısız örnek uygulama hazırlayıp yayınlıyor. Bunlar belirttikleri lisans kurallarına uyulması şartı ile ücretsiz, firmanın WEB sitelerinden kolaylıkla indirilebiliyor. st.com sitesinden bunlara erişilebiliyor.

Akla gelebilecek her konuda uygulama örnekleri var. Ancak bu örneklerin çoğunluğu STM32 CubeIDE değil, başka platformlar için hazırlanmış durumda.

Bunlardan AC6 System Workbench For STM32, kısaltılmış haliyle SW4STM32 platformundan STM32 CubeIDE ye aktarılmasını adım adım anlatmaya karar verdim.

Continue reading “Başka platformlardan Cube IDE ye program aktarımı”

STM32 Cube IDE İÇİNDE GENEL TANIMLAMALAR

DEFINES / UNDEFINES WITHIN STM32 Cube IDE CONFIGURATION SETTINGS

Kod geliştirirken aynı kodun farklı seçeneklere göre derlenmesini isteyebiliyoruz. Örneğin bu kodun SPI arayüzlü bir ekranla ya da Paralel girişli bir ekranla çalışan tipleri olsun isteyebiliriz.
Ya da geliştirme süresince ekranda bir sürü debug mesajı versin ama kullanıma sürüleceği zaman bunları kapatsın (örneğin Debug ve Release tipleri) isteyebiliyoruz.

Bu durumda belirli bir sürümde istenen komut bloklarını etkinleştirirken, bu sürümde gereksiz ve istenmeyen başka blokları kapatabilmek için #define derleyici tanımlarını kullanıyoruz.

Continue reading “STM32 Cube IDE İÇİNDE GENEL TANIMLAMALAR”

STM32F GELİŞTİRME MODÜLLERİM – Bölüm 2 : Minikit_S R4 SPI girişli TFT

MY STM32F DEVELOPMENT BOARDS – Part 2 : Minikit_S R4 With SPI interface to TFT

64 pin STM32F10x kullanmam gerektiğinde aşağıdaki fotoda görülen Çin yapımı geliştirme kitini kullanıyordum. Özellikle geliştirdiğim masaüstü CNC bu çekirdek kit üzerine kurulu olarak gelişti.

 

STM32F103R8T6 Mini 64 Modülü

Bu kitin mikroişlemci çevresinde 64 erişim noktası görülüyor. Bu 64 pin mikroişlemcinin tüm ayaklarına erişim sağlıyor. Bunların dışında öteye beriye serpiştirilmiş 32 erişim noktası da UART, BOOT, reset, besleme ve programlama ayaklarına erişim kolaylığı sağlıyor. Ben bu noktalara erkek pin headerler lehimliyordum. Pin headerler lehimlendikten sonra modülü ters çevirerek aşağıdaki fotoda görülen CNC ana kartına takıyordum.

CNC ana kartında, bu kitteki tüm erkek pinlere karşı  düşen dişi pin soketler var.  Böylece iki kart arasında 96 noktadan bağlantı sağlanmış oluyor.

Bu kırmızı renkli Çin yapımı geliştime kitinin yerini alacak, aynı zamanda projelerime has fazladan özellikleri de olacak bir modül tasarladım. Bu modülü Minikit_S olarak adlandırıyorum. “S” harfi bunun üzerinde kullanılan TFT ekranın SPI arayüzlü olduğuna işaret ediyor. Paralel arayüzlü TFT kullanan modülün isminde “P” harfi var.

Continue reading “STM32F GELİŞTİRME MODÜLLERİM – Bölüm 2 : Minikit_S R4 SPI girişli TFT”

STM32F10x GELİŞTİRME MODÜLLERİM – Bölüm 1 : Minikit_P R2 – paralel girişli TFT

MY STM32F10x DEVELOPMENT KITS

Şimdiye kadar çalışmalarımda Çinden satın aldığım geliştirme modüllerini kullanıyordum. Bunlar hakkında bir başka yayınımda bilgi vermiştim. (görmek için burayı tıklayınız.)

Bunlar ucuz malzemeler olsa da artık ihtiyaçlarıma daha uygun modüller tasarlayıp kullanmanın vakti geldi. (Yerli ve milli !!! :)) )

Özellikle üzerinde TFT ekranlarımı doğrudan takabileceğim soketleri olan, SPI, I2C ve UART portlara kolayca erişebileceğim konnektörleri olan modüllere çok ihtiyaç duyuyorum.

Yeni geliştireceğim modüllerin eskilerinin yerine doğrudan takılabilmesi de gerekiyor ki, daha önce geliştirmiş olduğum cihazlara bunları takıp kullanabileyim.

Continue reading “STM32F10x GELİŞTİRME MODÜLLERİM – Bölüm 1 : Minikit_P R2 – paralel girişli TFT”

STM32 TIMER İLE DARBE DİZİSİ ÜRETİMİ (HAL Kütüphaneleri, Interrupt ve CUBE MX Kullanarak)

GENERATING PULSE SEQUENCES USING STM32, HAL LIBRARIES, INTERRUPTS and CUBE MX

AMAÇ ve KAPSAM

En eğlenceli bulduğum projeler hareket eden şeyler yapmaya yönelik olanlar. İş hareket ve konumlandırma kontrolu olunca karşımıza motorlar ve encoderler çıkıyor. 

Continue reading “STM32 TIMER İLE DARBE DİZİSİ ÜRETİMİ (HAL Kütüphaneleri, Interrupt ve CUBE MX Kullanarak)”

BLDC SERVO MOTOR KULLANIMI – 1

DRIVING BLDC SERVO MOTOR WITH STM32

Yeni bir adım: BLDC DC servo motorlar

Şimdiye kadar robotik çalışmalarımda “Adım Motor”larını (Stepper Motor) kullanageldim, sanırım geliştirdiğim yazılım kütüphanem de epeyi olgunlaştı.

Yaptığım her yenilik ve iyileştirmeyi de masa üstü CNC projemde uygulamaya koydum. Bu proje benim test alanım haline geldi.

Ancak robotik çalışmaların Servo Motorları kullanmadan tam olgunlaşması mümkün değil.

Servo Motordan söz edilince birbirinden çok farklı iki farklı tip gündeme geliyor :

Tek fazlı PWM kontrollu Servo Motorlar

Bunlar genelde amatör projeler ve eğitim amacı ile kullanılan çok ucuz (1-2 Dolar), küçük motorlar. Sadece 3 tel -besleme, toprak ve sinyal- ile kontrol ediliyor. Çok turlu olanları da var ama genelde 0-360 derece arasında dönerek konumlandırma yapabiliyorlar. Besleme uçları bağlandıktan sonra sinyal telinden 20 ms periyodu darbe genişlik modülasyonlu bir sinyal verilerek kontrol edilebiliyor. 0-180 derece arasında bir dönüş için darbe genişliğini 1 ms den 2ms ye değiştirilmesi yeterli.

Ben burada bu tipler üzerinde durmayacağım, internette Servo Motor olarak sorugulandığında karşımıza ilk çıkanlar bunlar ve istemediğiniz kadar uygulama örneği ve bilgi var. Kullanımları çok basit, mikrişlemcinizden tek bir çıkışı işgal ediyor. Ama iş daha ciddi bir uygulamaya gelince yetersiz kalıyorlar.

BLDC servo motorlar

BLDC Servo Motor

Bu yazının konusu Brushless DC Motor – fırçasız DC Motorlar.

Bu motorlar adım motorlar gibi sürekli dönebiliyor, adım motorlara göre çok daha hızlılar, çok daha pahalılar, kontrolları daha zor. Adım motorlara rakip değil ama tamamlayıcı özellikleri var.

Adım motor ile servo motor karşılaştırması

  • Adım motorlar düşük hızlarda daha güçlü ve verimliler, hız yükseldikçe güçleri düşüyor. Zaten hızları da 25-30 dolara satılan NEMA 23 motorlarda 150 rpm i aşamıyor.
  • BLDC servo motorlar yüksek hızlarda güçlü ve verimliler. 4000 rpm hız sıradan sayılıyor. Adım motorların tersine düşük hızlarda verim ve güçleri düşüyor.
  • Adım motorların sürülmesi ve pozisyon kontrolu çok kolay
  • Adım motorlar aynı torku veren BLDC motorlara göre 5 de bir fiyatına. Bu karşılaştırmada hız faktörünü gözardı ediyorum.
  • Servo motorlarda konumlandırma için bir encoder zorunlu bu encoderin okunması, izlenmesi yazılımı daha karmaşık hale getiriyor.
  • Adım motorlar daha sesli ve titreşimli çalışıyor. Rezonans problemleri olabiliyor.
  • Sonuç olarak, konum kontrolu önemli olduğunda hız sorunumuz yoksa adım motor, hız gerekli ise servo motor kullanalım diyebiliriz.

SERVO MOTORLARIN YAPISI

Servo motorların sabit mıknatıslı kutupları olan bir rotorları ile faz ve kutup sayısına göre değişen sayılarda bobinleri olan bir statorları oluyor. Tek, iki ve üç fazlı olabiliyorlar. Benim kullandığım ve yaygın olanlar üç fazlı. Bunların stator sargıları üç fazlı asenkron AC motorlara benziyor. Bilindiği gibi 3 fazlı stator bobinlerinin her fazı arasında 120 derece açısal fark oluyor.

Kutup sayıları faz başına 1 çiftten başlayıp giden sayılarda olabiliyor, benim kullandığım fotodaki motor 2 çift kutuplu tipte.

SERVO MOTORLARIN SÜRÜLMESİ

3 fazlı servo motorların genelde üç faz stator bobinlerinin birer uçları birleştirilmiş yıldız yapıları oluyor. kimlilerinde bu ortak ucu dışarı vermiş oluyorlar ama benim kullandığımda sadece serbest uçları motor dışına verilmiş.

Bu çizimi ST Microelectronics in “Introduction to electric motors” adlı dokümanından aldım, tembelliğim için kusura bakmayın. Ayrıca başlangıçta bu dokümandan çok yararlanmıştım, hararetle tavsiye ederim.

Benim burada ele aldığım ve ilk olarak kullandığım sürüm yöntemi “6 step” olarak anılan yöntem.

Bu yöntemde U-V, U-W ve U-W ikili faz uçlarına her 60 derecede değişen +/- yönlü akımlar veriyoruz. Böylece 6×60 dereceyi 6 adımda dönen bir alan elde ediyoruz.

Bu altı adımın her birinde U V W uçlarından ikisine + ya da – yönlerde gerilim/akım uygulanırken üçüncüsü açık bırakılıyor. Bu açıkta kalan uçan gerilim (BEMF – Back Electro-Motive Force) ölçümü yapılarak rotor pozisyonunu algılayabiliyoruz.

Saat yönünde dönüş sırasında altı adımın her birisinde U V W uçlarına uygulanan gerilimler aşağıdaki gibi :

ADIM

U V W Akım Yönü  
1 + NC GND U->W  
2 NC + GND V->W  
3 GND + NC V->U  
4 GND NC + W->U  
5 NC GND + W->V  
6 + GND NC U->V  

Yukarıdaki tabloda her bir faz ucuna ardışıl iki adım pozitif, bir adım açık bırakıldıktan sonra da izleyen iki adım süresince negatif gerilim uygulandığını görüyoruz.

Yani U V W fazlarına uygulanan gerilimleri aşağıdaki gibi de (Osiloskop ekranında göreceğimiz gibi)  tablolamak mümkün :

  • U :          PP_NN_PP_NN_PP_NN_ ….
  • V :          N_PP_NN_PP_NN_PP_N ….
  • W:          _NN_PP_NN_PP_NN_PP ….

Legend :   P :  Positive Power Bus Line

                     N :  Negative Power Bus Line (GND)

                     _ :   Open – High Impedance (BEMF ölçümü için ADC girişine bağlı)

Bu durumda  U, V, W fazlarının her birinden aşağıdaki gibi iki yönde akımlar akıtılıyor : (Çizimi yine ST Microelectronics’in An Introduction to Electric Motors dokümanından aldım.):

Altı adım Servo Motor sürüm yönteminde Faz akımları

DARBE GENİŞLİK MODÜLASYONUNUN KULLANIMI

Yukarıdaki şekilde fazlara 60 derecelik periyodlarla kare dalga gerilim/akım uygulanıyor olarak görünse de gerçekte motorları böyle sürmüyoruz.

Motora uyguladığımız faz akımlarının efektif büyüklüğünü azaltıp çoğaltarak tork kontrolu sağlıyoruz. Bunun için de yukarıdaki “Positive Power Bus Line” dediğimiz akımı MOSFET sürücüler üzerinden geçirerek anahtarlıyoruz, Darbe Genişlik Modülasyonu PWM uygulayarak motora veriyoruz. Böylece motor üzerinde tam bir hakimiyet kurmuş oluyoruz.

Faz gerilimlerinin -Motor Bağlı Değil İken- osiloskop ekranındaki görünümü de aşağıdaki gibi oluyor.

Servomotor 6 step PWM Drive signals

Burada fazlardan birisine uyguladığımız sürüm sinyali sarı renkli ikinci kanalda görünüyor.  Kırmızı izli birinci kanal MOSFET anahtarlama sinyalini gösteriyor. 

Motor sürücünün çıkışı birisi pozitif güç hattına, diğeri de negatif güç hattına bağlı iki MOSFET transistor ile sürülüyor. Bu MOSFET lerden üst taraftaki iletime geçtiğinde bobine pozitif gerilim, alt taraftaki iletime geçtiğinde ise negatif gerilim verilmiş oluyor.

Her iki MOSFET’in birden iletimde olmaması çok önemli. Bunun için sürücü yazılımda önlem alınmış olması şart. Her iki MOSFET’in de kesimde olduğu bu “ölü” periyodlarla yukarıdaki fotoda birinci kanalın “0” olduğu aralıklar. Ölü periyodlarda fazın ucu açık devre, yani yüksek empedans görüyor.

Osiloskop görüntüsünde faza PWM ile uygulanan “Positive Power Bus” sinyali belirgin. Ama bir sonraki iletim periyodunda, MOSFET bu defa “Negative Power Bus” a bağlandığında ekranda sadece devam eden düz “0” seviyesini görüyoruz.

Yani ekranda pozitif akım periyodları görünüyor, ters yöndeki gerilimleri ise osiloskopu diğer fazlara bağladığımızda o fazların PWM gerilimi olarak görüntüleyebiliyoruz. Şimdilik bu resme, akım yokmuş gibi görünen anahtarlama periyodunda ters yönde akım darbelerini hayalimizde canlandırarak bakabiliriz.

FAZ ENABLE SİNYALLERİ İLE PWM SIRALAMASI

Yukarıda anlatılanlara biraz daha açıklama getirmek üzere her üç faza uygulanan “Enable” sinyallerini aynı ekranda gösteren bir görsel koymayı yararlı görüyorum. İlk üç (mavi, sarı, kırmızı) sinyal fazların aktif olduğu zaman aralıklarını faz farkları ile birlikte gösteriyor. belirtmiş olduğum gibi bu sinyallerin “0” seviyesi o faz bobininin ucunu yüksek empedansda bırakıldığını aralıklar. O arada bu fazda BEMF ölçülerek rotor pozisyonu algılanıyor.

Dördünce sinyal ise 2. kanala ait PWM sinyali. Lojik analizörümde daha fazla kanal olmadığından burada sadece bir PWM sinyalini görüntüleyebiliyorum.

PWM ayrıntısının görülmesi için biraz yakından bakalım:

Enable sinyalleri ve 2. kanalın PWM sinyali büyütülmüş görünümü.

PWM SİNYAL AYRINTILARI

Yukarıdaki fotoda pek ayırt edilemeyen PWM sinyallerine yakından bakarsak :

PWM High Duty Cycle

Bu yüksek (%80 gibi) PWM oranlı sinyal detayı. Eğer 100% PWM uyguluyor olsaydık bu pozitif darbeler kesintisiz biçimde birleşerek uzun bir gerilim darbesi oluşturacaktı.

 

Low Duty Cycle PWM

Bu da düşük Duty Cycle ile oluşan PWM. Göründüğü gibi pozitif darbeler iyice incelerek iğneler haline gelmiş. Bu durumda motora uygulanan gerilim ve akımın efektif değeri de çok düşürülmüş oluyor. Bu resimdeki kadar düşük akım değerleriyle motor muhtemelen dönmeyecektir.

GERÇEKTE MOTOR UÇLARINDA GÖRÜNEN GERİLİMLER

Sisteme Motor bağlandığında motor uçlarında yukarıda gördüğümüz güzel dikdörtgen dalga şekillerini değil aşağıdaki gibi, eski bilgisayar oyunlarındaki grafik karakterleri andıran sinyaller görüyoruz. Bunlara ben “gömlek” sinyalleri diyeceğim.

Phase voltages as seen on Servo Motor Terminals

Buradaki gömleğin ortadaki dikdörtgen gövdesi yukarıdaki paragraflarda sözünü ettiğim pozitif akım periyodundaki darbelerden ibaret. Ard arda gelen iki gömleğin kolları arasındaki sıfır volt çizgisi fazın toprağa (GND) bağlandığı negatif akım periyoduna ait.

Gelelim gömleğin kollarına;

Kollar faza gerilim/akım uygulamayıp açıkta -MOSFET ler kesimde- bıraktığımız ara periyodlar. Burada gördüğümüz gerilimler ise dönmekte olan rotorun bu bobine uygulamakta olduğu BEMF ile o anda akım akıtılmakta olan diğer fazların bobinin diğer ucunun bağlı olduğu ortak uçta oluşturduğu gerilim.

Cümle uzun oldu bir başka şekilde anlatayım:

Eğer bu osiloskop izini alırken diğer fazlardan akım akıtmıyor olsaydık, rotorun dönmeye devam etmesi kaydıyla, gömleğin kollarında aşağı inen ya da yukarı çıkan 330-30 ve 150-210 derecelik sinüs dalga eğrileri görecektik. Yani dönmekte olan Rotorun oluşturduğu BEMF gerilimini. Sinüsün tamamını göremeyeceğiz, zira fazımızın aktif olduğu 120 derecelik periyodlarda bobinin bu ucunu pozitif ya da  negatif güç hatlarına bağlayıp duruyoruz.

Gömlek kollarında temiz bir sinüs eğrisi değil de bir PWM sinyali ile  modüle edilmiş sinyal görmemizin sebebi de şu:

İzlemekte olduğumuz faz bobinin diğer ucu, öteki iki fazın bobinleri ile ortak bir uca bağlı. Motorun içine gizlenmiş olan bu ortak uca biz erişemiyoruz. Bakmakta olduğumuz faza gerilim/akım uygulamadığımız periyodlarda diğer bobin çiftinden PWM akımları akmaya devam ediyor, zira bu aralıkta onları aktif periyotları var. Bu da ortak ucumuzun  “0” V değil, akmakta olan akımların belirlediği başka bir seviyede olması anlamına geliyor.  Dolayısı ile Gömlek kollarında görünen gerilim “Sinüs gerilimi+bir PWM sinyal” şeklinde oluyor.

Gömlek kollarının ortası BEMF geriliminin sıfır geçiş anı oluyor. Bu gerilimi ölçerek sıfır geçiş anını yakalayıp rotorumuzun bulunduğu açıyı algılayabiliyoruz. Böylece ayrıca bir sensöre ihtiyaç olmadan rotor pozisyon kontrolu yapabiliyoruz.

ÇALIŞMALARIMDA KULLANDIĞIM DONANIM ve YAZILIM

Genel kurulum :

Çalışma kurulumu

ST Microelectronics STM32F302R8 tabanlı Nucleo 64 geliştirme modülü ve bunun üzerine takılı olarak yine STM IHM07M1 motor sürücü modülünü kullanıyorum. Firmware olarak da ST Microelectronics in X Cube STSPN07 paketinden yararlanıyorum.

IHM07M1 Aliexpress de 20 Dolar, Özdisan’da KDV dahil 124 TL ye (Ağustos 2019)

NUCLEO F302R8 Aliexpress de 18 Dolar, Özdisan’da KDV dahil 106 TL (Ağustos 2019)

BLDC Servo Motor: Intechno (MOPA tarafından satılıyor) 85 Euro+KDV (Mayıs 2019)

Devamı için BLDC SERVO MOTOR KULLANIMI – 2 – Buraya tıklayınız

CNC KULLANARAK PCB YAPIMI – YENİ YÖNTEM

CNC ile PCB yapmak

Çoğu zaman su yolları çok ince olmayan basit baskılı devrelere ihtiyacımız oluyor. Prototip devre PCB lerini bir  masa üstü CNC de birkaç saat içinde yapıp ele almak mümkün.  

Bu konudaki daha önceki yayınımda (Görmek için burayı tıklayınız) bunun için izlenebilecek bir yolu anlatmıştım. Ancak o yöntem oldukça külfetli bir çalışma gerektiriyordu.

Bu defa aynı sonuca çok daha hızlı ve zahmetsiz ulaşmayı sağlayan yeni bir yöntemden söz edeceğim. Continue reading “CNC KULLANARAK PCB YAPIMI – YENİ YÖNTEM”