Bölüm-8 Capture/Compare/PWM Modülleri | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Capture/Compare/PWM ModülüCCP (Capture/Compare/PWM) modülü, mikrodenetleyicileri klasik dijital sistemlerden ayıran en önemli özelliklerden biridir. Kimi mikrodenetleyicilerde bu modülden bir adet bulunurken bazılarında iki adet bulunur. İki adet CCP modülüne sahip mikrodenetleyicilerde bu modüller CCP1 ve CCP2 olarak adlandırılırlar. Genel olarak birbirleriyle aynı özelliklere sahip olmakla birlikte, iki adet CCP modülüne sahip mikrodenetleyicilerde CCP1 modülü güçlendirilmiş (enhanced) CCP özelliğine sahiptir ve ayırt etmek için ECCP olarak adlandırılır. CCP modülleriyle birlikte kullanılan birtakım kaydediciler vardır. Bu kaydediciler benzer özelliklere sahip olduklarından belge içinde zaman zaman CCPRx ya da CCPx olarak adlandırılacaklardır. Burada, ‘x’ kodu ilgili CCP modülünün numarasına karşılık gelmektedir. Bu başlık altında öncelikle tek bir CCP modülüne sahip olan PIC16F628A için temel özellikler açıklanacak olup, ardından iki adet CCP modülüne sahip PIC16F887 üzerinden daha ayrıntılı bir açıklama uygulama örnekleriyle yapılacaktır. 8-bitlik mikrodenetleyicilerde CCP modülü 16-bitlik yakalama (capture) kaydedicisine, 16-bitlik karşılaştırma (compare) kaydedicisine ve bir PWM master/slave görev çevrimi (duty cycle) kaydedicisine sahiptir. Tablo 8.1’de CCP modülünün farklı modları için kullanılan zamanlayıcılar gösterilmiştir. Tablo 8.1 CCP modülünün modları için kullanılan zamanlayıcılar
CCP modülü ilgili mikrodenetleyicide kaç adetse sayı numarasıyla kodlanır. PIC16F628A’da bir adet olduğundan CCP1, PIC16F887 ve PIC18F4550’de iki adet olduğundan CCP1 ve CCP2 olarak adlandırılırlar. CCP1 modülü her biri 8-bitlik CCPR1L ve CCPR1H kaydedicilerinden oluşan CCPR1 kaydedicisine sahiptir. CCP1CON kaydedicisi CCP1 modülünün nasıl kullanılacağını ayarlar. CCP1CON KAYDEDİCİSİ (ADRES: 17h – PIC16F628A)
bit 7-6 Kullanılmıyor: ‘0’ olarak okunur. Yakalama (Capture) ModuYakalama modunda, CCPR1H:CCPR1L kaydedicileri, RB3/CCP1 pininde bir olay meydana geldiğinde TMR1 kaydedicisinin 16-bitlik değerini yakalar. Diğer bir ifadeyle TMR1 kaydedicisinin o anki değeri CCP1R kaydedicisine yazılır. Olayın ne olduğu şu şekilde ifade edilir:
Hangi olaya göre yakalama işlminin gerçekleşeceği CCP1CON kaydedicisinin CCP1M3:CCP1M0 bitleri ayarlanarak yapılır. Yakalama modu aktfi kılındığında otomatik olarak CCP1IF kesme bayrağı (PIR1 kaydedicisinin 2’inci biti) kurulur. Yakalama eylemi gerçekleştiğinde bu bayrağın yazılım içinde temizlenmesi gerekir. Yeni bir yakalama eylemi gerçekleştiğinde CCP1R kaydedicisinin önceki değeri kaybolur. Dolayısıyla bu işleme dayalı uygulamalar tasarlanırken, yakalama anında CCP1R kaydedicisine yazılan değer program içinde bir başka değişkene aktarılmalıdır. Yakalama modunun kullanımı için şu adımlara dikkat edilmelidir:
Şekil 8.1’de bu modun donanımsal çalışma ilkesi gösterilmiştir. DİKKAT: Yakalama modu değiştirildiğinde, yanlış bir yakalama kesmesi üretilebilir. Yanlış kesmelerden sakınmak için kullanıcı CCP1IE (PIE1<2>) bitini ve CCP1IF(PIR1<2>) bitini temizlemelidir.
Şekil 8.1 Yakalama modunun çalışma diyagramı
Uyku modunda çalışma sırasında, Timer1 modülü işlemci frekansıyla senkronize edilmiş olmasından dolayı TMR1H-TMR1L kaydedicilerinin içeriği sabit kalmaktadır. Bu durumda CCPRxH-CCPRxL kaydedicilerinin de içeriği güncellenmemiş olacaktır. Ancak CCP kesmesinin aktif olması durumunda cihaz uyku modundan çıkar. Diğer bir ifadeyle uyku modunda CCP pini durum değişimi izlemeye devam eder. Kısacası uyku modunda, CCP pini ilave bir harici kesme girişi olarak davranmış olur. CCP modülünün yakalama modunun çalışma ilkesini anlamak için şu şekilde bir senaryo yapabiliriz: Bunun için görsel donanım olarak 2 satır 16 sütun karakter LCD kullanabiliriz. LCD ekranda aynı anda o anki Timer1 kaydedicisinin değerini, CCP1 girişine bağlı bir butona basıldığında da butona basılma anındaki Timer1 kaydedicisinin değerini ve Timer1’in önölçekleme hızına bağlı olarak oluşan Timer1 kesme sayısını gösteren uygulama devresi şekil 8.2’de gösterilmiştir.
Şekil 8.2 Timer1 ile CCP1 yakalama modunun ilişkisini gösteren uygulama
Şekildeki uygulamada mikrodenetleyicinin CCP1 özellikli B3 pinine pull-down bağlantılı bir direnç üzerinden buton bağlanmıştır. Butonun diğer ayağıda 5V besleme bağlanmıştır. MCU’nun dâhili pull-up özelliği kapatılmış olup, CCP1 modülünün girişin yükselen kenarında tepki vermesi amaçlanmıştır. Timer1 modülünün önölçekleme değeri 1:8 olarak ayarlanmış olup TMR1H-TMR1L kaydedicilerinin sayma değeri 8 kat yavaşlatılmıştır. LCD ekranda aynı anda oluşan Timer1 kesme sayısı, Timer1’in o anki değeri ve butona basıldığı andaki Timer1 değeri görülmektedir. Uygulama devresinin mikroC kaynak kodu tablo 8.2’de gösterilmiştir. Tablo 8.2 Timer1 ile yakalama modunun ilişkisini gösteren uygulamanın mikroC kodu
NOT: Program içinde yakalama modu değiştirilmek istendiğinde CCP1CON kaydedicisi sıfırlanmalı (Ör: CCP1CON = 0;) ve ardından yeni değer yüklenmelidir: Karşılaştırma (Compare) ModuKarşılaştırma modunda sürekli olarak CCPR1 kaydedicisinin içeriğiyle TMR1 kaydedicisinin içeriği karşılaştırılır. Eşleşme olduğunda, RB3/CCP1 pini;
Bu durumlar yakalama modunda olduğu gibi, CCP1CON kaydedicisinin CCP1M3:CCP1M0 bitlerinin ayarlanmasıyla elde edilir.
Şekil 8.3 Karşılaştırma modunun çalışma diyagramı
Bu modda RB3 pini çıkış olarak ayarlanmalıdır. CCP1CON kaydedicisinin resetlenmesi ya da yeniden kurulması RB3/CCP1 karşılaştırma tutma (latch) değerinin varsayılan sıfır seviyesine çekilmesine neden olur. Yakalama modunda olduğu gibi, karşılaştırma modunda da Timer1 modülü zamanlayıcı ya da senkron sayıcı modunda çalıştırılmalıdır. Karşılaştırma modunun anlaşılması için şu şekilde bir uygulama senaryosu geliştirilmiştir: Timer1 modülü sayıcı (counter) modunda çalışacak şekilde ayarlanmıştır. Dışarıdan RB6/T1CKI girişine bir saat darbesi üreteci bağlanarak, darbenin her yükselen kenarında TMR1 kaydedicisinin değerinin artması istenmektedir. Darbe üreteci yerine, bir üretim bandından geçen ürünleri saymak için kullanılan kapasitif algılayıcı gibi bir algılayıcı da bağlanabilir. Ardından TMR1 kaydedicisinin değeri, program içinde belli bir değere kurulan CCPR1 kaydedicisinin değerine ulaştığında ışıklı ikaz verecektir. İkaz durumu harici kesme girişine bağlı çift yönlü ve çift kontaklı bir anahtar ile durdurulmaktadır. Anahtar eski konumuna getirildiğinde sayma işlemi tekrar başlamaktadır. Şekil 8.4’te bu uygulamayı gerçekleştirecek prensip devre şeması gösterilmiştir. PROTEUS-ISIS® programında harici darbe üreteci olarak “Generator Mode” araçlarından “PULSE” aracı kullanılmıştır. Frekans olarak 1Hz ayarlanmış ve CCPR1 10 değeriyle yüklenmiştir. TMR1 kaydedicisinin değeri 10 değerine ulaştığında RB3/CCP1 pini lojik-1 olur. Artan Timer1 değerini izlemek için 2x16 LCD ekran kullanılmıştır.
Şekil 8.4 Timer1 ile CCP1 karşılaştırma modunun ilişkisini gösteren uygulama
Tablo 8.3 Timer1 ile karşılaştırma modunun ilişkisini gösteren uygulamanın mikroC kodu
NOT: CCP1 çıkışı tutma (latch) özelliklidir ve resetlenmedikçe ya da yeni değer yüklenmedikçe son durumunu korumaya devam eder. Bu nedenle harici kesme tetiklemesiyle birlikte RB3/CCP1 hattının lojik 0 olması istendiğinden CCP1 modülü sıfırlanmaktadır. Özel olay tetiklemesi gerçekleştiren karşılaştırma modunda (CCP1CON=0b00001011) CCP1, TMR1 kaydedici çiftini resetler. Böylece CCPR1 kaydedicisi, Timer1 için 16-bitlik programlanabilir periyot kaydedicisi olarak kullanılmış olur. PWM ModuMikroC IDE ortamında, seçilen mikrodenetleyicilere özgü olarak kullanılabilen çok sayıda kütüphane olduğu daha önceden belirtilmişti. Bu kütüphanelerden biri de PWM kütüphanesidir. Ancak, Timer2 kaydedicisinin doğru şekilde ayarlanmasıyla kütüphane kullanmadan PWM sinyali üretmek mümkündür. Bunun için Capture/Compare/PWM (CCP) modülünün kontrol edilmesi gerekmektedir. Pek çok PIC mikrodenetleyicisinde bu modülden bir ya da iki adet bulunur. PIC16F628A’da CCP modülünden bir adet vardır ve CCP1 olarak adlandırılır. CCP1 modülünü kontrol eden iki önemli kaydedici vardır. Bunlardan birisi Analog İşlemler bölümünde ayrıntılı olarak açıklanan CCP1CON kaydedicisi, diğeri de CCPR1L kaydedicisidir. Darbe genişliği modülasyonu (PWM) modunda, ilgili CCP modülü CCPx pininden 10-bit çözünürlüğüne kadar PWM çıkış üretir. CCPx pini veri tutma (data latch) devresine bağlıdır ve o an için tutulan bilginin çıkışa aktarılması için ilgili TRIS komutuyla yönlendirilmesi gerekir. Şekil 8.5’te PWM işleyişinin basitleştirilmiş blok diyagramı gösterilmiştir.
Şekil 8.5 Basitleştirilmiş PWM blok diyagramı
PWM modunda CCPRxH salt okunur kaydedici olarak davranır. 8-bit TMR2 kaydedicisi, 10 bitlik zaman tabanını oluşturmak için 2 bit dâhili sistem saati (FOSC) veya önölçekleyicinin 2 biti ile birleştirilir. PWM çıkışı Şekil 8.6’da gösterildiği gibi bir periyoda ve çıkışın yüksekte kaldığı bir zamana sahiptir.
Şekil 8.6 CCP PWM çıkışı
PWM PeriyoduMikrodenetleyicinin PWM modunda çalışması için CCP1CON kaydedicisi ayarlanır. PWM periyodunun hesaplanması için Denklem 8.1’den yararlanılır. Ardından üretilecek PWM sinyalinin görev çevrim oranı CCPR1L kaydedicisine ve varsa diğer bitlere değer yazılmasıyla elde edilir. PWM periyodu= [(PR2)+1] x 4 x TOSC x TMR2 prescaler değeri Denklem 8.1 Örnek uygulamada PWM sinyalinin 1kHz istendiği varsayılsın. Mikrodenetleyicinin dâhili 4 MHz frekansı kullanıldığında ve PR2 = 249, TMR2 önölçekleyicisi = 1:4 olarak ayarlandığında: PWM periyodu=[249+1] x 4 x 1/4.000.000 x 4= 1.000/1.000.000=1/1000=1msn=1kHz olur. PWM Görev Çevrimi8-bitlik PIC mikrodenetleyicilerinde CCP modülü PR2 kaydedicisinin aldığı değere bağlı olarak en fazla 10-bit çözünürlüğe sahiptir. Dolayısıyla gerçekte 0-255 değil, 0-1023 aralığında bir hassasiyetle görev çevrimi ayarlanır. CCP1CON kaydedicisinin 5 ve 4 numaralı bitleri görev çevrimi değerinin düşük değerlikli bitleri olarak tahsis edilmiştir. Bu iki bit düşük değerlikli olduklarından etkileri azdır ve genellikle kullanılmaz. Bu nedenle genellikle yalnızca CCPR1L kaydedicisine yazılacak 8-bitlik (0-255) değerle PWM duty cycle değeri ayarlanmış olur. PIC16F887 mikrodenetleyicisinin CCP1 ve CCP2 modülü için darbe genişliği ve görev çevrim oranları sırasıyla Denklem 8.2 ve Denklem 8.3 ile hesaplanır. Darbe genişliği= CCPRxL:CCPxCON<5:4>x TOSC x TMR2 prescalerDenklem 8.2 Örneğin CCPR1L kaydedicisi 255 (FFh) değeriyle ve CCP1CON<5:4> bitleri 0 değeriyle yüklendiğinde 10 bitlik 1111111100b = 1020 değeri elde edilir. T2CON kaydedicisinin önölçekleme değeri 1:16 ve mikrodenetleyici çekirdek frekansı 8 MHz ise, bu durumda en yüksek darbe genişliği, = 1020 x 1/8.000.000 x 16 = 0,00204 = 2,04ms olarak elde edilir.
Örneğin CCPR1L kaydedicisi 128 (80h) değeriyle ve CCP1CON<5:4> bitleri 0 değeriyle yüklendiğinde 10 bitlik 1000000000b = 512 değeri elde edilir. T2CON kaydedicisinin önölçekleme değeri 1:16 ve PR2 kaydedicisi değeri 255 ise, bu durumda görev çevrim oranı, PWM görev çevrim oranı= 512/(4(255+1))=512/1024=0,5=%50 olarak elde edilir. PWM ÇözünürlüğüÇözünürlük tanımlı bir periyot için mevcut görev çevrimlerinin sayısını belirtir. Örneğin, 10-bit çözünürlük 1024 farklı görev çevrimi üretirken, 8-bit çözünürlük 256 farklı görev çevrimi üretir. PR2 kaydedicisine 255 (FFh) yüklendiğinde en yüksek PWM çözünürlüğü 10 olarak elde edilir. Çözünürlük Denklem 8.4’te gösterildiği gibi PR2 kaydedicisinin bir fonksiyonudur.
Tablo 8.4’te ve 8.5’te sırasıyla 20 MHz ve 8 MHz FOSC değerlerine ve PR2 kaydedicisinin aldığı değerlere göre elde edilen PWM frekansları hesap tablosu verilmiştir. Yapacağınız uygulamalarda bu tablolardan yararlanabilirsiniz. Tablo 8.4 Örnek PWM frekansları ve çözünürlükleri (20 MHz)
Tablo 8.5 Örnek PWM frekansları ve çözünürlükleri (8 MHz)
PWM İşleyişinin AyarlanmasıTimer2 modülünün PWM üreteci olarak ayarlanması için sırasıyla aşağıdaki adımlar uygulanmalıdır:
Şekil 8.7’de 1kHz’lik PWM sinyaliyle bir LED’in sürülmesini gerçekleştiren uygulama devresi gösterilmiştir.
Şekil 8.7 Timer2 modülü yardımıyla elde edilen PWM sinyali uygulaması
Tablo 8.6 Timer2 modülü yardımıyla elde edilen PWM sinyali uygulamasının mikroC kodu
ADC Uygulamalı PWM İle DC Motor KumandasıŞekil 8.8’da ADC modülüne sahip PIC16F887 ile yapılmış bir DC motor kontrol uygulaması gösterilmiştir. Uygulamada iki adet LDR kaynağından alınan ışık değerleri ADC modülü ile çözümlenip elde edilen fark nispetince DC motora ileri-geri kumanda yaptırılmaktadır. Motorlar ışık farkına bağlı olarak üretilen PWM değeri şiddetinde sürülmektedir. PIC16F887 mikrodenetleyicisi bünyesinde, biri güçlendirilmiş olmak üzere iki adet CCP modülü bulundurur. CCP2 modülü, PIC16F628A’nın CCP1 modülüyle aynı özelliklere sahiptir ve bu uygulamada CCP2 modülü kullanılmıştır. DC motor, yeterli akım ihtiyacının karşılanması için L298N çift kanallı tam köprü sürücüsü üzerinden sürülmüştür (Bkz. Ek-I3). Motora ileri-geri yön verebilmek için motor sürücüsünün IN1 ve IN2 girişleri kullanılmıştır. CCP2 üzerinden uygulanan PWM sinyali ile motor sürücüsünün ENA (enable-etkinleştirme) girişi kumanda edilerek motorun değişen şiddette sürülmesi sağlanmıştır. Dikkat etmeniz gereken en önemli husus PWM sürerken T2CON kaydedicisinin açılmasıdır. CCP modülü PWM moduna ayarlandığında sistem Timer2 modülünün TMR2IF bitini izlemeye başlar. Timer2 kesmesini program başında kapatmanız gerekir. Ancak kesmeyi kapatmanıza karşın PWM modunun ayarlanmış olmasından dolayı TMR2IF bayrağı sistem tarafından aktif edilir. PWM frekans süresi bu bayrağın aktiflik süresiyle oluşturulur. TMR2IF bayrağı kesmesine göre işlem yapılacaksa, CCPR1L ya da CCPR2L duty_cycle kaydedicilerine değer aktarımı öncesinde bayrağın resetlenmesi gerekir. Bu işlemi şu şekilde yapabilirsiniz;
while(!PIR1.TMR2IF)
PIR1.TMR2IF=0; Bu küçük yapıda PIR1 kaydedicisinin TMR2IF bayrağı 1 olana kadar döngü işletilmektedir. 1 olduğunda döngüden çıkılır. Bayrak resetlenir ve sonraki işlemler yapılır.
Şekil 8.8 PIC16F887 ile DC motorun ileri-geri yönde PWM modunda sürülmesi
Uygulamada T2CON kaydedicisi 1:16 önölçekleme değeriyle yüklenmiştir. Saat frekansı 8 MHz olduğundan PWM frekansı 500Hz olarak elde edilir. Tablo 8.7 PIC16F887 ile DC motorun ileri-geri yönde PWM modunda sürülmesi mikroC kodu
Güçlendirilmiş (Enhanced) ECCP ModülüCCP modülü ile PWM üretimi daha önceden anlatıldığı için (Bkz. 8.1.3) bu başlık altında güçlendirilmiş PWM üretimi ve bunun için gerekli olan kaydedici ayarlarından bahsedilecektir. Güçlendirilmiş CCP modülü ve PWM modu birden fazla CCP modülü bulunan PIC mikrodenetleyicilerinin sahip olduğu bir özelliktir. Bu başlık altında PIC16F887 mikrodenetleyicisinin güçlendirilmiş CCP modülü ve PWM modu anlatılacaktır. PIC16F887 CCP1 ve CCP2 olarak iki adet Capture/Compare/PWM modülüne sahiptir. Çok küçük bir farkla PIC16F628A’nın CCP1 modülü, PIC16F887’nin CCP2 modülüne eşdeğerdir. CCP1 modülü bu MCU'larda gelişmiş (Enhanced) CCP modülüdür ve PWM özelliğini kullanmak bir miktar daha ayrıntılıdır. Bu modülün 3 farklı çalıştırma tekniği bulunur:
Güçlendirilmiş PWM modundan bahsetmeden önce güçlendirilmiş Capture/Compare/PWM (ECCP) modülü ve onu kontrol etmek için kullanılan CCP1CON kaydedicisini açıklamak daha uygun olacaktır. Güçlendirilmiş CCP1 modülü, kullanıcıya farklı olayları zamanlamasına ve kontrol etmesine olanak tanıyan bir çevresel aygıttır. Yakalama modunda, bir olayın oluş süresinin zamanlaması gerçekleştirilirken, karşılaştırma modunda ise önceden tanımlanmış bir süre aşımı gerçekleştiğinde harici bir olayın tetiklenmesi gerçekleştirilir. PWM modu ise (PWM hakkında ayrıntılı bilgi için 4.10’a bakınız) değişen frekansta ve görev çevrimi süresinde darbe genişliği modülasyonlu sinyal üretimini sağlar. Güçlendirilmiş CCP modülünün P1A(RC2), P1B(RD5), P1C(RD6) ve P1D(RD7) olarak isimlendirilen 4 adet pini bulunmaktadır. Bu pinlerin ne işe yaradıkları ayrıntılı olarak aşağıdaki gibi anlatılmıştır. CCP1CON KAYDEDİCİSİ (ADRES: 17h – PIC16F887)
bit 7-6 P1M<1:0>: PWM çıkış konfigürasyon bitleridir. Tablo 8.5’te ECCP modülünün farklı modları için kullanılan zamanlayıcılar gösterilmiştir. Tablo 8.8 CCP modülünün modları için kullanılan zamanlayıcılar
Şekil 8.9’da güçlendirilmiş PWM çıkış dalga ilişkileri gösterilmiştir. PWM ilk etkinleştirildiğinde tamamlanmamış bir dalga formunun üretilmesini engellemek için, ECCP modülü bir PWM sinyali üretmeden önce yeni bir PWM periyodu başlayana kadar bekler.
Şekil 8.9 Güçlendirilmiş PWM çıkış dalga ilişkileri
NOT: Her bir PWM çıkışı TRIS komutuyla uygun şekilde ayarlanmalıdır. CCPxCON kaydedicisinin temizlenmesi tüm PWM çıkış pinlerinin serbest kalmasını sağlayacaktır. ECCP tarafından kullanılmayan herhangi bir pin normal dijital I/O uygulamaları için kullanılabilir. Yarım Köprü ModuYarım köprü modunda, push-pull yüklerin sürülmesi için iki pin kullanılır. PWM çıkış sinyali CCPx/P1A pininden alınırken PWM sinyalinin eşleniği P1B pininden alınır (Bkz. Şekil 8.10).
Şekil 8.10 Yarım-köprü PWM'in dalga şekli
Bu mod Şekil 8.11’de gösterildiği gibi yarım-köprü uygulamalarında ya da tam-köprü uygulamalarında kullanılabilir. Birinci uygulamada iki ayrı DC kaynak üzerinden yük kontrolü yapılmaktadır. Kullanılan MOSFET ya da transistörlerin her ikisi de aynı kutupludur. Örnekte iki adet N-tipi MOSFET kullanılmıştır. P1A girişi aktif yüksekken P1A çıkışına bağlı MOSFET iletim geçer ve kendisine bağlı kaynak üzerinden bir yönde yükü bir yönde çalıştırır. Bu esnada P1B çıkışı ters polarizeli olduğundan diğer devre kesimdedir. P1B aktif yüksek durumuna geçince bu sefer P1B çıkışına bağlı MOSFET iletime geçer ve bir önceki akımın ters yönünde akım geçişi başlar. İkinci uygulamada ise her bir durumda iki MOSFET iletimdedir. Bu uygulamada dört adet anahtarlama elemanı (MOSFET ya da güç transistörü) kullanılırken tek bir DC kaynak kullanılmaktadır. Böylece her iki uygulamada da ileri ve geri yön motor kumandası gerçekleştirilebilir. Yarım köprü modunda, yarım-köprü cihazlarının hepsinin aynı anda aynı yönde iletime geçme tehlikesi vardır. Böyle bir durumda çok kısa süreliğine de olsa, kumanda edilecek motor gibi bir cihazın her iki yöne de hareket etmeye çalışması istenmeyen arızalara yol açacaktır. Bu olaya neden olan akıma “shoot-through” akımı denir. Böyle bir riskin ortadan kaldırılması için programlanabilir ölü-bant gecikmesi eklenmiştir. PWM1CON kaydedicisinin PDC<6:0> bitleri kullanılarak, çıkış aktif yüksek konuma geçmeden önce işletilecek komut sayısı tanımlanabilir. Bir bakıma bu kaydedici sayesinde yapay bir gecikme üretilmektedir.
Şekil 8.11 Yarım-köprü uygulamalarına örnek
PWM1CON KAYDEDİCİSİ (ADRES: 9Bh – PIC16F887)
bit 7 PRSEN: PWM yeniden etkinleştirme bitidir. Tam Köprü ModuTam köprü modunda, tüm dört pin de çıkış olarak kullanılır. N-tipi MOSFET’ler kullanılarak yapılmış bir tam-köprü bağlantısı örneği Şekil 8.12’de gösterilmiştir. İleri modda CCP1/P1A pini aktif duruma çekilirken, P1D modüleli çıkıştır. P1B ve P1C ise pasif durumdadır. Geri modda P1C aktif duruma çekilirken, P1B modüleli çıkıştır. P1A ve P1D ise pasif duruma çekilir. P1A, P1B, P1C ve P1D çıkışları PORT veri tutucularıyla çoktan seçme işlemine tabi tutulur. İlgili TRIS bitleri P1A, P1B, P1C ve P1D’yi çıkış yapmak için temizlenmelidir.
Şekil 8.12 Tam-köprü uygulamasına örnek
Şekil 8.13’te tam-köprü modunun pratikte nasıl kullanıldığını gösteren bir devre uygulaması verilmiştir. Uygulamada anahtarlama elemanı olarak BDX53 güç transistörleri kullanılmıştır. Şekil 8.8’de klasik PWM tekniğiyle yapılmış uygulamanın tam-köprü moduna uyarlanmış halidir. Tablo 8.9’da uygulamanın kaynak kodu gösterilmiş olup CCP1CON kaydedicisinin ileri ve geri yön için nasıl ayarlandığına dikkat ediniz. Tam-köprü modu uygulamasında ileri ve geri yön geçişleri sırasında, yarım-köprü moduna benzer şekilde modüleli çıkışlar olan P1D ve P1B sinyalleri belli bir gecikmenin ardından aktif duruma gelir. Bu gecikme 4 Timer2 sayma değeri kadardır. Böylece kontrol edilen yükün aynı anda her iki yön için de aktif olmasının önüne geçilir.
Şekil 8.13 Tam-köprü modunda güçlendirilmiş PWM modülü uygulaması
Tablo 8.9 Tam köprü modunda güçlendirilmiş PWM modülü uygulaması mikroC kodu
Kaynak kodunun uygulaması yapıldığında iki LDR arasında fark olduğu sürece motora sürekli olarak PWM sinyalinin verildiği görülecektir. Eğer güneş takip sistemi gibi bir uygulama yapılacaksa farkın sabit olması durumunda hareketin de durması gerekir. Söz konusu uygulama kullanılarak güneş takip sistemi tasarlamak için zamana bağlı fark değişim oranının hesaplanması ve eğer değişim yoksa PWM sinyalinin durdurulması gerekir. Diğer bir ifadeyle belli bir zaman aralığı için sol ve sağ LDR kaynaklarının ışık farklarının türevi hesaplanmalıdır. Bir sistemde, bir başka değişkene bağlı bir değişkenin durumundaki değişim sabitse türev sabittir. Eğer ışık farkına ‘V’ dersek ve zamanı da ‘t’ ile gösterirsek, zamana bağlı ışık farkının türevi aşağıdaki gibi gösterilir. dV/dt=(V2-V1)/(t2-t1 )=sabit ise PWM çıkışları sıfırlanmalıdır. Zaman aralığı ölçümleri için 16-bitlik Timer1 kaydedicisinden yararlanılabilir. Belli aralıklarla sürekli olarak iki fark değeri karşılaştırılır, eğer fark aynıysa motorun hareket ettirilmesine gerek yoktur. Tablo 8.10’da gösterilen uygulamadan Timer1 başlangıç değeri 536 ile yüklenmiş ve önölçekleyici 1:8 değerine kurulmuştur. Dolayısıyla 8 MHz’lik işlemci frekansında 260 msn’lik sürelerle kesme üretilmektedir. Motora hareket verecek fark değeri oluştuğu sürece motor 260ms süresince hareket ettirilmektedir. Tablo 8.10 Işık farkının türevine göre tepki veren güneş takip sistemi mikroC kaynak kodu
DİKKAT: Bilgisayar performansınıza bağlı olarak simülasyon istenilen sonucu veremeyebilir. Etkili sonucu görmek için gerçek uygulamasının kurulması ve performans analizinin gerçek bir ortama göre yapılması daha uygun olacaktır. PWM Otomatik Kapanma ve Açılma ModuPWM modu, harici bir kapatma olayı olduğunda PWM çıkışlarını devre dışı bırakan otomatik kapanma Auto-Shutdown) moduna sahiptir. Otomatik kapanma moduyla PWM pinleri önceden tanımlanmış duruma getirilirler. Bu mod, PWM’in uygulamaya zarar vermesini engellemede kullanılır. Otomatik kapatma kaynakları olarak ECCPAS kaydedicisinin ECCPAS<2:0> bitleri kullanılır. Bir kapatma olayı aşağıdaki durumlardan biri gerçekleştiğinde oluşur:
Kapanma durumu ECCPASE (Auto-Shutdown Event Status) bitiyle izlenebilir. Eğer bit lojik-0 ise, PWM normal olarak işliyordur. Eğer bit lojik-1 ise, PWM çıkışları kapalı durumdadır. Bir kapanma olayı meydana geldiğinde iki olay olur:
Etkinleştirilen PWM pinleri kapalı durumlarına asenkron olarak alınır. PWM çıkış pinleri [P1A/P1C] ve [P1B/P1D] gruplarına ayrılır. Her pinin durumu PSSAC ve PSSBD bitleriyle belirlenir. Her pin çifti aşağıdaki üç durumdan birine alınır:
ECCPAS KAYDEDİCİSİ (ADRES: 9Ch – PIC16F887)
bit 7 ECCPASE: ECCP otomatik kapanma olay izleme ve müdahale durum bitidir.
NOT: Yukarıda ifade edilen adımlara göre, PWM1CON kaydedicisinin PRSEN bitinin lojik-0 olması durumunda, otomatik kapanma ve yazılımsal olarak yeniden başlatma sürecinin sinyalizasyon örneği Şekil 8.14’te gösterilmiştir.
Şekil 8.14 PRSEN bitinin lojik-0 olması durumunda otomatik kapanma sinyalizasyonu
PWM1CON kaydedicisinin PRSEN bitinin lojik-1 olması durumunda, otomatik başlatma işlemi otomatik kapanmaya neden olan olay ortadan kalktığı gibi işletilir. Bu işlemin sinyalizasyon süreci Şekil 8.15’te gösterilmiştir.
Şekil 8.15 PRSEN bitinin lojik-1 olması durumunda otomatik kapanma sinyalizasyonu
PWM Yönlendirme Modu (Steering Mode)Yönlendirme modu CCP1CON kaydedicisinin CCP1M<3:2> bitleri ‘11’, P1M<1:0> bitleri ‘00’ olduğunda kullanılan bir özelliktir. Diğer bir ifadeyle, güçlendirilmiş PWM modülünün normal PWM moduna ayarlanmasıyla kullanılabilir. Bu çalışma modu, 4 PWM pininden istenilenin modüleli çıkış olmasını sağlar. Ayrıca, aynı PWM sinyali eş zamanlı olarak birden fazla pine yönlendirilebilir. PSTRCON: DARBE YÖNLENDİRME KONTROL KAYDEDİCİSİ (ADRES: 9Dh – PIC16F887)
bit 7-5 Kullanılmıyor: Lojik-0 olarak okunur. Şekil 8.16’da yönlendirme modunun basitleştirilmiş blok diyagramı gösterilmiştir. Blok diyagram dikkatlice incelenecek olursa, standart PWM modundayken (P1M<1:0> = 00, CCP1M<3:2>= 11) STRA, STRB, STRC ve STRD bitlerinin lojik-1 yapılması durumunda XOR kapı çıkışı ilgili pinlere yönlendirilmektedir. Bu durumdayken ilgili XOR kapısına denk gelen CCPM1<1:0> biti lojik-0 yapıldığında, PWM sinyalinin lojik-1 olduğu anlarda çıkış lojik-1 olur, dolayısıyla sinyalin kendisi alınır. İlgili XOR kapısına denk gelen CCPM1<1:0> biti lojik-1 yapıldığında, PWM sinyalinin lojik-0 olduğu anlarda çıkış lojik-1 olur, dolayısıyla PWM sinyali terslenir.
Şekil 8.16 PWM yönlendirme modunun basitleştirilmiş blok diyagramı
Şekil 8.17’deki devrede PWM yönlendirme modunun işleyişini gösteren bir uygulama devresi görülmektedir. Uygulama devresinde dört farklı PWM çıkışı için farklı animasyon modları yapılmaktadır. Animasyon modlarından birinde yalnızca tek bir kanal aktif olurken, bir başka modda disko efekti oluşturacak şekilde kanallar sıralı olarak sürülmektedir. Son modda ise tüm kanallar aynı anda sürülmektedir (bu durumdayken RGB LED grubunu “beyaz ışık” modunda çalıştırabilirsiniz). “ARTTIR” ve “AZALT” isimli butonlarla ise CCPR1L görev çevrimi kaydedicisinin değeri 10-200 arasında ayarlanmaktadır.
Şekil 8.17 PWM yönlendirme modu uygulama devresi
Tablo 8.11’de gösterilen kaynak koduna dikkat edilirse harici kesme butonlarına uzun süreli basma durumunda da CCPR1L kaydedicisinin değerinin değişimi sağlanmaktadır. Bunun için 8 MHz dâhili çalışma frekansı dikkate alınarak Timer0 modülüyle 0,1 msn’lik gecikme süresi hesaplanmıştır. Ardından “buton_sure” adlı değişken ile 10 msn’lik bekleme işlemi gerçekleştirilmiştir. Böylece yalnızca kenar tetikleme ilkesine göre çalışan kesme girişlerine bağlamış olduğunuz butonlarla, sürekli basma durumunda da değer değişimi elde etmiş olursunuz. Tablo 8.11 PWM yönlendirme modu uygulama devresi mikroC kodu
|