Pwm sinyali dc motoru döndürmüyor. Yardım lütfen?

Beni buldun
 
mosfeti değiştir irl540 yada irl530 tak. irfz44 vgs voltajı 10 volttur. 4 - 4,5 volt ile sürersen ancak bir ledi sürecek bir Ids akımı oluşur. yaklaşık 50-100ma.
Logic serisi yani 4 voltta gate tam sürülen mosfet kullanmalısınız.
 
Pic voltajını 6 volta çıkarın motorun daha rahat döndüğünü görürsünüz. Ama çözüm mosfeti değiştirmektir.
 
Pic voltajını 6 volta çıkarın motorun daha rahat döndüğünü görürsünüz. Ama çözüm mosfeti değiştirmektir.
Mosfeti kaldırıp transistörle sürdüm. Yine aynı. Aynı mosfeti arduino ile kullandım. Aynı işlevi yaptırdım çalıştı.
 
Çalışsada çalışmasada mosfet değişecek.
Mosfet değiştikten sonra eğer yine çalışmazsa frekansını 1 khz - 2khz civarında tuttuğunuzdan emin olun. eğer 20 - 30 khz civarı ise 100 ohm ile mosfeti süremezsiniz.
 

Arduino ile çalışmasının sebebi Arduino sinyalinin 500Hz' te olmasıdır.

PIC' in tetiklenmesini çok çok düşük aralığa getirmeye çalışalım sonra kademesini biz belirleyelim.

"setup_timer_2(T2_DIV_BY_4,4,5); "

1*4*(4+1)*5 = 100usn eder.

500Hz ile çalışması demek 2ms veya 2000usn demektir.Yukarıdaki formülden gelen değer 100us yani 20 kere işlem yapabiliriz.
Siz yukarıdaki formülü daha da hassaslaştırarak(100usn' yi düşürerek) pwm sinyalini daha da kontrol edilebilen bir durumu çekebilirsiniz.


int aralik = 10;
#int_timer2
void kesme_fonk()
{
i += 1;
if(aralik <= i)
{
output_high(pin_b0);
}
if(aralik < i && i < 20)
{
output_low(pin_b0);
}
if(i == 20)
{
i = 0;
}
}

PWM çıkışını kullanmanıza gerek yok herhangi bir pini yukarıdaki kesme fonksiyonu ile pwm çıkışı gibi kullanabilirsiniz.
 

açıklama için çok teşekkürler ben donanımsal pwmi, daha önce yazılımsal pwm ile bir işlem yapmadigim için tercih etmiştim daha kolay geliyordu bana. Mesela 500hz için sizin bu yazdığınız koda 20 defa giriş yapılması gerekiyor değil mi? Orda büyüklük eşitlikte ufak bir hata var sanki. Ya da ben anlayamadım. Mesela ilk If sorgusunda

If(aralik >=i) dersek, ve i de 1'den başladığı için, ilk 10 çevrimde i, aralık degerinden küçük olacak. pin high da kalacak.
If(aralik <i & & i<20) için yani i değeri 10 ve 20 arasındayken de low kalıyor. Bu durumda 500hz ve %50 pwm bir sinyal vermiş oluyoruz değil mi? İlk 10 çevrim yani 10x100us=1000us high ve sonraki 10 çevrim yine 100usx10 =1000us. Bu durumda 1000us low ve 1000us high kalmış oluyor. Toplam periyot 2000us =2ms oldu. Yanlış mıyım?
Burdaki %50lik pwm degerini benim bir değişkene gore değiştirmem lazım. Bu durumda acaba aralik değerini bu bahsettiğim değişkene gore düzenleyecek bir kod yazsam olur mu acaba? Bunun için ne tavsiye edersiniz?

Donanımsal olarak da mesela direk ppc1 için
setup_timer_2 (T2_DIV_8,254,1)
yapsam 1x255x4x8/4000000 den (yanlis değilsem) 490 Hz filan yapıyor. Bu çalışması için yeterli olur mu acaba?
 


Teşekkürler IRL540 istettim pazartesi elimde olurlar. Onlarla da bi deniycem. irfz44n ler 49 A e dayandığından onları kullanmak istedim. IRL540 için de 36A diyor datasheette. 2 tane ile paralel sürsem galiba 20--30A lik sürekli akıma dayananirlar değil mi? Çünkü asıl sürulecek 755 motor 12 v luk fırçalı dc motor.
 
if(i <= aralik)
{
output_high(pin_b0);
}

Kodun ilk kısmını şu şekilde düzenleyin, kod kısmını forum üzerinde yazdığım için gözden kaçmış.

Ek olarak bahsettiklerinizle ilgili :

Burada periyotu belirledikten sonra periyot içerisinde oynamayalar yapıyoruz buna duty cycle[görev çevrimi] deniyor ve duty cyle' ın değişimleri bize Elektronik olarak servo motor, esc kontrol, dimerleme işini yapabiliyor.Yukarıdaki örnek kod üzerinde periyot 20, duty cyle 10 yani doğru anladığınız gibi 10kere kapalı 10kere açık.Siz burada duty cyle' ı 10' dan 13' e yükseltirseniz çıktınız da bu şekilde artacaktır.

Örnek vermek gerekirse duty cyle 10' da 2.14V çıktı alıyorsanız, 13 olunca 2.5V olacaktır.

Bu arada timer kesmesini ne kadar düşürürseniz o kadar hassas oynamalar yapabilirsiniz.2ms periyotu benim örnek verdiğim periyotlamada 20 eş parçaya bölüyorsanız bunu 200 gibi daha yüksek sayılara çıkararak duty cyle' ı daha hassas kullanabilirsiniz.


Ek olarak donanımsal 490Hz' nin yetmesi gerekir. Motora göre de değişebilir
 
Bu arada kendi yazdığım[C#] hesaplama yaparken bir hayli yardımcı olan programımı buraya bırakıyorum, pic timer_x hesaplamasında kafası karışan arkadaşlarımız yararlansın.

İyi çalışmalar
 

Ekli dosyalar

  • Ekran Alıntısı_2.PNG
    15.9 KB · Görüntüleme: 9
  • Ekran Alıntısı_3.PNG
    15.9 KB · Görüntüleme: 9
  • Ekran Alıntısı_4.PNG
    13.4 KB · Görüntüleme: 6
  • PIC Timer Hesaplama Vol 1.01.rar
    89.3 KB · Görüntüleme: 1
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…