Elektronik ve Teknoloji Merkezi Elektrotekno.com
Elektronik ve Teknoloji Merkezi




Click here to go to the original topic
Sayfaya git 1, 2  Sonraki
Elektrotekno.com Ana Sayfa Microchip Pic Serisi
Yazar Mesaj
seba
Tarih: 16.05.2007, 13:51 Mesaj konusu: encoderla dc motor hız kontrolü

slm arkadaşlar
encoderlı dc motorun hızını 16f877 kullanarak kontrol etmeliyim.ama nasıl yapacağımı tamolarak bilmiyorum.
yapabildiğim kadarını size anlatayım sizde bana gerisini anlatın[:D]

elimde 100lük encoder var.öncelikle belirli bir sürede encoderın kaç adım gittiğini saydım ve bunu referans hızım olarak kabul ettim. pwm üretip motora gönderdim.(ama sorun burda başlıo)motor pwmin H-L sürelerine göre hızlı yada yavaş dönecek.fakat motor dönerken encoderın kaç adım gittiğini nasıl sayacağımı bilmiyorum.bu konuda bilginiz varmı
-----------------------------------------------------

kamilmavi
Tarih: 05.08.2007, 23:25 Mesaj konusu: en iyisi hpwm

Sevgili arkadaşım PIC in HPWM (donanımsal PWM) özelliğini kullanmalısın. HPWM programdan bağımsız çalışır, frekansı sadece osilatöre bağlıdır ve böylece sen sadece ona döngü içerisinde hızın şu dersin. Senin programın çalışırken o aynı frekansta çalışmaya devam eder. ve değiştirene kadar bozulmaz. 16f877 de 2 adet hpwm çıkışı var CCP1 ve CCP2 olacak portc.0 ve portc.1 e bağlı olması lazım. Detaylı bilgi için PIC BASIC pro derslerini indir. orada sanırım ders 9 veya 11 de ayrıntılı olarak anlatıyor. Kolay gelsin.
ete
Tarih: 06.08.2007, 08:45 Mesaj konusu:

Öncelikle encoder palslerini okuyacak bir program parçası yazman gerek. Bunun için RB0 kesmesini kullanırsan pals kaçırmamış olacaksın. Programı yazdıktan sonra motor miline bağladığın encoder'in motor milinin her turunda kaç pals ürettiğini sayacaksın. Bunun için motor milini yavaşça tam tur attırman yeterli. Senin ifadenle tur başına 100 pals üreten bir encoderin var. Bu durumda motor milinin her turunda encoder 100 pals üretecektir.
Hız yada devir kontrolü birim zaman içindeki hız yada deviri ifade eder. Özellikle devir konusu bir dakika içindeki atılan turu ifade eder. O halde senin yapacağın iş , öncelikle 1 sn içinde motor milinin kaç tur attığına bakacaksın. Bulduğun tur sayısını 60 ile çarparsan sana kabaca motorun kaç dev/dak. hızla döndüğünü bulabilirsin. Tabiiki bu hassas bir hesap olmayacaktır. En doğrusu 1 dakikalık zaman diliminde encoder in kaç pals ürettiğine bak ve bulduğun rakamı 100'e böl. Böylece gerçek olarak motorun kaç tur/dak. hızla döndüğünü bulmuş olursun.
Formüller şöyle;

1 tur= 100 pals
Dev/dak= xxxx / 100 (burada xxxx sayısı 1 dakikada kaç pals üretildiğidir.)

Encoder palslerinin nasıl okunduğu konusunda bilgin varmı bilmiyorum. Encoderlerin A ve B diye en azından iki çıkışı vardır. Bu iki çıkış birbirinden 90 derece faz farkı ile sinyal üretirler. Bu faz farklı sinyal ile encoderin hangi yöne döndüğü tespit edilir. Şayet yön derdin yok ise direk A çıkışını portB0'a bağlarsan (encoder voltajının 0-5V olmasına dikkat etmen gerek ) gelen palsleri direk sayabilirsin.
Yön tespitide yapacak isen üst üste hem A hemde B çıkılarına bakacaksın. Üst üste yapılan okumalarda bir birinden farklı iki okumayı yakalamaya çalışacaksın. Yakaladığın anda ilk okumanın sıfırıncı biti ile ikinci okumanın birinci bitini XOR yapacaksın bulduğun değer ya sıfır yada bir olacaktır. Encoderin bir yöne dönmesi durumunda bulunan değer hep aynıdır. Ters yöne dönünce bulunan değer bir öncekinin hemen tersi olacaktır. Buradan encoderin hangi yöne döndüğünü anlayabilirsin.

Encoder palslerini saymanın daha kolay bir yoluda Tmr0 zamanlayıcısını kullanmaktır. Bu zamanlayıcıyı şayet harici paslerden tetik alacak şekilde kurarsan ve bölücü seçimini WatchDogTimer için ayarlarsan bire bir olarak Tmr0 dışarıdan gelen palsleri sayabilir. Bu sayıcının pals girişi PortA.4 dür. Böylece PortA.4 e bağlamış olduğun encoder için önce,
- Tmr0 değerini sıfırlarsın
- Sonra 1000 ms lik bir zaman tutarsın.
- Program zaman tutmada beklerken gelen palsler Tmr0 değerini sürekli geri planda artırır.
- 1000 ms sonunda Tmr0 değerini başka bir değişkene eşitlersen 1000 ms de encoderin kaç pals ürettiğini bulmuş olursun.

Ete
kamilmavi
Tarih: 17.08.2007, 10:23 Mesaj konusu: pic ile encoder okuma

Arkadaşlar, pic basic pro ile kesme kullanarak yazdığım programlardan verim alamadım. Yani sayma sırasında encoderden okunan değerlerde atlama oluyor. doğru olması için , encoderin çok yavaş dönmesi gerekiyor. Yabancı sitelerde de yaptığım araştırmada pic basic pro'nun interrupt özelliğinin çok hızlı saymalarda verimli olmadığı görünüyor. Hızlı kesme işlemlerinin assembly dili kullanılarak yazılması gerektiği vurgulanıyor. Zaten pic basic pro ' nun kendi yardımında da bu doğrultuda bir bilgi var. Eğer Bu konu da bildiğiniz farklı bilgiler varsa paylaşmanız çok faydalı olur. Teşekkürler
ete
Tarih: 19.08.2007, 19:04 Mesaj konusu:

Pic Basic pro ile yazılmış bir programın nasıl encoder okuduğuna örnektir.
Encoder simulasyonu 2 adet D tipi flip flop kullanılarak gerçekleştirilmiştir.
Gerekirse Osiloskop bağlayarak A ve B girişleri arasındaki faz farkını görebilirsiniz.

http://www.4shared.com/file/22379128/f0...coder.html

KOlay Gelsin

Ete
kamilmavi
Tarih: 23.08.2007, 20:05 Mesaj konusu: ete usta'ya saygılar

Ete usta yardımların için çok teşekkür ederim. Bugüne kadar yazmış olduğun birçok yazıyı okudum ve çok faydalandım. Bu encoderi pic basic pro ile bir türlü hızlı okutamadım. Göndermiş olduğun devre çok güzel çalışıyor. Fakat basic kodlarını göndermemişsin. Eğer kodları gönderirsen çok işime yarayacak. Kafayı sıyırdım bu sayma işiyle. Yardımcı olursan çok sevinirim. Birde senin mail adresini veya iletişim kurabileceğimiz bir adres verebilirmisin. 2 gündür arıyorum ama bulamadım seninle ilgili şahsi bir bilgi yok proje sitelerinde :) şimdiden Teşekkürler.
ete
Tarih: 23.08.2007, 20:34 Mesaj konusu:

aslında programı bilerek vermedim. biraz kafa yorun diye. zorlanıyorsan program aşağıdadır;

Kod:
bır var byte
onn var byte
yuz var byte
bınn var byte
old var byte
new var byte
yon var bıt
ledy var porta.2
ledk var porta.3

trısb =%00000000:trısa=%00011

start:    
   porta =0:portb =0:high portb.4:high portb.5:high portb.6:high portb.7:pauseus 10

bas:   gosub encoder:ıf yon = 1 then
       bır = bır + 1:endıf
       ıf bır = 10 then bırsıfır
       ıf yon = 0 then
       bır = bır - 1:endıf
       ıf bır = 255 then bıreksı

ekran:     portb = bır & 15:high portb.4:low portb.4
       portb = onn & 15:high portb.5:low portb.5
       portb = yuz & 15:high portb.6:low portb.6
       portb = bınn :   high portb.7:low portb.7:goto bas

encoder:   old = porta & %11
tekrar:      new = porta & %11
         ıf new = old then tekrar
         old = old >> 1:new = new & 1:yon = old ^ new
          ıf yon = 0 then
          high ledk:low ledy:endıf
          ıf yon = 1 then
          high ledy:low ledk:endıf
          return
           
bırsıfır:   bır = 0:onn = onn + 1
         ıf onn = 10 then onsıfır
          goto ekran

onsıfır:   onn =0:yuz = yuz + 1
         ıf yuz = 10 then yuzsıfır
         goto ekran

yuzsıfır:   yuz = 0:bınn = bınn + 1
         ıf bınn = 10 then
         bınn = 0:endıf
         goto ekran
      
bıreksı:   bır = 9:onn = onn - 1
         ıf onn = 255 then oneksı
         goto ekran

oneksı:      onn = 9:yuz = yuz - 1
          ıf yuz = 255 then yuzeksı
         goto ekran 
      
yuzeksı:   yuz = 9:bınn = bınn - 1
         ıf bınn = 255 then
         bınn = 9:endıf
         goto ekran

haberleşme adresimi direk vermek istemem. sonra bir sürü spam geliyor. lütfen özel mesaj atıver. orada veririm.
ete
eyazlik
Tarih: 07.08.2008, 17:42 Mesaj konusu:

Verdiğiniz bilgiler için teşekkürler. Ben, pic 16f877 ile encoder palslerini saydırarak bir motora pozisyon kontrolü yaptırmak istiyorum. Örneğin encoder 1000 pals ürettikten sonra motoru durdursun. Buna benzer bir program parçası gönderebilir misiniz. (Pic basic pro ile yazılırsa gerçekten yararlı olacaktır.) Şimdiden teşekkürler.
ete
Tarih: 09.08.2008, 18:04 Mesaj konusu:

aslında yukarıda verdiğim programı direk kullanabilirsin. Normalde encoder 1000'e kadar sayarsa Binler değişkeni değeri=1 (binler=1) olacaktır.
Programın başında motoru bir şekilde aktif edersin ve
Gosub Encoder satırı altına
If Binler=1 Then Motor_Dur

şeklinde bir satır koyup Motor_Dur alt programında da motoru nasıl çalştırdın ise aynı şekilde durdurursun olur biter.

Bunun dışında özel program yazmam mümkün değil. Bak görüyorsun ortada detay yok zaten. Motoru kim çalıştıracak nasıl durdurulacak vs.

Ete
yudum
Tarih: 09.08.2008, 23:31 Mesaj konusu:

ifm electronic ten gerekli enkoder lari temin edebilrsin
Elektrotekno.com Ana Sayfa Microchip Pic Serisi
1. sayfa (Toplam 2 sayfa)
Sayfaya git 1, 2  Sonraki

encoderla dc motor hız kontrolü

Gizlilik Politikası

PLC programming