Step Motor ccs c yazılımı

noiserr

Üye
Katılım
7 Eyl 2012
Mesajlar
25
Puanları
1
step motor devresinde butonlara basıldığında ileri geri ve dur kontrolünü sağlayan ccs c dilinde bir programa ihtiyacım var.step motor kontrolünde nelere dikkat etmeliyim?
 
iki dizi tanımlarsın.
örneğin;
ileri={0001,0010,0100,1000}
geri={1000,0100,0010,0001}

ardından main fonksiyonu içerisinde butonları kontrol ettirirsin. hangi butona basılmışsa (if(input_a()==0x01) ise ileri butonu gibi) ona göre bir döngü hazırlarsın. yeni bir butona basılmadığı sürece o döngü, ilgili dizinin o anki elemanını port'a verir. döngü içerisinde de değerler verildikçe dur butonunu kontrol ettirirsin. basit bir döngü ile halledilebilir.

port çıkışlarını da uln2003'e verirsen ve step motoru da uln2003'e bağlarsan işlem tamamdır.

step motor kontrolünde döngüye gecikmeler koymalısın. bu gecikmelerle hız kontrolü sağlanır. gecikme koymazsan değerler çok hızlı bir şekilde port'a verileceği için motor dönmez. delay_ms(5) gibi en azından bu civarlarda gecikme koyabilirsin. motorun döndüğünü gördükten sonra istediğin gecikmeleri deneyerek hız ayarlayabilirsin.

tabi yukarıda verdiğim değerler tam adım sürmek için gerekli değerler. yarım adım sürmek istiyorsan ayrıca port'a vermen gereken değerlere bakmalısın. bir de microstepping olayı var. onda da motoru daha hassas, küçük açılarda döndürme işlemi yapılıyor. o da ayrı bir konu tabi.
 
teşekkür ederim çok faydalı oldu,tam adım sürmek istiyorum. fakat bikaç şey daha öğrenmek istiyorum, butonlardan sonra mesela motor ileri için 1000,0100..değerlerini döngüde nasıl kullanacağım çıkışlara vermek için?
 
bir for döngüsü kullanabilirsin.
for(i=0; i<=3; i++){
output_b(ileri);
delay_ms(10);
}

bu komut 10 ms arayla çıkışa ileride dizinindeki değerleri sırasıyla verir ve motor ileri yönde döner. tam adımda 4 değer verilir ki bu değerler bir önceki mesajımda anlattığım gibi tanımlanabilir.
 
#define ileri={0001,0010,0100,1000}
#define geri={1000,0100,0010,0001}




void main()
{


setup_adc......




{if (input(pin_a0))


for(i=0; i<=3; i++)
{output_c(ileri);
delay_ms(10);}}

doğrumu anlamışım, ileri adım için böyle mi olacak?
 
#define ileri={0001,0010,0100,1000}
#define geri={1000,0100,0010,0001}




void main()
{


setup_adc......




{if (input(pin_a0))


for(i=0; i<=3; i++)
{output_c(ileri);
delay_ms(10);}}

doğrumu anlamışım, ileri adım için böyle mi olacak?


bu tarz olacak bunu derleyiciye yazıp derleyin, deneyin. hata verecek yerler olursa oraları düzeltirsiniz ancak genel anlamıyla yapı bu. define ile tanımlamak yerine

int ileri={0x01,0x02,0x04,0x08};

gibi tanımlamak ta olabilir. burada 0001, 0010, 0100, 1000 rakamlarının 16'lık karşılığını yazdım tanımlarken.
 
#define buton_ileri pin_a0
#define buton_geri pin_a1
#define buton_dur pin_a2

int i=0,hiz=200;
int ileri[]={0x01,0x02,0x04,0x08};
int geri[]={0x08,0x04,0x02,0x01};
int dur[]={0x00,0x00,0x00,0x00};

output_c(0x00);
while(1)

{if (input(buton_ileri))
{ for (i=0; i<=3; i++)
output_c(ileri);
delay_ms(hiz); }
}

{if (input(buton_geri))
{ for (i=0; i<=3; i++)
output_c(geri);
delay_ms(hiz);}}

{if (input(buton_dur))
{ for (i=0; i<=3; i++)
output_c(dur);
delay_ms(hiz);}}
}
fakat motor dönmüyor
 
Kod:
#define buton_ileri pin_a0
#define buton_geri pin_a1
#define buton_dur pin_a2

int i=0,hiz=200;
int ileri[]={0x01,0x02,0x04,0x08};
int geri[]={0x08,0x04,0x02,0x01};
int dur[]={0x00,0x00,0x00,0x00};

void main()
{
    set_tris_a(0x07);
    set_tris_b(0x00);

    output_a(0x00);
    output_b(0x00);

    while(1)
    {
        if (input(buton_ileri))
        {
            for (i=0; i<=3; i++)
            {
                output_b(ileri[i]);
                delay_ms(hiz);
            }
        }

        if (input(buton_geri))
        {
            for (i=0; i<=3; i++)
            {
                output_b(geri[i]);
                delay_ms(hiz);
            }
        }

        if (input(buton_dur))
        {
            for (i=0; i<=3; i++)
            {
                output_b(dur[i]);
                delay_ms(hiz);
            }
        }
    }
}

bu komutu bu şekilde derleyip PIC'e yukleyin ve B portuna ULN2003 bağlayın. ULN2003'ün çıkışlarına da step motoru bağlayın. Proteus'ta simülasyon yapabilirsiniz.
 

Yeni mesajlar

Forum istatistikleri

Konular
128,217
Mesajlar
915,879
Kullanıcılar
449,998
Son üye
Muharrem_Arslan

Yeni konular

Geri
Üst