Elektronik / Mikrodenetleyici Projeleri/

MicroC ile step motor sürücü örneği (pic16f628a)

STEP MOTOR SÜRÜCÜ:

Bu çalışmada derste sunmak üzere eğitim materyali olarak hazırladığım 5 uçlu unipolar step motor sürücüyü paylaşıyorum. Proje MicroC ile hazırlanmıştır.

Adım sıraları bir dizi ile tabloda belirlenip menüde belirlenen zamanlara göre portbye aktarıldı.

Çıkış katı 220ohm direnç üzerinden BD241(3A) NPN transistörlerle güçlendirilip motor sürüldü.

microc-step-motor-surucu-pic16f628a

STEP (ADIM) MOTORLAR

TANIM

Bir motora elektrik palsleri uygulayınca mekaniki bir hareket (dönme) yapabiliyorsa bu tip motorlara denir.

Dijital bilgileri mekanik harekete çeviren TRANSDUSER olarak görev yapan motorlara denir.

CALIŞMA PRENSİBİ

Step motora giriş pals uygulandığı zaman belli bir miktar döner ve durur. Bu dönme miktarı motorun yapısına göre belli bir açı ile sınırlandırılmıştır. Step motorda rotorun dönmesi girişe uygulanan pals adedine bağlı olarak değişir. Girişe tek bir pals verildiğinde rotor tek bir adım hareket eder ve durur daha fazla pals uygulayınca pals adedi kadar adım hareket eder.

ÇEŞİTLERİ

1. Sabit mıknatıslı s.m (PM)
2. Değişken relüktanslı s.m (VR)
3. hybrid s.m
4. Hidrolik s.m
5. Lineer s.m

KULLANILDIĞI YERLER

Bant sürücüler
Printer
Teyp sürücüler
Dikiş mak..
Taksimetre
Uzaktan kumanda göstergelerinde
Kameralarda

Uygulama dosyaları: MicroC ile step motor sürücü örneği (pic16f628a)

Dosya indirme LINK listesi (TXT formatında) link-9808.zip şifre-pass: 320volt.com

Uygulamanın çalışma görüntüsü;

Microc yazılım içeriği;


/*
Projenim Adı: 5 uçlu unipolar stepmotor kontrolü
Proje tarihi : Mart 2010
Mikro işlemci:16f628a
Osilatör     : 8Mhz İNTRC on I/O
Kullanılan yapı:Dizi ile tablo oluşturulup hers aşamada
tablodan bilgilaer farklı zaman aralıkları ile okunup portBye gönderilmiştir.
Menü seçimi için INT0 kesmeesi kullanılmıştır böylece program döngüden çıkar çıkmaz
yeni menüya dallanma yapar
Projeyi yapan:AYTAÇ DÜRGEN
KOCAELİ UNİVERSİTESİ


*/


short int sayac=0;
void interrupt()
{ sayac = (sayac+1)%7;
  INTCON.INTF=0;
}
void ayarlar()
{
OPTION_REG = 0x00;
INTCON.GIE  = 1;
INTCON.INTE  = 1;
TRISB=0x01;
PORTB=0;
TRISA=0;
PORTA=0;
}


signed int a,b;
unsigned char tablo[]={2,4,8,16 };
void main()
{
ayarlar();

 /********************************************/
for(;;){
PORTB=0;
/*********************************************/
 if(sayac==0)
{
for(a=0;a<4;a++)
{
PORTB=tablo[a];
Delay_ms(4); // 4ms bekle

PORTA=sayac;
}
}
/********************************************/
if(sayac==1)
{
for(a=0;a<4;a++)
{
PORTB=tablo[a];
Delay_ms(80); // 80ms bekle

PORTA=sayac;
}
}
 /********************************************/
if(sayac==2)
{

for(a=3;a>=0;a--)
{
PORTA=sayac;
PORTB=tablo[a];
Delay_ms(80); // 80ms bekle


}
}
 /********************************************/
if(sayac==3)
{

for(a=0;a<4;a++)
{
PORTA=sayac;
PORTB=tablo[a];
Delay_ms(20); // 20ms bekle


}
}
 /********************************************/
if(sayac==4)
{

for(a=3;a>=0;a--)
{
PORTA=sayac;
PORTB=tablo[a];
Delay_ms(20); // 20ms bekle


}
}
 /********************************************/
if(sayac==5)
{
for(b=0;b<100;b++)
{
for(a=0;a<4;a++)
{
PORTA=sayac;
PORTB=tablo[a];
Delay_ms(5); // 5ms bekle

}
}
for(b=0;b<100;b++)
{
for(a=3;a>=0;a--)
{
PORTA=sayac;
PORTB=tablo[a];
Delay_ms(5); // 5s bekle

}
}
}
/**********************/
 if(sayac==6) PORTB=0;

}
 /********************************************/


}


  1. Doğukan 2010/03/20
  2. mkilickap 2010/03/21
  3. Harun 2010/04/08
  4. mehmet 2010/04/08
  5. aytac dürgen 2010/04/13
  6. mehmet 2010/04/14
  7. aytac dürgen 2010/04/14
  8. mehmet 2010/04/14
  9. emrecanbjk 2012/05/09

Yorum

Soru: