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).
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
| Rodzina | Poziomy PVD (typ.) | Wartość startowa | Uwagi |
|---|---|---|---|
| STM32F1 | ~2.2–2.9 V (stopnie) | ~2.9 V | detekcja wczesna przed BOR |
| STM32F4 | ~2.2–2.9 V (stopnie) | ~2.9 V | EVT/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;
}
5. Poprawki firmware
- Miękkie wygaszanie: na PVD-low wstrzymaj transmisje, zatrzymaj przekaźniki/PWM i zamknij pliki/EEPROM.
- Bezpieczny zapis: blokuj commity konfiguracji poniżej progu PVD; używaj journalingu/slotów A/B.
- Start po BOR: opóźnij inicjalizację falownika/cewek do ustabilizowania VCC (np. 50–150 ms) i zaloguj przyczynę.
- ADC VCC: okresowo próbkuj VCC; przechowuj min/max w oknie 1–5 s.
- 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);
}
6. Mitygacje sprzętowe
| Element | Wartości startowe | Cel | Uwagi |
|---|---|---|---|
| Kondensator buforowy 12 V | 1000–2200 µF | bufor rozruchów | Niskie ESR, blisko przetwornicy |
| LC na wejściu 12→3V3 | L 2.2–4.7 µH, C 22–47 µF | tłumienie zapadów/EMI | Dopasuj do przetwornicy |
| TVS/Transorb | SMBJ 600–1500 W | surge/ESD | Niska pojemność na 3V3 |
| Separacja mas | punkt gwiazdy | ograniczenie pętli | Oddziel tor mocy od logiki |
| Okablowanie napędu | dystans >30 mm | mniej szpilek | Krzyż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 --
7. Kryteria akceptacji
| Kryterium | Cel | Po korektach |
|---|---|---|
| Resety BOR/tydzień (profil testowy) | ≤1 | 0–1 |
| PVD zdarzenia ≥2 ms / dobę | ≤5 | 1–3 |
| Min. VCC podczas rozruchu | >3.0 V | 3.02–3.12 V |
| Uszkodzone komity podczas zapadów | 0 | 0 |
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.
- Zapisz stan urządzenia przed zdarzeniem: tryb pracy, moment startu napędu, aktywne obciążenia i czas od włączenia.
- Po restarcie odczytaj przyczynę resetu przed wyczyszczeniem flag RCC_CSR. Jeden licznik BOR bez osi czasu jest mniej użyteczny niż sekwencja zdarzeń.
- 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.
- 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.
- Zmianę sprzętową lub programową oceniaj pojedynczo. Jednoczesna wymiana filtra, pojemności i sekwencji startu utrudnia wskazanie elementu, który naprawdę usunął problem.
- 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.
| Pole | Co zapisać | Jak interpretować |
|---|---|---|
| Stan przed zdarzeniem | idle, start, praca pod obciążeniem | pokazuje, czy problem jest związany z przejściem stanu |
| VCC min. | najniższa próbka z okna zdarzenia | pozwala porównywać kolejne warianty zasilania |
| PVD-low | czas początku i długość zdarzenia | oddziela krótką szpilkę od dłuższego zapadu |
| RCC_CSR | flagi odczytane po starcie | potwierdza typ resetu widziany przez MCU |
| Stan napędu | PWM, rozruch, zatrzymanie | wiąże zapad z konkretną fazą pracy falownika |
| Zmiana testowa | jedna 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.