encoder pals okumada bu kod doğru mu?

Başlatan zamzam23, 01 Temmuz 2011, 16:17:03

teknikelektronikci

Alıntı yapılan: camby - 03 Temmuz 2011, 04:22:22
(Resim gizlendi görmek için tıklayın.)

Şu bildiğimiz arttırımlı encoder sinyallerine gray kod deniyormuş , tamam ben yanlış düşünmüşüm. Teşekkürler İlhan uyandırdığın için  ;)

A fazı ve B fazı ozmn 2 bit gray kod oluyor , 3 bitlik yada daha fazla bitlik gray kod kullanılıyor mu arttırımlı encoder' larda ?

@mufitsozen , yukarda sana sorduklarımı hiç yazılmamış kabul edebilirsin :)

difransiyel olanlar var veya ismini unuttuugum entegre ile difransiyel sinyal elde edebilyiorsunuz böylece 4 kanal A A* B B* sinyalleri oluyor kullanaim amaci ise sanirim daha hizli olan sistemler
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

teknikelektronikci

Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

zamzam23

arkadaslar denemelerimi şöyle sürdürdüm:

motoru karttan ayırdım baska bir sürücü devreyle sürdüm pals i yine benim kartla okudum. sorun yok gözüküyor. yani kartın encoder pals okuma kısmı dogru calısıyor. pid kısmını ekleyınce ve motoru karta baglayınca sorun ortaya cıkmakta. bu durumda 2 sey akl gelıyor:
1- sorun: pid nin içinde bulundugu timer0 kesmesi ve pals leri sayan int_ext kesmesi aktifken süreler birbirine giriyor kesmeden cıkmadan kesme gelıyor işlemci bu yuzden sacmalıyor
2-hersey normal ama motor elle sıkıstırıp yüksek akım cektirınce encoder pinlerine gelen istenmeyen işaretler yüzündn sıcramalar yuzunden encoder pasl sayısı azalacak yerde i fazla sayıyor bu da programın saclamalamasına sebep oluyor.

buradan öteye yapaılecegım sey; kesmelerin işlem sürelerini hesaplayıp ona göre süreler birbirine mi giriyor neler oluyor daha net göreceğim.
bu aşamada önerileriniz nedir?

mokan

konu ile ilgili yazılanları tam olarak okumadım (çözüm önerilerini) ancak, sana tavsiyem encoder okutmasını tmr0'ın tocki(ra4)  ucundan yaptır.her yükselen veya düşen kenarda(sana hangisi uygun ise) tmr0 içeriği artar.255 olunca kesme alt programına dallanırsın.Orada bir tane çarpan değişkeninin içeriğini artırırsın.Program içinde de pals hesabı yaparken; pals=carpan*255*(tmr0 bölme oranı)+(tmr0'ın son okunan değeri*tmr0 bölme oranı). Bu şekilde palsleri kaçırma gibi bir sorun ortaya çıkmaz.Motor sıkışmasını gözlemlemek istitorsan; tmr0 kesmesi için geçen zamanı, encoder'ın bir plasi kaç uS de oluşturduğu bilgisini kullanarak hesapla.Kesme süresi max wdt süresinden küçükse wdt'yi max süreye kurarsın.Her tmr0 kesmesinde wdt sıfırlarsın.Sıkıştırma yapıp tmr0 kesmesini engellersen, wdt devreye girer.Wdt devreye girdikten sonra bir kontrol yapmak istiyorsan, tmr0 kesme programında eeprom'un bir adresine veri kaydet, wdt resetlemesinden sonra veriyi sorgulat ve ona göre istediğin işlemi yaptır.