ESC yapmaya calisiyorum, sorularim...

Başlatan kaanerdemir, 20 Ekim 2008, 13:19:22

kaanerdemir

Selamlar,

Programlanabilir olması açısından kendi ESC'mi (electronic speed controller) yapmak istiyorum. Bunun için şu an P16F628A microcontroller ve IRFZ46N mosfet kullanıyorum ancak bir türlü kararlı bir sistem elde edemedim. İntihat etmeden önce de burada da bir sorayım dedim :)

Hazırladığım schema aşağıda.



PIC'e yazdığım kod (C) şöyle;

#include "C:\Electronic\ledyak\deneme.h"

void main()
{
   int step=0;
   int16 count=0;
   
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab

   // TODO: USER CODE!!
   while(1){
   
      output_b(0x01);
      delay_ms(step);
      output_b(0x00);
      delay_ms(10-step);
      
      if(count==100){
         count=0;
         step++;
         if(step==10){
            step=0;
         }
      }
      count++;
   }
}


Şimdi sorunlarım şöyle;

1. Öncelikle PIC için clock-speed'i 4Mhz seçiyorum ve yukarıdaki kodlarda göründüğü şekliyle internal oscillator'ü seçiyorum. Buna rağmen microsecond seviyesinde çalışamıyorum. Yukarıdaki kodda bulunan delay_ms fonksiyonu ile milisecond seviyesinde çalışabiliyorum ama microsecond (delay_us) seviyesinde nedense microcontroller çalışmıyor. Sanıyorum oscillator yetmiyor galiba. Benim yapmak istediğim 10Khz ya da 100Khz sinyal üretebilmek ama olmuyor.

2. Yukarıdaki devreyi kurduktan sonra sistem kararlı çalımıyor. Breadboard üzerinde Mosfet'in source ayağına ground bağlıyorum. Gate ayağını da PIC'in B portunun ilk pinine bağlıyorum. Sonra DC motoru 7.4V'un (+) kutbuna bağlıyorum. 7.4V bataryanın (-) kutbunu devrenin ortak ground'ına bağlayıp, DC motorun diğer ayağını da mosfet'in Drain'ine bağlıyorum. Ancak kararlı çalışmıyor. Mesela, bir süre düzgün çalışıyor sistem ama sonra olmuyor. Pic'e giden gerilimi (3.6V) kesmeme rağmen motor durmuyor. Sanki Mosfetin bacakları arasında gerilim kalmış da bu yüzden mosfet'in anahtarı açık gibi oluyor. Durup dururken motor çalışıyor. Bu arada Mosfet de çok ısınıyor. DC motorun en çok 10A akım çektiğini düşünsek bile kullandığım mosfet 60A'ya kadar dayanıklı.

3. Mosfet'in nasıl bağlandığı ile ilgili sanırım onlarca örnek devre inceledim ve bu devrelere uygun olarak kuruyorum devreyi ama sanırım beni delirtmek için çalışmıyor :)

Her türlü yardım beni intihardan kurtarabilir :)

Son olarak, esasında yapmak istediğim şu: bir DC motorum var ve bunu PWM mantığı ile hız kontrolü yapmak.

JKramer

1. Internal oscillator ile çalışmak için;
#FUSE INTRC_IO

satırını eklemelisiniz.  "setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);" ile timer'ı ayarlamışsınız, osilatörü değil. Belirli frekanslarda sinyaller üretmek için mikrodenetleyicinin pwm modülünü kullanmak daha faydalı olabilir.

2. Mosfet'leri sürmek için "sürücü" bir devre kullanılır, görmüşsünüzdür. Bu devrenin bir görevi iletime geçen mosfeti kısa sürede kesime götürebilmektir. Bir diğer görevi ise uygun gate eşik gerilimini sağlayabilmesidir. Kullandığınız mosfetin gate eşik gerilimi 5v'un altında da olsa direk pic çıkışını bağlamak istiyorsanız (bence bağlamayın :)) lojik gate'li mosfet kullanmalı ve en azından gate'den toprağa uygun değerde bir direnç bağlamalısınız.

  Bir diğer konu motora bağlı ters diyot olmaması. Bu diyotun hızlı ve motorun akımına dayanacak değerde olması gerekiyor. (Diyotun anotu drain'de, katotu motorun bataryaya bağlandığı noktada olması gerekiyor.)

 Mosfetin ısınmasının sebebi mosfetin gate geriliminin düşük olmasından ve ters diyotun eksikliğinden olabilir.

 Son olarak motor ile denetleyicinin beslemelerinin anı kaynaktan alıyorsa bu, denetleyicinin düzgün çalışmamasına neden olabilir.

xenix

PIC gerilimini kestiğinde PIC çıkışı float kalabilir, bu durumda Mosfetin kendi kendine iletime geçmesi normal. Bunu enkellemek için Gate-Source arasına 100K gibi bir direnç atabilirsin.

Kullandığın Mosfetin datasheetini incelersen;

Vgs=4,5V da en yüksek kolektör akımı 6A, 10A çekmek istersen transistör aktif bölgede kalır ve doyuma gitmez, dolayısıyla ısınır.

PIC, çıkış 1 olduğunda 4,5V verebiliyor zaten (besleme 5V ise), Yani çok limitlerdesin, 10V gibi bir gerilimle şarj etmen daha doğru. Tavsiyem gate driver kullan, böylece gate direncini daha da düşürüp daha kayıpsız anahtarlayabilirsin. Kolay gelsin.

pcb

mosfetlere uygulanacak pals genişliğine dikkat etmek gerekir, maxsimum pals genişliği datasheet de yazar, buna yaklaşdıkça ısınmaya başlar, iki pals arasında belli bir gecikme yapmalısın. 10 ve 100 khz gibi bir frekans da ısınması normaldir bence bir soğutucu eklemek gerekli. uygulanacak pals a göre mosfet seçilmelidir. mosfet RD iç direnci de önemli, frekans değişiminin daha net olarak görülmesi için mosfet akımını sıfıra götüren rd iç drenci düşük mosfetler daha uygun olabilir.


amatör bir tecrübeden kalanlar...

askuzucu

pic i 3,6 volt ile besler ve bunu gate ucuna o şekilde uygularsanız o mosfet ısınır.mosfet girişini 7,4 volt'a çıkarmalısınız.
bir de o motoru 100 Khz PWM ile kontrol edemezsiniz.Frekansı 400 Hz-2Khz aralığında tutun.
selamlar...

xenix

Neden 2 kHz üstünde kullanamayacağını açıklamanız lazım. Uygun devre ile rahatlıkla kullanılabilir 20kHz de, ses de çıkmaz motordan.

OptimusPrime

port B yi çıkış olarak tanımla bakalım neler olacak. :)
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||