Aynı anda İki Pulsi alma

Başlatan elektroombank, 17 Şubat 2006, 08:43:10

elektroombank

Arkadaşlar sistemde 2 adet encoder var.Bunlardan gelen palsleri sayarak.Dönme miktarlarının aynı olduklarını saptamak istiyorum..

Ancak motorlar aynı anda çalışmaya başladıkları için 2 encoder'dan iki pals geliyor.Bu gelen palslere göre mesela 10 puls 'lik bir dönüş olacaksa

10 puls alınan birinci motor durdurulacak.8 puls alınan 2. motordan
2 puls daha beklenecek.Ve 10 puls'a alınınca durdurulacak.

 Fakat işin Programlama kısmını çözemedim.


Yardımcı olursanız sevinirim

stlg

Sevgili elektroombank

Arkadasım bu senin istedigin hazır bir sistemmi yoksa yeni bir projemi bilmiyorum eger yeni bir proje ise ve encoderleri almadıysan sana absolute tur bir encoder oneriyorum bunların datasheetlerini bir incele bu tur encoderler konum bilgisi icin ideal ve durduklarında bildigim kadarıyla her farklı konumda birbirine benzemeyen surekli kodlar uretiyorlar bu bilgileri pıc ile okuman daha kolay olur yoksa normal artımlı encoderlerle sadece sayma değil birde baslangıc sinyali kullanman gerekebilir z sinyali kolay gelsin

         ALLAHA EMANET OLUNUZ
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

elektroombank

nerden bulurum.Peki onu bile yapsam sonuçta iki encoderım olcak.

Yani iki değeri aynı anda PIC ile işlemem lazım.Yada almam lazım..

Bunun bir yolu yok mu?

ftsahin

porta0durum var byte
porta0deger var word
porta1durum var byte
porta1deger var word
darbemiktari var byte

Define  LCD_DREG        PORTB
Define  LCD_DBIT        4
Define  LCD_RSREG       PORTB
Define  LCD_RSBIT       1
Define  LCD_RWREG       PORTB
Define  LCD_RWBIT       2
Define  LCD_EREG        PORTB
Define  LCD_EBIT        3

trisa = %10011
porta=0
pause 100
darbemiktari=10

basla:
 porta0deger=0
 porta1deger=0
dongu:  
 if porta.0=1 then porta0durum=1
 if (porta0durum=1 and porta.0=0) then
   porta0durum=0
   porta0deger = porta0deger + 1
 endif
 if porta0deger<darbemiktari then
   porta.2=1
  else
   porta.2=0
 endif
 if porta.1=1 then porta1durum=1
 if (porta1durum=1 and porta.1=0) then
   porta1durum=0
   porta1deger = porta1deger + 1
 endif
 if porta1deger<darbemiktari then
   porta.3=1
  else
   porta.3=0
 endif
 if (porta0deger>=darbemiktari) and (porta1deger>=darbemiktari) then  goto basla
' Her iki pulse miktari 10'a esit oldugunda yeniden basla
   lcdout $fe,2,  "pulse1= ",#porta0deger,"      "
   lcdout $fe,$c0,"pulse2= ",#porta1deger,"      "
goto dongu

'...PIC....
'...17.....=Pulse1 okuma
'...18.....=Pulse2 okuma
'...1......=motor1 enerji
'...2......=motor2 enerji.



http://rapidshare.de/files/13542196/encoder.rar.html

Burada proteus simulasyon dosyası var. Yalnız devrenin sayma hızı biraz düşük. 90 Hz'in üstüne çıkamıyor ama gerekirse Protonda hızlandırırız.

mhk

Anladığım kadarıyla senkronlama işi. Yani 2 motoru aynı hareket ettirmek. Geçen senelerde buna benzer bir projeyi , araç kaldıran 2 sütunlu liftlerde uygulamıştık. Mikrokontrol kontrollü. 2 pals saymak zor değil. ( Pals aralığı çok kısa değilse ) kesme kullanmadan dahi yapılabilir. 2 giriş kullanılacak. Bir giriş referans olacak. Her giriş ten gelen palsler sayılacak. Sonra bunlar referansa göre karşılaştırılacak. Örnek, motorlar çalışmaya ve her iki encoderden palsler gelmeye başladı. Yazılım ile her bir pals ile sayıcı için kullanılan register değeri 1 artacak. ( pals'in 1 seviyesi yada 0 seviyesini mikroişlemci bir çok defa algılayacağı için , pals 1 yada 0 olduğunda ilgili sayıcı registeri 1 artmalı) . 2 adet sayıcı registeri bir biri ile karşılaştırılacak.
sayici1>sayici2 ise motor1=0:motor2=1
sayici1=sayici2 ise motor1=1:motor2=1
sayici1<sayici2 ise motor1=1:motor2=0

şeklinde olabilir.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

elektroombank

Yardımlarınız için sağol un.Aklıma takılan birşey var.Encoder veri PIC Basic Proda pulsin ile okunmuyormu?

 Ama verdiğiniz örnek Lojik değişikliği anlık olarak kontrol ediyor.Bunun bana kazandırdığı bir avantajımı var.Yoksa yapılması gereken sistem bumudur.

 Biraz daha ayrıntı anlatırsanız sevinirim..

  Saygılar

ftsahin

Pulsin komutunu hiç kullanmadım. Belki daha iyi sonuç verir ama sonuçta kendi yazdığımız fonksiyonlara müdahale imkanımız her zaman daha fazla olur. Pulsin komutunu kullansaydık belki de pulse değişene kadar bekleyecekti. Bazı komutlar öyledir.

Pic'in 1 ve 2 nolu uçları motorları çalıştırmak üzere rolelere bağlanacak Yeterli pulse geldiği zaman bu roleler devre dışı bırakılarak motorlar durduruluyor.  Bu haliyle 4 MHz 16F84 ile saniyede en fazla 90 Hz'lik 2 pulse sayılabiliyor.

Lojik durum konusunda bir yanlış anlama olabilir. Sizin saymak istediğiniz pulse sadece High durumu mu? Programda dediğiniz gibi sadece lojik değişikliği sayıyor. Sonuçları yanlışsa değiştirebilirim ama eğer her pulse'tan sonra bir boşluk olacaksa değişen birşey olmaz diye düşünüyorum. Siz devreyi yapıp sonucu gördünüz mü?  
Proteus devresini çalıştırdıysanız devre sizin istediğiniz şekilde olması lazım.

elektroombank

şu un evde  değilim.Eve bu akşam gidebilecem,ve hemen deneyeceğim,,

elektroombank

denedim ama urada kesilmeler oluyor. Anlatmak istediğimi aşadıki linkteki sayfaya yazdım,,


Resim Burada

elektroombank

Pic Basic tarafı tamam.Simule etmek istiyorum.Fakat edemiyorum.Netten encoderlı bir dc motor  buldum.Onu bağladım.ama yanlış oldu herhale encoder girişi
nasıl yapacağım encoder girişini

Dediğim motorun Libraryisini buradan indirebilirsiniz..