18f46k22 8bit pwm ile 50~60Hz sinyal üretmek

Başlatan tekosis, 20 Mart 2016, 13:59:59

tekosis

Selamün aleyküm arkadaşlar. devremde 50Hz - 1500Hz aralığında pwm sinyallerine ihtiyaç duyuyorum. 10mhz kristal kullanıyorum. pwm için de timer2 yi kullanıyorum. malum bu timer 8 bit olduğundan 10 mhz kristal için 610Hz altına inemiyorum. bu timeri kullanarak, kristal frekansını düşürmeden CCP pwm frekansını aşağı çekebilme yolu yok mu? çözünürlük 10 bite çıkabiliyor ama bu sanırım duty/cycle oranı ile ilgili bir durum.

aynı kılıfta bu işi görebilecek pic mcu tavsiyelerine de açığım.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

Cemre.

Hocam CCP birimini kullanmadan 19-20mS taşma oluşturacak Timer kurup çıkışı tersleyerek de oluşturabilirsiniz bu sinyali. HPWM zorunluluğu mu var?

tekosis

PWM modülünü kullanmam kesinlikle iyi olacak. diğer türlü dediğiniz gibi de yapılabilir ama programın sürekli kesmeye girip çıkmasını istemiyorum.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

Cemre.

http://ww1.microchip.com/downloads/en/AppNotes/00594B.PDF

Hocam bir tablo var işlemci frekansı ile pwm frekansı arasındaki bağlantı ile ilgili.
Bir de bir hesaplama sitesi var, ben en düşük 1MHz'de 60Hz'leri  görebildim, bir de siz bakın.
http://www.micro-examples.com/public/microex-navig/doc/097-pwm-calculator.html

tekosis

#4
Evet hesap doğru cemre. verdiğin uygulama notunu da inceliyorum. pek bir şey çıkartabileceğimi sanmıyorum ama bir gelişme olursa yazarım. yardımın için teşekkür ederim.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

vardal57

50 - 60 Hz sinyal üretmek istiyorsan kristali 4 mhz e düşür daha randımanlı olacaktır.

tekosis

#6
arkadaşlar http://ww1.microchip.com/downloads/en/AppNotes/00594B.PDF buradaki ilk sayfada aşağıda resmini verdiğim kısımda bir şeyler anlatıyor ama anlayamadım. bir şekilde bu timer2 8 bitten 10 bite çıkartılabiliyor mu yoksa sadece ilk mesajda dediğim gibi çıkış göre/peryot oranını 2^10 parçaya mı bölerek hassasiyeti mi arttırıyor?

İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

iyildirim

Olmuyor hocam. 
Alıntılanan dökümanda bahsedilen 2 biti bir yerlerde tanımlayıp 10bit çözünürlüğe çıkmak. Ki bu halinde 610Hz e kadar düşebilir, 10Mhz + Pll ile.
 
Timer prescaler değeri 256 olabilen, ve PWM çözünürlüğü en az 10 bit olan bir işlemci lazım size.


tekosis

Canım sıkıldı şimdi devreyi kur hemen hemen her şey yerli yerine otursun pwm sayıcısı 8 bit olsun buraya takıl. hata bende ama bu hiç aklıma gelmemişti, başka yerlere odaklanmıştım. sanırım bundan sonra bu işler için keil ve stm32f103 ikilisine geçeceğim.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

serdararikan


tekosis

#10
setup_timer_2(T2_DIV_BY_16,255,16);      //1,6 ms overflow, 26,2 ms interrupt
setup_ccp1(CCP_PWM|CCP_SHUTDOWN_AC_L|CCP_SHUTDOWN_BD_L);
set_pwm1_duty((int16)510);


prescaller değeri 16 hocam. timer2 için prescaller değeri 1,4,16 olabiliyor. pwm için tetikleme timer2/4/6 olabiliyor. bunlarda da en fazla prescaller değeri ne yazık ki 16.

yukarıdaki kod minimum pwm frekansını üretiyor. o da 10mhz kristal için 625Hz.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

serdararikan

o zaman bulduğunuz değer 10bit timer değeri için üretilmiş

tekosis

hocam anlamadım kusura bakma. kafam durdu şu an.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

serdararikan

PWM Period = PRx . 4 . Prescaler
                     ________________
                          10000000

rakamları yerine koyarsan 610 Hz yapıyor

tekosis

evet hocam benim bulduğum değerler de aynı. teşekkür ederim. beni yanıltan(umutlandıran) çözünürlüğün 10bit olarak ayarlanması oldu. neyse @Cemre. nin de önerdiği gibi kesme içine girip çıkarak 50-610Hz arasındaki sinyalleri kesme ile çıkışı toggle yaparak, daha yüksek frekanslı sinyalleri ise PWM modülü ile üreteceğim. 
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.