back to top

Demedukit ile PWM RGB LED Kontrol

Selam Makerlar,

Bu yazımızda, Demudekit ile PWM RGB Led kontrolünün nasıl gerçekleştiğini adım adım anlatacağız.

Gerekli Malzemeler:

Aşamalar

  1. Proje yapımı hakkında
  2. Pin bağlantıları
  3. Kod yazım aşaması
  4. Sonuçlar

Proje Yapımı Hakkında

Bu proje STM32 mikrodenetleyicisinde PWM sinyalleri kullanarak RGB LED’in her bir rengin parlaklığını ve renk geçişlerini kontrol etmek için tasarlanmıştır. LED’lerin renklerini ve parlaklıklarını zaman içinde değiştiren bir döngü ile estetik bir ışık efekti sağlar. Bu tür bir uygulama genellikle görsel göstergeler ve aydınlatma kontrolü için kullanılır.

PWM: Bir dijital sinyalin genişliğini değiştirerek bir cihazın gücünü veya hızını kontrol etmenizi sağlar. Duty cycle, sinyalin aktif olduğu sürenin toplam süreye oranıdır.

STM32’de PWM Nasıl Çalışır?

  • STM32 mikrodenetleyicilerinde PWM sinyalleri timer modülleri aracılığıyla üretilir. Her timer kanalı, belirli bir frekansta PWM sinyali oluşturur.
  • Timer’ın “Period” değeri, sinyalin bir döngüsünün süresini belirler. “Pulse” değeri ise sinyalin yüksek (aktif) olduğu süreyi belirler.

RGB LED Yapısı: RGB LED’ler, kırmızı, yeşil ve mavi renkleri üreten üç ayrı LED’den oluşur. Her bir LED’in parlaklığı, genellikle PWM (Pulse Width Modulation) sinyali kullanılarak kontrol edilir.

Pin Bağlantıları

Demedukit kartındaki STM32G030 mikrodenetleyicisindeki konfigürasyona göre pin bağlantılarını oluşturalım.

STM32G030 MCU Pin Konfigürasyon

  • RGB_RED  => PA6
  • RGB_GREEN => PA8
  • RGB_BLUE => PB3

RGB LED’ler için timer’ dan channel seçerek PWM çıkışlarını ayarlayalım:

  • RGB_RED için PWM çıkış ayarını TIM16_CH1 seçelim:
  • Daha sonrasında timer çıkışını aktifleştirip pwm olarak yapılandıralım:
  • Yeşil ve mavi led için sırayla
  • Yeşil led için TIM1_CH1 pinini seçelim timer kısmından timer’ı aktifleştirip channel1 kanalından pwm yapılandırmasını yapalım.
  • Mavi led için TIM1_CH2 pinini seçelim timer kısmından timer’ı aktifleştirip channel2 kanalından pwm yapılandırmasını yapalım:
  • PWM sinyalleri üretmek ve LED’leri kontrol etmek için RCC yapılandırması gereklidir.

Kod Yazım Aşaması

  1. İlk olarak PWM sinyallerini başlatalım.
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim16, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
/* USER CODE END 2 */

2.led parlaklığını arttırıp azaltan kodu yazalım.

/* USER CODE BEGIN WHILE */
while (1)
{
 // For döngüsü x değişkeninin değerini 0'dan başlayarak 65535'e kadar artırır. Döngü her çalıştığında x'e 2000 eklenir. 
// Yeşil renk
for (int x = 0; x <= 65535; x+=2000)
{
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, x); // Yeşil LED'i aç
__HAL_TIM_SET_COMPARE(&htim16, TIM_CHANNEL_1, 0); // Kırmızı LED'i kapat
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 0); // Mavi LED'i kapat
HAL_Delay(25);
}
for (int x = 65535; x >= 0; x-=2000)
{
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, x); // Yeşil LED'i azalt
HAL_Delay(25);
}

// Kırmızı renk
for (int x = 0; x <= 65535; x+=2000)
{
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0); // Yeşil LED'i kapat
__HAL_TIM_SET_COMPARE(&htim16, TIM_CHANNEL_1, x); // Kırmızı LED'i aç
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 0); // Mavi LED'i kapat
HAL_Delay(25);
}
for (int x = 65535; x >= 0; x-=2000)
{
__HAL_TIM_SET_COMPARE(&htim16, TIM_CHANNEL_1, x); // Kırmızı LED'i azalt
HAL_Delay(25);
}

// Mavi renk
for (int x = 0; x <= 65535; x+=2000)
{
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0); // Yeşil LED'i kapat
__HAL_TIM_SET_COMPARE(&htim16, TIM_CHANNEL_1, 0); // Kırmızı LED'i kapat
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, x); // Mavi LED'i aç
HAL_Delay(25);
}
for (int x = 65535; x >= 0; x-=2000)
{
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, x); // Mavi LED'i azalt
HAL_Delay(25);
}
/* USER CODE END WHILE */

Sonuçlar

Son Çıkan Yazılar

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz