Devir Hesabı Hakkında

Başlatan pic_acemisi, 05 Ekim 2021, 12:42:10

pic_acemisi

Selamlar Herkese,

Ekte gönderdiğim gibi bir şemam var. 4 adet hall sensör ile devir bilgisi okumak istiyorum. Çözünürlüğü olabildiğince fazla olması gerekli. Bu mümkün mü ? Bir timer kurup her bir sensörü kesme olarak tanıttıktan sonra iki puls arasındaki süre ile bir yere varabilir miyim ?

Fikrinize ihtiyacım teşekkür ederim




Hattuşa

bu sensörleri portb.4-portb7 arasına alıp, portb change interrupta işlerseniz ve her pinin tekrar low olduğu süreyi ölçebilirsiniz. bu elde ettiğiniz süre bilgisi ile devire dönüştürebilirmisiniz orasını bilemiyorum

pic_acemisi

Alıntı yapılan: pro-TR - 05 Ekim 2021, 14:39:34bu sensörleri portb.4-portb7 arasına alıp, portb change interrupta işlerseniz ve her pinin tekrar low olduğu süreyi ölçebilirsiniz. bu elde ettiğiniz süre bilgisi ile devire dönüştürebilirmisiniz orasını bilemiyorum

Şu aklıma geldi ama ne kadar doğru bir yöntem bilemedim,

Timer1 sürekli sayacak sekilde kurulu halde en uzun süre sayacak. Bu sayarken her bir sensor icin bir tane sayac degiskenini puls geldiği gibi start verip ikinci puls geldiğinde stop yaptirip burada her bir sensor için ayri ayri olcum yapilmis olacak? Ama buradan devir bilgisine nasil geçeğim bilemedim.

Count komutu ile 1 saniye pini ölçüp sonra 60 ile çarpıp denedim çalışıyor ama 60 katları şeklinde değişiyor. En azindan 5-10 şeklinde değişimler olsun istiyorum

Hattuşa

#3
dediğin gibi örnek verecek olursak; timeri 10mS yeye kurup sürekli döngüde o çalışırken içine 4 tane sayac ekleyip bu sayaçlar sürekli sayacak yani sayac1 =sayac1 +1 şeklinde
tmr0if =1 then
tmr0if =0
sayac1 =sayac1 +1
sayac2 =sayac2 +1
sayac3 =sayac3 +1
sayac4 =sayac4 +1
tmr0l =10ms yeye göre değer alacak


portb4 ve portb7 de ki sensörler sürekli high veya low a düştüğünde bu sayac değeri başka bir değişkene atılıp ilgili sayac sıfırlanacak. örneğin portb4 de sensör1 girişi var ve her high olduğunda
sensor1sayac =sayac1
sayac1 =0

şimdi elimizde iki pulse arası 10mS lik dilimlerle ölçülmüş bir sayac değerimiz var. bu değeri zamana çevirebiliriz.
saniye =(sensor1sayac *10)/1000  sonucu saniyeye çevirdik



çok uzun bir anlatım oldu ama umarım işine yarar  ;D  ;D  ;D

MB_77

#4
bu mesaj tarafımdan silinmiştir.

ete

1 devir=4 puls üzerinden yürüyün diğerleri zaman kaybı bence.
Ben olsam, Timer-1 harici girişden sayacak şekilde ayarlardım. Tek sensörün çıkışını bu girişe verir ve 1000 ms lik zaman tutardım. Sonra sayac değerini okuyup bunu devir dakikaya çevirirdim.

Ete

MB_77

#6
bu mesaj tarafımdan silinmiştir.

pic_acemisi

Alıntı yapılan: MB_77 - 05 Ekim 2021, 18:32:40zaman ölçerek yapılacak hesap,

devir=frekansx60 devir/dk

frekans=1/periyot (bir tur atıldığında iki pals arası süre saniye cinsinden)

4 sensör olduğundan toplam periyot 4 ile çarpılır bu durumda;

devir=60/(4xperiyot)
devir=15/periyot  buradaki periyot 4 sensör bağlıyken iki kesme arası süredir. saniye cinsindendir. ms cinsinden olursa

devir=15x1000/periyot
devir=15000/periyot
bu durumda çözünürlük değişkendir,

periyot 10ms adımlarla ölçülürse;

örneğin,
periyot=70ms olsun  devir=214
periyot=80ms olsun  devir=15000/80=187 --> çözünürlük 27

periyot=100ms olsun devir=150 olur.
bir üst kademedeki peryot olarak
periyot=110ms olsun devir=136 olur. --> çözünürlük 14

periyot=300ms ise devir=50
periyot=310ms ise devir=15000/310=48 olur. -->çözünürlük 2 oldu.

süre ölçerek devir bulma yaparken ölçüm süresinin çok hassas yapılması daha uygun gelecektir. devir arttıkca bunun önemi artar.



yalnız siz hesabı 4 sensör için yaptınız sanırım. Her sensör farklı bir motora ait devir bilgisini ölçecek. Bu durumu değiştirir sanırım

MB_77

#8
bu mesaj tarafımdan silinmiştir.

ahmet_zxc

düşük devir(frekans) okuyacak isen, özellikle 0-500 hz gibi: ozaman iki puls arasındaki süreden hareket etmek makuldür.

devir daha yüksek ise belirli bir süre(sizin prosese uygun) bekleyip (mesela 100ms) bu sürede kaç puls geldiğine bakarak devir hesaplamak doğru olacaktır.

Hattuşa

konu puls aralığının aarasını ölçmekten, belirli bir sürede puls saymaya dönmüş  ;D  ;D  ;D
o zaman timeri 1 sn ye kurup portb change kesmesindeki ilgili pinlerde çalıştırılan sayaç değerlerini okuyup 0 lama en kolayı olacaktır. 1-2 tane olsa T1CKI veya T0CKI yeterli olurdu

mehmet

Bazı durumlarda süre bazı
durumlarda frekans ön planda
olur. Ben çoğunlukla RB0 ve
TimerX kesmelerini kullanarak
yapıyorum.

Bazen bir saniyenin altında
değişimi gözlemek gerekiyor.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr

Powered by EzPortal