BOR/PVD: detekcja zapadów zasilania i odporność modułów AGD

/analizy/bor-pvd-zapady-zasilania-falownik-agd • STM32F1/F4 • BOR, PVD • logi RCC_CSR

1. Zakres i cel

Standaryzacja detekcji zapadów VCC i reakcji firmware na BOR/PVD w urządzeniach z falownikiem i obciążeniami indukcyjnymi. Zakres: konfiguracja progów PVD, rejestracja przyczyn resetu, bezpieczne sekwencje startu/stopu oraz buforowanie energii.

2. Objawy i sygnatury

2.1 Telemetria

[01:19.442] RCC_CSR: BORRSTF=1 IWDGRSTF=0 SFTRSTF=0
[01:19.445] PVD: EVENT=1 Vth=~2.9 V, t_low=3.6 ms
[01:19.450] Inverter start: surge 1.8 A @ 12 V → Vcc_min=2.92 V

2.2 Wzorce

  • Resety z BOR przy rozruchu kompresora/pompy.
  • Seria PVD EVENT bez resetu — krótkie zapady.
  • Wzrost CRC/ORE w UART tuż przed BOR (degradacja zasilania).
Uwaga: Flagi w RCC->CSR utrzymują się po resecie. Po zlogowaniu należy je skasować (RCC_CSR_RMVF).

3. Logowanie BOR/PVD (RCC_CSR)

// Odczyt i czyszczenie przyczyn resetu
uint32_t csr = RCC->CSR;
log_rst_flags(csr);
RCC->CSR |= RCC_CSR_RMVF;   // skasuj flagi

// Dekodowanie (przykład)
if(csr & RCC_CSR_BORRSTF)  stat.bor++;
if(csr & RCC_CSR_IWDGRSTF) stat.iwdg++;
if(csr & RCC_CSR_PORRSTF)  stat.por++;

Rekomendowane jest dołączenie znaczników czasu i minimalnego VCC z ostatniego okna pomiarowego (ADC na linii 3V3 lub 5V).

4. Progi PVD i debouncing

RodzinaPoziomy PVD (typ.)Wartość startowaUwagi
STM32F1~2.2–2.9 V (stopnie)~2.9 Vdetekcja wczesna przed BOR
STM32F4~2.2–2.9 V (stopnie)~2.9 VEVT/IT do miękkiego wygaszania

4.1 Konfiguracja PVD (F1/F4)

// Włączenie PVD z przerwaniem/zdarzeniem (szkic)
RCC->APB1ENR |= RCC_APB1ENR_PWREN;
PWR->CR |= PWR_CR_PVDE;           // enable
PWR->CR |= PWR_CR_PLS_2;          // próg ~2.9 V (dobierz wg RM)
EXTI->IMR  |= EXTI_IMR_MR16;      // linia PVD
EXTI->RTSR |= EXTI_RTSR_TR16;     // zbocze narastające
EXTI->FTSR |= EXTI_FTSR_TR16;     // i opadające
NVIC_EnableIRQ(PVD_IRQn);

4.2 Debouncing zdarzeń

// PVD IRQ — filtracja czasowa
volatile uint32_t pvd_last_ms, pvd_lo_ms;
void PVD_IRQHandler(void){
  EXTI->PR = EXTI_PR_PR16;
  uint32_t now = ms_now();
  if(vcc_below()==true){
    if(now - pvd_last_ms > 2){ pvd_lo_ms = now; mark_pvd_low(); }
  }else{
    uint32_t t = now - pvd_lo_ms;
    if(t >= 2){ log_pvd_event(t); } // zapad ≥2 ms
  }
  pvd_last_ms = now;
}
Praktyka: Dla systemów z falownikiem filtruj zdarzenia <2 ms. Zdarzenia ≥2–5 ms uznawaj za istotne dla telemetrii i polityki ograniczeń.

5. Poprawki firmware

  1. Miękkie wygaszanie: na PVD-low wstrzymaj transmisje, zatrzymaj przekaźniki/PWM i zamknij pliki/EEPROM.
  2. Bezpieczny zapis: blokuj commity konfiguracji poniżej progu PVD; używaj journalingu/slotów A/B.
  3. Start po BOR: opóźnij inicjalizację falownika/cewek do ustabilizowania VCC (np. 50–150 ms) i zaloguj przyczynę.
  4. ADC VCC: okresowo próbkuj VCC; przechowuj min/max w oknie 1–5 s.
  5. Telemetria: licznik BOR, histogram czasu trwania PVD-low, min. VCC w ostatnim cyklu.
// Blokada zapisów przy niskim Vcc
bool storage_allowed(void){
  return pvd_is_ok() && (adc_vcc_mv() > VCC_MIN_MV);
}
Uwaga: Nie wykonuj kasowań/programowań Flash podczas PVD-low; ryzyko częściowych zapisów i utraty konfiguracji.

6. Mitygacje sprzętowe

ElementWartości startoweCelUwagi
Kondensator buforowy 12 V1000–2200 µFbufor rozruchówNiskie ESR, blisko przetwornicy
LC na wejściu 12→3V3L 2.2–4.7 µH, C 22–47 µFtłumienie zapadów/EMIDopasuj do przetwornicy
TVS/TransorbSMBJ 600–1500 Wsurge/ESDNiska pojemność na 3V3
Separacja maspunkt gwiazdyograniczenie pętliOddziel tor mocy od logiki
Okablowanie napędudystans >30 mmmniej szpilekKrzyżuj pod kątem 90°
Szkic topologii zasilania (ASCII)
12V_in ── TVS ── LC ──► DCDC 3V3 ──► MCU
               │
               └─► C_bulk 1000–2200 µF (blisko wejścia)
-- czuj VCC (dzielnik → ADC) i rejestruj min/max --
Praktyka: Jeśli PVD-low pojawia się tuż po starcie falownika, rozważ miękki start (ramp-up) i opóźniony start logiki komunikacji.

7. Kryteria akceptacji

KryteriumCelPo korektach
Resety BOR/tydzień (profil testowy)≤10–1
PVD zdarzenia ≥2 ms / dobę≤51–3
Min. VCC podczas rozruchu>3.0 V3.02–3.12 V
Uszkodzone komity podczas zapadów00

8. Uwagi serwisowe

Po każdym starcie czyść flagi RCC_CSR, rejestruj BOR/POR i histogram PVD. W testach regresyjnych powtarzaj rozruchy napędu z monitorowaniem VCC i korelacją z błędami komunikacji (ORE/CRC). Pełne podsumowanie tematyczne falowników.

9. Procedura diagnostyczna krok po kroku

Najbardziej użyteczna diagnoza zapadów zasilania zaczyna się od rozdzielenia trzech sytuacji: krótkiego spadku napięcia bez resetu, spadku kończącego się BOR oraz resetu, który tylko czasowo zbiega się ze startem falownika. W pierwszym przebiegu testowym należy zebrać jednocześnie minimalne VCC, stan PVD, flagi RCC_CSR i moment uruchomienia napędu. Dopiero taki zestaw pozwala odróżnić problem z zasilaniem od błędu programu lub komunikacji.

  1. Zapisz stan urządzenia przed zdarzeniem: tryb pracy, moment startu napędu, aktywne obciążenia i czas od włączenia.
  2. Po restarcie odczytaj przyczynę resetu przed wyczyszczeniem flag RCC_CSR. Jeden licznik BOR bez osi czasu jest mniej użyteczny niż sekwencja zdarzeń.
  3. Porównaj minimum VCC z momentem PVD-low. Jeżeli napięcie spada, ale PVD nie reaguje, sprawdź próg i sposób próbkowania.
  4. Powtórz test z odłączonym lub ograniczonym obciążeniem napędu. Zmiana zachowania wskazuje na związek z rozruchem, a brak zmiany kieruje uwagę na tor logiczny.
  5. Zmianę sprzętową lub programową oceniaj pojedynczo. Jednoczesna wymiana filtra, pojemności i sekwencji startu utrudnia wskazanie elementu, który naprawdę usunął problem.
  6. Po korekcie wykonaj serię powtarzalnych uruchomień i porównaj liczbę PVD, BOR oraz minimalne VCC z wynikiem bazowym.

10. Karta pomiaru zapadu

Przy pojedynczym problemie najwięcej informacji daje prosty rekord zdarzenia. Ten sam układ pól można zapisywać w logu firmware albo ręcznie podczas prób. Dzięki temu kolejne uruchomienia są porównywalne i nie trzeba rekonstruować przebiegu z kilku osobnych notatek.

PoleCo zapisaćJak interpretować
Stan przed zdarzeniemidle, start, praca pod obciążeniempokazuje, czy problem jest związany z przejściem stanu
VCC min.najniższa próbka z okna zdarzeniapozwala porównywać kolejne warianty zasilania
PVD-lowczas początku i długość zdarzeniaoddziela krótką szpilkę od dłuższego zapadu
RCC_CSRflagi odczytane po starciepotwierdza typ resetu widziany przez MCU
Stan napęduPWM, rozruch, zatrzymaniewiąże zapad z konkretną fazą pracy falownika
Zmiana testowajedna modyfikacja na serięumożliwia ocenę wpływu korekty

Gdy zapad występuje równocześnie z błędami komunikacji, dalsze porównanie ułatwia diagnostyka EMI i USART. Dla szybkiego przeliczenia RC, LC i energii bufora dostępny jest kalkulator parametrów falownika.