pic basic ile motor hızı ölçümü

Başlatan ismailyildiz82, 19 Şubat 2008, 15:24:53

ismailyildiz82

pic basic ile motor hızını ölçmem lazım. 877 kullanıyorum.
delikli levha ve encoder var elimde. delik sayısını saydırıp yapmalıyım.
ama kodu nasıl yazacagımı bilmiyorum.
yardımcı olur musunuz

tyildizak

Çok hassas olması gerekmiyorsa:
porta.4(t0cki) pinini harici pulse sayıcı olarak  konfigüre edin:
     TRISA = %00010000   ; porta.4 giriş
      OPTION_REG = %00101111      ;TIMER 0 kaynağı ra4 pini,prescaler kullanılmıyor (wdt'a atandı),yükselen kenar sayılıyor

Örneğin 1 sn süresince pulse sayın:
     PPS VAR BYTE   :saniyede pulse sayısı için değişken

      TMR0 = 0
      PAUSE 1000
      PPS = TMR0

100 palslik encoder kullanırsak:
     RPM VAR WORD
      RPM = (PPS * 60 ) / 100

Tmr0 8 bit olduğundan, saniyedeki pals sayısı 255'i geçerse taşar ve hatalı rakamlar alırsınız. Bu durumda ya prescaler(önbölücü) kullanılmalı(option registeri inceleyin) ya da 1 sn yerine daha kısa bir zaman aralığında sayım yapılmalı.


Bu çok basit oldu derseniz; CCP pinlerinden  birini CAPTURE modunda kullanırsınız. Konfigürasyona göre her düşen, yükselen, 4. yükselen ya da 16. yükselen kenarda TMR1in 16 bitlik değeri CCPRxH:CCPRxL  registerlerine kaydedilir. Bu register değeri değiştiği CCPxIF bitinin set olmasıyla anlaşılır, bu bite bağlı olarak bir kesme gerçekleştirilebilir. Böylece örneğin düşen kenarda kullandıysanız, encoderden gelen palsin yüksek olduğu sürenin net değeri elinizde olur. Buradan yola çıkarak hassas hesaplamalar yapılabilir.