Metal sensörü ile 1400 devir motor devir sayma

Başlatan yasargunaydin, 06 Mart 2014, 12:55:17

yasargunaydin

 Arkadaşlar merhaba;

1400 d/d dönen bir motorun bağlı olduğu kasnağın (çapı yaklaşık 5 cm) çevresinde 2cm lik kabartma ek metal taktık ve karşısına metal sensörü taktık.Kasnağı yavaş döndürünce pic16f877 kaç tur döndüğünü sayıyor.Aşağıdaki komutlarla

IF SW2=0 THEN
PAUSE 3
While PORTC.1=0 : Wend
SAY=SAY+1
ENDIF


Problem tam devrini alınca atlama yapıyor.Enkoder takma şansım şu aşamada yok.Bu yolla halletmem mümkünse bu yolla yapmalıyım.Pause yerine pauseus denedim,4mhz yerine 20mhz taktım yapamadım.
Ne yapmalıyım.Yardımlarınızı bekliyorum arkadaşlar.
100 tur atıyorsa ekranda 100 görmeliyim.komut dizisindeki SAY  100 olmalı yani


Mucit23

Timer1 ile puls'ları say. Harici saat girişine sensörden gelen clock sinyalini uygula. Sonra belirli periyortlarla timer değerini okuyup devri hesapla. Puls kaçırma olmaz.


ipek

F84 devrinde Count yapıyorsan PortA4'ü kullan derlerdi.Schmit trigger barındırdığı için daha düzgün sayarmış.

kimlenbu

#3
ben de yaptığım bir cihazda kamyon şaftından metal sensörü (proximity sensör) ile okuma yapıyorum. Dikkat etmen gereken hususlar :

1) Kullandığın sensörün maksimum okuma hızı ölçeceğin devir sayısına uygun olsun. bu durumda en az 1.4kHz'lik bir sensöre ihtiyacın var. Ben autonics ürünleri kullanıyorum maksimum 800Hz'lik sensörleri var. Muhtemelen yüksek hızda çalıştığın için sensör yüzünden okuma kaçırıyorsun.

2) saniyede 1400 devir 1/1400 = 714us yani kesme kullanmazsan iki okuma arasında maksimum 714 mikro saniye tutacak kadar komut kullanabilirsin yoksa gene okuma kaçırırsın.

kolay gelsin.


edit : devir/dakika demişsin ben yanlış hesapladım. saniyede 23 okuma yeterli. iki okuma arasında kesme kullanmazsan 43ms'lik komut çalıştırabilirsin. eğer okuduğun devri lcd'ye falan yazdırıyorsan bu işlem sırasında 43ms'den daha fazla süre geçerse okuma kaçırırsın.

ayrıca okumayı şu şekilde yaparsan sıkıntı çıkmaz :

while (1)
{

okuma = sensoroku();

if (okuma!=tmpokuma)
{
devir+=1;
tmpokuma=okuma;
}

}

haydarpasamikro

INT (kesme) girişine veya bir Capture girişine bağlayın. İlk pals ile Timer1 saymaya başlasın. Her Timer Interrupt olduğunda o da bir sayacı artırsın. İkinci pals geldiğinde Timer1 dursun veya capture yapın. Sayma değerini birim zamana oranlarsak ve 60 saniye ile çarparsak RPM çıkar. En hassas  şekilde böyle hesaplanabilir.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

yasargunaydin

Beyler cevaplar için teşekkürler,
şu timer uygulamasını hemen bir deneyeyim