Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

RF ile PPM servo kontrolü...

Başlatan mcguiverali, 02 Aralık 2008, 19:47:50

mcguiverali

merhabalar..

açıkçası bu konuyu nereye açacağımı bilemedim devrelerimi kurdum her

iki devredede bi problem yok ama kodda bi hata olduğunu düşünüyorum

o yüzden buraya yazdım projem ise pot ile servo kontrolü fakat RF..


yani 16f877 pot ile girilen analog sinyali dijitale çeviriyor seri

yolla RF vericiye yoluyor karşı tarafdaki 16f628'in kontrol ettiği RF alıcı ise

veriyi alıp yorumluyor pot'un konumuna göre servoya puls yolluyor(PPM)

servoda o konuma gelmiş oluyor..


herşey iyi güzel ama servo komutları kesik kesik uyguluyor..koddaki

fazla gördüğüm herşeyi attım ama yine aynı, RF iletişimin hızının

düşüklüğünden şüphelendim 4800BPS'a çıkardım bu sefer

kesilmelerin arası azaldı fakat hala var..çıkamadım işin içinden acaba

sorun nerde olabilir?

VERICI;

TRISA=%11111111
TRISB=%00000000
ADCON1=%01000100
ADCON0=%01001101
HAM2 VAR BYTE
HAM VAR BYTE
HAM=0:HAM2=0

HIGH PORTB.2
PAUSE 500
LOW PORTB.2

DONGU:

ADCIN 1,HAM2
ADCIN 0,HAM

SEROUT2 PORTB.1,188,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 PORTB.1,188,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 PORTB.1,188,[REP$AA\5,REP$00\5,REP$FF\5] 
SEROUT2 PORTB.1,188,["A",HAM,HAM2]
   
GOTO DONGU

END


ALICI ;

OPTION_REG.7=0
TRISB=%00000110
HAM VAR BYTE
HAM2 VAR BYTE
VERI VAR BYTE
VERI2 VAR BYTE
HAM=0:HAM2=0:VERI=0:VERI2=0

HIGH PORTB.5
PAUSE 500
LOW PORTB.5

ANADONGU:  
SerIn2 PORTB.1,188,[WAIT ("A"),HAM,HAM2]
VERI2=(((HAM2*156)/10)-(8812/10))/10
PULSOUT PORTB.4,VERI2
VERI=(((HAM*156)/10)-(8812/10))/10 
PULSOUT PORTB.6,VERI    
GOTO ANADONGU

end
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

gokhangokcen

selamın aleyküm  mcguiverali kardeş benim tahminim tam emin olmamakla beraber sorun şu gibi gözüküyor:
alıcı kısmında sürekli döngü içinde seri bilgiyi okuyup işleme koyduğun için servoya pulsler sürekli gidebilir diye tahmin ediyorum.yani servoya sürekli puls gönderiyorsun bu olayı seri kesme yardımıyla yapsan bana sanki daha mantıklı gibi geliyor.bilgi geldiğinde değeri al işleme koy ve tek seferde motara gönderir isen bu sorun sanırsam düzelir.Genede bu tarz devreleri yapan arkadaşlar sana daha iyi yardımcı olurlar.Ben böyle tahmin ettim belki faydası olur...
Saygılar
Gökhan
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

mcguiverali

Dediğinizi değerlendirdim ama yine sonuç aynı...
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

Erhan YILMAZ

Alıntı YapVERI2=(((HAM2*156)/10)-(8812/10))/10
VERI=(((HAM*156)/10)-(8812/10))/10



Dostum verileri elde ettiğin bu iki satır çok fazla sayıda asm komutu kaplar ve gecikmenin sebebide muhtemelen budur. verici kısmındada 3 kere preambl sinyalini göndermek yerine tekbir preambl sinyali göndererek dene birde birde seri veri çıkışını 877nin AUSART modülü ile daha hızlı yaparsın aynı şekilde 16f628inde ccp modülü ile çıkış sinyalini daha hızlı üretirsin.

Gurkan-Demirbas

Merhabalar;

Sorunun tek nedeni programdaki zaman gecikmeleri;

Alıntı Yapverileri elde ettiğin bu iki satır çok fazla sayıda asm komutu kaplar ve gecikmenin sebebide muhtemelen budur
kesinlikle haklı

Bir de PBP'daki SERIN komutu da değişken zaman gecikmelerine neden olur.
1) Problem varsa, teşhis edebilmek için programı sadeleştirmek lazım; yerinde olsam öncelikle tek çıkışa indirgerdim önce
2) Hardware PWM kullansan bunların hiç birini yaşamazsın (gerçi 877'de 1 adet HW PWM pini vardı değil mi - yanlışım varsa düzeltin lütfen).
3) 877'den vazgeçemem dersen, SERIN2 komutunu interrupt rutinine al ve seri hab kesmesi kullan.

GürkaN

mcguiverali

Dediğiniz gibi donanımsal PWM kullanrak gecikmeyi engelledim ama alıcı kısmındaki işlemci 628 oldugundan bunda tek bir CCP çıkışı var benimse sürmem gereken 2 servom var acaba söyle bişey olabilirmi;

2 servonunda data girişlerini 628 'in CCP pinine bağlasam hangi servoyu sürmek istesem onunda beslemesini transistörle sürsem cokmu uydurma bi yöntem olur acaba?   :roll:  veyahut bildiğiniz ufak boyutlu( yaklaşık 628 ebadında) ve iki CCP si olan bi işlemci varmıdır?
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

gallavi

DemirHan=gallavi;

mcguiverali

Alıntı yapılan: "Gurkan-Demirbas"
2) Hardware PWM kullansan bunların hiç birini yaşamazsın
GürkaN

Hardware PWM kullanarak yazdığım şimdiki programda servoya örneğin 60 dereceye gel dediğimde hızlı ve titremeden geliyor fakat 60 derecede dururken titriyor konumunu değiştirmiyor ama çok ufakda olsa titriyor ve ses yapıyor..

HPWM 1,VERI2,50


Bu arada koddaki VERI2 değişkenini sabit yapsam bile ;

Örneğin;

HPWM 1,14,50
gibi..hala titremeye devam ediyor..

Acaba bu titreme nerden kaynaklanabilir ?
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

Gurkan-Demirbas

Alıntı YapÖğrenmeden düşünmek tehlikelidir
Hocam bu söz dehşet verici; tam da beni ifade ediyor şu anda;
Öncelikle yanlış yönlendirdiğim için özür dileklerimi kabul buyur lütfen.

PBP'da HPWM'in minimum ve maksimum sınırları var; 4Mhz kristal için minimum 245 Hz PWM frekansı uygulayabiliyorsun. Halbuki servo kontrolü için 50Hz'lik frekans gerekiyor.
Servo kontrolü için (benim yaptığımın aksine!..) Servoları iyi incelemek lazım

http://rapidshare.com/files/169884907/robotics_servo.pdf.html
http://www.hitecrcd.com/product_file/file/16/Servomanual.pdf
http://www.hitecrcd.com/product_file/file/17/HS322HD.pdf

Ayrıca ETE hocamın servo controlü ile bir projesini (müsadesi olursa) buraya ekleyeyim;
http://rapidshare.com/files/169889964/SERVO_ETE.rar.html

Servo da 50 Hz'lik frekansda 0,9milisec ile 2,1milisec'lık (darbe doluluk süresi!) darbelerle pozisyonunu belirliyoruz; 1,5milisec sıfır noktası oluyor. Örneğin 1,2milisec darbe saat yönünün 45 derece tersine çevirir servoyu. önemli olan darbeleri 50Hz lik frekansda kesintisiz ve de sürekli göndermek (eğer yanılmıyorsam!..).
==>Dolayısı ile senin sorununun çözümü (bence!...) seri haberleşmeyi kesme ile yapmak ve hatta SERIN komutu yerine ISR'yi ASM yazarak genel program akışını hızlandırmak.

Herkesten özür diliyorum.

GürkaN