STM32F4 ile Sensörsüz BLDC Motor Sürücü Yapımı

Başlatan hakan.kaymak, 22 Mayıs 2016, 19:06:35

hakan.kaymak

Merhaba,
Sensörsüz fırçasız motor sürücünün başlatma algoritmasını şu şekilde dizayn ettim.
Motor fazlarına high ve low side için N kanal Mosfetler bağladım.

6 step:
step 0:
AH->PWM
BL->ON
step 1:
AH->PWM
CL->ON
step 2:
BH->PWM
CL->ON
step 3:
BH->PWM
AL->ON
step 4:
CH->PWM
AL->ON
step 5:
CH->PWM
BL->ON

Bu şekilde stepleri Timer ile ürettiğim kesme ile değiştiriyorum. 240ms den 60ms'ye kadar iniyorum.
PWM frekansı başlatma algoritmasında sabit, 16.6Khz.
PWM duty cycle ise %40'dan %70'e kadar. (Sanıyorum %50'den %65 ideali idi.)
PWM çıkışlarının değişimi sırasında 60us kadarlık deadtime bırakıyorum.(Kapat Bekle Aç)
12V Besleme kullanıyorum. Mosfet sürücü entegre olarak irf2101 mosfet olarak idareten irf540n kullandım. (sanırım hata idi.)

STM32F4 çıkışındaki OSC görüntüleri:
PWM sinyali (sürekli açıkken)


AH'a uygulanan sinyal


AH ve AL'a uygulanan sinyal:


AH ve BH'a uygulanan sinyaller:


Bunu devreye uyguladığımda motor çok az ileri dönüp sonra eski durumuna hareketleniyordu. Moslardan duman çıkıyordu. En sonunda moslardan biri tamamen yandı. Videosu:
http://youtu.be/aHsKn1W-LSI

Nerede hata yapıyorum çözemedim; motorun bu şekilde hareketlenme sebebi nedir nerede yanlış yapıyor olabilirim?

marecrisium

Bldc motorları sürmek için konum bilgisi gereklidir.Bu bilgiyi ya rotor konumu algalayan sensörlerden ya da bemf gerilimlerinden elde etmelisin. Senin sisteminde hangisi var tam olarak ? Rotor konumunu bilmeden rastgele sinyal vererek bldcyi süremezsin.

hakan.kaymak

Alıntı yapılan: marecrisium - 22 Mayıs 2016, 22:02:56
Bldc motorları sürmek için konum bilgisi gereklidir.Bu bilgiyi ya rotor konumu algalayan sensörlerden ya da bemf gerilimlerinden elde etmelisin. Senin sisteminde hangisi var tam olarak ? Rotor konumunu bilmeden rastgele sinyal vererek bldcyi süremezsin.

İlgilendiğin için teşekkürler.

Motoru BEMF sinyallerini kullanarak sürmeyi planlıyorum, motorda hall sensörleri yok. Bu sinyalin okunabilir olması için motoru bu sinyal olmadan bir miktar döndürmek istiyorum. Bu yüzden motora komutasyonları sıralı olarak, hızlandırarak ve gerilimi (PWM duty cycle'ı) arttırarak uyguluyorum. Bu şekilde motor bir miktar döndükten sonra BEMF sinyallerini zero-crossing yöntemi ile değerlendirerek artık komutasyonları bu değerlendirme sonucuna göre uygulamayı planlıyorum.

Motor şuanda video'da görüldüğü gibi hiç dönmüyor.

marecrisium

Alıntı yapılan: hakan.kaymak - 22 Mayıs 2016, 22:28:30
İlgilendiğin için teşekkürler.

Motoru BEMF sinyallerini kullanarak sürmeyi planlıyorum, motorda hall sensörleri yok. Bu sinyalin okunabilir olması için motoru bu sinyal olmadan bir miktar döndürmek istiyorum. Bu yüzden motora komutasyonları sıralı olarak, hızlandırarak ve gerilimi (PWM duty cycle'ı) arttırarak uyguluyorum. Bu şekilde motor bir miktar döndükten sonra BEMF sinyallerini zero-crossing yöntemi ile değerlendirerek artık komutasyonları bu değerlendirme sonucuna göre uygulamayı planlıyorum.

Motor şuanda video'da görüldüğü gibi hiç dönmüyor.

Duty cycle miktarını sıfırdan başlatarak sürmeyi dene, %40 başlangıç için çok büyük bir değer.

Erol YILMAZ

Alıntı yapılan: hakan.kaymak - 22 Mayıs 2016, 22:28:30
Motoru BEMF sinyallerini kullanarak sürmeyi planlıyorum, motorda hall sensörleri yok. Bu sinyalin okunabilir olması için motoru bu sinyal olmadan bir miktar döndürmek istiyorum. Bu yüzden motora komutasyonları sıralı olarak, hızlandırarak ve gerilimi (PWM duty cycle'ı) arttırarak uyguluyorum. Bu şekilde motor bir miktar döndükten sonra BEMF sinyallerini zero-crossing yöntemi ile değerlendirerek artık komutasyonları bu değerlendirme sonucuna göre uygulamayı planlıyorum.
Motor şuanda video'da görüldüğü gibi hiç dönmüyor.

Merhaba,
Daha önce BLDC sürmedim ama yakın bir zamanda uğraşacaz gibi görünüyor.
Öncelikle motor duruyorken AÇIK çevrimle motoru döndürmen, belli bi devire ulaştırman gerekiyor diye biliyorum.
Mcu tarafından BEMF sinyalleri okunabilir duruma gelince de KAPALI çevrime geçiyorsun.
Bu senin de yapmayı planladığın şeyin aynısı.

Bence motoru öncelikle AÇIK çevrimle döndürmek üzerine odaklan.
Stator frekansını biraz düşürüp step motor gibi kontrol et derim.
Bilmediğim bir konu olarak BLDC'nin bobin uçları bağlantısında bir problem olabilir mi ?

Z80

A  B  C
F  0  1
1  0  F
1  F  0
F  1  0
0  1  F
0  F  1

A B C sargılar, F Float, 1 High, 0 Low.
BLDC motoru kontrolsüz "körlemesine" kaldırmak için bu komütasyonu kullanman gerek.
Her komütasyon arasında 20-30 ms. yeterli. 
Motoru akım sınırlaması olmadan sürme. Yani sürücü devresi ile güç kaynağı arasına mesela 2-3 Amperlik sınırlama devresi yap. Motor körlemesine kalkmada kısadevre akımı çeker, bol bol transistör yakarsın.
Ayrıca motoru tek PWM'le sürmen doğru değil, alt kolları da PWM'le sürmen gerek.
Motor kalkana kadar PWM'siz de sürebilirsin.       

hakan.kaymak

Alıntı yapılan: marecrisium - 22 Mayıs 2016, 22:57:36
Duty cycle miktarını sıfırdan başlatarak sürmeyi dene, %40 başlangıç için çok büyük bir değer.

Mevcut devre zaman zaman çok ısındı, bazı elemanları yandı vs.. 2-3 güne daha iyi moslar ile güvenebileceğim bir devre yaparak dediğini test edeceğim. High Moslardan birinin üzerindeki gerilimi de kontrol edeceğim, teşekkürler.

Alıntı yapılan: Allegro - 22 Mayıs 2016, 23:40:10
Merhaba,
Daha önce BLDC sürmedim ama yakın bir zamanda uğraşacaz gibi görünüyor.
Öncelikle motor duruyorken AÇIK çevrimle motoru döndürmen, belli bi devire ulaştırman gerekiyor diye biliyorum.
Mcu tarafından BEMF sinyalleri okunabilir duruma gelince de KAPALI çevrime geçiyorsun.
Bu senin de yapmayı planladığın şeyin aynısı.

Bence motoru öncelikle AÇIK çevrimle döndürmek üzerine odaklan.
Stator frekansını biraz düşürüp step motor gibi kontrol et derim.
Bilmediğim bir konu olarak BLDC'nin bobin uçları bağlantısında bir problem olabilir mi ?

Devre üzerinde de sıkıntı olabilir, tekrar devre hazırlıyorum. Step motor gibi de sürmeyi de denedim (her şey sabit bir step 240ms olarak.). Duty Cyle'ı sıfırdan başlatarak tekrar deneyeceğim.