Robot kol + adxl335 için ADC hesabı nasıl yapılır...

Başlatan mustafa_cmbz, 16 Nisan 2012, 11:01:53

mustafa_cmbz

DEVICE = 18F452
XTAL = 4



TRISA=%000111       'RA0 PORTA.0 ANALOG GİRİŞ


ADCON1 = %10000000
ADIN_RES 10         'ADC ÇÖZÜNÜRLÜĞÜ 10 BİT 0...1023 
ADIN_TAD FRC
ADIN_STIME 50       'ÖRNEKLEME ZAMANI 50 US

 
'Symbol SERV_KISKAC     =PORTC.7  

SYMBOL SERV_PAN        =PORTC.7  
SYMBOL SERV_TILT       =PORTD.4  
SYMBOL SERV_YATAY      =PORTD.6  

SYMBOL SOUNDER          =PORTB.7  

DIM  GECIKME_1 AS WORD
DIM  GECIKME_2 AS WORD
DIM  GECIKME_3 AS WORD 


DIM  ADC_1 AS DWORD  
DIM  ADC_2 AS DWORD  
DIM  ADC_3 AS DWORD 
 


 

  
PORTD=0
DIM  a AS  WORD


 CLS
 

BASLA:
 
ADC_1 = ADIN 0
ADC_2 = ADIN 1
ADC_3 = ADIN 2


GECIKME_1=ADC_1*6000/1500  
GECIKME_2=ADC_2*6000/1500
GECIKME_3=ADC_3*6000/1500
  


   
SERVO SERV_PAN,    GECIKME_1'ROTA_2   ' 600 ile 2000 arası ideal
SERVO SERV_TILT,   GECIKME_1'ROTA_3 
SERVO SERV_YATAY,  GECIKME_3'ROTA_4

DELAYMS 20

GOTO BASLA 
 

END



yazdığım kod bu şekilde kullandığım ivme sensörü adxl335 kullandığım motorlar ise ucuz çin malı servo motor....Şuan için tek sıkıntım ivme sensörünü hareket ettirdiğimde motorlardaki sarsıntının çok olması yani motorlar gereksiz yere hareket etmeye çalışıyo ben açıyı değiştirdikçe..Nasıl desem hani liner bir artış söz konusu değilmiş gibi 1-2 adım ileri 1-2 adım geri yapıyorlar sanki...Bu sorunu çözmem içinde sanırım ADC'den okuduğum değeri güzel bir hesap kitap yapıp servoya gönderecek duruma ve çözünürlüğe getirmem lasım ama nasıl?

tabi ilk aklıma gelen yöntem ve denemelerimi kodda gördüğünüz mantık üzerine kurdum...şuan aklımda başka bir alternatif te var da bklm...

diğer aklıma gelen yöntem ise ;

Adxl335 max. 3.6volt ile çalışıyor.Bende bunu eski modemimin üzerinden çıkan lm1117 adj entegresi ile trimpot sıkıntısından dolayı ancak 2.44volta sabitleyebildim...şöyle diyorum, mesela sensör düz yatay bir pozisyonda iken yaklaşık 1.4volt gibi bir değer veriyo.Bu ölçtüğüm voltaj değerini adc'den ham veri karşılığına (isisde) çevirip "IF" ile bundan büyükse  değişkenin değerini 1 arttır o değişkenide servoya gönder,veya küçükse 1 eksilt şeklinde yapsak nasıl olur?

daha önce buna benzer bişeyler yapan oldu mu acaba? mantık olarak doğru yoldamıyım yoksa atladığım şeylermi var?



memo333

ivme sensörü yerine gyro kullansanız daha iyi olur...

hatta gyro + acc süper olur.
Gömülü Linux Notları --> http://linuxedu.xyz/

Maxim

bence sensör çıkışındaki analog bilgiyi mümkün olduğunca örneklemek lazım
sonra bubble sort gibi teknikler kullanmak lazım