← Blog
Gömülü Sistemler · 3 Temmuz 2026 · 3 dk okuma

STM32 ile Düşük Güç Tüketimli IoT Cihaz Tasarımı: Pil Ömrünü Yıllara Çıkarmak

Pille çalışan bir sensör düğümünün ömrünü belirleyen şey ortalama akımdır. Uyku modlarını, çevre birimlerini ve donanım tarafındaki gizli kaçakları doğru yöneterek mikroamper seviyesine inmenin yollarını adım adım ele alıyoruz.

STM32Düşük GüçIoTFirmwarePil

Pille çalışan bir IoT cihazında kullanıcı yalnızca tek bir soruyu sorar: "Pili ne zaman değiştireceğim?" Bu sorunun cevabı, mikrodenetleyicinin aktif modda ne kadar hızlı olduğundan çok, uyku modunda ne kadar az tükettiğine ve ne kadar uzun süre uyuyabildiğine bağlıdır.

Bu yazıda, STM32L serisi bir MCU ile periyodik ölçüm yapıp kablosuz gönderen tipik bir sensör düğümü üzerinden ilerleyeceğiz.

Önce bütçeyi hesaplayın

Ortalama akım, her durumun akımı ile o durumda geçirilen sürenin ağırlıklı ortalamasıdır:

I_ort = (I_aktif × t_aktif + I_radyo × t_radyo + I_uyku × t_uyku) / T

Örnek bir senaryo (her 60 saniyede bir ölçüm):

DurumAkımSüre
Uyku (Stop 2 + RTC)2 µA59,9 s
Ölçüm (MCU + sensör)3 mA50 ms
Radyo gönderimi25 mA20 ms

Bu durumda ortalama akım yaklaşık 13 µA olur. 2400 mAh'lik bir AA lityum pil ile teorik ömür 20 yılı aşar; pratikte pilin kendi kendine deşarjı ve sıcaklık etkileri asıl sınırlayıcı olacaktır.

Doğru uyku modunu seçin

STM32L4 ailesinde başlıca seçenekler şunlardır:

  • Sleep: Yalnızca CPU durur, çevre birimleri çalışır. Kısa beklemeler için.
  • Stop 0/1/2: Saatlerin çoğu durur, SRAM ve register içeriği korunur. Uyanma süresi birkaç mikrosaniyedir. Çoğu sensör düğümü için ideal noktadır.
  • Standby / Shutdown: En düşük tüketim, ancak SRAM içeriği kaybolur (yedekleme register'ları hariç) ve uyanış bir reset gibidir.
// Stop 2 moduna geçmeden önce RTC uyandırma zamanlayıcısını kur
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 60, RTC_WAKEUPCLOCK_CK_SPRE_16BITS);

HAL_SuspendTick();                  // SysTick kesmesi uykuyu bölmesin
HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);

// Uyanınca saat ağacını yeniden yapılandır
SystemClock_Config();
HAL_ResumeTick();

Gizli kaçakları avlayın

Firmware mükemmel olsa bile kart üzerinde akım sızdıran noktalar olabilir. En sık karşılaştıklarım:

  1. Yüzen (floating) GPIO'lar: Bağlantısız pinler giriş tamponunda ara seviyede kalıp akım çeker. Kullanılmayan tüm pinleri analog moda alın.
  2. Pull-up dirençleri: I²C hattındaki 4,7 kΩ'luk pull-up, hat düşük seviyede kalırsa 700 µA çeker. Uykudan önce hattın yüksek seviyede olduğundan emin olun.
  3. Sürekli beslenen sensörler: Uyku akımı veri sayfasında 1 µA yazan bir sensör, kart üzerindeki LDO ile birlikte 50 µA'e çıkabilir. Sensörleri bir yük anahtarı (load switch) veya doğrudan GPIO ile besleyin.
  4. Gerilim bölücüler: Pil gerilimini ölçmek için kullanılan 100 kΩ + 100 kΩ bölücü sürekli 18 µA tüketir. Bölücüyü bir MOSFET ile sadece ölçüm sırasında devreye alın.
  5. Debug arayüzü: Debugger bağlıyken veya DBGMCU ayarları açıkken MCU gerçek uyku moduna girmez. Ölçümü daima debugger sökülmüşken yapın.

Regülatör seçimi kritik

Düşük güç tasarımında regülatörün sükûnet akımı (quiescent current, Iq), çoğu zaman MCU'nun uyku akımından büyüktür.

Regülatör tipiTipik IqNot
Klasik LDO50–500 µAPil uygulamaları için uygun değil
Nano-güç LDO0,3–1 µABasit ve düşük gürültülü
Nano-güç buck0,3–1 µAYüksek akımlı radyo darbelerinde verimli

Doğru ölçün

Uyku akımı mikroamper, radyo akımı onlarca miliamper seviyesindedir; bu 4–5 dekatlık dinamik aralık sıradan bir multimetrenin sınırlarını zorlar. Önerim:

  • Ortalama akımı ölçmek için güç profilleyici (ör. Nordic PPK2, Joulescope veya STM32 için X-NUCLEO-LPM01A) kullanın.
  • Multimetre kullanacaksanız burden voltage nedeniyle MCU'nun aktif modda reset'e düşebileceğini unutmayın.

Kontrol listesi

  • Kullanılmayan GPIO'lar analog modda
  • Sensörler ve bölücüler anahtarlı besleniyor
  • Regülatör Iq < 1 µA
  • RTC ile periyodik uyanma, SysTick uykuda kapalı
  • Ölçümler debugger olmadan yapıldı

Sonuç

Düşük güç tasarımı tek bir "sihirli ayar" değil, donanım ve firmware'in birlikte optimize edildiği bir disiplindir. Bütçeyi baştan hesaplayıp her durumu ayrı ayrı ölçmek, tahminlerle ilerlemekten çok daha hızlı sonuç verir.

ST
Selman TuranElektronik Ar-Ge Mühendisi
LinkedIn'de takip et