PIC kontrollü RGB Led Sürücü
Son yıllarda LED teknolojisinde hızlı gelişmeler olmakta. Aydınlatma uygulamalarında artık 3mm-5mm çaplı LED'lerin yanısıra, yüksek ışık akısına sahip flux LED, super flux LED ve power LED çeşitleri de yaygın olarak kullanılmakta. Renk değiştiren uygulamalarda ise genellikle RGB LED'ler tercih edilmekte.
Bu yazıda 8 pinli PIC12F675 mikro denetleyicisi kullanılarak flux RGB LED'i kontrol eden bir sürücü devre verilmiştir. Gerçekleştirilen elektronik devre ile LED'in ışık rengi kırmızı, yeşil, mavi, sarı, mor, turkuaz ve beyaz olarak ayarlanabilmektedir. Tasarlanan bu devre ile çeşitli ışık efektleri oluşturmak da mümkündür.
Işık rengini değiştirmek için en basit yöntem kırmızı (R), yeşil (G) ve mavi (B) ışık yayan 3 farklı LED kullanmaktır. Bu 3 ana rengin karıştırılmasıyla ara renkler kolayca elde edilebilmektedir. Örneğin kırmızı-yeşil ışığın karışımı sarı rengi; kırmızı-mavi ışığın karışımı mor rengi; yeşil-mavi ışığın karışımı ise turkuaz rengi verir. Ara renkleri elde etmek için 3 ayrı LED kullanmak yerine tek bir kılıf içerisinde 3 adet LED çipi barındıran RGB LED de kullanılabilir. Şekil 1-6'da piyasada satılan çeşitli LED türleri görülmektedir.
Şekil 1: 5mm çaplı LED | Şekil 2: Flux LED | Şekil 3: Power LED |
Şekil 4: 5mm RGB LED | Şekil 5: 5mm RGB LED | Şekil 6: Flux RGB LED |
4 adet bacağa sahip RGB LED'lerin bağlantı şekli ortak anotlu veya ortak katotlu olabilmektedir. Şekil 7'de bu bağlantı şekilleri görülmektedir.
Şekil 7: RGB LED'in iç yapısı
Projeye ait elektronik devre şeması şekil 8'de görülmektedir. Devrede PIC12F675 mikro denetleyicisi, 3 adet direnç ve bir adet flux RGB LED bulunmaktadır. Besleme gerilimi 5V'dur. Mikro denetleyici 4MHz'lik dâhili osilatör ile çalıştırılmaktadır. Ayrıca, yazılımda uygun konfigürasyon ayarları yapıldığından, MCLR ucu ile VDD arasına bağlanması gereken dirence gerek kalmamıştır. Devre bu haliyle oldukça sade yapıdadır.
Şekil 8: Devre şeması
R1, R2, R3 dirençleri, her bir LED'den 15-20mA akım geçecek şekilde seçilmelidir. Direnç değerini hesaplarken port çıkış gerilimini dikkate almak gerekir. Çünkü porttan çekilen akım arttıkça çıkış gerilim seviyesi önemli ölçüde düşer. Örneğin, porttan hiç akım çekilmezken çıkış gerilimi 5V olduğu halde, 20mA akım çekilirken çıkış gerilimi 3.7V'a kadar düşmektedir. Aşağıdaki tabloda port akımı ile port gerilimi arasındaki ilişki görülmektedir.
Iport(mA) | Vport(V) |
0 | 5 |
5 | 4.7 |
10 | 4.4 |
15 | 4 |
18 | 3.8 |
20 | 3.7 |
Devredeki direnç değeri (Vport-Vf)/ILED formülü ile hesaplandığından, LED'in ileri yön gerilimini de bilmek gerekir. Bu projede kullanılan flux RGB LED'in ileri yön gerilimi kırmızı için 1.9V; yeşil için 3.55V; mavi için 3.6V olarak ölçülmüştür. Buna göre, port çıkış geriliminin 3.8V olduğu dikkate alınırsa R1 direnci 100 ohm, R2 ve R3 dirençleri 10 ohm seçilebilir. Bu durumda kırmızı, yeşil ve mavi LED'lerin her birinden yaklaşık 19mA akım geçer. Bu da yeterli miktarda parlaklık sağlar. Eğer istenirse yeşil ve mavi LED'ler direnç kullanmaya gerek olmaksızın port çıkışına doğrudan bağlanabilir. Bu durumda da LED akımları 20mA olur. Fakat akımı bir direnç ile sınırlamak daha uygun bir yöntemdir.
Flux RGB LED'in ve PIC12F675'in bacak bağlantıları şekil 9 ve10'da görülmektedir.
Şekil 9: Flux RGB LED bacak bağlantısı
Şekil 10: PIC12F675'in bacak bağlantısı
PIC programı PIC C Lite derleyicisi kullanılarak yazılmıştır. Hi-Tech (http://www.htsoft.com) firması tarafından üretilen programın demo versiyonu (V8.05PL2) 12F675 mikro denetleyicisini tanımaktadır. Renk değiştirme algoritmasına ait C programı aşağıda verilmiştir. Programda ilk aşamada RGB LED'in 1'er saniye aralıkla kırmızı, yeşil, mavi, sarı, mor, turkuaz ve beyaz renk ışık yayması sağlanmıştır. Ardından, kırmızı LED'in ışık şiddeti yavaşça arttırılıp azaltılmıştır. Daha farklı ışık efektleri oluşturmak için C programı üzerinde uygun değişiklikler yapılmalıdır.
// PIC 12F675 ile Flux RGB LED sürme
// Şubat 2007 Yavuz EROL
#include <pic.h>
#include <delay.c>
#include <stdio.h>
#define BLED GPIO0 // Mavi LED GPIO0'a bağlı
#define GLED GPIO1 // Yeşil LED GPIO1'e bağlı
#define RLED GPIO2 // Kırmızı LED GPIO2'ye bağlı
// Konfigürasyon ayarları
// Dahili osilatör seçili, MCLR direnci yok
__CONFIG(MCLRDIS&WDTDIS&PWRTEN&INTIO);
void bekle(void){ // 1s'lik gecikme alt programı
unsigned char i;
for(i=0;i<5;i++){
DelayMs(200);
}
}
// Ton ve Toff süresi kadar bekle (Ton+Toff=10ms)
void bekle_on(unsigned char i){
unsigned char a;
for(a=0;a<i;a++){
DelayUs(39);
}
}
void bekle_off(unsigned char i){
unsigned char a;
for(a=0;a<255-i;a++){
DelayUs(39);
}
}
// ANA PROGRAM
main(void){
unsigned char i;
// Port ayarları
TRISIO=0x00; // Portların hepsini çıkış seç
CMCON=0x07; // Portları sayısal I/O olarak ayarla
ANSEL=0;
GPIO=0; // başlangıçta bütün çıkışları lojik 0 yap
// 3 ana rengi, 3 ara rengi ve beyaz rengi oluştur
RLED=1;GLED=0;BLED=0; bekle(); //Kırmızı
RLED=0;GLED=1;BLED=0; bekle(); //Yeşil p>
RLED=0;GLED=0;BLED=1; bekle(); //Mavi
RLED=1;GLED=1;BLED=0; bekle(); //Sarı
RLED=1;GLED=0;BLED=1; bekle(); //Mor
RLED=0;GLED=1;BLED=1; bekle(); //Turkuaz
RLED=1;GLED=1;BLED=1; bekle(); //Beyaz
GPIO=0;
// PWM sinyalinin görev periyodunu arttırıp azaltarak
// ışık şiddetini değiştir
// Adım adım kırmızı LED'in parlaklığını arttır
for(i=1;i<255;i++){
RLED=1;
bekle_on(i); // Ton süresi kadar bekle
RLED=0;
bekle_off(i); // Toff süresi kadar bekle
}
// Adım adım kırmızı LED'in parlaklığını azalt
for(i=255;i>0;i–){
RLED=1;
bekle_on(i); // Ton süresi kadar bekle
RLED=0;
bekle_off(i); // Toff süresi kadar bekle
}
}// Program sonu
Programın hex dosyası için tıklayınız. Uygun bir programlama kartı ile hex dosyası PIC'e kolayca yüklenir. Konfigürasyon ayarları C kodu içerisinde verildiğinden PIC programlama aşamasında herhangi bir ayar yapmaya gerek yoktur. Yani osilatör türü yanlışlıkla XT olarak seçilmemelidir.
LED'in parlaklığı PWM sinyalinin görev periyodu (d değeri) değiştirilerek sağlanmaktadır. Şekil 11'deki animasyondan görüldüğü gibi sinyalin frekansı sabit (100Hz) olduğu halde darbenin genişliği artıp azalmaktadır. Bu sayede, görev periyodu küçük iken LED'in ortalama akımı düşük olmakta; d değeri arttıkça ortalama akım artmaktadır. Yani, görev periyodunun değişimi LED parlaklılığını doğrudan etkilemektedir.
Şekil 11: PWM sinyali
Projeye ait sürücü devre kullanıldığında LED akımı en fazla 20mA olmaktadır. Işık şiddetinin daha yüksek olması isteniyorsa LED akımını 50mA'e kadar arttırmak gerekir. Fakat bu akımı mikro denetleyicinin çıkış portundan sağlamak mümkün olmadığından transistörlü bir sürücü devre kullanmak gerekir. Şekil 12 ve 13'de sırasıyla ortak anotlu ve ortak katotlu RGB LED için örnek sürücü devreler görülmektedir. İlk devreden görüldüğü gibi LED'in ortak anot ucu güç kaynağının pozitif ucuna bağlıdır. LED'in katot uçları ise birer NPN transistör ve direnç üzerinden toprağa bağlıdır. Q0 ucuna 5V'luk gerilim uygulandığında transistör iletime girerek LED'den akım geçmesini sağlamaktadır. İkinci devrede ise LED'in ortak katot ucu güç kaynağının negatif ucuna bağlıdır. Q0 ucu lojik 1 seviyesinde iken PNP transistör kesimdedir ve LED'den akım geçmez. Q0 ucu toprak potansiyeline çekildiğinde transistör iletime girerek LED'in anot ucunu R direnci üzerinden kaynağın pozitif ucuna bağlar.
Ortak anotlu RGB LED sürücü | Ortak katotlu RGB LED sürücü |
Her iki devrede de LED akımlarını sınırlamak üzere birer direnç bulunmaktadır. Bu dirençleri uygun şekilde seçmek için aşağıdaki formülü kullanmak gerekir.
Formülde, Vcc besleme gerilimini, Vce(sat) transistörün doyma gerilimini, Vf ise LED'in ileri yön gerilimini göstermektedir. LED akımı, kullanılan LED'in türüne göre 20mA ile 50mA arasında değişebilir. Devredeki R direnci, akım değerini LED'e zarar vermeyecek şekilde sınırlar. Aşağıdaki tabloda Vcc=5V ve Vce(sat)=0.1V için hesaplanan direnç değerleri toplu olarak görülmektedir.
Tablo: R direncinin seçimi
Örneğin, devrede kırmızı, yeşil, mavi renkli 3 adet 5mm LED kullanılacaksa LED akımlarını 20mA ile sınırlandırmak için R1 direnci 150 ohm, R2 direnci 100 ohm, R3 direnci ise 82 ohm seçilir. Eğer, flux RGB LED kullanılacaksa, LED akımını 50mA ile sınırlandırmak için R1 direnci 56 ohm, R2 direnci 8.2 ohm, R3 direnci ise 10 ohm seçilir. Fakat bu direnç değerleri her flux RGB LED türü için geçerli değildir. Eldeki mevcut LED'den 50mA akım geçtiği sırada LED uçlarındaki gerilimi ölçüp formülde yerine yazarak gerekli direnç değerini yeniden hesaplamak gerekir. Bu projede kullanılan flux RGB LED'in ürün kodu 913PRGB2C, görüş açısı ise 130 derecedir. Bu LED http://www.ledmar.com/ adresinden temin edilebilir. Devre çalıştırıldığında oluşan bazı renkler şekil 14'de görülmektedir.
Şekil 14: Renkler
Projenin, Antrak gazetesi okurlarına faydalı olmasını dilerim.
Yavuz EROL (Arş. Gör.)
Fırat Üniv. Elek-Elektronik Müh. Bölümü