Atmel 8051 ULN2003 ile Robot kol için Step Motor

Projeyi Hazırlayan : Özgür AYKURT Yazının Kaynak ve keil kod isis ares pcb simülasyon Dosyaları Emeği geçen kişilere Teşekkürler
Bu uygulamada robot kolu için kulanmış olduğum 3 step motorun tasarımı, çalışması ve sürülmesi hakkında bilgi sahibi olmaktır. Step motorları çalışması sağlamak için, yarım adım modunda ve sargı uçlarına uygulanan {1, 3, 2, 6, 4, 12, 8, 9} kod dizisi kullanılmıştır. Step motorların sürmesini sağlayan ULN2003A entegreleri kullanılmıştır. Robot kolunun hareket yönünü belirlemek için butonlar kullanılmıştır. Bir sonraki sayfada yazmış olduğum programda robot kolundaki step motorları (eklemleri) aynı anda hareket ettirmektedir.
Step Motorların Uyartım Şekilleri
1.Tek faz uyartım (single coil)
Motorların sargılarının sadece birisinin uyarıldığı uyartım şeklidir. Uyartım (1, 2, 4, 8 ) ve tersi (8, 4, 2, 1) şeklinde olmaktadır.
2.İki fazlı uyartım (double coil)
Motor sargılarının ikisinin sıra ile aynı anda uyartıldığı uyartım şeklidir. Uyartım (9, 3, 6, 12) ve tersi (12, 6, 3, 9) şeklinde olmaktadır.
3.Yarım adım uyartım (half step)
Bu uyartımda tek faz ve ikili faz art arda uygulanır. Uyartım (1, 3, 2, 6, 4, 12, 8, 9) ve tersi (9, 8, 12, 4, 6, 2, 3, 1) şeklinde olmaktadır.
Devre Şeması
Baskı Devresi

Program Kaynak Kodları
void main(void){ int git[9]={1,3,2,6,4,12,8,9};
int cev=0,cev1=0,cev2=0,pas=0,pas1=0,pas2=0;
char alinan;
trisc=0xff;
trisb=0;
trisd=0;
Usart_Init(2400);
while(1){
if (Usart_Data_Ready() == 1) {
alinan = Usart_Read();
Usart_Write(alinan); }
////////////m1
if ((!PORTC.F0)||(alinan=='1')) {pas++;if (pas>=100){pas=0;cev++; if(cev>=8)cev=0;}}
if ((!PORTC.F1)||(alinan=='2')) {pas++;if (pas>=100){pas=0;cev--; if(cev<0)cev=7;}}
//////////////m2
if ((!PORTC.F2)||(alinan=='3')) {pas1++;if (pas1>=5){pas1=0;cev1++;if(cev1>=8)cev1=0;}}
if ((!PORTC.F3)||(alinan=='4')) {pas1++;if (pas1>=5){pas1=0;cev1--;if(cev1<0)cev1=7;}}
//////////////m3
if ((!PORTC.F4)||(alinan=='5')) {pas2++;if (pas2>=5){pa2=0;cev2++;if(cev2>=8)cev2=0;}}
if ((!PORTC.F5)||(alinan=='6')) {pas2++;if (pas2>=5){pas2=0;cev2--;if(cev2<0)cev2=7;}}
// alinan='?';
portb=git[cev]|(git[cev1]<<4);
portd=git[cev2];
delay_ms(1) ;
}
}
Program Hakkında
git dizi değişkenini kod int git olarak tanımladık. Çünkü bu değişken dizisini programın içerisinde değiştirmiyorum. O yüzden bu değişkeni ROM’a yazıyoruz. Bu dizi değişkenin içinde sırasıyla adım motorunu çevirmek için olan veriler var. Bu verileri herhangi bir Port üzerindeki adım motora gönderirsek o motor yarım adım ilerler. Sürekli şekilde bu dizi değerlerini gönderirsek o kadar hızlı döner. Bu değerleri ters gönderirse motor ters döner.
Malzemeler
ATMEL 8051
STEP MOTOR X 3
ULN2003A X 3
8.2 K
10 nF
12 Mhz Kristal
1K X 8
Buton X 6
7805
