August 2019 - SELCUKS TECHNICAL THINGS
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 çevresindeki 64 erişim noktasına erkek pin headerler lehimledikten sonra 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 geliştirdim. Bu modülü Minikit_S olarak adlandırıyorum.
Continue reading “STM32F GELİŞTİRME MODÜLLERİM – Bölüm 2 : Minikit_S R4 SPI girişli TFT”
Continue reading “STM32F10x GELİŞTİRME MODÜLLERİM – Bölüm 1 : Minikit_P R2 – paralel girişli TFT”
Posted on August 20, 2019 January 20, 2020
GENERATING PULSE SEQUENCES USING STM32, HAL LIBRARIES, INTERRUPTS and CUBE MX
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)”
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) kullana geldim, sanırım geliştirdiğim yazılım kütüphanem de epeyi olgunlaştı.
Yaptığın her iyileştirmeyi de masaüstü CNC de uygulamaya koydum.
Ancak robotik çalışmaların Servo Motorları da kullanmadan tam olgunlaşması mümkün değil.
BU YAZININ AMACI
Bu paragrafı tüm teknik yayınlarıma kopyalayıp baş taraflarına koymam gerekecek galiba:
Bu çalışmalar tamamiyle amatörce, yeni şeyler öğrenip eğlenmeye yönelik. Bazan oldukça ileri seviyelere ulaşsa da iddialı olmaktan uzak.
Bununla birlikte, bir konudaki çalışmalarım ilerleyip kendimce tamamlandığında başka bir konuya geçiyorum, bir süre sonra burada yaptıklarımı unutmaya başlıyorum. Birkaç ay sonra ihtiyacım olduğunda dönüp bir bakıyorum ne yaptığımı, nasıl yaptığımı nasıl kullanacağımı unutmuşum. Bir sürü tekrar çalışması yapmak zorunda kalıyorum.
Üşenmeyip, her çalışmayı dokümante etmek kaçınılmaz oluyor, bu iş de epeyi emek ve vakit gerektiriyor. Bu notlar kendim için de olsa blog sayfasında yayınlarsam hem kolay erişim sağlamış olurum, başkaları da göreceği için daha titiz çalışmak zorunda kalırım hem de belki birilerinin daha işine yarar. Bu dokümantasyon işi, projenin kendisi kadar vakit alıcı olabiliyor, hem de o kadar keyifli de değil.
Sonuç olarak : Amaç “kendime notlar”. Ama ilgilenen olur ve fazladan destek isterse bu sayfaya yorum yazarak bana ulaşabilir, elimden geleni ardıma koymayacağıma söz veririm. Elbette ödevlerini bana yaptırmak isteyebilecek genç arkadaşlara hazır lop çözümler sunmayacağımı da belirteyim.
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
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 :
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.
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ı.
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 :
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)