CCS C ile RPM OKUMA

Başlatan Yunus Emre, 27 Haziran 2021, 18:38:24

Yunus Emre

Merhaba,
20 MHz kristal frekansına sahip mikro denetleyicim ile RPM hesaplamam gerekiyor. Fakat çözünürlüğüm RPM elde etmek için 60 ile çarptığımdan çok düşük. Bu konuda nasıl bir yol izlemeliyim ?
 

int32 rpm12=0;
int32 rpm123=0;

#int_timer1          //motordan gelen pulsleri okuyorum.
void timer1_kesme()
{
set_timer1(65535);
rpm12++;
}

#int_timer3          // 1snlik zamanlayıcı
void timer3_kesme()
{
set_timer3(46004);
rpm123++;
}

void main()
{
lcd_init();

set_timer1(65535);
setup_timer1(TMR_EXTERNAL| TMR_DIV_BY_1);
enable_interrupts(INT_TIMER1);

enable_interrupts(INT_TIMER3);
set_timer3(46004);
setup_timer3(TMR_INTERNAL | TMR_DIV_BY_256);

While(TRUE)
{
if(rpm123>=1)
{
rpm12=rpm12*60;
printf(lcd_putc,"\fr:%d"rpm12);
delay_ms(150);
rpm12=0;
rpm123=0;
}
}

ete

RPM yani dakikadaki devir sayısı hesaplıyorsun. Anladığım kadarı ile bir encoder'in var ve belirli bir süre (1sn) içinde gelen pulsları sayarak devir hesabı yapıyorsun.
Ama bize encoderin tur başına kaç puls üretiyor söylememişsin. Tek puls mıdır acaba bu sorunun cevabı. Öyle ise zamanı çoğaltman gerekecek. 1 sn yerine 2 sn lik süre tut ve sonucu 60 ile çarpacağına 30 ile çarp. Daha doğru sonuçlar alabilirsin.
Devir çok düşük ise zaten yapacağın bir şey yok. tur başına 1 puls veren bir encoder normal şartlarda 1 dev/dak ile dönüyor ise 1 dakikada 1 tur hesaplanır.
Sen ise 1 sn zaman tutarsan aldığın değer sürekli olarak sıfır olacaktır. Yeterli bilgi vermediğin için bir sürü varsayım üzerinden konuşmuş oldum.

Ete


Yunus Emre

Eksik bilgi için kusura bakmayın Ete hocam. BLDC  motorun hall effect sensörlerinden okumayı düşünüyorum. Bundan dolayı tek puls.

Powered by EzPortal