SENSÖRSÜZ FIRÇASIZ DC MOTOR SÜRÜCÜ TASARIMI-ESC
Merhaba ben Beytullah MURAT, Bu blog yazımda yaz dönemi stajım boyunca Elfatek Elektronik’te yapmış olduğum sensörsüz fırçasız DC motorlar için tasarladığım motor sürücü projemden bahsedeceğim. Projemi yazılım ve donanım tasarımı olmak üzere iki başlıkta inceleyeceğiz.
Motor Sürücü Nedir?
Sürücü, endüstride elektrik motorlarının aktif olarak kontrol edilmelerine olanak sağlayan elektronik cihazlardır. Aktif olarak kontrol derken, elektrik motorları üzerinde istenildiği an hız kontrolü, yön kontrolü, tork ve akım kontrolleri yapılmasından bahsetmekteyiz
DONANIM TASARIMI
Proje donanım tasarımı yapılırken https://electronoobs.com sitesinde bulunan “Open Source ESC” projesi referans alınmıştır. Referans alınan proje üzerinde LTspice gibi devre analiz programı kullanılarak donanım tasarımının devre analizi yapılmış ve doğruluğu gözlemlenmiştir. Donanım tasarımında temel olarak iki alan bulunmakta bunlardan biri kapı sürücü ve mosfetlerden oluşan faz tarafı iken diğeri Gerilim bölücü ve sanal nötr noktası oluştulmasında kullanılan dirençlele oluşturulan BEMF algılama tarafıdır.
Şekil.1.: Şematik Çizim – FAZ A
Faz tarafında şekil 1 de de görüldüğü gibi A fazımızın kapı sürücüsü ve mosfet bağlantıları yer almaktadır. Devre üzerinde IR2101 kapı sürücüsü, IRLR7843 mosfetleri bulunmaktadır. Yine devre üzerinde C1 kapasitörü kapı sürücü beslemesinin filtre kapasitörü, D1 Boostrap diyotu, C4 Boostraap kapasitörü,R1 ve R2 gate direnci ile R7 ve R8 gate deşarj dirençleri bulunmaktadır.
Şekil.2.: Şematik Çizim – BEMF
Devre üzerinde motor fazlarını doğru bir şekilde tetiklenmesi için motor rotor konumunun bilinmesi gerekmekte. Bu projede Sensörsüz BLDC motor kullanıldığı için motor rotor konumunun bulunabilmesi maksadıyla motordan gelen BEMF sinyalini 12 Volt seviyesinden R19,R20,R21 ve R16,R17,R18 dirençleri ile gerilim bölücü metodu kullanılmış ve mikrodenetleyici için uygun gerilim seviyesi olan 3.3 Volt seviyesine düşürülmesi sağlanmaktadır. 3.3 Volt seviyesindeki bu sinyal ise mikrodenetleyicide bulunan comparator birimlerine girilmektedir. R13,R14,R15 dirençleri ise devre üzerinde sanal nötr noktası olarak kullanılmaktadır. C7,C8 ve C9 kapasitörleri ise algılanan BEMF sinyallerinde olan yüksek gürültüyü engellemek amacıyla opsiyonel olarak konulmaktadır. Sanal nötr noktası ise denetleyicide kullanılan comparator ün negatif girişine girilmektedir.
Şekil.3.: PCB Çizim
PCB tasarımında faz yollarından geçecek akım miktarına göre yol kalınlığı hesaplanıp çizilmektedir. PCB tasarımı çift katlı bir tasarıma sahip olup Güç ve sinyal yolları mümkün olduğunca birbirinden ayrılmalıdır.
Şekil.4.: PCB Ön Yüz
Şekil.5.: PCB Arka Yüz
YAZILIM TASARIMI
Proje süreci içerisinde denetleyici olarak STM32 ailesinden STM32F303RE denetleyicisi kullanılmıştır. Denetleyici üzerinde bulunan Comparator ve Timer birimlerinin yeterli oluşu tercih sebebi olmuştur. Programlama esnasında STM32CubeIDE programı kullanılarak programlama sürecinde kolaylık sağlanmıştır.
Şekil.6.: Mikrodenetleyici Konfigürasyon
Şekil 6 da da görüldüğü gibi denetleyicinin konfigürasyon ayarları yapılmıştır. TIM1 ve TIM2 PWM çıkışı için kullanılmakta olup TIM3 BEMF sinyallerinin okunulduğu harici kesme oluşturulmasında kullanılmaktadır.
Şekil.7.: Değişkenler
Program içerisinde mosfetleri tetiklemek için verilecek duty değerini tutmak amacıyla Duty değişkeni, motor faz sırasını tumak için step değişkeni ve motor fazları olan A,B,C fazlarından okunacak BEMF değerinin comparator çıkışını tutabilmek için state1,state2,state3 değişkenleri tanımlanmıştır.
Şekil.8.: BEMF Algılama
yukarıda gösterilen kod bloğunda oluşturulan timer kesmesi içerisinde comparator çıkışları okunup state değişkenlerine değer ataması yapılmaktadır. Bu işlemin harici bir timer kesmesinin içerisinde yapılma sebebi BEMF sinyallerinde var olan parazitlerin mümkün olduğunca az algılanmasını sağlamaktır.
Şekil.9.: STEP Durumu
step_value() fonksiyonunda state değişkenlerine göre motor step durumu belirlenmekte ve While dögüsü içerisinde çağırılmaktadır.
Şekil.10.: Mosfetlerin Aktif edilmesi
Şekil 10 da görüldüğü üzere hangi mosfetlerin açılması gerekiyorsa step değerine göre açılma yapılmaktadır.
Şekil.11.: FAZ Açılması
Yukarıda da görüldüğü üzere belirlenen step değerine göre hangi mosfetlerin açılması gerektiği belirlenmektedir. bu fonksiyon step_value() fonksiyonunun altında While dögüsü içerisinde çağrılmaktadır.
Şekil.12.: While Döngüsü
While döngüsü içerisinde step_value() ve motor_move() fonksiyonlarının çağrılmasının yanı sıra düşük duty değerlerinde motorda hareket gözlenmemesi sebebiyle bellirli duty aralığında sistem pwm çıkışı bellirli frekanslara ayarlanarak motorda hareket sağlanmıştır.
Yukarıda ki videoda motorun düşük devirde dönme örneğini görmektesiniz.
Bu video da ise daha önce üzerinde çalışma yapılmış devre üzerinde motor çalışmasını görmektesiniz.(bknz. yapılan çalışma)