Step motoru tek fazda çalıştırma yardım

Başlatan bbs2006, 22 Nisan 2008, 23:48:41

bbs2006

Merhaba
Ben step motoru tek fazda çalıştırmak istiyorum. programını yazdım.Step motor geri yönde çalışıyor ileri yönde çalışırken motor dönmüyor.kilitleniyor.4. ve 5. basışta kilitleniyor.ne yapabilirim.

/******************************************************
     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_a1
#define buton_geri  pin_a2

int i=0,hiz=10;

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

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

void main ( )
{
 
  output_b(0x00);

  while(true) // Sonsuz döngü
  {
output_b(0x00);
     if (input(buton_ileri)) // İLERİ Butonuna basıldı ise
     {
       
        output_b(tek_faz);  // 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==4)                  // i değişkeni 7 olunca i değeri -1 olsun
            i=0;
        i++;                      // i değişkenini 1 arttır

     }

     if (input(buton_geri)) // GERİ Butonuna basıldı ise
     {
        if (i==0)                 // i değişkeni 0 ise i değeri 8 olsun
           i=4;
        i--;                      // i değişkenini 1 azalt
        output_b(tek_faz); // Step motora 1 adım geri
        while(input(buton_geri)); // Basılan tuş bırakılana kadar bekle
        delay_ms(hiz);            // Adımlar arası bekleme süresi
     }
  }
}

Gurkan-Demirbas

if (input(buton_ileri)) // İLERİ Butonuna basıldı ise 
{ 

output_b(tek_faz[i]); // 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==4) // i değişkeni 7 olunca i değeri -1 olsun 
i=0; 
i++; // i değişkenini 1 arttır 

}


yerine ==> TEK DEĞİŞİKLİK i=-1

if (input(buton_ileri)) // İLERİ Butonuna basıldı ise 
{ 

output_b(tek_faz[i]); // 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==4) // i değişkeni 7 olunca i değeri -1 olsun 
i=-1; 
i++; // i değişkenini 1 arttır 

}


şeklinde değiştirip deneyebilirmisin?
Senin programda if şartı doğrulandıktan sonra i=0 yapılıyor ama hemen ardından i++ ile i=1 oluyor
Yani motora tek_faz[0] değeri (ki bu da 0x01 hex) gönderilmiyor, atlanıyor.
Aynı hata geriye dönüş için yapılmamış ve if şartı sağlandığıunda i=4 yapılıp hemen ardından i-- ile i=3'e eşitlenmiş.
kilitlenme nasıl bir şey? titreme mi yapıyor dönmediği zaman; kilitlenmeyi anlayamadım

iyi çalışmalar

Gürkan

sb_03

Teşekkür ederim.
Belli bir plas gönderdikten sonra motor dönmüyor.Geri butonuna basılsa dahi motor dönmüyor
Allahım dünyama da bereket ahiretimede bereketler ver ama dünyasını ahiretine tercih edenlerden eyleme