enkoderdan yanlış okunan pulse için yardım

Başlatan bulut_01, 16 Haziran 2019, 12:54:30

bulut_01

iyi günler picproje ailesi motor kontrol için yaptıgım bir sistem var motor üzerinde hall sensorlü enkoder var ben burdan gelen sinyalleri okuyorum sistemimde rf 433 modül mevcut rda kesmesinide kullanıyorum enkoderu rb kesmesinde okuyorum rf modulden devamlı parazit geldiği için rda kesmesine sık sık dallandıgı için program enkoder gelen pulsları kaçırıyorum düzgün ölçemiyorum bu konuda nasıl bir yol izlemeliyim ? enkoder okuma için daha iyi kod varsa paylaşırsanız onuda kullanabilirim.mcu 18f24K22

uart ayarları şu şekilde.
#use rs232(baud=1200,parity=N,xmit=PIN_c6,rcv=PIN_c7,bits=8,uart1,stop=1,timeout=15)

enkoder için kullandıgım kod;
#int_RB 
void rb_isr (void) 
{
yenia=input(pin_b5);      
yenib=input(pin_b4);     
yon_1=eskia ^ yenib;         
konum = konum + (2 * yon_1) -1;
eskia = yenia; 
eskib = yenib;
clear_interrupt(INT_RB);
}
YENİLMEZ..

bulut_01

YENİLMEZ..

RaMu

Enkoder modülü olan mcu kullanmak en doğrusu.

Mcu dışında bir devre kurup sayma işini o devreye yaptırabilirsin,
gerektiğinde mcu bu değeri okuyup değerlendirir.

Sadece yön tayini ve aşağı sayıyor yukarı sayıyor
işini dışarıda bir devreye yaptırıp,
buradan gelen sinyal ile
mcu da iki tane timer a harici tetik ile sayma yaptırıp...
böyle bir şeyler yapılabilir belki.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

bulut_01

ramu hocam pcb yapılı yani devre üzerinde donanımsal değişiklik yapamam rb kesmesi içinde yön bilgisi elde edip azaltacak yada artıracak kısmı karar verene kdr pulse lar kaçıyor rotary enkoder algoritması varsa elinizde rb kesmesinde kullanılan paylaşırsanız denemek isterim.
YENİLMEZ..

mehmet

Zaman kesmesi ile sadece
enkoder pin değerlerini alın.
Yön hesaplama işini ana döngü
içerisinde veya gerekli
olduğunda yapın.

Yine de olmaz ise, mecburen
donanımsal değişiklik yapmanız
gerekecektir.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

RaMu

Rf modulü yoksay, uart kesmesini kapat, enkoder ölçümünde yine problem oluyor mu bir dene,
oluyorsa zaten yapabileceğin bir şey yok denebilir.
Uart kesmesi olmadan düzgün çalışabiliyorsa
rf modül rda uart kesmesi kısmına bir şeyler düşünürüz ona göre.

Birde rda kesmesi kısmınıda paylaş bakalım.
Rf modül mcu bağlantısı nasıl yapılmış şema paylaş.

Mcu ne hızda çalışıyor?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

bulut_01

mcu 64 mhz çalışıyor uart kapattıgımda sorun olmuyor pulse kaçırmıyor modülün çıkısı pnp transistör ile invert edilip mcu rx pinine direk baglı 12 byte veri alıp işleyip ona göre motor kontrol yapıyorum gelen veri keeloq algoritması enkoder için t1gate ve t5gate kesmesi kullanıyodum uart açık oldugunda pulse kaçırıyodu 433 modül cıkısındaki gürültüden dolayı sık sık rda kesmesine girdiği için pulse kaçırmalar oluyor şimdi algoritmada değişiklik yaptım ve rb kesmesini kullanıyorum bundadaki sıkıntı yön bilgisi kararı verene kdr ki o süreçde pulse kaçırma oluyor ama yön bilgisini ben motor dönüş algoritmamdan direk verince pulse kaçırmıyor bu durumdada istemdışı motor farklı yöne döndüğünü anlıyamam bu durumdada böyle bir olumsuz durum var. kısacası yukardaki algoritmanın yön bilgisi tahinini main içinde denemedim yön bilgisine hızlı karar verirsem rb int pulse kaçırmıyacak gibi görünüyor kesme önceliği int_rb ayarlı.
YENİLMEZ..

kimlenbu

Hangi mcu'yu kullanıyorsun bilmiyorum ama usart işini dma'ya pasla, kesme önceliğini de enkodere ver.

bulut_01

YENİLMEZ..

RaMu

Keşke Türkçe yazsaydın, üç defa okuyup ancak bir şeyler anlayabildim.

Şema yok, rda kesmesi yok halen.

Yazdıklarına dayanarak, sorunun esasen neyden kaynaklandığını
doğru tayin edebildiğini düşünmüyorum.
Eğer sorun rb kesmesinin kısa sürmesi ile çözülebilecekse
o kısmı asm yazarız hallolabilir.
Bu nedenle sorunu net olarak belirlemek, köşeye sıkıştırmak lazım.

Bu noktaya gelmeden önce şu rf modulün paraziti nereden geliyor,
bu parazit engellenebilir mi
o kısmıda çözelim.

Tekrar soruyorum;
rda kesmesini kapatınca, yukarıda verdiğin enkoder algoritması
pals kaçırmadan çalışabiliyor mu?
Ben çalışıyor diye anladım yazdıklarından ama
rda kesmesini açınca pals kaçırıyor diyorsun
rda kesmesini açınca pals kaçırmasının sebebide, nedense,
rb kesmesinde yön hesabı yapmak uzun sürüyor ondan diyorsun.
!

Bu arada kullandığın enkoder kaç pals, daha doğrusu
sisteminde en yüksek hızda saniyede kaç pals ölçmeni gerektiriyor?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

bulut_01

100 hz enkoderim 3000 rpm dönüyor motor a ve b 2 fazlı enkoder rda kodlar pc de eve gecince koyabilirim
433 rf modül piyasadaki modüllerden ortamdaki sinyal kirliliğinden dolayı çıkışında durmadan dataları scop ile bakınca görülüyor.

rb isr{
if(yon==1){
konum++;}
else{
konum--;}}

seklinde kaçırmıyor. burda yön bilgisini motorun saga ve sola dönme kod kümesinden yön bilgisini verirsem kaçırmıyor.
asagıdaki kodu rb kesmesi içine ekleyince yön bilgisi bulmak için o zamn pulse kaçırıyor.

yenia=input(pin_b5);     
yenib=input(pin_b4);     
yon=eskia ^ yenib;         
eskia = yenia;
eskib = yenib;
YENİLMEZ..

bulut_01

@RaMu yukardaki yazımı pek anlamamışın t1gate ve t5gate kesmelerini kullandıgım vakit rda yani uart açtıgımda pulse kaçırıyor cünkü t1gate ve t5gate kesmelerine öncelik verilmiyor baktım t1g ve t5g kesmesi ile bu iş olmuyacak pulse kaçırma mevzusundan dolayı sonuçda t1g ve t5g kesmeleri ile rb kesmesi aynı portları kullanıyor donanımsal değişiklik yapmadan rb kesmesine geçtim ve kesme önceliği 1ci sırada rb ayarladım yön bilgisi tayin etmek için kullandıgım yukardada örnekde verdiğim kod ile yön belirleyene kdr pulse kaçırıyor bunu nerden anlıyosun diye sorar isen motoru limit ayarlarını yaptıkdan sonra her saga ve sola dönüşlerinde farklı yerlerde durması kısacası ayarlı konumda durmaması.
YENİLMEZ..

RaMu

Yine söylüyorum
uart kısmını tamamen yoksayıp,
uart kesmesini tamamen kapatıp,
enkoder okumayı yaparsan bu iş çözülür.

Enkoder okumak için kullandığın kesmede
uart okumayıda yaptırabiliriz.
Uart baudrate bayağı yavaş,
program içinde bile gelen bilgiler okunabilir.
Bu bir çözüm buraya odaklanabilirsin.

Yani öncelikle yapılması gereken
Rda kesmesi kapalı iken rb veya t1gate ve veya t5gate kesmeleri ile enkoder konum ve yön okuma işini halletmek.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

bulut_01

@RaMu  üstad uart iptal edince sorun yok pulse kaçırma olmuyor her iki kesmede de uart açınca modülün çıkışındaki parazitden dolayı asırı sekilde rda kesmesi oluşuyor bu esnada motor döndüğünde pulse kaçırıyor baund hızı düşük rb kesmesi kullanmak daha mantıklı geliyor bana yön tayini daha hızlı nasıl bir algoritmayla yapabilirim asagıdaki örnek daha fazla zaman alıyor rb içinde pulse kaçıyor baska ne önerin vardır bu konuda?
soft uart kullandım kumanda tepkisi baya düştü.

yenia=input(pin_b5);     
yenib=input(pin_b4);     
yon=eskia ^ yenib;         
eskia = yenia;
eskib = yenib;

bu kodun yerine daha hızlı nasıl yön bilgisi elde edebilirim rb içinde yada main içinde.
YENİLMEZ..

bulut_01

#14
...
YENİLMEZ..