0

DC Servo Motor - Encoder

Başlatan 0nur, 10 Temmuz 2013, 18:33:32

0nur

Merhaba,

Çok ufak aralıklarla motorun açısal kontrolünü yapmam gerekiyor, bununla ilgili sonsuz tur durumu söz konusu olduğu için sıklıkla kullanmış olduğumuz 0-180' lik servoları kullanamıyorum. Bu durumda alternatif olarak aklıma redüktörlü dc motor kullanarak encoder ile pozisyon kontrolünü sağlamak geldi. Bu konu ile ilgili deneme yapmak amacı ile bulmuş olduğum bir motorun kendi bünyesinde manyetik encoder yer alıyor. Datasheet'i http://www.faulhaber-group.com/uploadpk/EN_IE2-16_DFF.pdf linkinde yer alıyor.

Projeyi gerçekleştirmek için düşündüğüm tasarım şu şekilde;

PIC16F877'de RB0 kesmesini kullanarak encoder'dan her veri geldiğinde değişken içeriğini 1 arttırmak ve motor istenen pozisyondaki değere geldiğinde durdurmak.

Bu konuda önerileriniz nelerdir ? Encoder'ı bu şekilde kullanabilirmiyim? Çift kanal bulunuyor. Sadece A kanalını kullansam yeterli olurmu?


ete

Tek kanal tek yönde kontrol sağlar. Motoru hep aynı yöne çavireceksen sorun yok. Ama benim bildiğim pozisyon kontrolünde çift yönlü çalışma olur genellikle.
Ete

0nur

Yapmak istediğim projede motor tek yönde hareket edecek. Bu şekilde açısal kontrol yapabilirmiyim ?

ete

Teorik olarak evet. Her şey motorun dönüş hızına ve senin encoderi eşzamanlı olarak okumana bağlı.

Ete

0nur

Merhaba,

Birkaç deneme yaptıktan sonra B0 kesmesi ile encoder'ın tek kanalını kullanarak bu işi yapmanın pek mantıklı olmayacağı kanaatine vardım. Sebebi ise;

B0 kesmesini kullanmamız için her konum değişikliğinde _|-|_|-|_ şeklinde lojik bir değişiklik durumu olması gerekiyor. Fakat encoder'ın kanallarındaki çıkış ise ;

AB
__
01
11
10
00
şeklinde değişiyor. (dönüş yönüne göre terside olabilir ). Burada B0 kesmesi kullanarak encoder kontrolü yapıldığında 2 kat high 2 kat low genlik süresi uzun olacağından hassas bir ölçüm yapmak pekte mümkün görünmüyor.

Bu konuda sizler ne düşünüyorsunuz ?..

 

ete

Haklısın. dönüş olup olmadığını anlamak için iki A ve B girişlerini test etmen gerekiyor.

Ete

0nur

#6
Şu şekilde bir yazılım yaparak sayi değişkenini 1'er arttırıp konum kontrolu yapmaya çalıştım. Fakat bazı durumlarda hala sapmalar meydana geliyor. Sorunu nasıl giderebilirim , fikriniz varmı ?

Device 16F877   Config HS_OSC , WDT_OFF, PWRTE_ON,  BODEN_OFF , LVP_OFF, CP_OFF  Declare XTAL 20LCD_DTPIN = PORTD.4 LCD_RSPIN = PORTE.0LCD_ENPIN = PORTE.1LCD_INTERFACE = 4 ' 4-bit InterfaceLCD_LINES = 4LCD_TYPE  = alphaLCD_COMMANDUS = 2000LCD_DATAUS = 50ALL_DIGITAL TRUE                           'On_Hardware_Interrupt GoTo Kesme     'Hardware İnterrupt Oluşunca INT ye git   'OPTION_REG.6=0        Cls Symbol INTF = INTCON.1      'RB0 KESME BARAĞISymbol INTE = INTCON.4      'RB0 KESME YETKİSymbol GIE = INTCON.7       'GLOBAL INT. YETKICCP1CON=%00001100CCP1_PIN = PORTC.2   ' Select HPWM port and bit for CCP1 module. i.e. channel 1CCP2_PIN = PORTC.1   ' Select HPWM port and bit for CCP2 module. i.e. channel 2       GIE=0                       'tüm kesmeler kapalıINTE=0                     'RB0 Kesmesi aktifInput PORTB                 'portb girişTRISC=0Dim Sayi As Word           'Sayi adında byte değişkenDim Durum As Word           'Durum adında byte değişkenDim DEGER As Byte           'Durum adında byte değişkenDim A As Word           'Durum adında byte değişkenDim tur As Byte           'Durum adında byte değişkenSymbol mi=PORTC.0Symbol mg=PORTC.1Symbol led=PORTC.3Symbol led2=PORTC.4    Symbol BUT=PORTB.0Symbol BUT2=PORTB.1    Clear A=62 Durum=100Sayi=0'================================================================================================basla:mi=1mg=0led=0Print At 1,1,"SAYI DEGERI ",@Sayi,"   "Print At 2,1,"motor hizi ",@Durum,"    " Print At 3,1,"kombinasyon ",@BUT,"  ",@BUT2,"  "Print At 4,1,"TUR ",@tur,". tur  "HPWM 1,Durum,1000 If BUT=0 And BUT2=1 ThenInc SayiEndIfIf BUT=1 And BUT2=1 ThenInc SayiEndIfIf BUT=1 And BUT2=0 ThenInc Sayi   EndIfIf BUT=0 And BUT2=0 ThenInc Sayi   EndIfIf Sayi>0  And Sayi<=(a-30) ThenDurum=90EndIfIf Sayi>(a-30) And Sayi<=(a-15) ThenDurum=120EndIfIf Sayi>(a-15) And Sayi<=(a-5) ThenDurum=20EndIfIf Sayi>(a-5) And Sayi<=(a-1) ThenDurum=120EndIfIf Sayi>=A ThenDurum=0Sayi=0Print At 1,1,"SAYI DEGERI ",@Sayi,"   "Print At 2,1,"motor hizi ",@Durum,"    " Print At 3,1,"kombinasyon ",@BUT,"  ",@BUT2,"  "mi=0mg=1DelayMS 20mi=1led=1Inc turDelayMS 2000EndIfGoTo basla                      


Satır sonunda motoru istenen konumda durdurmak için 20 msn'ye geri dönme bilgisi uyguluyorum. Sonrasında motorun 2 bitini 1 yaparak motoru kitliyorum.

Powered by EzPortal