encoder ile motor hız kontrolü ve konumu

ymncn

Üye
Katılım
18 Nis 2012
Mesajlar
8
Puanları
1
merhaba arkadslar benm encoder ile motor hız kontrolü ve konumunu belirleyecğim microişlemcler projem var. 18f4431 pic almam gerektiğini söledilerde bu konuda pek bi bilgim yokta yardmcı olrsanz sevinirim
 
kullanıcagın encoder nasıl bir devre?
encoderdan gelecek sinyaller uclar falan nedir ?
veya bu encoderıda senmi yapıcaksın ?
mikrokontrollor 18f4431 kullanman gerekiyor diye bir zorunluluk yok. mikro kontrolor Kontrol etmek istedigin devrenin tasarımına baglı olarak uygun birşey olarak seçilir zaten.
 
sıradan bişey olsunda motor hızını kontroll ve konumunu ayarlıcam sağ-sol durumunu belirlicem. malzeme olarak ne kullanabilirim? bi yazarsanz cok makbule gecer
 
Motorun Konumunu Belirlicem derken belirlemek istedigin "Sağ tarafamı donuyor yoksa sol tarafamı dondugu" veya Motorun Pozisyonumu ? yani Servo veya Step motrodaki gibi Durdugu acımı ?

Encoder ile hic ugrasmadım. ama Teorik olarak biraz bilgim var.

hazır aldıgın bir modul varsa ve A,B olarak 2 cıkıs ucu varsa
A ve B ucundan gelen datayı kontrol et ve kayded. Yeni gelen data ile bir önce kaydedtigin data farklı ise önceki data ve yeni datanın birlerini Xor yapınca Cıkan sonuca gore Saga veya Sola dondugunu anlayabilirsin
Hızını ise ;
A ucu Picin Interupt pinine baglayıp her interrupta Bir degiskenin degerini artırırsın.
1 sn sonunda Bu degiskenin okudugunda Saniyedeki tur sayısını bulmus olursun..
Okuduktan sonra Silip 0 dan tekrar baslatırsın..
Bu tip bir encoder 'ı kendin yapıcaksan AveB pinlerinden cıkan sinyal arasında 90 fark var..
http://en.wikipedia.org/wiki/Rotary_encoder#Absolute_encoder_output_formats
Bahsettigim A ve B deki datayı bu linkten bakarsan daha iyi anlarsın.
Ayrıca orda farklı encoder tipleride var ..Belki fikir verir.


Birde Cok basit ve pratik olarak Sunuda deneyebilirsin.
Bir pot'u Motor miline baglayıp Pic ten anaolog degerini okursun. (potun 360 derece donmesi icin pota ufak bir oynama yapman lazım )

ilk kaydettigin deger yeni okudugun degerden kucukse bir tarafa buyukse Diger tarafa dondugunu anlarsın
Hızı ise Potun Enkucuk degerini her okudugunda yukarıdaki gibi degiskeni bir arttır ve 1 sn sonunda Sn deki hızını bulup degisşkeni sıfırla.. Ayrıca Bu sistem ile servo gibi pozisyonlamada yapabilirsin. PWM ile veya Seri baglantı yada Parelel baglantı ile bir deger gonderirsin .. Pottan okudugun deger bu degere eşit olunca Motoru Durdurursun. ve Motora istedigın posizyonu vermiş olursun..
 
cok tesekkürler öncelikle dediklernz sayesinde kafamda bişeyler olştu. Sağ tarafamı donuyor yoksa sol tarafamı dondugu" veya Motorun Pozisyonyla ilgili tüm mesele bu. switch ve potda kullancam. ona göre ilk sölediklernzden bişeyler cıkardm bana malzeme olarak ne kullanabilirm onuda yzarsanz cok sewnrm. varsa linki atarsanz ben bakarm. protesutan similasyonunu gerceklestrmm lazm bu konuda elinzde kaynak varsa onlarda yardmcı olabilir.alıp derhal baslamam gerekioda :)
 
encoder ile ilgili daha once birşey yapmadım encoder modulu hazır bulunuyormu yoksa motorla berabermi satılıyor bilmiyorum..
Sen Elekronikcilere ve Motor satan yerlerde bunu iyice arastır. motor uzerinde hazır encoder bulursan iyi olur.

Encoder kendin yapacakisende dedigim gibi bir potu modifiye edip 360 derece doner hale getir.. motorun miline bagla.
pic 16f628 kullanabilirsin .. USB haberleşme ile olucaksa ozaman 18f serisi bir pic kullanırsın
basitce Potun Bir ucu + ya bir ucunu gnd ye orta ucunu Picin Anaolog pinlerine takılır..

Peki hangi Programlama dilini kullancan Pic icin ?
 
c dilini kullancamda encoder kendim yapmıcam encoderlı motor alim ben en iyisi. tesekkürler saolasn
 
tekrardan merhaba motor hız kontrolü ve konumunu proteus programıyla cizdimde ccs de programı yazmaya calışıomda bi sürü hata verio. varsa elinizde ccs programındaki yazılımını alabilirmyim?
 
Vakit bulamadıgımdan ve proton basice daha iyi hakim oldugundan Kodu hızlıca proton basic ile yaptım
Mantıgı anlarsan CCS C bilgin yeterliyse yapabilirsin.. Umarım işine yarar..
Olmassa MikroC kodu olarakta daha sonra eklerim. ama malesef CCS C bilmiyorum


Proton basic ile su sekilde

Device 16F877
XTAL 8








Symbol T0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag
Symbol T0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable
Symbol GIE = INTCON.7 ' Global Interrupt Enable


Symbol PS0 = OPTION_REG.0 ' Prescaler ratio bit-0
Symbol PS1 = OPTION_REG.1 ' Prescaler ratio bit-1
Symbol PS2 = OPTION_REG.2 ' Prescaler ratio bit-2
Symbol PSA = OPTION_REG.3 ' Prescaler Assignment (1=assigned to WDT 0=assigned to oscillator)
Symbol T0CS = OPTION_REG.5 ' Timer0 Clock Source Select (0=Internal clock 1=External PORTA.4)

; Kullanılacak degiskenler
Dim Distance As Word
Dim old As Byte
Dim new As Byte
Dim yon As Byte

;Portb.1 ENCODER A UCU
;Portb.2 ENCODER B UCU
TRISB.1 = 1TRISB.2 = 1


;Timer 0 interrupt'ının ayarlanması

on_interrupt GoTo int

GIE = 0
T0CS = 0
TMR0 = 0
T0IE = 1
GIE = 1






main:
; Varsa LCD veya seri portandan Degeerler Burdan gonderilebilir...


GoTo main




int:
GIE=0
new.0 = PORTB.1 ; New Degiskeninin 0 ve 1 ci bitleri PORTB den alınır
new.1 = PORTB.2
yon = old.0 ^ new.1 ; Yonu bulmak icin bir onceki ENOCDER A girisi ile Yeni Encoder B girisi XOR yapılır




If old <> new Then ; Bir onceki Yon ile yeni okunan Yon degeri aynı degilse işlem yapılır
If yon = 0 Then
Inc Distance ; Yon = 0 ise ileri
Else
Dec Distance ; Yon = 1 ise geri
EndIf
EndIf
old = new ; yeni okunan Encoder A ve B ile işimiz bittiğinden artık bu eski Encoder verisidir.

T0IF = 0
GIE=1 ; Interruptan cık
Context Restore
 

Forum istatistikleri

Konular
127,950
Mesajlar
913,857
Kullanıcılar
449,598
Son üye
kadir12366

Yeni konular

Geri
Üst