PWM ( Palse With Modulation ) bildiğiniz gibi darbe modulasyonu ile kontrol anlamına geliyor.Basit olarak bir robotta 2 motoru darbe modülasyonu ile kontrol etmek istiyorsunuz bu durumda 2 pwm çıkışı olan bir mikrodenetleyiciye ihtiyacınız olacak.Fakat burada anlatacağım yöntemde hiç PWM çıkışına sahip olmayan ( örn PIC16F84 ) bir denetleyici ile 2 motoru darbe modülasyonu yani PWM ile kontrol edebiliyorsunuz.Şimdi bu işlemin nasıl gerçekleştiğini inceleyelim..
PWM ile sabit frekanslı sinyalde doluluk oranı yani high seviye ile low seviyenin oranı değiştirilerek hız kontrolü yapılır.
Basicte PIC16F628 için yazılmış
PWM PORTB.3,128,100
Kodun açılımı
main:
high portb.3
pause 130
low portb.3
pause 130
goto main
yazılımına denktir.Buradaki değerler hesaplanmış değerler değildir örnek için belirtilmiştir.Mantık olarak bakıldığında portb nin 3. portu 130 msn +5v 130 msn 0 volt yapılarak kare dalga sinyal oluşturulur.Şimdi örnek bir çizgi izleyen programında robotun kontrolünün nasıl yapıldığını belirten programı inceleyelim.
@ DEVICE pic16F628
@ DEVICE pic16F628, MCLR_OFF
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT
CMCON=7
VRCON=0
INPUT PORTB.0 ‘ girişleri tanımladık
INPUT PORTB.1
INPUT PORTB.2
OUTPUT PORTB.3 ‘ çıkışları tanımladık
OUTPUT PORTB.4
Symbol A=PORTB.0 ‘ giriş ve çıkışları isimlendirdik.
Symbol B=PORTB.1
Symbol C=PORTB.2
SYMBOL M1=PORTB.3
SYMBOL M2=PORTB.4
BASLA:
If A=0 And B =0 And C=0 Then ‘ tüm girişler 0 ise PVM3 etiketine git
GOSUB PVM3
EndIf
If a=1 Then ‘ 1. giriş 1 ise PVM1 etiketine git
GOSUB PVM1
EndIf
If B=1 Then ‘ 2. giriş 1 ise PVM2 etiketine git
GOSUB PVM3
EndIf
If C=1 Then ‘ 3 . giriş 1 ise PVM3 etiketine git
GOSUB PVM2
EndIf
GOTO BASLA
END
PVM1:
high M1
LOW M2
pauseus 150
low M1
LOW M2
pauseus 150
GOTO BASLA
PVM2:
high M2
LOW M1
pauseus 150
low M1
LOW M2
pauseus 150
GOTO BASLA
PVM3:
high M1
HIGH M2
pause 10
low M1
LOW M2
pause 10
GOTO BASLA
Burada Belirtilen PVM1 , PVM2 ve PVM3 etiketleri PWM komutuna göre bakılacak olursa
PWM PORTB.3 , XXX, XXX değerine eşittir.Burada bu komut döngü kurarak oluşturulmuştur.
Programın mantığı ise 1. giriş olarak nitelendirilen sol sensör algıladığında sağ motor yavaşça dönerek robotu sola döndürür.2. giriş olarak nitelendirilen orta sensör algıladığında 2 motor hızlı bir şekilde dönmeye devam eder.3. giriş olarak nitelendirilen sağ sensör algıladığında sol motorun hızı düşerek yavaşça dönüp robotu sağa döndürür.Projelerde anlatılan roleonun yazılımıda bu yazılım ile aynıdır.Sadece orada hazır pwm komutu kullanılmıştır burada ise yazılımsal pwm kullanılmıştır yani kare dalga sinyali döngüler ile üretilmiştir.Bu örnek uygulama PWM kontrollü çizgi izleyen robot olarak kullanılabilir.Devre şemasıda aşağıda verilmiştir. 
Burada PORTB.0 , PORTB.1 , PORTB.2 ye bağlı olan butonlar sol sensör orta sensör ve sağ sensör olarak varsayılmıştır.PORTB.3 ve PORTB.4 e bağlı transistörler ise motoru sürmek için kullanılmıştır.
0nur İlyas YAVUZ
14/12/08 |