Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

10. ünite / 11 · yaklaşık 3 saat

Düşük güç: Sleep, Stop ve Standby

Çalışma, uyku, durdurma ve bekleme kipleri; uyandırma kaynakları; görev döngüsüyle pil ömrü hesabı.

Bu ünitenin sonunda

  • STM32'nin düşük güç kiplerini (Sleep, Stop, Standby) neyin açık kaldığına göre ayırt etmek
  • Her kip için uyandırma kaynağını (kesme, EXTI, RTC, WKUP pini) seçmek
  • Görev döngüsünden ortalama akımı ve pil ömrünü hesaplamak
  • Stop'tan uyanınca saat ağacını yeniden kurmanın gerekliliğini açıklamak

Ders notları

Pille çalışan bir sensör düğümü zamanının %99'unu bekleyerek geçirir. O bekleme süresinde ne kadar akım çektiği, pilin günler mi yıllar mı dayanacağını belirler.

  • Run: her şey açık; F4 sınıfında birkaç on mA.
  • Sleep: __WFI() ile çekirdek durur, çevre birimleri ve saatler çalışır; herhangi bir kesme uyandırır. Uyanış neredeyse anlıktır.
  • Stop: tüm yüksek hızlı saatler durur, RAM ve yazmaçlar korunur; EXTI ya da RTC uyandırır. Akım yüz mikroamper düzeyine iner. Uyanınca çekirdek HSI ile başlar: PLL'i yeniden kurmak gerekir.
  • Standby: neredeyse her şey kapanır, RAM silinir; yalnız RTC, yedek yazmaçlar ve WKUP pini kalır. Uyanış sıfırlama gibidir, program baştan başlar. Akım birkaç mikroamper.

Hesap

Iort = (Irun · tuyanık + Iuyku · tuyku) / T    ömür = kapasite / Iort

Örnek: her saniye 10 ms ölçüm yapıp kalan sürede Stop'ta bekleyen bir düğüm, sürekli çalışan aynı düğümden onlarca kat uzun yaşar. Ama uyku akımı küçükse, kartın üzerindeki LED, regülatör ve ST-LINK gibi başka tüketiciler baskın hale gelir: ölçüm her zaman multimetreyle karttan yapılır.

Tasarım

Kullanılmayan pinleri analog kipe al (giriş tamponu akım çekmez), kullanılmayan çevre birimlerinin saatini kapat, ölçümleri topla ve tek seferde gönder. Kip seçiminde uyanış süresi ve RAM'in korunup korunmadığı da ödünleşimin parçasıdır.

Simülasyon

Düşük güç kipleri ve pil ömrü

Run, Sleep, Stop ve Standby arasında seç; görev döngüsünü (ne sıklıkla, ne kadar uyanık) ayarla ve ortalama akımla pil ömrünü hesapla. Akımlar ders içi tipik değerlerdir, gerçek değer veri sayfasındadır.

RUNÇalışma: çekirdek ve saatler açık4 gün
SLEEPUyku: çekirdek durur, çevre birimleri çalışır; herhangi bir kesme uyandırır14 gün
STOPDurdurma: saatler durur, RAM korunur; EXTI ya da RTC uyandırır, saat yeniden kurulmalı168 gün
STANDBYBekleme: neredeyse her şey kapalı, RAM silinir; uyanış sıfırlama gibidir399 gün
run 20 mA · I_avg = 20,000 mA · — sleep 6 mA · I_avg = 6,140 mA · __WFI() stop 0.3 mA · I_avg = 0,497 mA · HAL_PWR_EnterSTOPMode() standby 0.003 mA · I_avg = 0,209 mA · HAL_PWR_EnterSTANDBYMode() Çubuklar logaritmik ölçekte.

Kendin dene

Güç simülasyonunda 2000 mAh pil, 1 s periyot ve 10 ms uyanık süreyle dört kipi karşılaştır. Run ile Stop arasındaki pil ömrü oranını yaz. Uyanık süreyi 100 ms'ye çıkar: Standby'ın üstünlüğü neden azaldı? Periyodu 10 s yap ve hangi terimin baskın olduğunu açıkla.

Kod

Stop kipi: RTC ile uyan, saati yeniden kur
void sleep_seconds(uint32_t s) {
  HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, s - 1, RTC_WAKEUPCLOCK_CK_SPRE_16BITS);   /* 1 Hz saat */
  HAL_SuspendTick();                               /* SysTick uyandırmasın */
  HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
  /* --- burada uyuyoruz; RTC kesmesi uyandırır --- */
  SystemClock_Config();                            /* uyanınca HSI'deyiz: PLL'i yeniden kur */
  HAL_ResumeTick();
  HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
}

Sık yapılan hatalar

  • Stop'tan uyandıktan sonra saati yeniden kurmamak: kod 16 MHz HSI'de devam eder, UART baud ve zamanlamalar bozulur.
  • SysTick'i askıya almadan Sleep'e girmek: her 1 ms'de uyanırsın.
  • Kullanılmayan pinleri yüzer giriş bırakmak: giriş tamponu akım çeker.
  • Akımı yalnız veri sayfasından okumak: karttaki diğer bileşenler uyku akımını katlar.

Yazılım mühendisliği bağlantısı

Güç bir gereksinimdir ve ölçülebilir yazılmalıdır: "2000 mAh ile en az 6 ay".

  • Pil bütçesini bir tabloda tut (kip, akım, süre); her yeni özellik bütçeye eklenir.
  • Uyku/uyanma geçişini durum makinesi olarak yaz; uyanış nedenini günlüğe kaydet.

Kendini sına

  1. Hangi kipte RAM içeriği korunur ve EXTI ile uyanılır?

  2. Standby'dan uyanınca program nereden devam eder?

  3. Run 20 mA, Stop 0,3 mA. Her 1 s'de 10 ms çalışan düğümün ortalama akımı yaklaşık?

  4. Stop'tan uyandıktan sonra ilk yapılması gereken?

Gerçek parçalar (Hyvex, 3B modelli)

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç