MG995 servo motor kontrol problemi

Başlatan ledanimasyon, 07 Şubat 2019, 20:27:44

ledanimasyon

Merhaba arkadaşlar;
MG995 360 derece servo motor kontrol etmek istiyorum fakat kontrolde sıkıntı var pozisyonlama yapamıyorum ve saaat yönünün tersine çeviremedim asla .Sıradan mg90 servo motorları çok rahat sürebiliyorum fakat bunun kontrolü yok pals aralını bulamadım her şeyi denedim.Bunula ilgili bir örnek çalışma yapan varsa yardımcı olabilir mi?

ete

Bir sürü ve bir birinin benzeri data sheet buldum bu aletle ilgili. Hemen hepsinde Puls aralığının 20 ms (50 hz) olduğu açıklanmış. Kimisi 120 derece kimi 180 derecelik idi 360 derece hiç görmedim.
Vereceğin puls genişliği pozisyonu ayarlıyor hepsi için 20 ms demişler bu demektirki 360 derecelik olan var ise oda 20 mslik puls genişliği ile çalışıyordur.
Ete

ledanimasyon

Hocam İlginiz için teşekkürler.
Motoru yine pozisyon kontrolü yapamadım şüphelenip içini açtım ve potansiyo metrenin olmadığı gördüm pozisyon kontrolünü bu yüzden yapamıyormuşum.360 derece servo olarak almıştım herkese bilgi olsun.

MB_77

#3
bu mesaj tarafımdan silinmiştir.

Mymale26

HOCAM İYİ AKŞAMLAR HERKESE RAHATSIZ EDIYORUM ETE HOCAM YAZILARINIZI OKUDUM SERVO İLE İLGİLİ AMA NEDENSE BİR TÜRLÜ SERGOYU DİLEDİĞİM GİBİ HAREKET ETTİREMİYORUM BİR PROJEM VAR AMA MALZEMELERIM DE YOLDA GELENE KADAR MOTORLAR ELİMDEKİ MİCRO SG90 SERVO 16F628A İLE BİR DENEME YAPAYIM DEDİM PROTEUSDA ÇALIŞIYORDU DEVREM VS. SORUNUM ŞU İLK ETAPDA


@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _LVP_OFF & _CP_OFF  & _MCLRE_OFF
TRISB=0
PORTB=0

ANA:
HIGH PORTB.0
PAUSEUS 500
LOW PORTB.0
PAUSE 15
GOTO ANA

YAPIYORUM AMA HER NEKADAR DEGERLERLE OYNASAMDA MOTOR HEP SONA DAYANIP FAZLA AKIM ÇEKMEYE BAŞLIYOR BIR TURLU SABITLEYEMIYORUM MOTORU YARDIMLARINIZI BEKLIYORUM

ete

#5
Kullandığın motor 1-2ms lik puls peryoduna sahip bir motor. Aşağıdaki kodu dene bakalım ne fark edecek.
Ancak programın başında koyman gereken komut satırları mevcut.
Birincisi;
CMCON=7  bu komparatörleri iptal edecek her ne kadar PORTA yı ilgilendirsede kullanmadığın fonksiyonu iptal etmelisin.

Diğer önemli ve ilave etmen gereken bir komut ;
DEFINE OSC 4
satırı olup bunu koymaz isen programdakiş pause komutların doğru çalışmayacaktır.

Şimdi bir değişken tanımlayalım adı Zaman olsun.
ZAMAN VAR BYTE
Diğer bir eksik komut ise açılış gecikmesi.
PAUSE 300
Bunu da ANA isimli etiketten öncesine yerleştirmen gerekiyor.
Bunları yaptıktan sonra ANA altındaki komutları aşağıdakiler ile değiştir bakalım.

ZAMAN=100 'bu aslında (100*1*10=1000us lik puls demek oluyor 4mhz osc frekansı nedeni ile
pulsout servo,ZAMAN
for I=0 to 24
pulsout PORTB.0,ZAMAN
pauseus 19000 'toplam peryodun yani HIGH(1000us)+LOW(19000us) süren 20000 us yada 20 ms olmalı
next
GOTO ANA

BU kodu çalıştırdıktan sonra birde aşağıdakini dene bakalım. Yine ANA etiketinden sonraki satırları silip bunları yerleştireceksin.


ZAMAN=180 'bu aslında (180*1*10=1800us lik puls demek oluyor 4mhz osc frekansı nedeni ile
pulsout servo,ZAMAN
for I=0 to 24
pulsout PORTB.0,ZAMAN
pauseus 18200
next
GOTO ANA

Aşağıdaki linkte hangi sürelerde ne şekilde konum alacağı da gösterilmiş.
http://www.fadstoobsessions.com/Picture-Gallery/getLargePhotographs.php?id=1088&wm=no

Ete

Not: BÜYÜK harfler ile mesaj yazma yanlış bir anlamı (kızmak bağırmak) var bilmediğini düşünerek uyarıyorum.

Mymale26

hocam büyük harf yazışım programdan kalma kusura bakmayın öncelikle dediğinizi denedim sonuc elde edemedim birde şunu sormak istiyorum yazdıgım program sizin eklentiden sonra şöyle:

@ __config _XT_OSC  & _WDT_OFF & _LVP_OFF & _CP_OFF    (sigorta)

CMCON=7
DEFINE OSC 4
TRISB=0
PORTB=0
ZAMAN VAR BYTE
I VAR BYTE           (tanımladım hata vermesın dıye forda)

PAUSE 300
ANA:
ZAMAN=180 'bu aslında (180*1*10=1800us lik puls demek oluyor 4mhz osc frekansı nedeni ile
pulsout PORTB.0,ZAMAN    (burayı böyle düzenledim)
for I=0 to 24            (for da neden saydırıyoruz burayı anlamadım hocam)
pulsout PORTB.0,ZAMAN
pauseus 18200
next
GOTO ANA

özetle çalıştıramadım

ete

#7
Çalışmıyor ise motorun bozuktur. İşlemcin bozuktur. Yada programı işlemciye yazamıyorsundur.
Yada güç kaynağın bozuktur. Bunlardan birisi senin sorunun ama hangisi onu sen bulacaksın.
Elimde SG90 var ve bu kodlar ile çalışıyor.
Sorunu kendinde aramalısın benden bu kadar.

Bir servo motor 50 Hzlik (toplam peryot 20 ms olan) bir frekans ile çalışır. Yanlış anlaşılmasın frekans derken puls verme frekansından bahsediyorum. Kısaca her 20 ms de bir motorun almasını istediğin konuma ait HIGH pulsını motora sürekli olarak vermelisin. İşte bu sürekliliği sağlamak için bir döngü kurduk. Tek puls vererek motor belki çalışır belkide çalışmaz.
Dikkat edersen döngü içinde 1800 us yani 1,8ms lik bir High puls'i veriyoruz ardından peryodu 20 ms ye ye tamamlamak için 18,2 ms lik bir LOW sinyali uyguluyoruz. Böylece 18,2+1,8=20ms lik toplam peryodu tamamlamış oluyoruz.
Motora 1ms lik bir High palsi ve adından 19 mslik bir low sinyali verdiğin zaman sol sıfır noktasına konum alması gerekir. Aynı motora 1,5ms lik bir High palsi ve 18,5ms lik bir low sinyali verdiğin zaman orta konuma gelmesi gerekiyor.
Bunları yapmıyor ise yukarıda sıraladığım sebeplerden brinden dolyaı olmuyordur arayıp bulman gerekir.

Ete

Powered by EzPortal