rotary pulse enceder.encoder okuma

Başlatan mrtclk0891, 27 Haziran 2009, 02:29:45

mrtclk0891

değerli ustalarım kafam durdu bana encoder nasıl okurum anlatabilirmisiniz var ise basit bir asm kod diğer adı ile rotary pulse encoder ALLAH rızası için. bide basit bir cizim.. sıkıştım daha doğrusu kafam durdu belki basit bi konudur ama durdu artık..

Tagli

İkilisi ile hiç uğraşmadım ama teklisinin nasıl okunacağı konusunda yardımcı olabilirim. Bu arada tekliden kastım yön tespiti yapamayıp sadece dönme sayısını veren tek çıkışlı encoderlar.

Benim uygulamamda iki motor vardı (gerçi daha fazla da olabilir, farketmez) ve PIC'in motorları çalıştırdıktan sonra encoder saymaktan başka yapması gereken başka bir iş yoktu, o yüzden kesme kullanmadım. Seri porttan her motor için hangi yönde dönmeleri ve kaç pulse saymaları gerektiği bilgisini yolluyordum.

Yapman gereken şey sonsuz bir döngü içinde encoderlardan okunan değerleri bir byte'ta saklamak. Aynı zamanda bir önceki değerleri de ayrı bir byte'ta saklaman gerekiyor. Her okumadan sonra mevcut değer ile öncekini XOR'layarak değişim byte'ını elde edersin. Daha sonra da bu byte'a göre işlem yapmak kolay. Bu byte'taki veriyi kaydırma yaparak sadece bir ucundaki biti test ederek değerlendirebilir ve buna göre bir başka sonucu, motor hareket izinleri byte'ını, oluşturabilirsin. Yani encoder limitini doldurmuş olan motor durur. Sonsuz döngünün başında da bu izni kontrol eder ve tüm motorlar durmuşsa döngüden çıkarsın.

Bu arada, bu işleri yapan döngünün çalışma süresi pulse kaçırmayacak kadar hızlı olmalı.

Gerçi uygulaman konusunda bilgi vermemişsin. Belki yapmaya çalıştığın şey benim anlattığıma benzemiyordur. Ama yine de genel mantığı aynı olsa gerek
Gökçe Tağlıoğlu

ete

Değişik okuma yöntemleri uygulanabilir ama en klasik olanı sırası ile aşağıda açıklandığı şekildedir. Bu açıklamaya geçmeden önce encoder ların A ve B gibi iki çıkışı olduğunu ve bu çıkışların bir birlerinden 90 derece faz farkı ile sinyal çıkardıklarını bilmek gerekir. Bu sayede bu iki sinyal kullanılarak encoderin dönüş yönü ve pals sayısı bir işlemciye okutturulabilir.
Bir birinden farklı olarak okunabilecek bitler şu şekildedir.
00 01 11 10 00

- Port değeri okunur ve encoderin bağlı olduğu pinlere denk gelen bir sayı ile and işlemine tabi tutularak yalnızca encoder bitleri alınır.
Örnek vermek gerekir ise diyelimki PortB.0 ve PortB.1 de bağlı encoder okuması için (ben normal yazıyorum ASM karşılıklarını sen yazarsın)
ILK = PORTB & %00000011  

- SOnra ikinci okunur şayet birinci ile aynı ise demekki encoder henüz dönmedi o halde yeniden okurum taaki farklı bir okuma yakalayıncaya kadar okumaya devam ederim.
IKINCI=PORTB & %00000011

- SOnra ilk okumanın 0.cı biti ile ikinci okumanın 1. bitlerini XOR işlemine tabi tutarım. YON= ILK.0 | IKINCI.1
Sonuç 1 ise dönme saat yönünde sonuç sıfır ise saatin tersi yönündedir.
Yön=1 ise Okuma=Okuma+1 , Yön=0 ise Okuma=Okuma-1 şeklinde sayma işlemide yaptırılır.
İki bitin XOR işlemine tabi tutulabilmesi için 1. bit bir bit sağa kaydırılarak bit sıfır konumuna getirilir ve sonra XOR işlemi uygulanabilir.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mrtclk0891

ilgilendiğiniz ve aydınlatmaya çalıştığınız için cok teşekkür ederim hepinizden allah razı olsun.....