Bu projede RS232 Seri Haberleşme Portu kullanılarak bilgisayar ile pic
16f877A mikrodenetleyicisinin haberleştirilmesi sağlanmıştır.
Devre Şeması:
Böylece programda
belirlemiş olduğumuz bilgisayar tuşları ile pic’e komutlar göndererek motoru
kontrol etmiş olmaktayız. Programı görsel olarak çalıştırabilmek için
Hyperterminal programına ihtiyacınız vardır. Bu programda boud hızı 9600, veri
biti ise 8 bit olacak şekilde ayarlanmalıdır. Hyperterminal programı bilgisayarınızda
mevcut değilse internetten indirebilirsiniz.
Not: Dosyada iki farklı program
vardır. Birinde, diğerinden farklı olarak rda kesmesi kullanılmıştır.
PIC C KODU #1
#include "D:\Projeler\Bilgisayarla Step Motor
Kontrolü\step.h"
///////////////Bu program Mustafa AKBAS tarafindan
yapilmistir.
char islem=0;
int hiz=20;
int a=20;
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
printf("\n\r
**********Step Motor Kontrolu**********");
printf("\n\r
islem seciniz:\n");
printf("\n\r
Sola Dondurur (W):\n");
printf("\n\r
Sola Donerken Hizlandirir (S):\n");
printf("\n\r
Sola Donerken Yavaslatir (X):\n");
printf("\n\r
Saga Dondurur (E):\n");
printf("\n\r
Saga Donerken Hizlandirir (D):\n");
printf("\n\r
Saga Donerken Yavaslatir (C):\n");
printf("\n\r
islemi seciniz---->");
while(TRUE)
{
islem="null";
islem=getchar();
putc(islem);
while(islem=='W' ||
islem=='w')
{
printf("\n\rMotor Sola Donuyor");
while(TRUE)
{
output_high(pin_b0);
delay_ms(a);
output_low(pin_b0);
output_high(pin_b1);
delay_ms(a);
output_low(pin_b1);
output_high(pin_b2);
delay_ms(a);
output_low(pin_b2);
output_high(pin_b3);
delay_ms(a);
output_low(pin_b3);
if(kbhit()) break;
}
if(kbhit()) break;
}
while(islem=='S' ||
islem=='s')
{
printf("\n\rMotor Hizlaniyor\n");
printf("hiz=%d",a);
a=a-3;
while(TRUE)
{
output_high(pin_b0);
delay_ms(a);
output_low(pin_b0);
output_high(pin_b1);
delay_ms(a);
output_low(pin_b1);
output_high(pin_b2);
delay_ms(a);
output_low(pin_b2);
output_high(pin_b3);
delay_ms(a);
output_low(pin_b3);
if(kbhit()) break;
}
if(kbhit()) break;
}
while(islem=='X'
|| islem=='x')
{
printf("\n\rMotor Yavasliyor\n");
printf("hiz=%d",a);
a=a+3;
while(TRUE)
{
output_high(pin_b0);
delay_ms(a);
output_low(pin_b0);
output_high(pin_b1);
delay_ms(a);
output_low(pin_b1);
output_high(pin_b2);
delay_ms(a);
output_low(pin_b2);
output_high(pin_b3);
delay_ms(a);
output_low(pin_b3);
if(kbhit()) break;
}
if(kbhit()) break;
}
while(islem=='E' ||
islem=='e')
{
printf("\n\rMotor Saga Donuyor\n");
while(TRUE)
{
output_high(pin_b3);
delay_ms(hiz);
output_low(pin_b3);
output_high(pin_b2);
delay_ms(hiz);
output_low(pin_b2);
output_high(pin_b1);
delay_ms(hiz);
output_low(pin_b1);
output_high(pin_b0);
delay_ms(hiz);
output_low(pin_b0);
if(kbhit()) break;
}
if(kbhit()) break;
}
while(islem=='D'
|| islem=='d')
{
printf("\n\rMotor Hizlaniyor\n");
printf("hiz=%d",a);
a=a-3;
while(TRUE)
{
output_high(pin_b3);
delay_ms(a);
output_low(pin_b3);
output_high(pin_b2);
delay_ms(a);
output_low(pin_b2);
output_high(pin_b1);
delay_ms(a);
output_low(pin_b1);
output_high(pin_b0);
delay_ms(a);
output_low(pin_b0);
if(kbhit()) break;
}
if(kbhit()) break;
}
while(islem=='C'
|| islem=='c')
{
printf("\n\rMotor Yavasliyor\n");
printf("hiz=%d",a);
a=a+3;
while(TRUE)
{
output_high(pin_b3);
delay_ms(a);
output_low(pin_b3);
output_high(pin_b2);
delay_ms(a);
output_low(pin_b2);
output_high(pin_b1);
delay_ms(a);
output_low(pin_b1);
output_high(pin_b0);
delay_ms(a);
output_low(pin_b0);
if(kbhit()) break;
}
if(kbhit()) break;
}
}
}
PIC C KODU #2
/*
---------------------------------------------------------------
---------------- -----
----------------BİLGİSAYAR KONTROLLÜ STEP MOTOR
UYGULAMASI-----
---------------- -----
---------------------------------------------------------------
*/
#include <16f877.h>
#fuses
XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N,
stop=1)
char islem=0;
int16 hiz=500;
int x,y,z;
#int_rda
void rda_kesmesi()
{
islem=getchar();
if (islem=='L')
{
x=1;
puts
("MOTOR SOLA DÖNÜYOR");
}
if (islem=='R')
{
x=2;
puts
("MOTOR SAĞA DÖNÜYOR");
}
if (islem=='D')
{
x=3;
puts
("MOTOR DURDURULDU");
}
if (islem=='H')
{
hiz=hiz-100;
if
(hiz<150)
{
hiz=200; //
müsade edilen en yüksek hız değeri
puts
("MAX. HIZ");
}
else
{
puts ("HIZ
ARTTIRILDI");
}
}
if (islem=='Y')
{
hiz=hiz+200;
if
(hiz>2000)
{
hiz=2000; //
müsade edilen en düşük hız değeri
puts
("MİN. HIZ");
}
else
{
puts ("HIZ
AZALTILDI");
}
}
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(int_rda);
enable_interrupts(global);
set_tris_b(0x00);
output_b(0x00);
x=0;
y=0;
z=0;
tara:
{
if (x==1)
goto sol;
if (x==2)
goto sag;
if (x==3)
goto dur;
goto tara;
}
/**************** Sola donus*********************/
sol:
{
output_high(pin_b0);
delay_ms(hiz);
output_low(pin_b0);
output_high(pin_b1);
delay_ms(hiz);
output_low(pin_b1);
output_high(pin_b2);
delay_ms(hiz);
output_low(pin_b2);
output_high(pin_b3);
delay_ms(hiz);
output_low(pin_b3);
goto tara;
}
/**************** Saga donus*********************/
sag:
{
output_high(pin_b3);
delay_ms(hiz);
output_low(pin_b3);
output_high(pin_b2);
delay_ms(hiz);
output_low(pin_b2);
output_high(pin_b1);
delay_ms(hiz);
output_low(pin_b1);
output_high(pin_b0);
delay_ms(hiz);
output_low(pin_b0);
goto tara;
}
dur:
output_b(0x00);
x=0;
hiz=500;
goto tara;
}
Hiç yorum yok:
Yorum Gönder