Skocz do zawartości

Kurs STM32L4 – #6 – oszczędzanie energii (5 lat na baterii?)


Pomocna odpowiedź

Dzięki

U mnie też chodzi z dołożoną linią. I też mam wersję 1.7.0 (i dodatkowo na KUbuntu).

Mój miernik startuje od 10uA i przy usypianiu widzę "tylko" 00.00mA na 10s (i dużo więcej sekundek), ale bardzo podobają mi się te zera. Nie do uzyskania na Arduino z Atmegami

@Gieneq

Dołożenie linii zadziałało tylko brakuje 9 na końcu - jest 2047, przy 10s ma być 20479

 

PS. Uaktualnienie oprogramowania (u mnie z v1.4 na 1.7) czasami wymagają uruchomienia STM32IDE na koncie root-a. Wtedy automatyczne aktualizacje zawsze działają. Patrząc na Wokspace na IDE1.4.0 też były problemy z usypianiem...

PS2. Doszły aktualizacje do MX i w przypadku L476 linia jest dokładana i konfigurowana automatycznie (sprawdzone z zegarem 1Hz i 20s)

  • Lubię! 1
Link do komentarza
Share on other sites

@Pixpix a jaką masz wersję i build, bo na windowsie nie ma aktualizacji. U mnie jest: Version: 1.7.0, Build: 10852_20210715_0634 (UTC)

Dnia 20.08.2021 o 10:23, Pixpix napisał:

Dołożenie linii zadziałało tylko brakuje 9 na końcu - jest 2047, przy 10s ma być 20479

Cytat

Tylko wartość 2047 dostosujcie do własnych potrzeb, dałem interwał 1 sekunde żeby szybciej widzieć efekt.

 

Link do komentarza
Share on other sites

CubeIDE: Version: 1.7.0 Build: 10852_20210715_0634 (UTC)

Ale przy starcie na nowym projekcie (i płytce już używanej jak L476) widzę czasami aktualizacje Procków/Płytek - i w tym wypadku tak było. Nie ma gdzieś aktualizacji płytek/procków w ustawieniach globalnych? Instalowałem dawno i nie pamiętam...

Nie zdążyłem przyuważyć nazw, ale dotyczyło to chyba tylko L476. Ja każdy kurs zaczynam wybierając Board / Nucleo L476, a nie procesor (ustawione są wtedy wszystkie podłączenia płytki - z Kwarcem, UART, LD2 i USER_BUTTON)

Po próbie na F303RE też przyszły aktualizacje (dalej mają coś spieprzone w konfiguracji usypiania - nie usypia się drugi raz), ale nie męczy mnie to - to co chcę tu zrobić spało nie będzie.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

W Preferencjach jest:

 "Install/Update" / "Automatic Update" - aktualizuje tylko IDE(?) Mam Version: 1.7.0 Build: 10852_20210715_0634 (UTC)

"STM32Cube" / "Firmware Updater" - aktualizuje firmware płytki/procesora (?) przy uruchomieniu nowego "STM32 Project". Mam firmware: STM32Cube FW_L4 V1.17.0

Uruchomiłem Projekt na NucleoF303RE - przyszły jakieś zmiany

Uruchomiłem Projekt na NucleoL476RG - nic nie przyszło

Spróbuj Stworzyć nowy projekt, ale wybrać płytkę (druga zakładka za procesorami) i zobacz czy coś nie ciągnie. Może tylko nie widać?

 

 

Link do komentarza
Share on other sites

Bardzo fajna część kursu. Zastanawiam się dlaczego autor nie poszedł na całość. Dlaczego użyliśmy Standby zamiast Shutdown? 

Ciekawe dlaczego pomiar wyszedł 1uA? Parząc na notę katalogową spodziewałem się połowy tego. 

Czy nieużywane piny w STM32 można tak zostawić w trybie floating? Czy należałoby, jak w AVR, ustawić je jako input i podłączyć rezystor podciągający? 

Edytowano przez pmochocki
Link do komentarza
Share on other sites

Witam. Dzięki za lekcje.  Fajnie wszystko przedstawione ale kurcze nie działa mi ostatni program z użyciem funkcji HAL_PWR_EnterSTANDBYMode();.  Nie wiem co jest. :( .  Ustawiłem RTC wg. opisu, aby wybudzić uC, ale nie resetuje mikrokontrolera.   Wchodzi w stan uśpienia, ale go nie resetuje.  Przerwania ustawiłem,  zegar włączyłem RTC, wartość wpisałem wg opisu.  Program się uruchamia, dioda zaświeci, następnie wchodzi w stan uśpienia, ale czekam 10s i nic :(.   Co mogłem jeszcze źle zrobić?

#include "main.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
RTC_HandleTypeDef hrtc;

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_RTC_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void start_measure(void)
   {
   	// rozpoczęcie "pomiaru"
   	HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
   }

   void stop_measure(void)
   {
   	// zakończenie "pomiaru"
   	HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
   }
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_RTC_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */

    start_measure();
      HAL_Delay(1000);

      stop_measure();

        /* Enter the Standby mode */
      HAL_PWR_EnterSTANDBYMode();  // funkcja wprowadzająca uC w stan uśpienia

  while (1)
  {
	 
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

 

Link do komentarza
Share on other sites

Dnia 29.11.2021 o 18:10, adamma25 napisał:

Witam. Dzięki za lekcje.  Fajnie wszystko przedstawione ale kurcze nie działa mi ostatni program z użyciem funkcji HAL_PWR_EnterSTANDBYMode();.  Nie wiem co jest. 😞 .  Ustawiłem RTC wg. opisu, aby wybudzić uC, ale nie resetuje mikrokontrolera.   Wchodzi w stan uśpienia, ale go nie resetuje.  Przerwania ustawiłem,  zegar włączyłem RTC, wartość wpisałem wg opisu.  Program się uruchamia, dioda zaświeci, następnie wchodzi w stan uśpienia, ale czekam 10s i nic :(.   Co mogłem jeszcze źle zrobić?

Poczytaj kilka postów wyżej, jest rozwiązanie. 

Link do komentarza
Share on other sites

Witam!  Bardzo dobry kurs, dziękuję!

Wykorzystałem lekcję "#17 – termometry DS18B20 (1-wire, UART)" w moim BlackPill STM32F411, wszystko działa doskonale.  Teraz przyszła kolej na standby mode, aby pomiary wykonywać periodycznie po wybudzeniu. 

Zauważyłem, że zastosowanie samej funkcji HAL_PWR_EnterSTANDBYMode() nie wystarczy w BlackPill (i BluePill): system śpi przez pierwsze 10s, budzi się, a potem wpada w pętlę wakeup-standby bez żadnych przerw.  Okazuje się, że przed wejściem w tryb standby trzeba wyczyścić bit wakeup, który jest ustawiany przy wybudzaniu, a zatem poprawna sekwencja wygląda tak:

  // Enter the Standby mode
  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
  HAL_PWR_EnterSTANDBYMode();

Nie zauważyłem użycia tej flagi w przykładzie z tej lekcji, więc zastanawiam się, czy Nucleo64 wykorzystane do kursu samo jakoś ją czyści przy wakeup?  Wyszukiwanie w internecie sugeruje, że zwykle jest potrzebna.

Tak czy owak, mam nadzieję, że informacja się przyda, gdyby ktoś miał podobny problem.

  • Lubię! 2
Link do komentarza
Share on other sites

Witam, mam pytanie do punktu 2 z zadania domowego: "Sprawdź, jak zwiększy się prąd, gdy aktywujesz w układzie sześć wejść z pull-upem."

Aktywowałem 6 wejść z rezystorem podciągającym w programie, gdzie zapalam przed główną pętlą while diodę. Wyniki pomiaru prądu są prawie identyczne.

 Bez aktywacji wejść: I = 13,63 mA

Po aktywacji 6 wejść z pull-up: I = 13,70 mA

Czy to jest oczekiwanym wynikiem jest fakt, że aktywacja tych wejść ma znikomy wpływ na pomiar prądu? 

Link do komentarza
Share on other sites

@pirx1988 nie pamiętam jakie miał intencje autor zadania, ale pullup sprawia stały przepływ prądu. Jakby rezystor pullup miał 10k to przy 3,3V masz 0,33mA, czyli 330uA. Jak pamiętasz celem jednego z zadań było uzyskanie 1uA. Jakbyś dodał jakiś z możliwych trybów oszczędzania energii, to takie pullupy mogą powodować niechciane straty.

  • Lubię! 1
Link do komentarza
Share on other sites

Witam 🙂

Po pierwsze - bardzo fajny kurs.

Po drugie - chciałbym zasilić swoją płytkę z baterii, ale nie bardzo potrafię połapać się w tym jak to zrobić. Rozumiem, że muszę do pinu Vin podpiąć zasilanie z baterii, ale niejasne jest dla mnie jakie napięcie mogę tam podpiąć. Z jednej strony mówimy tu o zakresie 1.71 V do 3.6 V, z drugiej na zdjęciu w załączniku pin Vin jest opisany jako "WE 7-12V".

Po trzecie - zasilanie z USB to 5V, więc jeśli jakiś moduł wymaga 5V zasilania to pin 5V je dostarczy. Jeżeli jednak zasilę płytkę np. właśnie z baterii 3V, to czy na tym pinie wyjściowym płytka wciąż poda napięcie 5V?

Mógłbym prosić o naprowadzenie? 😄

 

Edit: Znalazłem rozwiązanie w user manual - trzeba przepiąć zworkę JP5 i wszystko działa z baterii 9V 🙂

Przechwytywanie.PNG

Edytowano przez Fulguryt
znaleziono rozwiązanie
  • Lubię! 1
Link do komentarza
Share on other sites

@Bonus988 miło słyszeć, że kurs jest pomocny! Zapisuję tę sprawę do poprawy, bo edycja treści tego kursu to trochę bardziej zawiły temat niż sama edycja na stronie. Na ten moment wyróżniłem odpowiedź @Gieneq, aby była przypięta na samej górze tego tematu 🙂

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.