16f877 ve Step Motor Sorunu

Başlatan hacettepeli_muhendis, 05 Şubat 2005, 12:11:24

hacettepeli_muhendis

aşağıdaki kodu yazdım fakat step motor azcık dönüyor sonra takılıyor adım kaçırıyor yani

#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)


#byte port_b = 6

#define rpm 5
#define delay 300 / rpm

BYTE const POSITIONS[4] = {0b1000,
                           0b0100,
                           0b0010,
                           0b0001};


int8 current_state=0;
int8 next_state=1;
int8 i,j;


void positive_step(int8 pulse_no)
{
  for(i=0;i<pulse_no;i++)
  {
   next_state=(current_state+1)%4;
   port_b=POSITIONS[next_state];
   current_state=next_state;
   delay_ms(delay);
  }
}

void negative_step(int8 pulse_no)
{
   for(i=0;i<pulse_no;i++)
   {
   next_state=(current_state+3)%4;
   port_b=POSITIONS[next_state];
   current_state=next_state;
   delay_ms(delay);
   }
}



void main()
{
   set_tris_b(0b00000000);
   for(j=0;j<5;j++){
      positive_step(200);
   }  

}


hesabıma göree 5 kere dönmesi lazım bu kodla step motorun adım kaçırmasın diye rpm i de 5 olarak ayarladım ama yinede dönmüyor

step motoru sürerken kullandığım devre şu




transistorlerin baseleri PIC e 470ohm la bağlılar

P=14.5W
voltaj olarak V^2/R=14.5  V~=8.5V  buluyorum datasheetinde 6V yazıyordu 5V ile sürmeyeçalıştım voltaj mı düşük geliyor eğer düşükse elimde +12 +5 +3.3v lar var bunla daha 8.5v a daha nasıl yaklaşabilirim elimdeki güç kaynağı PC nin power supply ı elimle tektek transistorlerin base ine 5 volt verirsem motor dönüyor 5v la beslenmiş durumdaykende
Dünyada 10 çeşit insan vardır binary saymayı bilenler ve bilmeyenler

eelektro

hocam bence delaylar ile ilgili, bir problemin olabilir adım atlamasının yani kaçırmasının bence başka bir nedeni olmaz.
benimde yaptıgım programda zamanlarla oynadıgımda sorun kalmamıştı .
╠ ▒▒ ▒ ▒ ▒ ▒▒▒ ▒ ▒ ▒ ▒ ▒▒▒▒ ▒ ▒  ▒▒ ╠

Erol YILMAZ

Genelde step suruculerde gerilimden ziyade akim on plana alinir.
5 Voltluk bir step surucuyu suren devre 40 Volt beslemeye sahip olabiliyor. Yani step surucude ilk once akim...

hacettepeli_muhendis

peki aynı bağlantılar ve aynı kodla çalışan bi step motor daha vardı ancak 3.4v luktu 3.3v la sürüyordum akşam çalışan motor sabah çalışmamaya başladı bunun sebebi ne olabilir bu elimdeki sürücü ve motorun rated değerleriyle 150rpm e kadar dönebiliyordu canavar gibi şimdi 5rpm de bile dönmüyor hayret ettim step motor bozulmuş olabilir mi? onuda elimle tektek toprağa çektiğimde dönüyor
Dünyada 10 çeşit insan vardır binary saymayı bilenler ve bilmeyenler

hacettepeli_muhendis

programı elimde buluna bi 16f84a ya da yazdım onda denedim aynı konfigürasyonla onda çalışıyor demekki 877 de benim tahmin etmediğim bişeyler oluyor mesela 16f84a ile 16f877 nin portb leri denk değil mi çıkış akımları çıkış devresi vs? ikisi içinde aynı osilatörü kullanmıştım farklı kapasitörler mi gerekiyor acaba 877 için?  :?

kullandığım kapasitörler 15pF ve 10pF 16f84a için aynısını 877 de de kullanmıştım
Dünyada 10 çeşit insan vardır binary saymayı bilenler ve bilmeyenler

mmengi

Acaba fuse ile ilgili bire sorun olabilirmi 16F877.h dosyasının içinde neler var acaba. Kondansatör ile ilgili bir sıkıntı olabileceğini sanmıyorum eğer aynı kondansatör ve kristal 16F84A da çalışıyorsa? Hata ararken insan bulamayınca üzülüyor ve böyle spesifik durumlarmı vardır acaba diye düşünmeye başlıyor.  ;)

hacettepeli_muhendis

fuseleri bende düşündüm ama bilmiyorum ne olabilir çalışan şey çalışmayınca adamın moralide bozuluyor hevesi kaçıyor malesef bide başka portları deniyim C yi D yi filan
Dünyada 10 çeşit insan vardır binary saymayı bilenler ve bilmeyenler

ahmetu

16f84 de çalışıp 18F877 de çalışmıyorsa belki bundandır;


port_b_pullups(TRUE);



Sets the port B input pullups.  TRUE will activate, and a FALSE will deactivate.

arslan74

Merhaba,
İki PIC'in de Pullup direncleri vardır. Ama pullup direncleri yanlız giriş durumlarında aktif olunabilir. PortB cıkış durumunda ise aktif olsa bile calışmaz o yüzden ondan kaynaklanmaz. 16F84 ile 16F877'in PortB arasında yanlız bir fark var oda RB3 portudur. Eğer Low Voltage programing F877de enable yapıldıysa RB3 portu kullanılamaz. Bu port kullanmak için Low Voltage programing'i disable yapmak gerekiyor.

Bunu kontrol edin.

Calışmalarınızda Başarılar,

Hasan ARSLAN

hacettepeli_muhendis

programa bakarsanız NOLVP yazmışım fuse kısmına bu disable etmiyor mu Low Voltage Programming i ?
Dünyada 10 çeşit insan vardır binary saymayı bilenler ve bilmeyenler

arslan74

Bu sigorta ayar komutun LVP özeliğini devredışı edib etmediğini bilemiyorum ama anlamak için PIC Programlayıcından bu programın hex'ine bakabilirsin orada sigorta durumlarını gösterir.

codelinker

step motoru 5rpmde dondurmek icin gerekli wave pattern rahatca gozlenebilir.yani oncelikle transistorlere uygun on-off sinyalleri geliyormu onu kontrol edil?sayet geliyorsa bu sefer transistorler iletime geciyormu onu kontrol edin buyuk ihtimalle transistorlerde problem olabilir.
selametle

hacettepeli_muhendis

sorunu motoru süren portları d portuna taşıyarak çözdüm tşkler
Dünyada 10 çeşit insan vardır binary saymayı bilenler ve bilmeyenler