Yazılımla enkoder pinleri A ve B yi yer değiştirmek

Başlatan DigMan, 05 Kasım 2014, 15:29:06

DigMan

Hocam, 2 adet IR2104 ile sürülen bir H köprüsünde enkoder in(motor milindeki) yönünü, tek butonla ve gerekirse bir değişken yardımıyla yazılım içinde değiştirmemiz mümkün mü? mümkünse bu nasıl yapılabilir?
symbol E1 portb.6
symbol E2 portb.7
ve
symbol A = Eski.6
symbol B = Yeni.7
Yon = A ^ B..................
tanımlamalar bu şekilde.Ben A ile B yi yer değiştirdim olmadı.Doğrudan E1 ile E2 portlarını yer değiştirsem harika olacak ama derleyici buna izin vermiyor.

ete

Anladığım kadarı ile diyelimki saat yönünde dönerken YON=0 hesaplanmış iken siz bu hesabın YON=1 çıkmasını istiyorsunuz.
Yazılımla yön bu şekilde değiştirilir.
Saat Yönünde dönen bir encoder sırası ile (%BA)  %00 - %01 - %11 - %10 - %00 değerlerini verir.
Bunun yön hesabını sizin verilerinize göre yaparsak YON=Eski.6 XOR Yeni.7  bu verilerle saat yönünde (soldan sağa doğru) giderken YON=0 çıkar.  Ama yön hesabınızı YON=Eski.7 XOR Yeni.6 şeklinde değiştirirseniz Aynı yönde yön hesabınız YON=1 çıkar. Kısaca A ile B yi yerdeğiştirmek yerine yalnızca yön formülünüzü değiştirmeniz gerekir.
Mevcut hali , Yön=Eski.6 ^ Yeni.7   (Yon=0)
Son hali ,      Yön=Eski.7 ^ Yeni.6   (Yon=1)

Umarım istediğin budur

Ete


DigMan

Hocam, çok sağolun hızınıza hayranım :)  hemen test ettim fakat bir yerlerde bir terslik var.Okuduğum palsde sorun yaşıyorum. Bu işlemi yapmadan önce normalde okuduğum değer 74 tur idi. şimdi bunu ekleyince 87 okuyorum.Baktım inceledim sorunun kaynağını buldum.

programın eski hali:
tanımlamalarda;
symbol A = Eski.6
symbol B = Yeni.7

programın yeni hali:
tanımlamalarda;
Dim A                 As Bit
Dim B                 As Bit

If Yon_Degistir = 0 Then
      a = Eski.7
      b = Yeni.6
      GoTo DEVAM
   Else
      A = Eski.6
      B = Yeni.7
EndIf

bunu yapınca pals sapıtıyor. biri değişken biri sabit. acaba bu farklılıktan mı diye kontrol ettim. A ve B yi, sabit yerine değişken yaptım ve if li ifadeyi kaldırıp programı eski haline getirip çalıştırdım.Yine 87 çıktı.Hocam, A ve B yi illa sabit mi yapmak gerekiyor? Bunu başka bir yolla yapamaz mıyız?

ete

Bana kalırsa sorun tanımlama hatası.
Program içinde A bir eski.6 ya bir yeni.6 eşitlenmemeli.
Bu nasıl bir encoder okuma algoritması onuda anlamış değilim.
Bir sistemde Yön daima sabittir.
YON=A ^ B şeklinde hesaplanıyor ise bu iki alternatifli bir sonuç verir. YON=1 veya YON=0
Gerisi senin kabulüne kalmış bir şey. Şöyleki YON=1 ise sayı toplanacak dersin ve
IF YON=1 then SAYI=SAYI+1  yaparsın.
IFYON=0 then SAYI=SAYI-1 şeklinde olmalıdır.
Ama sende ne hikmetse YON bazen saat yönünde dönerken 1 oluyor bazende aynı yönde iken 0 oluyor yada olmalı diyorsun. İşin bu kısmı bana çok yabancı. Otomatikman eski yeni karşıklığı oluyor sistemde o yüzden de yön tanımlama değişikliği olduğu zaman fazladan puls veriyor galiba. Tam da emin değilim. Ama anladığım bir konu değil. Özellikle senin algoritman bana ters. Sorunun çözümünü kendin bulacaksın.

Ete


DigMan

Şöyle anlatayım hocam kısaca..
şimdi motor ve enkoder kablolarını soketten ters çevirdiğimizde sistem tam tersi çalışıyor, zaten çalışmalı da.Bu normal.
Ama sadece enkoder yada motoru ters çevirdiğimizde sistem bozuluyor, bu da normal bozulmalı zaten.Benim yapmak istediğim şey ise kabloları fiziksel olarak değiştirmek yerine menüden yazılımla değiştirmek.yön değiştir dediğimde hem motor hem de enkoder uçları yer değiştiricek.Motoru çevirebiliyorum fakat enkoder da böyle bir sorun çıktı.Aslında sayenizde enkoderi da çevirdik onda da bir sorun yok. sadece A ve B tanımlarını değişken yaparsam problem çıkıyor.Sabit yapınca sorun yok.İlla sabit mi yapmam gerekiyor anlam veremedim. İncelemeye devam ediyorum :( 

ete

Aynı şeyleri konuşuyoruz ama anlaşamıyoruz her nedense.
Motor saat yönünde dönerken yon=0 çıkıyor. Motor ters tarafa dönünce yon=1 çıkıyor.
Bu yon bilgisini kullanarak ne yapman gerekiyorsa yaparsın.
Ete

Powered by EzPortal