AT89C51 ile Koşu Bandı Projesi

Projeyi Hazırlayan : Mehmet ŞENTÜRK Yazının kaynak ve Keil kod ve isis dosyaları Emeği geçen kişilere Teşekkürler
Devrenin Çalışması:
Projemizin adı koşu bandıdır ve adından da anlaşılacağı üzere motor kontrolü gerektirmektedir.Ben bu projeyi tasarlarken DC motor kullanmayı uygun gördüm. Çünkü DC motorlar kullanım ve besleme kolaylığı açısından ön plana çıkmaktadırlar.
DC motoru sürmek için tümleşik bir devre olan L293D entegresini kullandım.bu entegrenin içerisinde transistorlerden oluşan kuvvetlendiriciler bulunmaktadır.Entegre ile ilgili ayrıntılı bilgi pdf de mevcuttur.
Devrenin çalışmasına gelirsek;bu uygulamada PWM yöntemiyle DC motorun hız kontrolünün yapılması amaçlanmaktadır.PWM işaretini elde edebilmek için Zamanlayıcı\Sayıcı 0 kullanılmıştır ve zamanlayıcı ,1 ms de bir taşacak şekilde ayarlanmıştır.
Zamanlayıcının 20 defa taşması (20ms),PWM işaretinin bir periyoduna karşılık gelmektedir.devre şemasında görülen “Hız arttır” ve “Hız azalt” butonları ile 20 mslik darbe işareti içerisindeki lojik “1” ve lojik “0” süreleri değiştirilerek, motora uygulanan ortalama gerilimin değiştirilmesiyle motorun hız kontrolü sağlanmaktadır.
Program
#include <89c51rd2.H>
#define MOTOR P3
#define hiz_arttir P1_1
#define hiz_azalt P1_3
void main (void)
{
unsigned int periyot=1000; // PWM darbesinin 20'de 1'i
unsigned int hiz;
int i; // darbe süresini ayarlamak için
// P3=0x00;
P1=0xFF; // butonlar giriş için ayarlandi
TMOD=0x01; // T0 16 bit (mod1) zamanlayıcı
TL0=-periyot%256; // pals'in düşük değeri
TH0=-periyot/256; // pals'in yüksek değeri
while(1)
{
TR0=1; // T0'ın saymaya başlaması
while(TF0) // Z/S'nin taşma bayrağını kontrol et
{
TR0=0; // Timeri durdur
TF0=0; // Taşma bayrağını temizle
i++;
if(i<hiz) // PWM darbe içerisindeki '1' olma süresi
MOTOR=0;
else // PWM darbe içerisindeki '0' olma süresi
MOTOR=1;
if (i==20) i=0; // PWM darbenin peryodu (1 msn x 20 = 20 msn)
// Timer her çalıştırmada sayacak değere tekrar kurulmalı
TL0=-periyot%256;
TH0=-periyot/256;
}
// 20 msn'lik periyot içerisinde 1 olma süresinin belirlenmesi
if (!hiz_arttir) // hiz_arttir butonuna basıldı mı?
{
while(!hiz_arttir); // hiz_arttir butonu bırakıldı mı?
if (hiz<20) // hiz değişkenin sınırlandırılması
hiz=hiz+1;
}
if (!hiz_azalt) // hiz_azalt butonuna basıldı mı?
{
while(!hiz_azalt); // hiz_azalt butonu bırakıldı mı?
if (hiz>0) // hiz değişkenin sınırlandırılması
hiz=hiz-1;
}
}
}
