Servo kontrolü

Başlatan oguztkn, 31 Temmuz 2012, 19:48:00

oguztkn

Arkadaşlar elimde bir adet hitec marka hs-775mg model servo var.Ben bunu potansiyometre ile döndürmek istiyorum.Ama potansiyometrenin orta konumdayken servo da ortada potu sola çevirdiğimde servoda sola potu sağa çevirdiğimde servo da sağa dönmesini istiyorum.Servonun konum sürelerini internette buldum ekte de var.Ben denedim pulsout komutunu kullanarak yapmayı ama beceremedim.Yardım ederseniz sevinirim....



Şimdiden Teşekkürler....

ete

Bu is icin bir pot kullanacaksin. Pot degeri 0-1023 arasinda degisecek hesapla bunu 600-2400 degeri olarak hesaplayacaksin.
Pot dan hesapladigin degeri 10 a bolup pulsout olarak vereceksin   
Bu iside her 20 ms de bir yapacaksin.

Bu acıklamadan sonra yapamadığın kısmı yeniden sor.
Ete

oguztkn

Ekteki programı yazdım eksiklerim olabilir ama benim yazdığım tam sol tam sağ ve orta konumları için ben bunu aradaki değerleride  nasıl ekleyebilirim yani potla eş zamanlı dönecek ve titremeden dönmesi gerekiyor...


Şimdiden Teşekkürler.....

ete

#3
Programın BASLA etiketinden sonrasını aşağıdaki şekilde değiştir.

Basla:
    adcin 0,Ham
    SURE=(HAM+1)*/45+60
    PULSOUT SERVO,SURE
   
    PAUSEus 19500
    goto basla

geri tarafını sil.
Yazdıklarımla verdiğimi karşılaştır bakalım.
Ne demişim "Pot degeri 0-1023 arasinda degisecek hesapla bunu 600-2400 degeri olarak hesaplayacaksin. "
Max değer 2400 olduğuna göre bundan 600 çıkartırsak süre değişimi 1800 us olacaktır. O halde 1800/1024= 1,7578 sabit çarpan değerimiz olacaktır. Küsurattan kurtarmak için 256 ile çarpıyoruz ve 450 sayısını elde ediyoruz.
Pulsout komutu 10 ile çarpılmış değeri işlediği için bu değeri 450 değilde 45 olarak alıyoruz. Buna min değer olan 600 değerinide 60 olarak ekliyoruz.
Böylece formül SUre=(ham+1)*/45+60 olarak elde edilmiş oluyor.
Puls ların her 20 ms de bir verilmesi gerektiği için ve yazdığımız komutlarına bri gecikmesi olduğunu düşünerek 19,5 ms lik bir gecikme veriyoruz. Hepsi bu kadar.

Bu arada programa açılış gecikmesi vermemişsin. Değişken tanımlamadan sonra 300 ms lik bir gecikme ekle programa. Bu gereklidir.

Ete


oguztkn

Alıntı yapılan: ete - 01 Ağustos 2012, 08:25:49
Programın BASLA etiketinden sonrasını aşağıdaki şekilde değiştir.

Basla:
    adcin 0,Ham
    SURE=(HAM+1)*/45+60
    PULSOUT SERVO,SURE
   
    PAUSEus 19500
    goto basla

geri tarafını sil.
Yazdıklarımla verdiğimi karşılaştır bakalım.
Ne demişim "Pot degeri 0-1023 arasinda degisecek hesapla bunu 600-2400 degeri olarak hesaplayacaksin. "
Max değer 2400 olduğuna göre bundan 600 çıkartırsak süre değişimi 1800 us olacaktır. O halde 1800/1024= 1,7578 sabit çarpan değerimiz olacaktır. Küsurattan kurtarmak için 256 ile çarpıyoruz ve 450 sayısını elde ediyoruz.
Pulsout komutu 10 ile çarpılmış değeri işlediği için bu değeri 450 değilde 45 olarak alıyoruz. Buna min değer olan 600 değerinide 60 olarak ekliyoruz.
Böylece formül SUre=(ham+1)*/45+60 olarak elde edilmiş oluyor.
Puls ların her 20 ms de bir verilmesi gerektiği için ve yazdığımız komutlarına bri gecikmesi olduğunu düşünerek 19,5 ms lik bir gecikme veriyoruz. Hepsi bu kadar.

Bu arada programa açılış gecikmesi vermemişsin. Değişken tanımlamadan sonra 300 ms lik bir gecikme ekle programa. Bu gereklidir.

Ete



Hocam dediklerinizi uyguladım servo istediğim gibi dönüyor ama hassas değil 2.2k lık bir pot ile deniyorum potu çok az çevirsem bilde servo turu tamamlıyor yani ya 90 ya 0 yada -90 şeklinde çalışıyor bunu nasıl hassaslaştırabilirim....


Şimdiden Tşekkürler....

ete

Daha hassas bir yöntem olabilirmi onu düşünmek gerek. Motorun yeterince hassas değilse ne ytapılabilirki.
Bu verdiğim yöntem yeterince hassas olması gerekir.
Bir diğer yöntemde her 20 ms de bir kesme oluşturup pot değerinden elde edilen süre kadar kesmede motor çıkışını high d tutmak olabilir.
Program normal konumda pot okur yalnızca. Kesme oluşunca servo ucunu pot dan hesaplanan süre kadar (600-2400 us) HIGH da tutar ve servo ucunu low yapıp kesmeden çıkar. Buda yeterince hassas olması gerekir.

İstersen dene bakalım.
Ete

oguztkn

Hocam peki asıl amacım benim bunu bir model arabada kullanacağım bu potla servoyu rf modüllerle birbirinden ayırabilirmiyim sağlıklı bir sistem olur mu yada sağlıklı çalışırmı yani pot verici kartında servo alıcı kartında olacak....

ete

Saglıklı calışır bu sistem. Ancak azda olsa arada bir algılama gecikmesi olabilir n
Ete

toprak

 Ben de Pic ile servo motor kontrol etme üzerine çalışıyorum.
Öncelikle bu konu ile ilgili yapılanlara baktım biraz.
Yapacağım devre uzaktan kontrollü olacak.
Piyasada gördüğüm kadarıyla motor sürücü entegreleri de mevcut. Bunun gibi servo motor kontrol entegreleri de var mı acaba?
Pic ile böyle bir entegreyi yönlendirmek daha kolay olabilir.

Bu konuda öneriniz var mı?
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

ete

Bilgimin dışında bir soru. Bildiğim entegre yok maalesef.
Ete

toprak

   Pic16F628A nin PWM donanimini kullanarak servo sürebilirmiyiz.
   PWM hesaplarına baktım. PR2 değeri 8bitlik bir deger alıyormuş.
   Ben 20msn (20000 mıkrosaniye)  PWM sinyali için PR2 değerini nasıl hesaplayacağım hocam.
   TMR2 bolücü değerini 1/16 alsam dahi 1249 çıkıyor. Bu da PR2 için fazla bir değer. Osilatör 4MHz.
   PWM konusunda yeniyim.
   Bunun başka bir hesabı var mı?
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

Mucit23

bu konuyu bende düşündüm ama olmuyor sanırım. İlk önce PWM frekansının 50Hz olması lazım. Ama 4Mhz osc için min 244hz çıkış frekansı alıyoruz.  Belki pic daha düşük frekanslarda çalışılabilir.

Ama biryerde duymuştum. 400Hz ile çalışan esc ler varmış onlar olursa olabilir.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Hpwm sinyalinden bahsediuor isek 4 mhz de elde edilebilecek en düşük frekans 244 hz olmaktadır ki buda servo için uygun değil maalesef.
Verilen açıklamalara bakılırsa iki servo pulsı arasındaki süre zaten 20 ms olması gerekiyor. Puls süreside 2 ms olduğunu düşünürsek peryodu 22 ms olan bir sinyal gerekir. Bunuda ancak yazılımla kesme kullanarak elde etmek mümkün olabilir.
Ete

samet

Arkadaşlar merhaba.Şöyle bir projem var.Hassasiyeti pot ile ayarlanan bir devre var.Bu potları ben servo yada rc servo ile kontrol etmeyi düşünüyorum.Yani potları başka bir pot ile arada servo motor ile hareket ettirmek istiyorum.İlk başta saçma görünebilir fakat şöyle açıklayabilirim;Bu devre tamamen bitince bir gitar amfisinde ton ayarlamada kullanılacak.Yani ben potlarla örneğin 5 pot var bunlarla istediğm  değerlere getirip sonra bu değerleri adc yardımıyla okuyup (burada bir displaydeki sayılardan bahsediyorum)ilgili sayının karşılığı olan eeprom adresine kayıt edeceğim.Örneğin sayı sıfır ise eepromdaki adresi sıfır gibi.Bu arada tek displayde iki buton ile yukarı aşağı sayma yapıyoruz.Kayıt işlemi bittiklten sonrada çağırdığım kayıt servolara konumlarını bildirecek ve istediğim konumları bir kez kayıt ederek bir daha ayar yapmama gerek kalmayacak.

Şimdi bu işlemler için başka fikri olan var mı?

Servo ile pot sürmek yerine dijital potu düşündüm fakat devrede mutlaka analog pot kullanmalıyım.

Teşekkürler.

ete

Enteresan düşünce ama sanki bir terslik var gibi. Yanlış anlamadı isem;
Bir analog pot'a bir servo bağlayıp potları çevireceksin. Peki servoyu nasıl kontrol edeceksin. Ya bir buton yada ayrı bir pot kullanman gerekecek. Burası açık kalmış.
Sonra servonun çevirdiği pot'ları ADC girişlerine bağlayıp değerlerini okuyacaksın. Okunan değeri 8 bitlik sayıya çevirip (yada direk 8 bit olarak okuyup) okunan değeri hem adres hem o adrese kayıt edilecek bilgi olarak kullanacaksın. Ne işine yarayacak anlamadım. Zira bilgi kullanmak için üretilir. Hangi adrese kayıt ettiğini bilmezsen ne işine yarayacak?
Diğer taraftan tek bir analog pot kullanıp onu ADC girişine bağlayıp servolar olmadan da aynı şeyi yapabilirsin öyle değilmi. servo sistemine nasıl hükmedeceğini bilmediğim için tek farkı direk pot kullanırsan onları elinle çevirmen gerekeceğidir.

İşin detayını bilmeden proje anlamsız geliyor bana.

Ete

Powered by EzPortal