Fırçasız DC motor'da Sinüs Modülasyonu nasıl yapılacak?

Başlatan Mucit23, 07 Mart 2018, 18:37:10

Mucit23

Selamlar

BLDC motorlar üzerine çalışıyorum. Temel Bazı konuları öğrendim aşama aşama ilerliyorum. Nasip olursa FOC'ye kadar ilerleyeceğim. Şimdilik Blok komutasyonla BLDC motoru çalıştırabildim.

Motoruda Hall Sensör ile komutasyon yapıyorum. 50mm çapa sahip Fırçasız DC bir motorun dışına uygun açıyla 3 adet hall sensör yerleştirdim. Bu sayede rotor pozisyonuna göre komutasyon yapabildim. Sırayla Her bir Fazı açıp kapatarak motoru döndürebiliyorum. Power kartı olarakda IR2101 ve IRF1403 lerden oluşan 3 lü yarım köprü devresi oluşturdum. STM32F103'den PWM uyguluyorum.

Çalışması Bu şekilde
https://www.youtube.com/watch?v=4qWHyIujxBw

Fakat Şöyle bir durum var.  Duty Değerini Belli bir değerin üzerine çıkardığımda akım alıp başını gidiyor. Blok komutasyonda sinüs modülasyonu yapılması gerekiyormu bu konuyu tam anlayamadım. Mesela DRV8308 gibi Hazır çiplere baktığımda böyle birşey yapılmadığını görüyorum. Doğrudan fazlara PWM uygulanmış.

Sonradan videodaki motoru ESC ye bağlayıp motor çalışırken fazları osiloskopta baktım. Oldukça gürültülü bir sinüs var. Belliki sinüs modülasyonu yapılmış.

Anlamadığım nokta şu. 3 Faz var ve Fazlar arası 120 derece faz farkı var. 120 Derecelik bir sinüs dalgası üretirken her bir faza tablodan nasıl sinüs değerlerini uygulayacağım? Aynı zamanda fazlar arası komutasyon yapmam gerekiyor çünkü.  Arka planda nasıl bir yapı olacak bunu kafamda oturtamadım. 

Bunu kısaca anlatabilecek olan varmı?





Franisto


Hocam konu hakkinda bilgim yok fakat size birsey sormak istiyorum. Neden sinus yada trapez seklinde bir dalgaya ihtiyac duyuluyor? 90 derece kenarli dalgalar ile surulurse gurultumu olusuyor.


Asagidaki videoyu muhtelemen biliyorsunuzdur ama isterseniz bir goz atin sensor ile fazlarin durumlari es zamanli grafikte gosterilmis

https://youtu.be/43JMIuwVrY4

ladybird

Hocam pwm kısmını nasıl yapıyorsunuz ? Bende bldc yapmaya çalışıyorum böyle bir sorunla karşılaştım.
https://www.picproje.org/index.php/topic,72316.0.html
"Bana ait sözcükler olsun isterdim. Ama kullandığım bu sözcükler, bilmiyorum kaç bilinçte sürüklendi." Jean Paul Sartre

devrecii

PWM döndüsünü 1-100khz ayarlayın  ,  ve 10- 256  bölün  (sinus cözünürlük ),   (frekans yükseldikçe mosfet ısınacaktır entegre de)

6 kanal pwm çıkışı lazım . 

Yada 3 kanal ama kanalların NULL olabilmesi gerekir bi şekilde. Yani 1 veya 0 değil ,  null.


Diyelim 6 kanal pwm çıkışı ile yaptın. 

6 tane sinus tablosu oluşturun  uint8_t kanal1[]={ 0,1,5,10,,....   

Bunları sırası ile  kanal compare registerine verin ne kadar hızlı verirseniz motorunuz o kadar hızlı döner. 

Eğer motoru yavaş yavaş hızladırıp yavaşlatırsanız hall sensöre gerek yok bence.

Hall sensör iyidir,  uyumu sağlayıp çekilen akımda tasarruf sağlayabilir ama tam tersi tepeleri çakıştırıp gereğinden fazla akım çekmesine de neden olabilir..   



Mucit23

PWM işini TIM1 ile hallediyorum. STM32'lerde zaten Complementary PWM özelliği var. Orada Problem yok. Şuanki PWM frekansı 16KHZ civarında

Fakat anlamadığım bir sorun var.

Videoda motor Saat yönünün tersine Dönüyor. Bu şekilde motor çalıştığı zaman Duty Değerini belirli bir değerin üszerine çıkardığımda Akım çok fazla artıyor ve Mosfetler aşırı ısınıyor. Motor Sesi hoş değil. Ters yöne döndürdüğümde ise Motor Gayet iyi çalışıyor. Hızlanmasında problem yok. Max Devirleri görüyorum. Saat yönünün tersinde çalışırken akan akımın aynısı akmasına rağmen mosfetler hiç ısınmıyor.

Komutasyonu bu tabloya göre yapıyorum.


DIR=1 iken sorun yok. Gayet iyi çalışıyor. Fakat DIR=0 iken uygulanması gereken komutasyonu yaptığımda Motor çalışıyor fakat akım çok fazla oluyor ve moslar aşırı ısınıyor.

Komutasyon sırasımı ters oluyor. Ufak bir yanlış anahtarlama var gibi ama çözemedim. Tabloda problem olmaz herhalde Texas'ın sürücülerinden baktım.

seyityildirim

Alıntı yapılan: Mucit23 - 07 Mart 2018, 18:37:10

Anlamadığım nokta şu. 3 Faz var ve Fazlar arası 120 derece faz farkı var. 120 Derecelik bir sinüs dalgası üretirken her bir faza tablodan nasıl sinüs değerlerini uygulayacağım? Aynı zamanda fazlar arası komutasyon yapmam gerekiyor çünkü.  Arka planda nasıl bir yapı olacak bunu kafamda oturtamadım. 

Bunu kısaca anlatabilecek olan varmı?

Blok komutasyon ile yani six-step ile sinüs akım oluşturamazsınız. sinüs akım için FOC yapmanız gerekecek. Zaten six-step komütasyonun akımı sinüs yaparım/yapabilirim diye bir iddiası yok. FOC ile six-step sürücünün temel farklarından biri akım formudur zaten.

Foc de ise Space Vector Modulasyon var. alfa-beta domaini var, d-q domaini var. bunları biraz araştırmanız gerekecek.

devrecii

Arkadaşlar peki pinlerden voltajı ölçüp pwm 'yi buna göre fixleyemezmiyiz , aynı smpslerde olduğu gibi feedbak yapıp voltajın istenilen değerde
sabitlendiği gibi,  böyle bişey yapılsa bile bence basit analog sistemlerle yapılabilir bazı durumlarda mcu işi zorlaştırıyor.

Sormak stediğim bi konu var hala kafamı kurcalıyor mesela drone motoru, harddisk motoru 120 derecelik bobinli fakat bunlarda asla hall sensör kullanımamış üç tane kablo direk entegreye gidiyor peki hall kullanmadan nasıl yapıyor ,bobinlerdeki akımı mı ölçüp mü buluyor bu entegreler, kafam alalk bullak oldu. 

Mucit23

@iboibo Bobin akımlarından rotor pozisyonu tespit ediliyor.  Sensorless Brushless dc motor control diye geçiyor. Forumda Hasan diye bir arkadaşımız zamanında sürücü yapmıştı.

Ben komutasyon işini anlamadım. Neden ters yöne dönerken motor zorlanıyor yada motor fazla akım çekiyor? Neden aynı akim geçmesine ragmen motorlar daha çok ısınıyor. Ilk önce bunları çözmem gerekiyor. Sıra FOC yede gelecek.

devrecii

Hall sensör kullanmadan nasıl sürüldüğü ile ilgili internette söyle bişey buldum.

Hemde akımı istediğiniz gibi sınırlama ve motora binen yükü görme şansı veriyor. 




Bobinlerin herhangi birisine akım veriliyor motor o yöne doğru giderken akım çizgisi il başta az sonra yükselerek artıyor tam üzerine geldi zaman ise akım en yüksek seviyeye geliyor. Akım yükseldiği an ikinci bobine geçiyor ve aynı ilemler sırası ile devam ediyor .

Bu şekilde sinus formuda ayarlanabilir ve motordan geçen mx akım sınırlanabilir. Umarım işinize yarar  .


devrecii

Alıntı yapılan: Mucit23 - 08 Mart 2018, 17:12:25
Ben komutasyon işini anlamadım. Neden ters yöne dönerken motor zorlanıyor yada motor fazla akım çekiyor? Neden aynı akim geçmesine ragmen motorlar daha çok ısınıyor. Ilk önce bunları çözmem gerekiyor. Sıra FOC yede gelecek.

Osiloskpunuz müsaid,   motorun bobinlerine bağlantıyı kesin osiloskpa bağlayın, elinizle motoru çevirip çıkışları inceleyin ,  büyük ihtimalle yazılım hatasıdır.


Eğer motor üzerinde modifikasyon yapıp bir dördüncü pin çıkarırsanız  çok basit bi şekilde motoru süreblirsiniz driverlere ve 6 çıkışa gerek kalmaz
Yada satın alırken 4 telli olanlarından satın alabilirseniz işler çok kolaylarşır  ,

3v ile gs arası sürülebilen 60a mosfetler var bunları direk mcu ya bağlayıp , çok basit devre ve yazılımla işi bitirebilirisnz.




Mucit23

Motorlar ısınıyor dedim ama orada yanlışlık olmuş. Mosfetler çok ısınıyor. Ortalama aynı akım geçiyor halbuki.

Önceki mesajımda verdiğim tabloya göre aşağıdaki diziyi doldurdum. Hangi mosların açılıp hangilerinin kapanacağını bu diziye göre ayarlıyorum. İleri ve geri yön için iki farklı dizim var.
static const uint8_t BLDC_BRIDGE_STATE_FORWARD[8][6] =
{
// UH,UL	       VH,VL	       WH,WL         //ABC
   { 0,0	,	0,0	,	0,0 },  // 0 //000  ShutDown
   { 0,0	,	0,1	,	1,0 },  // 1 //001  ok
   { 0,1	,	1,0	,	0,0 },  // 2 //010  ok
   { 0,1	,	0,0	,	1,0 },  // 3 //011  ok 
   { 1,0	,	0,0	,	0,1 },  // 4 //100  ok 
   { 1,0	,	0,1	,	0,0 },  // 5 //101  ok
   { 0,0	,	1,0	,	0,1 },  // 6 //110  ok
   { 0,0	,	0,0	,	0,0 },  // 7 //111  ShutDown
};

static const uint8_t BLDC_BRIDGE_STATE_BACKWARD[8][6] = 
{
// UH,UL	       VH,VL	       WH,WL         //ABC
   { 0,0	,	0,0	,	0,0 },  // 0 //000  ShutDown
   { 0,0	,	1,0	,	0,1 },  // 1 //001  ok
   { 1,0	,	0,1	,	0,0 },  // 2 //010  ok
   { 1,0	,	0,0	,	0,1 },  // 3 //011  ok
   { 0,1	,	0,0	,	1,0 },  // 4 //100  ok
   { 0,1	,	1,0	,	0,0 },  // 5 //101  ok
   { 0,0	,	0,1	,	1,0 },  // 6 //110  ok 
   { 0,0	,	0,0	,	0,0 },  // 7 //111  ShutDown
};


Bir yerde hata yapıyor olmalıyım ama nerede çözemedim.

apsis

@mucit benzer bir durum karşımıza çıkmıştı. Üzerine pek gitmedik sonra. Buna benzer bir konu bu sitede açılmıştı sanki. Hatta üretimden kaynaklı olabileceği yazılmıştı.
Benim önerim bir esc ile test edin. Bakalım esc'de de anormal bir ısınma olacak mı
"Makineye Beyin" MEKATRONİK

marecrisium

Hall sensörler ile sürülen BLDC'nin farklı yönlere döndürüldüğünde farklı akımlar geçmesi olayı ile ben de karşılaşmıştım. Bu imalat hatası değil. Çalıştığım 3 farklı BLDC ile aynı olay oluştu. Sanırım sensör çıkışlarının CW ve CCW yönüne dönerken farklı çıkışlar vermesinden kaynaklanıyor.
Anahtarlama tablolarının her iki yön için birbirinden farklı olması gerekiyor,ancak bu biçimde birbirine yakın formda akım çekiliyor.

Mucit23

ESC ile sürüşte sıkıntı yok. Motor her iki yönde de gayet normal çalışıyor. Fakat bende öyle değil. Motor Saat yönüne dönerken diyelim ki %50 Duty ile 2A civarı akım çekerken saat yönünün tersine döndüğünde aynı duty ile Akım 5-6A lere fırlıyor. Moslar Çok fazla ısınıyor. Ek olarak BLDC hub motorda denedim ondada aynı sorun var. Yani motorla ilgili değil gibi.

Skop ile sinyallere bakıyorum ama orada da bir terslik görünmüyor.

@marecrisium Bu tabloyu doğru bir şekilde nasıl oluşturacağım? Bende senin dediğin gibi bir sorun olduğunu düşünüyorum.

İşin İlginci Saat Yönünde Ortalama 2 A çekilirken mosların ısınması ile Saat yönünün Tersine çekilen aynı akımda mosların ısınması bir değil. Saat yönünde dönerken geçen 2A ile moslar hafiften ısınırken saat yönünün tersine dönerken geçen 2A lik akımda moslar çok fazla ısınmaya başlıyor. Sanki akım sadece moslar üzerinden akıyor.

marecrisium

Ben bu durumu tam olarak çözdüğümü söylemem.Tablonun doğrusu nasıl oluşacak açıkçası ben de bilmiyorum.
Mosların ısınma olayı anahtarlama veya iletim kayıpları ile ilgili. Akıma osiloslop ile bakman gerekir tam şeklini görmen lazım.
Akımın tepe değerleri yukarılara çıktığı için moslar ısınıyor olabilir.