18f46k22 encoder okuma problemi

Başlatan systech, 05 Temmuz 2014, 13:23:26

systech

usta lara selam olsun yaptığımız projede dc motor 100ppr 2 kanal encoder kullanıyoruz. encoder a ve b kanallarını 18f46k22 nin RB0/INT0 - RB1/INT1 girişlerinden okuyoruz. Sorun şu test sisteminde 1 kart encoder okuma hatası verirken bir diğer kart çalışıyor. Bir türlü çözemedim bu konuda tecrübelerinizi ve bilginizi rica ediyorum.

Salih

Alıntı yapılan: systech - 05 Temmuz 2014, 13:23:26
usta lara selam olsun yaptığımız projede dc motor 100ppr 2 kanal encoder kullanıyoruz. encoder a ve b kanallarını 18f46k22 nin RB0/INT0 - RB1/INT1 girişlerinden okuyoruz. Sorun şu test sisteminde 1 kart encoder okuma hatası verirken bir diğer kart çalışıyor. Bir türlü çözemedim bu konuda tecrübelerinizi ve bilginizi rica ediyorum.

@systech sizin ki gibi kısıtlı bilgiler içeren sorular yüzünden forum da bazı arkadaşlar da medyum özellikleri
gelişmeye başlayacak. :)
Biraz şema ve kod bilgisi verirsen iyi olur.

Kabil ATICI

@systech
Öncelikle entegreleriniz smd değil ise (hatta olsa bile)  ve soketli ise, entegreleri (işlemci) değiştirilip bakılabilir, En azından entegreden kaynaklanan bir sorun olmadığı görülür,
Encoderler yer değiştirilir, sorun var mı bakılır,
Lehimlen tazelenebilir soğuk lehim ihtimaline karşı,
Kart üzerindeki yollar incelenebilir çatlak veya kopukluk ihtimaline karşı,
Kartların çalışması osilaskop ile incelenebilir,
yanlış değerli bir eleman takılmasına karşı kart incelenebilir,
EK:sorduğun sorunu resim, şema gibi öğelerle desteklersen daha fazla kişi yardımcı olabilir. Bildiğin gibi elektroniğin dili ortaktır o da şemadır.
ambar7

systech

Çok özür dilerim. Olmazsa olmazı unuttum 18f46k22 44pin TQFP bağlantı şeması yükledim yapısal bir hata yapmış olabilirmiyiz? sizin tavsiyeleriniz ne doğrultuda olurdu. Lütfen benimle paylaşırsanız sevinirim.


Kabil ATICI

SMD sistemlerde hata olasılığı yüksek olabiliyor. İki bacak arasına kaçmış bir çapak, gözden kaçan bir kısadevre,yanlış takılmış bir bir eleman,soğuk lehim, veya lehimlenmemiş bir durumu, hatta kristalin frekans kayması gibi birçok hataya uygundur.

En basiti çalışan bir kart ile ölçü aleti kullanarak karşılaştırın.
Hatta osilsakopla inceleyin..Sigonta ayarlarını nasıl yaptınız bilemem atladığınız bir şey olmadığına emin olun.
Son çare olarak kartı değiştirin. Bazen kartın kendisinden kaynaklanan bir hata bile olabilir
ambar7

systech

Sayın ustam buradaki bir sıkıntıda; bir kart çalışıyor mesala 1gün 2gün sonra encoder okuma hatası veriyor. osilaskop la bakıyorum normal görünüyor çıkışlar. SAdece takıldığım konu encoder ile pic arasında kurduğm devre ne derece doğru siz ustalardan yardım bekliyorum saygılarımla.

bmutlu

R13, R14 dirençlerin degeri nedir ? RB portu içten pull up yaptınız mı? bu dirençler çok büyük ise çalışmayabilir. Pic girişinde encoderin uçları 0-5 v
olabiliyorsa çalışması gerekir yazılım aynı kart aynı birinin hata vermesi donanımsal hata vardır..

systech

bmutlu ustam
R13-14 120 Ohm (121)
Encoder okuma için aşağıdaki veriyi yazdık.

#int_ext
void  ext_kesmesi ()   
{
  disable_interrupts(INT_timer0);
  disable_interrupts(INT_timer3);
 
 
 
 
 
 
if(motor_yonu==0)
{
  if(input(pin_b0)==1&&input(pin_b1)==0)    if(encoder>0) encoder--;
  if(input(pin_b0)==1&&input(pin_b1)==1)    encoder++;               
}

if(motor_yonu==1)
  {
  if(input(pin_b0)==1&&input(pin_b1)==1)    if(encoder>0) encoder--;
  if(input(pin_b0)==1&&input(pin_b1)==0)    encoder++;   
 
  }
rpm_buffer++;

encoder_timeout=0;

enable_interrupts(INT_timer0);
enable_interrupts(INT_timer3);

}

systech

Ustalardan bu konu hakkında paylaşım bekliyorum lütfen...

Salih

Daha önce bir arkadaş örnek vermiş. Bunu uygulayabilirsin.

Alıntı yapılan: eR2 - 12 Ocak 2014, 23:28:39
merhabalar alttaki kodu kullanabilirsin, rb0 kesmesi ile kullanıyorum

https://www.picproje.org/index.php/topic,50537.0.html

bu konuda inceleyebilirsin



#include <16f877a.h> 
#use delay(clock=4M) 
#fuses HS, NOWDT,  NOPROTECT, NOBROWNOUT, NOPUT, NOLVP,NODEBUG,NOWRT,NOCPD 
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#use fast_io(B) 


long encoder, encoder_eski, yon;

#int_ext
void ext_kesmesi()
{
   if (input(pin_b1)==0)
   {
      yon=1;
      encoder++;
   }
   if (input(pin_b1)==1)
   {
      yon=0;
      encoder--;
   }
   
}


#include <lcd.c>
void main()
{
   lcd_init();



   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);

   //TODO: User Code
   
   if (yon==1)
   {
      printf(lcd_putc,"\fSAG:%ld", encoder); 
   }
   if (yon==0)
   {
      printf(lcd_putc,"\fSOL:%ld", encoder);
   }
}


bmutlu

R11,R12 direncleri 2k2 - 4k7 (5 V) civarlarında olması uygundur ve encoderin üzerindeki besleme değerlerine uyulmalı 5 V ile beslemek uygun olmayabilir.
Sizin Encoder 5 V seviyesinde çalışıyor mu ? Buna dikkat ettiniz mi ?

Okan AKÇA

hocam doğrudur 5V sn2576-5 kullanıyorum. encoder için farklı bir okuma öneriniz varmıdır?

bmutlu

Encoder lerin kimi DC 5 Volt -+ % 10 besleme ile calışır, kimi DC 8 - 30 Volt besleme ile calışır, kimi 5 - 24 VDC Volt besleme ile calışır, kimi 5 - 12 VDC Volt besleme ile calışır.

Ayni zamanda ise Encoder çıkışları ise TTL , Open Collector , Voltage Output ve Line Driver Output şeklinde çıkışlara sahitirler.

Sizin kullandiğiniz Encoder etiketine göre hangi parametrelere sahip?

5 Volt DC ile çalışabiliyormu ,Open Collector sahip mi veya TTL çıkışa sahip mi ?

systech


bmutlu

Senin kullandığın encoderin 5 VDC beslemeye karşı çıkış uçları min. ve max. gerilim değerleri 2.4 V , 0.4 V olarak vermiş ama dosyada open collector diyor

A,B kanalların çıkışları kaça çıkıyor 0 - 5 VDC çıkıyor mu ? problem 2.4 V kritik gerilimde kalıyor olabilir ..