
Adım motorları adından da anlaşılacağı gibi adım adım hareket eden yani sargılarından birinin enerjilenmesi ile sadece 1 adım hareket eden motorlardır. Bu adımın kaç derece olacağı motorun tasarımına bağlıdır.
Adım motor, elektrik enerjisini dönme hareketine çeviren eletro-mekanik bir cihazdır. Elektrik enerjisi alındığında rotor ve buna bağlı şaft, sabit açısal birimlerde (adım-adım) dönmeye başlar. Adım motorlar, çok yüksek hızlı anahtarlama özelliğine sahip bir sürücüye bağlıdırlar (adım motor sürücüsü). Bu sürücü, bir encoder, PC veya PLC’den giriş darbeleri (pals) alır. Alınan her giriĢ darbesinde, motor bir adım ilerler. Adım motorlar bir turundaki adım sayısı ile anılırlar. Örnek olarak 400 adımlık bir adım motor bir tam dönüşünde (360º) 400 adım yapar. Bu durumda bir adımın açısı 360/400 = 0.9º derecedir. Bu değer, adım motorun hassasiyetinin bir göstergesidir. Bir devirdeki adım sayısı yükseldikçe adım motor hassasiyeti ve dolayısı ile maliyeti artar.
/******************************************************
PIC16F877 İle Bilgisayar İle Step Motor Uygulaması
******************************************/
#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1) // RS232 protokolü ayarları belirtiliyor
int i,hiz=500; // Tam sayı tipinde değişkenler tanımlanıyor
char islem=0; // Karakter tipinde değişken tanımlanıyor
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); // B portu çıkışı başlangıçta sıfırlanıyor
/****************MENÜ**********************************/
printf("\n\r************************************************");
printf("\n\r ADIM MOTOR KONTROLÜ ");
printf("\n\r************************************************");
printf("\n\n");
printf("\n\rIslem Seciniz:\n");
printf("\n\r------------------------------------------------");
printf("\n\r Saga Dondur (R)");
printf("\n\r Sola Dondur (L)");
printf("\n\r Motoru Durdur (R ve L disindaki herhangi bir tus)");
printf("\n\r------------------------------------------------");
printf("\n\rYapmak istediginiz islemi seciniz>");
while(1)
{
islem="null"; // islem değişkeninin içeriğini boş olarak ayarla
islem=getchar(); // Seri port üzerinden gelen karakter islem değişkenine aktarılıyor
putc(islem); // RS232 üzerinden klavye'den girilen karakteri ekrana gönder.
while (islem=='R'||islem=='r') //Sağa döndürme işlemi seçildi ise
{
printf("\n\rMotor Saga Donuyor...");
for (;i<8;i++) // Sıra ile sağa dönme değerlerini gönder
{
output_b(yarim_adim[i]); // Step motor 1 adım ileri
delay_ms(hiz); // Adımlar arasındaki süre
if (i==7) // Eğer i değeri 7 olursa sıfırla
i=0;
if (kbhit()) break; //Seri portan bir veri alındı ise döngüden çık
}
if (kbhit()) break; //Seri portan bir veri alındı ise döngüden çık
}
while (islem=='L'||islem=='l') //Sola döndürme işlemi seçildi ise
{
printf("\n\rMotor Sola Donuyor...");
for (;i>=0;i--) // Sıra ile sola dönme değerlerini gönder
{
if (i==0) // Eğer i değeri 0 ise i değeri 7 olsun
i=7;
output_b(yarim_adim[i]); // Step motor 1 adım geri
delay_ms(hiz); // Adımlar arasındaki süre
if (kbhit()) break; // Seri portan bir veri alındı ise döngüden çık
}
if (kbhit()) break; // Seri portan bir veri alındı ise döngüden çık
}
}
}
Bilgisayar İle Step Motor Kontrol Uygulaması