Step motor pulse ile sürmek

Başlatan A0px, 29 Eylül 2016, 11:35:06

A0px

Merhaba Arkadaşlar;

Ben bir step motorunu büyük açılarla değilde moturun en küçük açısında döndürmek istiyorum.

Yani 1 pulse 1 derece dersek örnek olarak.
360 pulse de tam tur dönmesini istiyorum.

Motor sinyal geldiginde devreye girecek girlen pulae kadar döenecek sonra durup tekrar sinyal geldiginde tekrar dönecek.

Tabi münkünse  pulse ayarını dısarıdan arrtıralnilir olursa tadından yenmez.

Ben ileride geliştirerek ekran da gerekli ayarların ve bilgilerin gösterilmesinide yapıçagım ama ilk etapda dedigim gibi sadece programa yazılan pulse kadar döüp sinyal gelince tekrar ayni işlemi yapmadı yeterli

Şimdiden sağolun arkadaşlar


burç tankal

Step motorun hangi açılarla döneceği, motorun step açısı ve kullandığınız yazılım, donanımla ilgilidir.  Örneğin adım açısı 15 derece olan bir motoru tam adım ile sürdüğünüzde her bir adımda 15 derece, yarım adımla sürdüğünüzde her bir adımda 7.5 derece, mikro adımla sürdüğünüzde ise her bir adımda çok daha küçük dereceler ile sürebilirsiniz. Önemli olan ihtiyacınızı belirleyip ona göre motor seçimîni yapıp yazılımınızı tasarlamanız gerekmektedir

skara1214

Herkes ölür ama herkes gerçekten yaşamaz

A0px

Alıntı yapılan: burç tankal - 29 Eylül 2016, 13:21:56
Step motorun hangi açılarla döneceği, motorun step açısı ve kullandığınız yazılım, donanımla ilgilidir.  Örneğin adım açısı 15 derece olan bir motoru tam adım ile sürdüğünüzde her bir adımda 15 derece, yarım adımla sürdüğünüzde her bir adımda 7.5 derece, mikro adımla sürdüğünüzde ise her bir adımda çok daha küçük dereceler ile sürebilirsiniz. Önemli olan ihtiyacınızı belirleyip ona göre motor seçimîni yapıp yazılımınızı tasarlamanız gerekmektedir



Aslinda dereceyle verdigim ornek htalı oldu sanırım kafa karıştırıyor
Benim ihtiyacim olan 1kere sinyal geldigin ayrladıgım adım sayısı kadar adım atması 10 adım dediysem 10 adım atıp tekrar sınyal gelmesını beklemesi



burç tankal

#4
Bahsettiğiniz sinyali bir mikro denetleyiciye girerek, sinyal geldikten sonra motor sürücüsüne veya motora istediğiniz kadar pals gönderebilirsiniz. örneğin sinyal geldikten sonra step sürücüye 10 adet pals göndermek için:

if(sinyal)
{
     for(i=0;i<10;i++)
     {
     motor=1;
     delay_ms(1);
     motor=0;
     delay_ms(10)
     }
}

A0px

Alıntı yapılan: burç tankal - 30 Eylül 2016, 02:59:49
Bahsettiğiniz sinyali bir mikro denetleyiciye girerek, sinyal geldikten sonra motor sürücüsüne veya motora istediğiniz kadar pals gönderebilirsiniz. örneğin sinyal geldikten sonra step sürücüye 10 adet pals göndermek için:

if(sinyal)
{
     for(i=0;i<10;i++)
     {
     motor=1;
     delay_ms(1);
     motor=0;
     delay_ms(10)
     }
}



kodlar için sagol ama o kadar denememe rağmen senin for döngünü benim kodlarla birleştiremedim.

Kodlarım şöyle;

/******************************************************
      PIC16F877 ile Step Motor Uygulaması (ULN2003A İle)
*******************************************************/

#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

// Giriş ve çıkış pinlerine isim atanıyor
#define buton_ileri pin_a0


int i=0,hiz=10;

const int yarim_adim[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09}; // Step motor yarım adım dönüş adımları

/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   output_b(0x00);

   while(1) // Sonsuz döngü
   {

      if (input(buton_ileri)) // İLERİ Butonuna basıldı ise
      {
         output_b(yarim_adim);  // Step motor 1 adım ileri
         while(input(buton_ileri));// Basılan tuş bırakılana kadar bekle
         delay_ms(hiz);            // Adımlar arası bekleme süresi

         if (i==7)                 // i değişkeni 7 olunca i değeri -1 olsun
            i=-1;
         i++;                      // i değişkenini 1 arttır

      }

   }
}




Bunları nasıl birleştirebilirim

skara1214

şu -1 olsun mantığı gereksiz olmuş sanki
if ile i++ satırını yer değiştirirsen
i yide 0 atarsan olur. bu şekilde i yi signed int tanımlaman gerekli
Herkes ölür ama herkes gerçekten yaşamaz

A0px

Bir yerde hata yapıyorumda bir türlü bulamadım rica etsem bi arkadaş su kodları birleştrirebilirmi

burç tankal

#8
Öncelikle 
output_b(yarim_adim);

ifadesinde portb'ye yarim_adim dizininin hangi elemanını gönderdiğinizi belirtmemişsiniz. Bu yüzden:
output_b(yarim_adim[i]);

olarak değiştirirsek her bir adımda motora uygun bilgi gönderilecektir.
for döngüsüne gelirsek, ilk olarak for için kullanacağımız s değişkeni
int s=0;

olarak tanımladıktan sonra:
while(1) // Sonsuz döngü
{
      if (input(buton_ileri))      // İLERİ Butonuna basıldı ise
      {
              for(s=0;s<10;s++)
              {
               output_b(yarim_adim[i]);  // Step motor 1 adım ileri
               delay_ms(hiz);            // Adımlar arası bekleme süresi
               i++;                        // i değişkenini 1 arttır
                     if (i==7){i=0;}   // i değişkeni 7 olunca i değeri 0 olsun                        
              }      
      while(input(buton_ileri));// Basılan tuş bırakılana kadar bekle                       
      }
}


A0px

Burç tankal kod için çok sağol.
Yanlız ben s yi 20 yapsam motor 21 22 tur dönüyor gerçi çok önemli değil.
Ama s değişkenini her seferinde pic yazdirmak zor oluyor bu değişkeni dişari alip 2 buyonla arttırıp azaltabilirmiyiz bide ekranda kaç olduğu nu görürsek süper olur .

Bu kodlarin üstüne bunlari eklemeniz münkünmüdür

Sağolun Arkadaşlar

burç tankal

Ama şimdi ne nereye bağlı, ekran dediğiniz nedir, bunları bilmeden ne yazayım ki şimdi. Lcd, glcd, tft, artık ne bağlayacaksanız devrenizi kurun, butonları takıp tanımlayın.en azından koda "hello world" kısmını ekleyin. Ondan sonra ilaveyi düzeltmeyi yaparız.