PIC18f452 CCS C İle Devremde 4 Adet Encoder Okuma

Başlatan stronger_ht, 25 Kasım 2010, 15:48:12

stronger_ht

Öncelikle herkeze iyi çalışmalar.

Daha önce hiç denemediğim ve yabancı olduğum bu encoder olayı sonunda başıma geldi ve hiçbir bilgim yok. Encoder'ları biraz araştırdım, ancak sanırım basit bir örnek olursa tamamen kavrayacağım. Forumda da arattım ilgili örnekleri inceledim fikir olması açısından.

Şimdi benim yapmak istediğim şudur.

Kısmen bir rüzgar yön sensörü yapmak istiyorum. Gerekli mekanik düzenim hazır, döner kuyruklu mekanik düzeni Encoder'a bağlayacağım. Encoder'dan gelen pals ve yön bilgisini 18f452 ile okutup, yine pic ile redüktörlü motorumu gelen bilgilere göre çalıştıracağım. Tabiki burada redüktörlü motorlarımda da encoder bağlı olacak. Yani rüzgar yönü tayini için kullandığım encoder'den gelen pals ve yön bilgisini, redüktörlü motorumu çalıştırdığımda, mevcut pals ve yön bilgileri eşleşene kadar çalıştıracağım.

Buradaki mantık şudur. Düzeneğin tepesinde montajlanmış haldeki rüzgar yön sensörü diyelim, bu sensörden gelen bilgileri okuyup, döner gövde mekanizmasını bilgilere göre redüktörlü motor ile çevireceğim.

Şuana kadar 2 encoder kullanmış oldum.
3. ve 4. encoderler aynı mantıkla çalışacaklar. Bu encoderleri direk redüktörlü motorlarıma bağlayacağım ve motorun çalışma süresini bu encoderlere göre belirleyeceğim.


Şimdi sorunuma gelecek olursak :)
Forumda bazı konularda Encoder'ler direk pic'e bağlı, bazılarda ise arada bir entegre kullanılmış.
Böyle bir sistemde, encoder'i direk mi okutsam daha sağlıklı olur yoksa arada bir entegre olması mı daha sağlıklı olur.

Tabiki ek olarak bir sorunum daha var, şuanda Pic'de diğer özellikleri de kullanmak zorunda olduğum için boşda 4 adet pin mevcut.
Bu sorunuma nasıl bir çözüm üretebilirim...


Teşekkürler şimdiden...

yucelcem

neden yön belirleyen aletin altına 360derece dönen potansiyometre koyup analog girişe bağlamıyorsunuz?

JKramer

Rüzgarın yönü sık sık değişebilir, bu durumda pot birkaç saat bile dayanmaz.

yucelcem

anladım, sonuçta dönüşü sınırlı, peki sınırsız dönen pot'lar var mı? 360'lık turu tamamladıktan sonra yeniden başa dönen?

stronger_ht

Aslında sonsuz pot elimizde var, 3 tane de bacağı var, ancak araştırmalarıma göre daha önceden deneyenler net sonuç elde edememişler. Sağlıksız çalışmış ya da onlar çalıştıramadılar bilemiyorum, ancak ben noktasal tahmin'e en yakın sonucu yakalamak istiyorum bu yüzden de encoder aklıma ilk gelen şey oldu.

Bu arada şöyle bir sorunum da var.

Bu sensör yön bildirecek ancak, gövde 365 derece dönemiyor. Diyelim gövde 300 Derecede, rüzgar sağdan esiyor ve gövdenin 70 derece sağa dönmesiyle rüzgara tam karı karşıya gelebilecek, ancak mekanizma gereği gövdenin 365 derece dönmemesi gerekiyor, bu durumda gövde dönüşünü kısa yoldan 70 derecelik mesafeyle değil de, sol tarafa dönüp rüzgarın estiği yönü bulması gerekiyor. Tabiki bu 2. adım :D henüz encoder'i deneyebilecek ve bilgileri okuyabilecek bilgiye sahip olmadığım için öncelikle encoder'i okumam gerekiyor.

CCS C kullanıyorum ve 18f452 var.

yucelcem

10 bit çözünürlükte adc çevrimi yapıp bir de ortalama değer alırsanız bence tam isabet olabilir, buarada makinanızın amacını tam anlamadım, rüzgar yönünü belirlemek amacıyla yapılmış birşeymi?

JKramer

Alıntı yapılan: yucelcem - 25 Kasım 2010, 17:07:58
anladım, sonuçta dönüşü sınırlı, peki sınırsız dönen pot'lar var mı? 360'lık turu tamamladıktan sonra yeniden başa dönen?
Yok, dönüşü sınırlı diye değil. Standart pot'ların dönüş ömürleri sınırlıdır; en fazla 10000 cycle gibi. Buna bir de fırçaların ısınmasını eklerseniz sayı daha da düşer. Joystick, vb. yerlerde kullanılan yüksek hassasiyetli yüksek mekanik ve elektriksel dönüş ömrü pot'lar da mevcut; encoder tipi pot diye geçiyor olması lazım. Bunların ömürleri birkaç milyondan 50 küsür milyona kadar çıkabiliyor. Fiyatları da aynı şekilde çıkıyor tabii :). Bence optik çözüm bu iş için uygun.

Burak B

Manyetik encoderler var austriamicrosystems in sample gönderiyorlar onları deneyebilirsin. Manyetikten kastım sürtünme yok yanı donen bir mıknatıs ve onu algılayan br chip.

http://www.austriamicrosystems.com/
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

stronger_ht

Projemiz çiftlikte kullandığımız bir rüzgar türbini. Basit bir türbin, daha iyi bir performans için gün içerisinde değişen rüzgar yönünü tespit edip, gövdenin rüzgar ile karşı karşıya kalmasını sağlamak. Üründe üretilen enerji aşağıya kablolarla indirilmiş. Bu durumda gövde sürekli 365 derece dönecek olursa kablolar sarılıp kopabilir. Bunu önlemek amacıyla 360 derecelik bir maximum açı vermişler. Bu yüzden encoder tarzı noktasal bir hesaba ihtiyacım var. Tabi bu 365 derecelik problemi encoder ile tam olarak çözebilirmiyim henüz bilmiyorum, deneyeceğim. Ancak ilk aşamada encoder'i nasıl okuyabilirim bu önemli.

365 derecelik problem olmasaydı iki adet swich ile bu problemi çözmüş olurdum ancak tam tur dönemiyor.

yucelcem

bu rüzgar türbinlerinin arkasına bir pal koyup rüzgarın yönüne dönmesini sağlayabiliyorlar, kabloların dolanmaması için de türbinle mil arasına bir mekanizma kuruyolar, bizim çatımızda var ordan biliyorum, ama detayını bilmiyorum

stronger_ht

yucelcem, bu türbinlere olan ilgimden dolayı biraz araştırdım, bu mil arasında olan mekanizma zamanla kömürleşerek zarar görebiliyormuş. Bu yüzden özellikle herkez kablo ile indiriyor enerjiyi.

mufitsozen

#11
sparkfundaki rotart encoder isinizi gorur, cikisi gray-code uretir (mekanik imkaniniz varsa, wikipediadan baska orneklere bakip, kendinizde yapabilirsiniz)

http://www.sparkfun.com/products/9117 encoder

http://www.sparkfun.com/products/9209 encoder set.

daha profesyonel birsey olsun derseniz (endustriyel) http://www.gpi-encoders.com/
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

iyildirim

Basit bir optik enkoder sorunlu olabilir. En azından çift kodlu bir enkoder gerekir. Tekli bir enkoder bir dönüş olduğunu belirtmesine rağmen dönüş yönünü göstermeyecektir. Motor kontrolu için üretilmiş denetleyicilerdeki QEI modülü işinizi görebilir.
Anladığım kadarı ile zaten türbinin sonsuz bir radyal dönüş imkanı yok. Bu durumda belli bir sınır değerine yaklaştığında motorla türbini ters yönde çevirerek uygun açıyı yakamanız gerekli sanırım.
ADC ve bir potla , indexli enkoder ile , manyetik pusula sensörü (HMC6352, HMC5843) ile, ve manyetik bir sensor (APS00B gibi) ile yapılabilir. Şu an hatırlayamadım ama forumda bir yerde optik enkoder diski hazırlama ile ilgili güzel bir sitenin linki de vardı.

stronger_ht

Arkadaşlar, sorunumu büyük oranda çözdüm sanırım.

#include "main.h"

long encoder, encoder_eski, yon;

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

#define LCD_ENABLE_PIN PIN_B5
#define LCD_RS_PIN PIN_B4
#define LCD_RW_PIN PIN_B6
#define LCD_TYPE 2
#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_wdt(WDT_OFF);
   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);
   }
}


Burada int_ext kesmesini kullanaraktan B0 portundaki değişikliği baz alaraktan hem encoder'in yönünü okuyabiliyorum hem de gönderdiği palsleri.

Ancak şöyle bir problemim var. Ben devrede 3 adet encoder kullanacağım.
Dolayısı ile int_ext kesmesini bu 3 encoder için ayrı ayrı kullanamam.
Kesme kullanarak bunu nasıl çözebilirim.
18f452'de B3...B7 kesmesi var, bunun mantığı nedir nasıl çalışır.
Küçük bir örnek diagramla açıklayabilir misiniz...

yucelcem

helikopter modelcileri helikopterlere gyro takarlar, onları da bir inceleyebilirsiniz