Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: xsladerx - 24 Nisan 2022, 14:59:36

Başlık: encoder ile rpm hesabı
Gönderen: xsladerx - 24 Nisan 2022, 14:59:36
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;
}
}
Başlık: Ynt: encoder ile rpm hesabı
Gönderen: fide - 24 Nisan 2022, 21:22:28
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.

Başlık: Ynt: encoder ile rpm hesabı
Gönderen: mehmet - 25 Nisan 2022, 04:46:39
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.
Başlık: Ynt: encoder ile rpm hesabı
Gönderen: apsis - 25 Nisan 2022, 09:47:20
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.