pic16f876 ADC potansıyometrede sorun

Başlatan dyonizos, 30 Eylül 2011, 06:09:39

dyonizos

selamlar arkadaşlar.
pic16f876 da adc ye bagladıgım pottakı degere gore l293 e baglı motorun hızını ve yonunu kontrol etmek ıstıyorum. yonde bır sorun yok calısıyor. ancak adc okumamda bır problem var sanırım cunku potansıyometreyı cevırdıkce teorık olarak tam orta noktada yon degıstırmesı gerekırken sonuna godru bır noktada yon degıstırıyor ve hız cevırdıkce artması gerekırken bır azalıyor bır artıyor. kodlarım asagıda nerede hata yapıyorum acaba?


Device 16F876
XTAL 4
DEFINE ADC_BITS 8
DEFINE ADC_CLOCK 1
DEFINE ADC_SAMPLEUS 3
PORTA=0:TRISA=%00000011
PORTB=0:TRISB=%00000000
PORTC=0:TRISC=%00000000

CCP1CON.2=1
CCP1CON.3=1

ADCON1= 4


Symbol CIKIS = PORTB
 
Symbol JOY1 = PORTA.0  'JOYSTICK1
Symbol JOY2 =  PORTA.1  'JOYSTICK2
CCP1_PIN = PORTC.2

JOY1DEGER     VAR     Word
JOY2DEGER     VAR     Word
motor var Word


CIKIS=%00100000
DelayMS 500
CIKIS=%00010000
DelayMS 500
CIKIS=%00000000
DelayMS 500

BASLA:


ADCIN 0, JOY1DEGER

If JOY1DEGER>126 Then
CIKIS=%00100000
motor = joy1deger - 126
End If
If JOY1DEGER<126 Then
CIKIS=%00010000
motor = 126 - joy1deger
End If
HPWM 1,motor,1000

GoTo BASLA





Maxim

eminmisiniz proton kullandığınıza ? bunlar picbasic kodu

dyonizos

aslında proton ide kullanarak yazıyorum ama tam proton kodlarını kavrayamadıgım ıcın picbasic proton karısıyor. Float kullanabıldıgım ıcın protona gectım ama yavas oluyor gecısım :)
yukarıdakı kodlar dedıgınız gıbı picbasic olabılır. Aslında proton ıle yazabılsem daha ıyı olucak tamamen. Egerkı proton olarak daha efektıf bır yolu varsa o konuda yonlendırırsenız sevınırım.

ete

Aslında, kodlar melez. Pek çok kod parçası PBP ya ait bir kısmıda Proton'a ait. Bu hali ile direk PBP da çalışmaz.
Ama Proton derleme yapabilir sanırım.

Her neyse, gelelim soruna, Bana kalırsa bu tür sistemlerde motorun anında yön değiştirmesi hem zor olur hemde bunu pot ile ayarlaması zor olur. Benzer bir sistem yapmıştım ama pot orta noktasında sistemin karar vermesi için bir aralık bırakmıştırm. Sanada tavsiye ederim.
Örnek vermek gerekir ise 0-122 aralığında bir yöne , 123-131 aralığında yön değiştirme kararı, ve 132-255 aralığınd aise diğer yöne dönmesi daha uygun olurdu. Üstelik hiç bir motor dönerken bir den ters istikamete döndürülmez. Motor önce durdurulmalı yada en azından durdurma komutu verilmeli ve ardından diğer yöne döndürülmelidir.

Senin kodlarına bakarak şunu söyleyebilirim. Pot orta konuma gelince ADC den bir 126 bir 127 bir 128 gibi değerler okunur ve bu konumda işlemci motoru bir oyana bir bu yana döndürmeye çalışır ve buda sana gecikme olarak yansır.

Öncelikle kodlarını biraz ayıkla. Ya gerçek proton kodlarını yaz yada gerçek PBP kodlarına çevir. Her ikisinede yakınsın.
Sonra ADC okuma aralığını biraz uzat. Araya 100ms klik bir gecikme koyki motor sürücüsü bir işi yaparken daha bitirmeden ikinici emir gelmesin.

Ete


Bilgi hazinedir paylaştıkça büyür.            http://etepic.com