Yazılımsal PWM Üretmek

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

                  
       Site Tasarımı : Onur YAVUZ
2005-2006 ©
www.electrobotic.org