pic ile step motor 90 derece ileri geri kontrol yardım?

Başlatan mr_knox, 07 Haziran 2012, 12:09:45

mr_knox

İyi çalışmalar Sayın forum arkadaşlarım
Elimde resimdekinin aynısı bir step motor var. pic kontrollü olarak 90 derece ileri geri hareket ettirmek istiyorum.
Daha önce hiç step motor sürme tecrübem olmadığımdan dolayı sanırım bişeyleri yanlış yapıyorum. motor sürmeyi forumlarda bulduğum ne pic+l298 devresi ne de pic+l297+l298 ( resimdeki devreye pic ile pals vererek ) denemelerimde hiçbir kararlılık yok :(
sorunlar çok bazen motor dönecekmişte çok zorlanıyormuş gibi ses çıkarıyor , bazen 1 adım ileri 1 adım geri gibi yapmaya çalışıyor vb. gibi
Bu konuda daha önceden tecrübeli ve bilgi sahibi arkadaşların fikir, öneri ve yardımlarını bekliyorum.
İlginiz için şimdiden teşşekkürlerimi sunarım.





kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

mr_knox

Arkadaşlar kimsenin bu tip bi uygulamada tecrübesi, fikri veya dökümanı yok mu?
kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

ete

Step motorlar genelde adım basına kat ettikleri acı ile anılırlar. En çok kullanılan adım 1,8 derece/adimdir.
Böyle bir motorun tam bir turu 200 adimdir (360/1,8). Bu durumda senin elindeki sürücü ile motoru 90 derece döndürmek için motora 50 pula vermen yeterli olacaktır. Motor özellikleri iyi okunmuyor. Adım basına yürüdüğü acısalar yol belli değil onu bulursan dediğim sekilde istediğini yapabilirsin. Motoru eski konumuna almak için yon değiştirip aynı miktar polis yeniden motora vermen gerekiyor.

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

Erdem

Motor sadece titreme yapıyorsa kabloların sırasında bir hata olabilir.

Örneğin 5 kablolu adım motorun kablolarından bir tanesi vMotor dediğimiz ortak kablodur. Önemli olan bu kablonun hangisi olduğunu bulmaktır. Bunun için avometrenizi OHM ölçere getirin ve kabloların uçlarını ikişer ikişer ölçün. Tüm uçlar ile arasındaki direnç aynı olan kablo vMotor kablosudur.

Diğer 4 kablo ise motor kömürlerine gitmektedir. Bu dört kablonun da bir sırası vardır. Bu sırayı da deneme yanılma yöntemiyle bulabilirsiniz. Eğer bu kabloları yanlış sırada bağlarsanız motor dönmek yerine sadece titreme yapacaktır.

mr_knox

mesela bahsettiğim uygulamayı l297d kullanmadan direkt pic ten l298 e pals vererek sürmeye çalışıyorum
Fakat daha simülasyon evresindeyken bile sorun yaşıyorum.
step motor 2-3 derece içinde saçmalıyor.
Kurduğum devre ve yazdığım kodlar aşşağıdaki gibidir yanlışım nedir?



#include <16f84a.h>     

#fuses XT
#use delay (clock=4000000) 
#use fast_io(b)
int a;
int b;
void main ( )
{
    set_tris_b(0x00);
    output_b(0x00);
  
 while(1)
 {
   for(a=0;a<=13;a++) // 13x4=52 adım atıyor 52x1,8=93,6 derece sağa hareket edecek
      { output_b(0b00001001);
       delay_ms(25);  
       output_b(0b00000011);
       delay_ms(25);
       output_b(0b00000110);
       delay_ms(25);
       output_b(0b00001100);
       delay_ms(25);
      }
      delay_ms(1000); // 1 saniye bekleyecek
      
   for(b=0;b<=13;b++)  // 13x4=52 adım atıyor 52x1,8=93,6 derece sola hareket edecek
      { output_b(0b00001100);
       delay_ms(25);  
       output_b(0b00000110);
       delay_ms(25);
       output_b(0b00000011);
       delay_ms(25);
       output_b(0b00001001);
       delay_ms(25);
      }
 }
}
kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

ete

Bana kalırsa sen L297 ve L298 in nasıl sürüldüğünü yada kullanıldığını bilmiyorsun.

Bu iki entegreyi çift olarak kullandığın zaman elindeki girişler,
- Half/Full yani yarım adım ve tam adım çalıştırma (LOW=Tam adım)
- CLOCK yani puls girişin buraya düzgün bir clock sinyali girilecektir. Frekansı çok düşük olmamalıdır. Yoksa motor inler durur.
- CW / CCW yani YÖN girişi  saat yönü=HIGH tersi LOW. Motorun dönüş yönünü belirler

L297 yi yalnız başına step motor sürmek için kullanılması pek tavsiye edilmez.  Diyelimki kullandın.
BU durumda Motoru bir tarafa döndürmek için IN1=1  , IN2=0, IN3=1 ve IN4=L diğer tarafa döndürmek için  IN1=0, IN2=1 , IN3=0, IN4=1
şeklinde komut vermek gerekiyor. Bunlardan birer tanesini PWM sinyal olarak girmek gerekir sanırım. Böylece motorda devir ayarı da yapabilirsin. Ama doğru olanı entegreleri çift olarak kıllanmaktır.

Bu kullanım şekli ile yazdığın programa bakarsak uyum sağlamadığını göreceksin.
Sen sanki transistörle motoru sürüyormuş gibi komut vermişsin.

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

mr_knox

ETE hocam resimde devre şemasında görüldüğü gibi tek olarak l297d i değil l298 i tek kullandım.
Konunun başında da belirttiğim gibi amacımı sağlamak için internette bulduğum devre şemalarını uyarlamaya çalışıyorum.
Forumlarda 2 farklı devre şeması buldum biri pic ten sizinde belirtmiş olduğunuz sinyalleri ve clock sinyalini verip pic + l297d +l298 üçlüsüyle motoru sürmek ki bu devre şeması konu başı mesajımda mevcut diğeri ise son gönderdiğim devre şemasındaki gibi l298 e picten palsler vererek sürmek.Fakat 2 farklı denemede de benzer problemler yaşıyorum.Bu amacımı gerçekleştirebilmek için  devre şeması ve yazılım algoritması önerileriniz nedir? Bu arada ilgi alakanız için teşşekkürlerimi sunarım.
kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

ete

Tavsiyem 297+298 çiftini birlikte kullanman yönünde. HPWM çıkışı olan bir pic kullanıp CCP1 (HPWM) çıkışını direk sürücünün CLK girişine girmen gerekiyor. Yada açısal döndürmeler yapacak isen clk sayısını kontrol etmen gerekeceği için kendin bir HIGH +Delay ve bir LOW + Delay vererek clk palsini elde edip onu sürücünün CLK  girişine girmen gerekiyor.
Bunu yapmadan önce sürücünün YÖN girişine bir logic değer verip (LOW yada HIGH) adım seçiminde TAM adım olarak seçmende yarar var elbette.
Böylece motor sağlıklı olarak dönecektir.

Yapman gereken bütün bundan ibaret. CLK sinyalinin frekansını değiştirdikçe motor hızıda paralel olarak değişecektir. Min 200 hz maksimum 5000 Hz dolayında bir frekans vermen uygun olacaktır.

Step motorlar yüksek hızlarda kalkış yapamazlar çünki puls kaçırırlar. Doğru olanı düşük hızda kaldırıp sonra hızı artırmaktır. Bunuda uygulamaya çalışırsan yararlı olacaktır.

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

mr_knox

Sizin önermiş olduğunuz gibi pic+l297+l298 kullanarak bir devre oluşturmaya ve yazılımı oluşturmaya çalıştım.
Fakat yine sorun var simülasyonda örneğin sürekli sağa dönmesi gerekirken belli değerler arası ileri-geri gidip geliyor bazen kaydırıyor başka başka değerler arası ileri geri yapıyor sürekli sola dönmesi gerekirken ise aynı saçmalamayı ters yöne yapıyor.
Bu durumda hatalarım ve yanlışlarım nelerdir acaba?


#include <16f628a.h>     
#fuses XT
#use delay (clock=4000000)
#use fast_io(b)
int a;
int b;
void main ( )
{
    set_tris_b(0x00);
    output_b(0x00);
   
    //RB0--> reset -- step motor beklemede
    //RB1-->half/full--sürekli 1 yani full
    //RB2--> cw/ccw -- yön ilk döngüde 0 ikinci döngüde 1 ileri-geri
    //RB3--> clock -- 50ms de high-low
 
while(1)
{
   for(a=0;a<=200;a++)
      { output_b(0b00001011);
        delay_ms(50); 
        output_b(0b00000011);
        delay_ms(50);
      }
      output_b(0b00000000);
      delay_ms(2000); // 1 saniye bekleyecek
     
   for(b=0;b<=200;b++)
      { output_b(0b00001110);
        delay_ms(50); 
        output_b(0b00000110);
        delay_ms(50);
      }
}
}
kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

ete

Bana kalırsa reset girişini yanlış kullanıyorsun. Reset girişini direk +5V ta bağla ENBL girişini gerekirse pic ile kontrol et.
Birinci kısımda verdiğin kodlar doğru orada mtoro bir tam tur atacak ama ikinci kısımda reset girşini LOW da tutmuşsun bu onun çalışmasını engeleyecek diye düşünüyorum.

Zira muhtemelen ikinci kısımda motoru ters yönde döndürmek istedin ama ne yazıkki yön girişini hiç değiştirmedin.
Birinci ile aynı bilgileri vereceksin ama yalnızca YÖN girşini ikinci kısımda HIGH yapman gerekiyor. Hepsi bu.
Birde döngü adedini biraz fazla tutki motor an azından bir kaç tur atsın. mesela 800 e kadar kur döngüyü.

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

mr_knox

Bu devrede malesef ki halaa istediğim noktaya gelemedim.
clock sinyali veriyorum aşşağınaki link teki dosyada görebileceğiniz gibi 50ms veriyorum simülasyonda takıla takıla 90 dereceyi buluyor sonra geri dönüyor ama bi süre sonra tabiri caiz ise sapıtıyor saçmalamaya başlıyor.Clock için bekleme süresini 50ms nin altına çektiğimde hepten saçmalıyor.Bu devreyi ve yazılımı gerçek devre üzerinde uyguladığımda o rda da döneyimmi dönmeyeyim diye küçük adımlara arası tır tır saçmalıyor.Acaba step motor kablolarınımı yanlış bağladım diyerek çeşitli kombinasyonlarda deniyorum malesef sonuç hep hüsran:(
Yaşadığım sıkıntıyı daha iyi anlatabilmek açısında isis ve ccs c kodlarını paylaşıyorum.
şuana kadar ki ve bundan sonraki ilgi alakalarını çok teşşekkür eder yardımlarınızı rica ederim.

http://s2.dosya.tc/server15/3n504G/step_pic_l297d_l298.rar.html

saygılar...

iyi çalışmalar dilerim.
kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

ete

Dosya.tc.server isimli site Truva atı barındırmaktadır. Bu siteyi kullanmayınız lütfen.

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

mr_knox

kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

ete

Ben dropbox kullanıyorum. Sİze 2 GB ücretsiz alan veriyorlar. Tamamen size ait. İsteğiniz dosyayı yerleştirip link veriyorsunuz. Kullanımı kolay ve sorunsuz. Tavsiye ederim.

www.dropbox.com

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

mr_knox

Alıntı yapılan: ete - 14 Haziran 2012, 09:19:09
Ben dropbox kullanıyorum. Sİze 2 GB ücretsiz alan veriyorlar. Tamamen size ait. İsteğiniz dosyayı yerleştirip link veriyorsunuz. Kullanımı kolay ve sorunsuz. Tavsiye ederim.

www.dropbox.com

ete
Bahsi geçen dosyayı tavsiye edilen siteden paylaşıyorum.

https://www.dropbox.com/s/dz1y36zp6blc4hp/step_pic%2Bl297d%2Bl298.rar
kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )