step motor kademeli hız ayarı sorunu..

dokuzgen

Üye
Katılım
12 Ocak 2012
Mesajlar
2
Puanları
1
kolay gelsin arkadaşlar son çare olarak konu açmak zorunda kaldım kusuruma bakmayın,
16F877A ile step motor kontrol etmeye çalışıyorum mikroc kullanıyorum sorunum şu;
adım aralarına delay ms ile değişken tanımladım, for döngüsü içinde sonsuz adım attığı için delay ms değişkenini döngü içinde değiştiremiyorum. Döngüye girmeden önce değişkeni değiştirmek istiyorum switch-case yapısı denedim fakat başarılı olamadım. hız artır butonunu birden fazla kullanarak 4 kademe artırmam gerekiyor delay ms değişkenini:



#define artihiz button(&PORTA,3,300,1)


void main() {


int hiz, sayac;


adcon1=7;


TRISB=0;
TRISA.f0=1; // sag
TRISA.f1=1; // dur
TRISA.f2=1; // sol
TRISA.f3=1; // hızlan
TRISA.f4=1; // yavasla
TRISA.f5=1; // tam tur


portb=0;


dur: portB=0;
sayac=0;


while(1) {
hiz=1000;


if(artihiz==1) {
sayac=sayac+1;
}



switch (sayac) {
case 1:
hiz=hiz-200;


break;
case 2:
hiz=hiz-200;


break;


}
if(porta.f0==1) for(;; ){


{ adim1:
portB.f0=1;
if(porta.f1==1) goto dur;
Vdelay_ms(hiz);

portB.f0=0;
portB.f1=1;
if(porta.f1==1) goto dur;


Vdelay_ms(hiz);
portb.f1=0;
portb.f2=1;
if(porta.f1==1) goto dur;

Vdelay_ms(hiz);
portb.f2=0;
portb.f3=1;
if(porta.f1==1) goto dur;

Vdelay_ms(hiz);
portb.f3=0;


}
}
}
} umarım anlatabilmişimdir derdimi,,
 
Acaba alt program mantığı ile çözüm oluşturulabilirmi? Mesela 4 ayrı adım sırası oluşturulur hepsinini zaman gecikmeleri farklı olur.Sonrada butona her basıldığında swich-case döngüsü ile 4 ayrı hız seçeneği motora iletilebilir.Aslında mantıklı geliyor ama denemek lazım.Birde kusura bakmayında step moturu döndürmek için bir sayısal bilgi tablosu oluşturmuyormusunuz?? ben o veri dizisini göremedim.Yanlış anlamışta olabilirim.
 
c dilinden anlamam fakat delay suresini kısa tutup call ile dallanma yap ve ordan delayı cagır ara satırada butona basıldımı komutunu ekle.
for x=1 to 1000

...
..
step surucu kısım
call bekle

next x

bekle:
call delay
hız artırma kontrolu
call delay
return

delay
..
..
return

baska bir alternatif ise delay komutunun icine girerek programa hükmektir.ben genelde öyle yapıyorum.yazdıgınız bütün dillerin sonu asm de bitiyor.derleme yapılınca asm komutlarını üretiyor(pbp da) programı adım adım calıstırıp delayda dallandıgı asm icerisinede herhangibir komut ekleyebilirsiniz.
benim tavsiyem azda olsa asm yi ögrenmeniz.yüksek diller cok kısa süreli isleri yapmakta pek uygun olmuyorlar.
 
Programlama dilin ne olursa olsun !

For döngüsü bir süreçtir ve bu süreç bitmeden alt süreçlere geçilmez. Yani for döngüsü içinde değişkeni ancak döngünün başlama koşullarında belirtebilirsin veya döngünün içerisinda başka fonksiyonları çağırman gerekir.
 

Forum istatistikleri

Konular
128,133
Mesajlar
915,315
Kullanıcılar
449,852
Son üye
ddknght

Yeni konular

Geri
Üst