FPGA RGB LED: 3 Kanallı PWM ile Gerçek Zamanlı Renk Karıştırıcı
Artix-7 FPGA üzerinde üç bağımsız PWM kanalıyla RGB LED'i süren ve Vivado VIO arayüzünden her kanalın duty cycle'ını anlık değiştirerek herhangi bir rengi gerçek zamanlı üretebilen VHDL tasarımı.
Görseller
Proje Detayları
Proje Hakkında
TUSAŞ Uzay Sistemleri Mühendislik Merkezi Donanım Birimi stajında PWM projesinin üzerine inşa edilen bu uygulama, aynı PWM çekirdek bileşenini üç kez örnekleyerek bir RGB LED'i sürer. Kırmızı, yeşil ve mavi kanalların her biri bağımsız olarak kontrol edilir; duty cycle oranları değiştirilerek karışık renk üretilir. Kontrol Vivado'nun VIO arayüzü üzerinden gerçek zamanlı yapılır — JTAG bağlantısı açıkken parametreler anında etkisini gösterir.
Renk Karıştırma Prensibi
RGB LED'de her kanal kendi PWM sinyaliyle beslenir. Gözün algıladığı renk, üç kanalın duty cycle oranlarının lineer karışımıdır:
| Kanal | Duty Cycle | Parlaklık |
|-------|-----------|-----------|
| Kırmızı | %88 | Baskın |
| Yeşil | %48 | Orta |
| Mavi | %18 | Düşük |
Bu kombinasyon sıcak turuncu bir çıkış üretir. VIO'dan değerleri değiştirerek mor, cyan, beyaz — herhangi bir renk anlık elde edilebilir.
Mimari
PWM çekirdek bileşeni önceki projeden birebir yeniden kullanıldı. `top` katmanı üç ayrı örnekte çalıştırır ve her birini VIO'nun ayrı probe'larına bağlar.
VIO, bu projede **6 probe** çıkışı sunar:
```
probe_out0 → R high_time probe_out1 → R period
probe_out2 → G high_time probe_out3 → G period
probe_out4 → B high_time probe_out5 → B period
```
Her PWM örneği bağımsız frekans ve duty cycle alabilir; renk efektleri, titreme veya animasyon için kanallar farklı frekanslarda çalıştırılabilir.
Constraints ve Pin Bağlantıları
Artix-7 kartındaki `led0` RGB LED'in fiziksel pin adresleri XDC dosyasında tanımlandı. 100 MHz sistem saati E3 pininden bağlandı.
```
pwm_r_out → E1 (led0_b)
pwm_g_out → F6 (led0_g)
pwm_b_out → G6 (led0_r)
```
Vivado Arayüzü
Bu projenin en eğlenceli kısmı buydu: kart programlandıktan sonra Vivado Hardware Manager açık kalıyor, VIO dashboard'unda altı ayrı sayısal giriş alanı var. Bir değer yazılıp Enter'a basıldığında LED anında renk değiştiriyor — recompile yok, reprogramlama yok. JTAG üzerinden canlı kontrol.