Derleyicide RPM hesabı mantığı

Lambada

Üye
Katılım
6 May 2010
Mesajlar
8
Puanları
1
Yaş
33
Selamlar. CCS C kullanarak Takometre yapmak istiyorum. Zamanlayıcı-Sayıcı birimlerini kullanarak RPM hesabı formülü çıkartmam lazım. Dönen cisim 1 tur attığında 1 pals verecek şekilde optik sensör kullanıyorum. Osilatör frekansım 4 MHz. Zamanlayıcı-Sayıcı birimlerini kullanarak Rpm hesabını verecek formülü nasıl hesaplarım ?
Forum içerisinde birçok takometre program kodu var. O kodları inceledim fakat bi mantığa oturtamadım. Sizden istediğim kod değil. Mantığını anlayıp programı kendim yazmak istiyorum. Ama işin içinden çıkamadım.
Yardımlarınız için şimdiden teşekkürler...
 
Dönüş hızına bağlı olarak seçilen tur sayısı için ne kadar süre geçti tespit edilir. Hızlı dönen birşeyse mesela 10 pals için geçen süre, yavaş dönüyorsa ise 1 pals için geçen süre baz alınır.

Zamanı ölçmek için timer kullanırsın ama timer ayarları devire uygun seçilmeli ki hassasiyet artsın. 16 bit timerı en düşük devirde bile sıfırlanmayacak şekilde seçersen en yüksek hassasiyeti alırsın

sonra atıyorum 5 tur 0.2 sn tuttuysa 1 sn de 25 tur. 1 dk da 60x25 olur
 
Hocam öncelikle ilginiz için teşekkür ederim. Dediğiniz mantıkla seçtiğimiz pals için geçen süreyi timer ile hesapladığımızı farz edelim. Bu süre misal saniye mi mili saniye mi bunu tespit edip ona göre bi çarpanla çarpma işini nasıl yaptırcam ?
Bir de 3000 rpm yüksek hız mıdır düşük hız mı ? 3000 rpm lik dc motor üzerinde çalışacağım.


KontrolKalemi Mobile ile gönderildi.
 
Saniyede 50 pals gelecek ki gayet hızlı. 10 pals saydırmak iyi olacak yani. 0.2 sn de sayma yapılacak. Timerı da 1 sn ayarlarsan gayet uygun olur
 
Hocam verdiğiniz bilgiler için çok teşekkür ederim. Emeğinize sağlık.
 
Picc / examples incele..
 
KAZIMUGUR Hocam örnekleri inceliyorum ama takıldığım noktalar var. Timer birimini zamanlayıcı olarak kullandığımızda ayarladığımız zamanda kesme oluşturmayı öğrendim ama dışardan aldığım kesmelerin ne kadar zamanda geldiğini nasıl hesaplayacağımı bilmiyorum.
 
Kesme oluşturmayacaksın ilk darbede sayacı sıfırlayacaksın 10 pals sonra read_timer() ile sayacı okuyacaksın. palsler için b portunda pin change kesmelerini kullanabilirsin mesela. Palsler kesme ile okunacak 10 palste timer okunacak sonra main fonksiyonunda hesaplama yapılıp ekrana yazılacak
 
Capture modülünü kullanabilirsin.

İşarete göre yöntem belirlemelisin.
Devir yüksek ise iki işaret arasında yeterli sayma yapılamaz.
Bu durumda T ölçmek yerine f ölçülür(sayılır).
Bunun için harici clock kullanılabilir.
Devir düşük ise iki işaret arasında bir sayaç çalıştırılır ( sonra f=1/T gibi hesaplar yapılır ) .
Sayaç taşma durumlarını göz önüne almak lazım ...gibi..

Kesme kullanıldığında kesmelerin içerisinde fazla oyalanma.
Kullandığın yönteme göre kesme içerisinde bir sayacı arttır ve çık , ana fonksiyonda oku yazdır gibi..

Önerildiği şekilde portB kesmelerini kullanabilirsin.
Bu şekilde 2 sensörle yön bile belirleyebilirsin.
 
#use delay(clock=20000000)


int32 devir=0;
int32 sayac;
float zaman;


#int_ext
void ext_kesmesi()
{
devir++;
}




void main()
{


setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_timer_2(T2_DISABLED,0,1);


if(devir==1)
{
set_timer1(0);
}

if(devir==10)
{
sayac=get_timer1();
devir=0;
}

zaman=sayac*0.104; //104ms de bir taşma oluşuyor.

Hocam buraya kadar yaptıklarım doğru mu acaba?
 

Forum istatistikleri

Konular
127,969
Mesajlar
913,977
Kullanıcılar
449,614
Son üye
Canipk

Yeni konular

Geri
Üst