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.
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):
| Durum | Akım | Süre |
|---|---|---|
| Uyku (Stop 2 + RTC) | 2 µA | 59,9 s |
| Ölçüm (MCU + sensör) | 3 mA | 50 ms |
| Radyo gönderimi | 25 mA | 20 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:
- 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.
- 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.
- 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.
- 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.
- Debug arayüzü: Debugger bağlıyken veya
DBGMCUayarları 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 tipi | Tipik Iq | Not |
|---|---|---|
| Klasik LDO | 50–500 µA | Pil uygulamaları için uygun değil |
| Nano-güç LDO | 0,3–1 µA | Basit ve düşük gürültülü |
| Nano-güç buck | 0,3–1 µA | Yü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.