Sensörlü fırçasız motor komutasyonunda bekleme süresi.

Başlatan mr.selim, 02 Mart 2017, 20:01:56

mr.selim

Alıntı yapılan: Cemre. - 03 Mart 2017, 01:06:12
Geriye kalan herşeyin eşit olduğundan emin misiniz? Rotorun ilk enerjilendirme anındaki pozisyonu bile bu farkları yaratabilecekken bence emin olmayın.

Yazılımsal olarak hall sensörlerin son halini bir değişkene kaydedip eger bir değişiklik yoksa fonksiyondan çıkacak bir gelistirme yaparsanız muhtemelen gecikme ekleme vs sorununu çözer.

Evet tekrar tekrar deniyorum. Bi 10 ms yapıyorum bi 1 ms yapıyorum birde 250 us yapıyorum azaltarak gidiyorum. 1ms deki gibi sessiz dönmüyor yada bana öyle geliyor. videoya geçip internete de koyacağım inş.

Son halini bilmek bu kadar önemli mi zaten if komutlarına göre veriyorum pwm i sırayla gitmiyor sonuçta komutasyon ?

Tagli

Komütasyon çıkışında neden bekleme var ki? Yani nasıl bir amaca hizmet ediyor?

Normalde zaten kodun bu şekilde olması da garip. Hall sensörü değişiminin bir kesme ile algılanması, bu kesme içinde bir an önce yeni komutasyonun belirlenip etkinleştirilmesi ve kesmeden de derhal çıkılması gerekir ki başka şeyler için zaman kalsın, örneğin kapalı çevrim hız kontrolü gibi. Komütasyon koduna bu tür bir bekleme koymak çok yanlış.

Konunun uzmanı değilim ama bildiğim kadarıyla asıl yapılması gereken şey beklemenin tam tersi: avans vermek. Motorun dönüş hızına göre daha hall sensörü değişmesi olmadan bir miktar zaman önce komütasyon yapılmalı, yani faz avansı verilmeli. Bunu kendim denemedim gerçi.
Gökçe Tağlıoğlu

Cemre.

Alıntı yapılan: mr.selim - 03 Mart 2017, 02:05:33
Evet tekrar tekrar deniyorum. Bi 10 ms yapıyorum bi 1 ms yapıyorum birde 250 us yapıyorum azaltarak gidiyorum. 1ms deki gibi sessiz dönmüyor yada bana öyle geliyor. videoya geçip internete de koyacağım inş.

Son halini bilmek bu kadar önemli mi zaten if komutlarına göre veriyorum pwm i sırayla gitmiyor sonuçta komutasyon ?

Fonksiyon her çağrıldığında bütün lowside mosları iletime geçirerek fazları kisadevre ediyorsunuz ve bunu çok sık yapıyorsunuz. Eğer değişiklik yoksa bunu yapmayacak şekilde düzenleyin kodunuzu. Bu kadar önemli.

DC motorda uyarma yönü aynı iken alan sargılarını kısadevre ederseniz ne oluyor bir araştırın aklınızda birşeyler canlanacaktır.

Cemre.

Alıntı yapılan: Tagli - 03 Mart 2017, 07:00:43
Komütasyon çıkışında neden bekleme var ki? Yani nasıl bir amaca hizmet ediyor?

Normalde zaten kodun bu şekilde olması da garip. Hall sensörü değişiminin bir kesme ile algılanması, bu kesme içinde bir an önce yeni komutasyonun belirlenip etkinleştirilmesi ve kesmeden de derhal çıkılması gerekir ki başka şeyler için zaman kalsın, örneğin kapalı çevrim hız kontrolü gibi. Komütasyon koduna bu tür bir bekleme koymak çok yanlış.

Konunun uzmanı değilim ama bildiğim kadarıyla asıl yapılması gereken şey beklemenin tam tersi: avans vermek. Motorun dönüş hızına göre daha hall sensörü değişmesi olmadan bir miktar zaman önce komütasyon yapılmalı, yani faz avansı verilmeli. Bunu kendim denemedim gerçi.

Avans konusunda emin değilim @Tagli hocam. Yani belki çok kısa zamanlar için yapılabilir ancak motor yükte iken anlık çöküntülere sebep olunabilir.

Bu söylediğinizi reluktans motorunda yaparak dalgalı bir hız grafiği elde etmiştim.

mr.selim

Alıntı yapılan: Cemre. - 03 Mart 2017, 09:16:45
Fonksiyon her çağrıldığında bütün lowside mosları iletime geçirerek fazları kisadevre ediyorsunuz ve bunu çok sık yapıyorsunuz. Eğer değişiklik yoksa bunu yapmayacak şekilde düzenleyin kodunuzu. Bu kadar önemli.

DC motorda uyarma yönü aynı iken alan sargılarını kısadevre ederseniz ne oluyor bir araştırın aklınızda birşeyler canlanacaktır.

Hocam iyi de ir2103 kullanıyorum orda low girişleri tersleniyor. Her çağırma işleminde Low a çekmiş oluyorum komutasyon sırasında high oluyor sadece.

Dc motor kısmını da tekrar göz gezdiricem.

Cemre.

Alıntı yapılan: mr.selim - 03 Mart 2017, 14:33:16
Hocam iyi de ir2103 kullanıyorum orda low girişleri tersleniyor. Her çağırma işleminde Low a çekmiş oluyorum komutasyon sırasında high oluyor sadece.

Dc motor kısmını da tekrar göz gezdiricem.

HALL Sensör çıkışlarında bir değişiklik yoksa, eski değerlerini koruyorlarsa bu işlemi yapmayın, hangi LOW aktif ise o aktif kalsın, hangi HIGH'da pwm varsa o da aktif kalsın. Söylediğim bu.

mr.selim

Alıntı yapılan: Tagli - 03 Mart 2017, 07:00:43
Komütasyon çıkışında neden bekleme var ki? Yani nasıl bir amaca hizmet ediyor?

Normalde zaten kodun bu şekilde olması da garip. Hall sensörü değişiminin bir kesme ile algılanması, bu kesme içinde bir an önce yeni komutasyonun belirlenip etkinleştirilmesi ve kesmeden de derhal çıkılması gerekir ki başka şeyler için zaman kalsın, örneğin kapalı çevrim hız kontrolü gibi. Komütasyon koduna bu tür bir bekleme koymak çok yanlış.

Konunun uzmanı değilim ama bildiğim kadarıyla asıl yapılması gereken şey beklemenin tam tersi: avans vermek. Motorun dönüş hızına göre daha hall sensörü değişmesi olmadan bir miktar zaman önce komütasyon yapılmalı, yani faz avansı verilmeli. Bunu kendim denemedim gerçi.

Kesme olayına pek gerek yoktur diye düşündüm. Çünkü kartın tek işlevi bu oku ve yaz başka hiçbişeyde görevi yok. Bekleme süresini de önce mosfetlerin yalıtıma geçiş süresi diye düşünmüştüm. Sonra baktım ki mikrosaniyelerde motor kalkmıyor 1ms yaptım o zaman kesildi durması. Ama yorumunuz için teşekkür ederim deniyeceğim.

mr.selim

Alıntı yapılan: Cemre. - 03 Mart 2017, 14:35:49
HALL Sensör çıkışlarında bir değişiklik yoksa, eski değerlerini koruyorlarsa bu işlemi yapmayın, hangi LOW aktif ise o aktif kalsın, hangi HIGH'da pwm varsa o da aktif kalsın. Söylediğim bu.

Motoru bir elle döndürmeyle bile bozulabiliyor. Ama benim jeton yeni düşüyor galiba. Başlangııç anında yapılması gereken şeyler bunlar fonksiyon çağırılmada yapılmaması gerek dimi ? şimdi doğru anladım galiba ?

Cemre.

Alıntı yapılan: mr.selim - 03 Mart 2017, 14:38:59
Motoru bir elle döndürmeyle bile bozulabiliyor. Ama benim jeton yeni düşüyor galiba. Başlangııç anında yapılması gereken şeyler bunlar fonksiyon çağırılmada yapılmaması gerek dimi ? şimdi doğru anladım galiba ?
Demek istediğim buydu. LIN girişlerinin Lojik 0 aktif olduğunu bilmiyordum ama bu durumda da motoru kısa da olsa bir süre boşa alıyorsunuz. Düşük hızlarda yine problem yaratabilir.

Bir de bu ses meselesine çok takılmayın, 3-4kHz değerleri kulağın duyabileceği seviyede. 18-20kHz'de bu kesiliyor.

Ek, if, if else kısmının sonuna bir de else ekleyin. Hall sensörler 6 ihtimal dışında bir pozisyona geçerse (arıza vs durumları) yine çıkışları deaktif edecek kodları bu else bloğuna yazın ve sisteme hata verdirin.

mr.selim

Alıntı yapılan: Cemre. - 03 Mart 2017, 14:42:05
Demek istediğim buydu. LIN girişlerinin Lojik 0 aktif olduğunu bilmiyordum ama bu durumda da motoru kısa da olsa bir süre boşa alıyorsunuz. Düşük hızlarda yine problem yaratabilir.

Bir de bu ses meselesine çok takılmayın, 3-4kHz değerleri kulağın duyabileceği seviyede. 18-20kHz'de bu kesiliyor.

İr2103 ve türevlerinde LIN tersleyen durumda. Evet bu kısmı düzeltmeliyim belki daha sağlıklı olur. Ölü zaman gibi davranır diye düşündüm hep. Biraz bekle ve hepsini sıfıra çek sonra pwm ver diye.

Ses normal motor sesi değil ki. Yani zorlandığını hissediyorsunuz ya akım istiyor akım çekemiyor yada biz motoru çok yoruyoruz.

mr.selim

Alıntı yapılan: Cemre. - 03 Mart 2017, 14:42:05

Ek, if, if else kısmının sonuna bir de else ekleyin. Hall sensörler 6 ihtimal dışında bir pozisyona geçerse (arıza vs durumları) yine çıkışları deaktif edecek kodları bu else bloğuna yazın ve sisteme hata verdirin.

Sensör sağlam diye yapmamıştık. Onu da eklerim. 7. durumda fonksiyondan çıkıp tekrar sensörleri okuması iyidir sanırım.

Cemre.

Alıntı yapılan: mr.selim - 03 Mart 2017, 14:48:15
Sensör sağlam diye yapmamıştık. Onu da eklerim. 7. durumda fonksiyondan çıkıp tekrar sensörleri okuması iyidir sanırım.

Olabilir.

mr.selim

Alıntı yapılan: Cemre. - 03 Mart 2017, 14:49:02
Olabilir.

Yorumlarınız için teşekkür ederim. Tüm yazılanları tek tek deneyip sonuçları yine yazarım buraya. İnş. sorun yazılımsaldır.

mr.selim

@Cemre. Hocam yarın denemeler yapıcam da fikrinizi almak istedim. Komutasyon okumalarını if else ile değil de while ileyapsak bize herhangi problem yaşatır mı dersiniz ? Veya pozitif bir getirisi olur mu.

Ayrıca süreyi de kaldırıcam yine tepki vermezse her komutasyon işleminin altına mikrosaniye düzeyinde süre eklesem daha mı sağlıklı olur ?

Tahmini de olsa herkesin yorumunu alabilirsem sevinirim.

Cemre.

while ile nasıl yapacaksın bir örnek verebilir misin?

Elinde düzgün bir scope varsa mosfet tRising ve tFalling süreleri ölçer misin? Bakalım en fazla kaç kHz'e çıkabileceksin, ona göre frekansı biraz yükseltelim ses probleminden kurtulalım.