avatar_Hattuşa

PWM süre ölçümü

Başlatan Hattuşa, 09 Nisan 2014, 13:55:43

Hattuşa

slm ete hocam aşağıdaki resimdeki gibi 100 hz -20 khz arasındaki harici bir pwm in t1 ve t2 sürelerini ölçmem lazım.
bunun için nasıl bir yol seçmeliyim? INT0 ve INT1 girişlerini açıp t1 için; INT0 da yükselme anında çalıştırdığım bir sayacı INT1 de düşen anda bir değişkene atarak doğru bir ölçüm alabilirmiyim? yada bunun daha basit bir yöntemi ne olabilir?

ete

Uygun bölme oranı kullanılarak toplam süreyi de hesaplamak mümkün olabilir.
Bunun için INT0 kesmesi yükselen kenar için kurulur ve PWM sinyali buraya bağlanır.
Sinyalin yaklaşık peryoduna uygun bir bölme oranı verilerek TMR1 sayacı bu amaçla kullanılabilir.
ilk kesmede TMR1 değeri bir başka değişkene aktarılıp değeri sıfırlanır.
İkinci kesmeden itibaren zaten o değişkene koyduğun toplam T süresidir.
HIGH ve LOW sürelerini ayrı ayrı hesaplamak istersen biraz daha uğraşman gerekecek.

PWM sinyalini pic in INT0 girişine bağla. Başlangıçta kesme için yükselen kenarda olacak şekilde ayarla.
Kesme etiketinin başında IF ILK=1 then IKINCI şeklinde bir satır olsun
İlk kesme oluştuğu zaman ILK=0 olacağı için program birinci kesmeyi uygulayacaktır.
Orada ILK=1 yap TMR1 değerini ALCAK (word) değişkenine aktar ve TMR1 sıfırla ve kesmeyi düşen kenar olarak ayarla.
kesmeden çık.
İkinci kesme oluştuğu zaman, TMR1 değerini YUKSEK isimli değişkene aktar ,
Kesmeyi yükselen kenara çevir ve TMR1 değerini sıfırla ve kesmeden çık.

Bu şekilde ALCAK isimli değişkende sinyalin LOW süresini, YUKSEK isimli değişkende de sinyalin HIGH süresini görebilirsin.
Bu gibi sinyal durumlarında PULSIN  komutuda çok tutarlı sonuçlar vermektedir. Kullanabilirsin.

Biraz teorik anlattım ufak tefek nüansları kaçırmış olabilirim ama anladın sen onu ve yaparsın sanırım.

Ete



onurinci

http://www.picbasic.co.uk/forum/showthread.php?t=9709
Darrol Taylor 'un bir çalışması var devre simulasyonda çalışıyor.fakat öyle karışıkki hiç bir şey anlamadım.
umarım yardımcı olur.

Hattuşa

tşk ederim.
ete hocam söylediğiniz mantıkta yapmayı başardım, en azından yükselen kenarı ve düşen kenarın her ikisinide yakalamayı ve timer1 değerini okumayı başardım, ancak şimdilik eldeki verileri frekansa ve duty oranına çevirmeyi başaramadım. sanırım biraz daha uğraşmak gerekecek
herneyse sonuçta 1 adım atabildik sayenizde

onur usta verdiğiniz linki inceledim, ilginiz için size de tşk ederim. ama pek anlayamadım

Burak

Alıntı yapılan: pro-TR - 10 Nisan 2014, 21:18:05
tşk ederim.
ete hocam söylediğiniz mantıkta yapmayı başardım, en azından yükselen kenarı ve düşen kenarın her ikisinide yakalamayı ve timer1 değerini okumayı başardım, ancak şimdilik eldeki verileri frekansa ve duty oranına çevirmeyi başaramadım. sanırım biraz daha uğraşmak gerekecek
herneyse sonuçta 1 adım atabildik sayenizde

onur usta verdiğiniz linki inceledim, ilginiz için size de tşk ederim. ama pek anlayamadım

Bu tür ölçümlerde yada bir RPM ölçümü gibi durumlarda kesme yerine, kesme bayraklarının durum biti değişkenkenlerini kullanmak programda akıcılık sağlar , süre ölçümlerinde ben genellikle kesmelerden kaçınırım  .. Kodu ve proteus dosyasını senin için oluşturdum tamamı bana ait , ihtiyaç duyabileceğini düşündüğüm için yükledim ... Ben programlarımı ve açıklamalarımı her daim ingilizce yazarım anlamadığın yer olursa kodda olabildiğince yardımcı olmaya çalışırım .

Burak .
Ω Gens Una Sumus Ω

Powered by EzPortal