encoder ile rpm hesabı

Başlatan xsladerx, 24 Nisan 2022, 14:59:36

xsladerx

PIC16F877A ile enkoderkullanarak rpm hesabı yapmaya çalışıyorum fakat bulduğum bu kod örneğindeki dx_dt yi bulurken neden 3.0f e böldüğümüzü anlayamadım. Açıklarsanız sevinirim.

unsigned long int revAngle = 0.0f;
unsigned long int prevAngle = 0.0f;
signed long pwmOut;
float dx_dt = 0;
int i = 0;
#int_ext
void external_interrupt()
{
revAngle++;
}
#int_timer0
void tmr_int()
{
set_timer0(60);
i++;
if (i==10)
{
dx_dt = (revAngle - prevAngle)/3.0f; 
prevAngle = revAngle;
i = 0;
}
}

fide

Encoder; açıyı 360 derece üzerinden değil, 400, 1000, 2000, 4000 puls / devir olarak veriyordur. Açıyı bulmak için sadeleştirme yapmıştır.

Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

mehmet

Buradaki kodlar sanki, belli
zamanda devir değişimini gösteriyor.
revAngle değerinin bir yerde
sıfırlanması lazım.

Devir okuma işlemini şöyle yapın:
Üstteki kodda harici kesme aynı kalsın.
Timer kesmesi içinde revAngle
değerini başka genel bir değişkene
aktarıp sıfırlayın.
Bu değişkende belli zaman içinde
enkoderin saydığı değer var.
Buna göre ana döngüde hesap yaparsınız.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

apsis

Kesmeye girme periyodu senin dt değerin olur. Muhtemelen bu 3.0f buradan geliyordur. prevAngle zaten okuduğun puls sayısı.
Dikkat etmen gerek şey, eğer encoder düşük çözünürlüklüyse düşük devirlerde bu çözümün geçerli olmayacağı. Bunun için iki puls arası süreyi yani frekansını ölçmen gerekecek.
"Makineye Beyin" MEKATRONİK