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.

isis devre şeması

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;
    }
  }
}