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

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

bulut_01

Saat yönünün tersinin tablosunu olusturmak istiyosan bi fikir motoru elinle dönder yavasca hall sensör cıkıslarınada scop bagla orda high ve low ları kagıtlara not alıp tablo olusturmak en dogrusu gibi.
YENİLMEZ..

Mucit23

Osiloskop değilde çıkışları logic analyser ile inceledim. Ama sorun yok görünüyor. Birkaç farklı komutasyon seçeneğini denedim yazılımsal sorun kesinlikle yok. Eminim. Çünkü komutasyon şekliyle birlikte fazların yerini değiştirdiğimde bu sefer saat yönünün tersine düzgün çalışırken saat yönünde aynı şekilde davranıyor.

Logiç Analyser ile aldığım çıktılar.

Saat yönünün tersine dönerken. Bu şekilde sürüşte fazla akım çekiyor.

Buda Saat yönünde dönerken

Bu şekilde motor gayet normal çalışıyor. Besleme voltajına göre çıkabileceği max hıza rahatlıkla çıkıyor. yapılan komutasyon tablodakiyle birebir aynı.

Bu arada Logic analyser 8 kanal olduğu için Sadece HallU, HallV, HallC ,UH, UL, VH, VL, WH görüntüleyebildim. WL logic analyserde yok. Geriye tek bir sebep kalıyor oda hall sensörlerin yanlış yerleştirilmiş olma ihtimali.

bulut_01

İki resim arasındaki farklılıklar U ve V fazları sinyalleri aynı değil detaylı incelerseniz farklılıklar var aralarında.
YENİLMEZ..

Mucit23

Sorun Hall Sensörlerin Yerleşimindeymiş. Şimdi Elimde olan hazır bir BLDC motor ile deneme yaptım. Prüzsüz bir şekilde çalışıyor. Saat yönü veya Tersi Max duty bile versem her iki yönde de aynı akımı çekiyor. Bir Test Videosu çektim.

https://www.youtube.com/watch?v=aATrZXenf7I

Sorun Belliki Hal sensörlerin yerleşiminde. Daha önce Hal Sensör aralarındaki açı = 120/(çift kutup sayısı) formülünden hesaplayarak yerleştirmiştim.

Motorda 14 Mıknatıs var, Buda 14 kutup yada 7 çift kutup eder. 120/7=17,1428 Derece şeklinde hesaplamıştım. Bu hesabıda internette bir sayfada buldum. Bunun yada bu işin doğrusunu bilen varmı?

bulut_01

Sorunsuz denediğin motora göre konumlandır sensorleri.
YENİLMEZ..

Mucit23

Son videodaki motorun içine baksam bile pek bir sonuç çıkaracağımı sanmıyorum. Sonuçta 3 adet sensör var ven bunlar stator oyuklarına yerleştiriliyor. Fakat Ben motorun içine müdahale etmenden dışarıdan ekleyeceğim bir sensör kartı ile komutasyon almak istiyorum. Bu yüzden sensörlerin nasıl yerleştirileceği çok önemli. Bunu ayarını bir türlü oturtturamadım.

Cemre.

Merhaba,
@Mucit23 hocam, rotor pozisyonunu algılama amacıyla daha farklı teknikler kullanılabilir.
Manyetik encoder çiplerini araştırmanizi onerebilirim. Bu arada bir türlü gönderemediğim şu kitaplar için eposta adresi yazar mısınız?

Mucit23

Hocam bir sonraki aşamada zaten enkoder bağlayacağım motora ama bu haliyle düzgün bir şekilde çalıştırabilmem lazım. Daha sonra Sinüs modülasyonunu deneyeceğim. Onuda anladım gibi.




Sorunun sebebini tam emin olmamakla birlikte anladım sanırım. Hal sensörlerin uygun açı ile yan yana durmasını sağlayacak bir PCB yapmıştım. Bu PCB de HAL sensörlerin açısı tam hesapladığım gibi yerleştirdim. Onuda BLDC motorun yanına yaklaştırınca komutasyon sinyallerini aldım. Motorun bir yöne düzgün çalışıp diğer yöne çalışmamasının sebebi sanırım hal sensör kartını motorun gövdesinde rastgele yerleştirmiş olmam. Bu Kartı birkaç milim sağa veya sola hareket ettirirsem düzelecek sanırım.

Mucit23

Blok komutasyon işini hallettim. Sorun dediğim gibi hal sensörleri pozisyonundan kaynaklıymış. birkaç milim sensörleri hareket ettirerek en doğru pozisyonu buldum.

Şimdi Sinüs Modülasyonu yapmaya çalışıyorum. Fakat çıkamadım işin içinden.

Bunun için 3 Adet Timer Kullanmayı düşündüm.

Tim1 ile Motor PWM sinyallerini üretiyorum.
Tim3 ile Motor hızını ölçmeye çalıştım. Hal Sensörde değişim olduğunda Timer Değerini okuyup sayacı sıfırlıyorum.
Tim4 ile de Kesme oluşturup Tablodan Uygun PWM değerini Timer kanallarına uyguluyorum.

Timer3 ile okuduğum hız değeriyle Tım4'ün kesme hızını ayarlamaya çalıştım. Fakat hala mantığı düzgün bir şekilde oturtamadım. Motoru düzgün bir şekilde kaldıramıyorum.

Hal sensörlerle Timer arasındaki ilişkiyi düzgün kuramadım.

Bu işi Senkronize bir şekilde nasıl yaparım? Ufaktan birisi anlatsa süper olacak. 

Analog

Alıntı yapılan: Mucit23 - 08 Mart 2018, 16:09:09PWM 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.
(Resim gizlendi görmek için tıklayın.)

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.

Hocam aklıma takıldı bir sorayım dedım. TIM1 complementary ya 6 mosfet suruyorsunuz buradan 6 kanal mı cektınız ? %20 duty cycle da

M.Salim GÜLLÜCE

#25
Alıntı yapılan: Mucit23 - 14 Mart 2018, 14:23:04Blok komutasyon işini hallettim. Sorun dediğim gibi hal sensörleri pozisyonundan kaynaklıymış. birkaç milim sensörleri hareket ettirerek en doğru pozisyonu buldum.

Şimdi Sinüs Modülasyonu yapmaya çalışıyorum. Fakat çıkamadım işin içinden.

Bunun için 3 Adet Timer Kullanmayı düşündüm.

Tim1 ile Motor PWM sinyallerini üretiyorum.
Tim3 ile Motor hızını ölçmeye çalıştım. Hal Sensörde değişim olduğunda Timer Değerini okuyup sayacı sıfırlıyorum.
Tim4 ile de Kesme oluşturup Tablodan Uygun PWM değerini Timer kanallarına uyguluyorum.

Timer3 ile okuduğum hız değeriyle Tım4'ün kesme hızını ayarlamaya çalıştım. Fakat hala mantığı düzgün bir şekilde oturtamadım. Motoru düzgün bir şekilde kaldıramıyorum.

Hal sensörlerle Timer arasındaki ilişkiyi düzgün kuramadım.

Bu işi Senkronize bir şekilde nasıl yaparım? Ufaktan birisi anlatsa süper olacak. 
-Hal sensorlardan 0-1 mi geliyor yoksa analog bilgimi?
-Timer tarafını bilmem ama bir sinüs tablosuyla ancak halledebilirsin sanırım.

sadece bir faz için tablo lazım. buna U=0° diyelim
diğerleri ileri yada geri döndürmene göre birini V=120° gecikmeyle aynısını uygulaman gerek. 3.ye ise W=240° sonra aynısını uygulaman gerek.
-Birde ısınmalar falan oluyorsa muhtemelki Köprülerden biri veya birkaçı kısa süreliğine aynı anda hen HI hem LO transistörü iletime sokuyor olabilir. Motora akım çıkmazken devrenin kendisi  akım çekiyor demektir.
-verdiğim grafik çiziminde her üç fazdada L transistörlere yüksek frekans PWM uygulanmamış. Biraz değişik bir yöntem kullanmış.
Anladığım kadarıyla PWM i kendin üretiyorsun. MCU daki PWM aygıtlarını kullanmıyorsun. Gerçi ne kullandığını bilmiyorum da sadece fikir yürüterek yazdıklarını yorumlamaya çalışıyorum.
-Yön değiştirmek istersen 2 fazın çıkış zamanına yer değiştirmen kafi.  U=0° - V=120° yerine U=120° - V=0° gibi, herhangi 2 faza yer değiştir sadece.

Mucit23

Abi Aslında bu konuyu çözdük. Bu aşamalara gelmeden önce bir uygulama görmüştüm o uygulamada Tablodan değerler alınıp veriliyordu motora fakat o yöntemi çalıştıramadım. Sonradan Space Vektör Tekniğini öğrendim. O şekilde motoru çalıştırdım. Sadece akım kontrolü yapmam gerekecek.

Motorda Konum kontrolü yapmaya çalışıyorum. Bunun için Enkoder alıp motora bağladım. Birazda bunun üzerine çalışacağım.