Mosfet sürememe problemi

Başlatan sdonmez, 24 Eylül 2012, 20:13:27

z

#15
Alıntı yapılan: sdonmez - 24 Eylül 2012, 20:13:27
İlgili high-side mosfetleri sürekli "ON" pozisyonunda tutarken, ilgili low-side mosfet'e PWM uyguluyorum. Osiloskop olmadığı için sinyalleri izleyemiyorum fakat multimetre ile girişleri kontrol etmeye çalıştım.

Tam tersini yapacaksın. Alttaki mosfetleri on yapıp üstteki mosfetlere pwm uygulayacaksın. Tabiki cakisma olmayacak. Ust mosu iletime sokmadan once alttakini off yapacaksin. usttekini off yaptiginda da alttakini on yapacaksin.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

sdonmez

Tam tersini de deniyorum, olmuyor.

mehmet

http://tr.nanotec.com/adim_motoru_animasyonu.html

Değişik motorlar için animasyon, adım değerleri ve sürücü devresini
göstermişler...

Saygılar...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

anladinmi

bu durumda osiloskop olmamasi hatayi bulmada isi güçlendiriyor.
Problemi analiz edersek : 2 ana ihtimal var :
1) Hardware sorunu :
- MOSFET sürme devresinde Ir2101'ler islevini yerine getirmiyor
        - Kapasite, snubber devresi
        -  diyot
- MOSFET'te problem
       - Mosfetin biri uçmus.
       - bir bacagi iyi baglanmamis
- Motorda problem
      - Bir ESC ile problem var mi yok mu bulunabilir.

2) Mantiksal sorun :
- nihayetinde mantiksal sinyaller istenilen gibi degildir :
      - Lojik analyser tarzi bir cihazla bulunabilir.
      - debug print ile çikisa bakmak
- Timing sorunu:
      - Ara ara bir yerde yazilim belli bir süre duruyorsa. (unuutlan print)

Bu motoru döndürmek için ne tür feedback uygulaniyor ? uygulaniyormu ?


StateTableRev tablosu her ne kadarda bir dönüyor ? geçisler neye göre oluyor ?
O StateTableRev tablosunda 2 kol FET'in durumu gözüküyor, 3.kol ne durumda oluyor ? ON ? OFF?

sdonmez

Alıntı yapılan: anladinmi - 12 Ekim 2012, 01:26:12
- MOSFET'te problem
       - Mosfetin biri uçmus.
       - bir bacagi iyi baglanmamis
- Motorda problem
      - Bir ESC ile problem var mi yok mu bulunabilir.
Mosfet'te problem olsa, motora ilk hareketi elimle verdiğimde de çalışmaması gerekir. İlk hareketten sonrasında sorun yok.

Alıntı yapılan: anladinmi - 12 Ekim 2012, 01:26:12
2) Mantiksal sorun :
- nihayetinde mantiksal sinyaller istenilen gibi değildir :
      - Lojik analyser tarzi bir cihazla bulunabilir.
      - debug print ile çikisa bakmak
- Timing sorunu:
      - Ara ara bir yerde yazilim belli bir süre duruyorsa. (unuutlan print)

Bu motoru döndürmek için ne tür feedback uygulaniyor ? uygulaniyormu ?
StateTableRev tablosu her ne kadarda bir dönüyor ? geçisler neye göre oluyor ?
O StateTableRev tablosunda 2 kol FET'in durumu gözüküyor, 3.kol ne durumda oluyor ? ON ? OFF?

Hall sensor geçişlerinde statetable'a göre hangi kolun enerjilendirileceği belli. 3. kol OFF durumunda.

iyildirim

State table  hall sensörden okunan değerlere göre sıralı değilde komutasyon sırasına göre ise hatalı..


sdonmez

Alıntı yapılan: iyildirim - 12 Ekim 2012, 14:54:09
State table  hall sensörden okunan değerlere göre sıralı değilde komutasyon sırasına göre ise hatalı..

O tablo ilk denemelerden kalma... Tabloyu bu şekilde güncellemiştim. Hall'dan gelen sinyal sıralamasına göre...

unsigned long StateTableRev[] =
{
0x0000,     // 0 - No state
0x0210,     // L3 = ON, H1 = PWM
0x2004,     // L2 = ON, H3 = PWM
0x0204,     // L2 = ON, H1 = PWM
0x0801,     // L1 = ON, H2 = PWM
0x0810,     // L3 = ON, H2 = PWM
0x2001,     // L1 = ON, H3 = PWM
0x0000,     // No state
};

iyildirim

Hall den gelen sinyalleri bilemediğimiz için bu sıralamanın bizim için pek anlamı yok. 

Yok hall sensörlerden gelen sinyaller de bu şekilde sıralı ise yani komutasyon sırası bu şekilde ise yine hatalı diyeceğim.

2110 kullanan sensörsüz BLDC sürücü bende yapmıştım.  Bu tip sorunların hiç biri ile karşılaşmamıştım. Donanım ile ilgili hemen herşey söylendiğine, ve son olarak üst moslara PWM uygulandığı halde hala sorun varsa sorunun kontrol kısmında,  yazılımda olduğu düşünüyorum.


sdonmez

Benim de anlayamadığım şu: Yazılımda sorun olsa, ilk hareket elle verildikten sonra da sorun yaşanmaz mı? Hiç bir problem göremiyorum. İleri ve geri yönlerde çok stabil ve düşük akım çekerek dönüyor.

iyildirim

Donanım tamam, yazılımda da sorun yok ise sorun nerede ?

Aklıma son olarak beslemenin kötü olabileceği, ilk kalkış anında çöktüğü gibi şeyler geliyor. Belki işlemci ilk kalkış anında sürekli BOR dan reset yiyordur.
Motor nasıl bir şey. ?


anladinmi

#25
Bence tablo biraz yanlis olmus. Bana kalsa söyle, benim kollar sirali gidiyor, bir alt bi üst alternansli :
// VL = ON,       UH = PWM   
//  WH = ON,     VL= PWM
// UL = ON,     WH = PWM
//  VH  = ON,     UL = PWM
//  WL = ON,     VH = PWM
//  UH = ON,     WL = PWM

yani senin yazinla :
// L3 = ON,       H1 = PWM   
//  H2 = ON,     L3= PWM
// L1 = ON,     H2 = PWM
//  H3  = ON,     L1 = PWM
//  L2 = ON,     H3 = PWM
//  H1 = ON,     L2 = PWM

Senin tablonda anlamadigim basta ve sonda nostate; nedir o ? Hepsi mi OFF ?
Kollari sira ile gitmeme sebebi nedir ?
Pardon ya, hall sensöre göre veriyormussun. kusura bakma.

sdonmez

#26
Yazılıma hızlanma ve yavaşlama rampası ekledim.
Referansı verip ardından CW yönü aktifleştirirsem motor kalkamıyor ama rampaya bağlı olarak motordan çok tiz bir ses artmaya başlıyor.
Tam bu anda, CW sinyali kesersem motordan gelen tiz ses rampalı olarak azalmaya başlıyor.
Eğer rampa 0'a düşmeden CCW sinyali verirsem motor ters yönde kalkabiliyor. (işlem tam tersi şekilde de işliyor.)



mesaj birleştirme:: 13 Ekim 2012, 00:52:22

Bazen de, rampa 0'a çok yaklaştığında ters yön sinyalini verirsem motor sanki hareket etmeye başlayacak gibi kımıldıyor ama kalkamıyor.
Yani sanki birşeyler şarj oluyor ve şarj bitmeden (sönümlenmeden) diğer yön seçilirse motor rahatça kalkıyor.

iyildirim

Alıntı yapılan: sdonmez - 13 Ekim 2012, 00:48:47
Yazılıma hızlanma ve yavaşlama rampası ekledim.
Referansı verip ardından CW yönü aktifleştirirsem motor kalkamıyor ama rampaya bağlı olarak motordan çok tiz bir ses artmaya başlıyor.
Tam bu anda, CW sinyali kesersem motordan gelen tiz ses rampalı olarak azalmaya başlıyor.
Eğer rampa 0'a düşmeden CCW sinyali verirsem motor ters yönde kalkabiliyor. (işlem tam tersi şekilde de işliyor.)

Rampa var ama motor kalkamıyor ne demek.?  Rampa motoru hızlandırma için kullandığımız bir şey. Motor hiç hareket etmiyorsa rampa diye birşey de yoktur.

Kod vermekten kaçınıyorsun ama sorunun kodlarda olduğunu düşünüyorum.

Yukarıda yazdıklarından öncelikle motora ilk hareketi verirken hatalı komutasyonla başladığını sanıyorum.

Olması gereken ise sensörler okunup CW veya CCW yönde bir sonraki komutasyona geçip PWM' i başlatıp  arttırmaya çalışmanız. Sensörden kesme geldiğinde bir sonraki anahtarlama adımına geçmeniz. 
Rampa için sadece PWM 'i arttırmak yeterli. Artan gerilim-akım ile motor bir sonraki komutasyon konumuna daha çabuk gelir. kesme daha hızlı oluşur vs. Sizin herhangi bir timer, delay vs. kullanmadan sadece sensörden gelen sinyal ile kesme üretildiğinde anahtarlama yapmanız yeterli..

Eğer güç kaynağınız çökme vs. yapıyorsa ilk anda PWM 'i yeterince yavaş arttırman yeterli..

sdonmez

Merhaba,

Tablolarımı daha anlaşılır olması açısından biraz değiştirdim. (tek yön için)

Motor uçlarına dışarıdan voltaj uygulamak suretiyle kutup atlatarak bulduğum hall sıralaması resimdeki gibi.
Aynı sıralamayı mosfet sürerek elde etmeye çalıştığım tablolar da dalga şekillerinin üstünde...

Sol taraftaki RWS tablosunu ise, motor kutuplarını bir adım sonrakine gidecek şekilde oluşturdum:

Örneğin Hall=1 ise, 0x0120   1L = PWM, 3H = ON sinyalini uyguluyorum ki Hall=3 gelecek duruma gitsin.

İlk durumdaki hall durumunu okuyorum ve buna göre sonraki adımları sırayla uygulayacak bir kod yazdım. Ama ilk hareketi veremiyorum.
      if (hall_valid & ENABLE & START & DIR_CW & !DIR_CCW)
      {
         DIRECTION = 1;
         new_speed = An_Ref;                  
         OVDCONS = StateTableRev[hall];
      }


Bir yön için kod da yukarıdaki gibi. Buton durumları istediğim konumda ise, pottan okuduğu analog referansı rampalı şekilde duty cycle ayarlanıyor. Hall durumuna göre de tabloda hangi mosfetlerin ne şekilde sürüleceği seçiliyor.


iyildirim

Eğer tablondaki mavi sütündaki değerlere göre sıralı komutasyon yapıyorsan sıralaman doğru..

Ama işlemcinin PWM modülünün OVERRIDE registerlerini yanlış anlamışsın sanırım.
OVDCONS = StateTableRev[hall];


Tablo içeriğini OVDCONS registerine yazman ancak OVDCOND registerinde ilgili kanalın karşılığını sıfır yaparsan anlamlı. OVDCOND registerinde ilgili bit 1 kaldığı sürece o kanala PWM basılır. Yani bütün kanallar aynı anda aktif olur. Mos yakmadığın için (ama nedeni güçsüz güç kaynağıda olabilir) ve ilk hareket verildikten sonra motor döndüğü için OVDCOND nin tüm bitleri sıfır yapıyor olmalısın.. Bu durumda da PWM modülü hiç çalışmamış oluyor. Aynı işi PORT registerleri ile de yapabilirdin. 
Bu da motorun ilk anda hareket edememesi gibi şeyleri de açıklıyor. İlk hareketi elle verince dönmesini...

Sanırım datasheet deki ilk örneği kullanmışsın. Dikkat edersen ilk örnekteki şemada aktif kanallarda PWM yok, Aktif darbe süresi boyunca çıkış daima high. İkinci örnekte ki şemada ise aktif darbelerde PWM var.

Tablonu OVDCOND registerine göre düzeltip, anahtarlama yı OVDCOND ile yapmalısın, mosların tamamı aktif high ile sürüldüğünden OVDCONS registerinin içeriğini sıfırlamalısın.
Geri kalan yerlerde anlattığın mantık doğru görünüyor.
Hall oku, CW, CCW yönde tabloda bir ilerle PWM ver.. Duty i yavaş yavaş arttır.. sensör bilgisi değişince tabloda bir ilerle...